diff --git a/Orarend/API.cs b/Orarend/API.cs
index 64c4bdd..6e98906 100644
--- a/Orarend/API.cs
+++ b/Orarend/API.cs
@@ -114,9 +114,9 @@ namespace Orarend
///
/// Frissíti a helyettesítéseket, naponta, indításkor vagy gombnyommásra frissítse (minden nap az első előtérbe kerüléskor)
- /// A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni
+ /// A file stream, ahova mentse az ÓRARENDEKET, hogy ne kelljen külön meghívni
///
- public static async Task HelyettesítésFrissítés()
+ public static async Task HelyettesítésFrissítés(Stream s)
{
if (Órarendek.Count == 0 || Osztályok.Length == 0)
return;
@@ -142,21 +142,22 @@ namespace Orarend
string terem = node.ChildNodes[5].InnerText.Split(new string[] { " -> " }, StringSplitOptions.None).Last(); //Mindig az új termet tárolja el, ha változott
string tanár = node.ChildNodes[7].InnerText;
string[] megj = node.ChildNodes[8].InnerText.Split(' ');
+ string óranév = node.ChildNodes[9].InnerText;
DayOfWeek újnap = dátum.DayOfWeek;
byte újsorszám = óraszám;
if (megj.Length > 2)
{
újnap = DateTime.Parse(megj[1]).DayOfWeek;
- újsorszám = byte.Parse(megj[2].Trim('.'));
+ újsorszám = byte.Parse(megj[3].Trim('.'));
}
- var órk = (csoport == "Egész osztály" ? Órarendek : Órarendek.Where(ór => ór.Csoportok.Contains(csoport))).Where(ór => ór.Osztály == osztály).Count();
foreach (var órarend in (csoport == "Egész osztály" ? Órarendek : Órarendek.Where(ór => ór.Csoportok.Contains(csoport))).Where(ór => ór.Osztály == osztály))
//foreach (var órarend in Órarendek.Where(ór => ór.Osztály == osztály && (csoport == "Egész osztály" || ór.Csoportok.Contains(csoport)))) - A probléma valószínűleg a referencia változások miatt volt, a serialization miatt, és hogy alapból nem a .Equals-ot futtatja le ==-kor
{
- var helyettesítés = new Helyettesítés { EredetiNap = dátum.DayOfWeek, EredetiSorszám = óraszám, ÚjÓra = tanár == "elmarad" ? null : new Óra { Azonosító = óraaz, Csoportok = new string[] { csoport }, Terem = terem, Tanár = new Tanár { Név = tanár } }, ÚjNap = újnap, ÚjSorszám = újsorszám };
+ var helyettesítés = new Helyettesítés { EredetiNap = dátum.DayOfWeek, EredetiSorszám = óraszám, ÚjÓra = tanár == "elmarad" ? null : new Óra { Azonosító = óraaz, Csoportok = new string[] { csoport }, Terem = terem, Tanár = new Tanár { Név = tanár }, TeljesNév = óranév }, ÚjNap = újnap, ÚjSorszám = újsorszám };
órarend.Helyettesítések.Add(helyettesítés);
}
}
+ ÓrarendMentés(s);
});
}
diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs
index 4fc1710..36cbaa2 100644
--- a/OrarendAndroidApp/MainActivity.cs
+++ b/OrarendAndroidApp/MainActivity.cs
@@ -75,7 +75,7 @@ namespace OrarendAndroidApp
órarendfrissítés();
}
- private void addCell(string text, Color color, TableRow tr1, bool clickable = false, int[] tag = null)
+ private void addCell(string text, Color color, TableRow tr1, int[] tag = null)
{
TextView textview = new TextView(this);
textview.SetText(text, TextView.BufferType.Normal);
@@ -83,8 +83,8 @@ namespace OrarendAndroidApp
textview.SetPadding(10, 10, 10, 10);
textview.SetBackgroundResource(Resource.Drawable.cell_shape_light);
textview.Tag = tag;
- if (textview.Clickable = clickable)
- textview.Click += ÓraClick;
+ textview.Clickable = true;
+ textview.Click += ÓraClick;
tr1.AddView(textview);
}
@@ -92,7 +92,7 @@ namespace OrarendAndroidApp
{
var bar = FindViewById(Resource.Id.progressBar1);
handler.Post(() => bar.Visibility = ViewStates.Visible);
- API.HelyettesítésFrissítés().ContinueWith(t =>
+ API.HelyettesítésFrissítés(OpenFileOutput("orarend", FileCreationMode.Private)).ContinueWith(t =>
{
handler.Post(() =>
{
@@ -121,22 +121,20 @@ namespace OrarendAndroidApp
});
}
- private void órarendfrissítés() //TODO: Helyettesítések támogatása
+ private string[] Napok = new string[6] { "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat" };
+
+ private void órarendfrissítés()
{
var table = FindViewById(Resource.Id.tableLayout1);
+ deselect();
if (table.ChildCount > 1)
table.RemoveViews(1, table.ChildCount - 1);
- FindViewById(Resource.Id.kivoraTV).Visibility = ViewStates.Gone;
if (órarend == null)
return;
TableRow tr = new TableRow(this);
addCell(API.AHét ? "A" : "B", Color.Black, tr);
- addCell("Hétfő", Color.Black, tr);
- addCell("Kedd", Color.Black, tr);
- addCell("Szerda", Color.Black, tr);
- addCell("Csütörtök", Color.Black, tr);
- addCell("Péntek", Color.Black, tr);
- addCell("Szombat", Color.Black, tr);
+ for (int i = 0; i < Napok.Length; i++)
+ addCell(Napok[i], Color.Black, tr);
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
for (int j = 0; j < 16; j++)
{
@@ -154,13 +152,27 @@ namespace OrarendAndroidApp
{
addCell((j + 1).ToString(), Color.Black, tr);
for (int i = 0; i < 6; i++)
- addCell(órarend.Órák[i][j] != null ? órarend.Órák[i][j].EgyediNév : "", Color.Black, tr, true, new int[2] { i, j });
+ {
+ var helyettesítés = órarend.Helyettesítések.SingleOrDefault(h => (int)h.EredetiNap - 1 == i && h.EredetiSorszám - 1 == j);
+ var helyettesítésIde = órarend.Helyettesítések.SingleOrDefault(h => (int)h.ÚjNap - 1 == i && h.ÚjSorszám - 1 == j && h.ÚjÓra != null); //Ha az eredeti óra elmarad, és ide lesz helyezve egy másik, az áthelyezést mutassa
+ //addCell(helyettesítés?.ÚjÓra?.EgyediNév ?? órarend.Órák[i][j]?.EgyediNév ?? "", helyettesítés == null ? Color.Black : Color.Red, tr, new int[2] { i, j });
+ addCell(helyettesítésIde != null ? helyettesítésIde.ÚjÓra.EgyediNév : helyettesítés != null ? helyettesítés.EredetiNap != helyettesítés.ÚjNap || helyettesítés.EredetiSorszám != helyettesítés.ÚjSorszám ? "Áthelyezve" : helyettesítés.ÚjÓra?.EgyediNév ?? "elmarad" : órarend.Órák[i][j]?.EgyediNév ?? "", helyettesítés == null ? Color.Black : Color.Red, tr, new int[2] { i, j });
+ }
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
}
}
handler.Post(() => MaiNaphozGörgetés());
}
+ ///
+ /// A cellát nem frissíti, csak a szöveget tünteti el
+ ///
+ private void deselect()
+ {
+ FindViewById(Resource.Id.kivoraTV).Visibility = ViewStates.Gone;
+ selected = null;
+ }
+
private TextView selected;
///
/// Kiválasztja az adott órát
@@ -169,20 +181,50 @@ namespace OrarendAndroidApp
{
var tv = (TextView)sender;
var ij = (int[])tv.Tag;
- Óra óra = órarend.Órák[ij[0]][ij[1]];
- if (óra == null)
- return;
if (selected != null && selected != sender)
selected.SetBackgroundResource(Resource.Drawable.cell_shape_light);
+ Óra óra;
+ Helyettesítés helyettesítésInnen = null;
+ Helyettesítés helyettesítésIde = null;
+ if (ij != null)
+ {
+ helyettesítésInnen = órarend.Helyettesítések.SingleOrDefault(h => (int)h.EredetiNap == ij[0] + 1 && h.EredetiSorszám == ij[1] + 1);
+ helyettesítésIde = órarend.Helyettesítések.SingleOrDefault(h => (int)h.ÚjNap == ij[0] + 1 && h.ÚjSorszám == ij[1] + 1 && h.ÚjÓra != null); //Ha az eredeti óra elmarad, és ide lesz helyezve egy másik, az áthelyezést mutassa
+ }
+ //if (ij == null || (óra = órarend.Órák[ij[0]][ij[1]] ?? ((helyettesítésIde = órarend.Helyettesítések.SingleOrDefault(h => (int)h.ÚjNap == ij[0] + 1 && h.ÚjSorszám == ij[1] + 1))?.ÚjÓra)) == null)
+ if (ij == null || (óra = órarend.Órák[ij[0]][ij[1]] ?? (helyettesítésIde?.ÚjÓra)) == null)
+ { //Ha az óra nincs beállítva, beállítja a helyettesítettre
+ deselect();
+ return;
+ }
tv.SetBackgroundResource(Resource.Drawable.cell_shape_selected_light);
selected = tv;
var kivora = FindViewById(Resource.Id.kivoraTV);
- kivora.Text = ((TextView)((TableRow)FindViewById(Resource.Id.tableLayout1).GetChildAt(1)).GetChildAt(ij[0] + 1)).Text + " " + (ij[1] + 1) + ". óra\n"
- + óra.TeljesNév + "\n"
- + óra.Terem + "\n"
- + óra.Tanár.Név + "\n"
- + órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm") + "\n"
- + óra.Csoportok.Aggregate((a, b) => a + ", " + b);
+ kivora.Text = Napok[ij[0]] + " " + (ij[1] + 1) + ". óra"
+ + "\nNév: " + óra.TeljesNév
+ + "\nTerem: " + óra.Terem
+ + "\nTanár: " + óra.Tanár.Név
+ + "\nIdőtartam: " + órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm")
+ + "\nCsoport: " + óra.Csoportok.Aggregate((a, b) => a + ", " + b)
+ + (helyettesítésInnen == null ? ""
+ : helyettesítésInnen.EredetiNap != helyettesítésInnen.ÚjNap || helyettesítésInnen.EredetiSorszám != helyettesítésInnen.ÚjSorszám
+ ? "\n\nÁthelyezve: innen --> " + Napok[(int)helyettesítésInnen.ÚjNap - 1] + " " + helyettesítésInnen.ÚjSorszám + ". óra"
+ : helyettesítésInnen.ÚjÓra != null && helyettesítésInnen.ÚjÓra != óra
+ ? "\n\nHelyettesítés:"
+ + (helyettesítésInnen.ÚjÓra.EgyediNév != óra.EgyediNév ? "\nÓra: " + helyettesítésInnen.ÚjÓra.EgyediNév : "")
+ + (helyettesítésInnen.ÚjÓra.Terem != óra.Terem ? "\nTerem: " + helyettesítésInnen.ÚjÓra.Terem : "")
+ + (helyettesítésInnen.ÚjÓra.Tanár.Név != óra.Tanár.Név ? "\nTanár: " + helyettesítésInnen.ÚjÓra.Tanár.Név : "")
+ + (helyettesítésInnen.ÚjÓra.Csoportok[0] != óra.Csoportok[0] ? "\nCsoport: " + helyettesítésInnen.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "")
+ : "\n\nAz óra elmarad")
+ + (helyettesítésIde == null ? ""
+ : helyettesítésIde.EredetiNap != helyettesítésIde.ÚjNap || helyettesítésIde.EredetiSorszám != helyettesítésIde.ÚjSorszám
+ ? "\n\nÁthelyezve: " + Napok[(int)helyettesítésInnen.EredetiNap - 1] + " " + helyettesítésIde.EredetiSorszám + ". óra --> ide"
+ + (helyettesítésIde.ÚjÓra.EgyediNév != óra.EgyediNév ? "\nÓra: " + helyettesítésIde.ÚjÓra.EgyediNév : "")
+ + (helyettesítésIde.ÚjÓra.Terem != óra.Terem ? "\nTerem: " + helyettesítésIde.ÚjÓra.Terem : "")
+ + ((óra.Tanár.Név != (helyettesítésIde.ÚjÓra.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név)) ? "\nTanár: " + (óra.Tanár.Név == "" ? órarend.Órák[(int)helyettesítésIde.EredetiNap - 1][helyettesítésIde.EredetiSorszám - 1].Tanár.Név : helyettesítésIde.ÚjÓra.Tanár.Név) : "") //TODO: A tanár mező üres ("")
+ + (helyettesítésIde.ÚjÓra.Csoportok[0] != óra.Csoportok[0] ? "\nCsoport: " + helyettesítésIde.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "") //ˇˇ De ha változott, akkor nem
+ : "") //Ha a pozicíó nem változott, a fentebbi rész már kiírta az adatait
+ ;
kivora.Visibility = ViewStates.Visible;
}
@@ -304,11 +346,9 @@ namespace OrarendAndroidApp
kovora.Visibility = ViewStates.Invisible;
}
int x = (int)DateTime.Today.DayOfWeek - 1;
- if (x == -1) //Vasárnap
- break;
Óra óra;
- if (x < 6 && (óra = órarend.Órák[x][i]) != null)
- {
+ if (x != -1 && x < 6 && (óra = órarend.Órák[x][i]) != null)
+ { //-1: Vasárnap
kovora.Text = "Következő óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név + "\n" + óra.Csoportok.Aggregate((a, b) => a + ", " + b);
kovora.Visibility = ViewStates.Visible;
kezdveg.Visibility = ViewStates.Visible;