Helyettesítések megjelennek, javítások, stb.

- Egy óra kijelölése megszüntethető egy üres órahelyre kattintva
- Elmenti a helyettesítéseket
- Piros színnel jelzi azokat az órákat, ahol ideiglenes változás történt
- Rákattintva kiírja a változásokat is
- Most már nem írja ki a következő órát vasárnap
This commit is contained in:
Norbi Peti 2017-02-26 02:11:18 +01:00
parent 0c6e2c7e09
commit 74966f3076
2 changed files with 72 additions and 31 deletions

View file

@ -114,9 +114,9 @@ namespace Orarend
/// <summary> /// <summary>
/// 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) /// 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)
/// <param name="s">A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni</param> /// <param name="s">A file stream, ahova mentse az ÓRARENDEKET, hogy ne kelljen külön meghívni</param>
/// </summary> /// </summary>
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) if (Órarendek.Count == 0 || Osztályok.Length == 0)
return; 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 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 tanár = node.ChildNodes[7].InnerText;
string[] megj = node.ChildNodes[8].InnerText.Split(' '); string[] megj = node.ChildNodes[8].InnerText.Split(' ');
string óranév = node.ChildNodes[9].InnerText;
DayOfWeek újnap = dátum.DayOfWeek; DayOfWeek újnap = dátum.DayOfWeek;
byte újsorszám = óraszám; byte újsorszám = óraszám;
if (megj.Length > 2) if (megj.Length > 2)
{ {
újnap = DateTime.Parse(megj[1]).DayOfWeek; ú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 (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 //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); órarend.Helyettesítések.Add(helyettesítés);
} }
} }
ÓrarendMentés(s);
}); });
} }

View file

@ -75,7 +75,7 @@ namespace OrarendAndroidApp
órarendfrissítés(); ó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 textview = new TextView(this);
textview.SetText(text, TextView.BufferType.Normal); textview.SetText(text, TextView.BufferType.Normal);
@ -83,8 +83,8 @@ namespace OrarendAndroidApp
textview.SetPadding(10, 10, 10, 10); textview.SetPadding(10, 10, 10, 10);
textview.SetBackgroundResource(Resource.Drawable.cell_shape_light); textview.SetBackgroundResource(Resource.Drawable.cell_shape_light);
textview.Tag = tag; textview.Tag = tag;
if (textview.Clickable = clickable) textview.Clickable = true;
textview.Click += ÓraClick; textview.Click += ÓraClick;
tr1.AddView(textview); tr1.AddView(textview);
} }
@ -92,7 +92,7 @@ namespace OrarendAndroidApp
{ {
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1); var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
handler.Post(() => bar.Visibility = ViewStates.Visible); 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(() => 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<TableLayout>(Resource.Id.tableLayout1); var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
deselect();
if (table.ChildCount > 1) if (table.ChildCount > 1)
table.RemoveViews(1, table.ChildCount - 1); table.RemoveViews(1, table.ChildCount - 1);
FindViewById<TextView>(Resource.Id.kivoraTV).Visibility = ViewStates.Gone;
if (órarend == null) if (órarend == null)
return; return;
TableRow tr = new TableRow(this); TableRow tr = new TableRow(this);
addCell(API.AHét ? "A" : "B", Color.Black, tr); addCell(API.AHét ? "A" : "B", Color.Black, tr);
addCell("Hétfő", Color.Black, tr); for (int i = 0; i < Napok.Length; i++)
addCell("Kedd", Color.Black, tr); addCell(Napok[i], 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);
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)); table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
for (int j = 0; j < 16; j++) for (int j = 0; j < 16; j++)
{ {
@ -154,13 +152,27 @@ namespace OrarendAndroidApp
{ {
addCell((j + 1).ToString(), Color.Black, tr); addCell((j + 1).ToString(), Color.Black, tr);
for (int i = 0; i < 6; i++) 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)); table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
} }
} }
handler.Post(() => MaiNaphozGörgetés()); handler.Post(() => MaiNaphozGörgetés());
} }
/// <summary>
/// A cellát nem frissíti, csak a szöveget tünteti el
/// </summary>
private void deselect()
{
FindViewById<TextView>(Resource.Id.kivoraTV).Visibility = ViewStates.Gone;
selected = null;
}
private TextView selected; private TextView selected;
/// <summary> /// <summary>
/// Kiválasztja az adott órát /// Kiválasztja az adott órát
@ -169,20 +181,50 @@ namespace OrarendAndroidApp
{ {
var tv = (TextView)sender; var tv = (TextView)sender;
var ij = (int[])tv.Tag; var ij = (int[])tv.Tag;
Óra óra = órarend.Órák[ij[0]][ij[1]];
if (óra == null)
return;
if (selected != null && selected != sender) if (selected != null && selected != sender)
selected.SetBackgroundResource(Resource.Drawable.cell_shape_light); 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); tv.SetBackgroundResource(Resource.Drawable.cell_shape_selected_light);
selected = tv; selected = tv;
var kivora = FindViewById<TextView>(Resource.Id.kivoraTV); var kivora = FindViewById<TextView>(Resource.Id.kivoraTV);
kivora.Text = ((TextView)((TableRow)FindViewById<TableLayout>(Resource.Id.tableLayout1).GetChildAt(1)).GetChildAt(ij[0] + 1)).Text + " " + (ij[1] + 1) + ". óra\n" kivora.Text = Napok[ij[0]] + " " + (ij[1] + 1) + ". óra"
+ óra.TeljesNév + "\n" + "\nNév: " + óra.TeljesNév
+ óra.Terem + "\n" + "\nTerem: " + óra.Terem
+ óra.Tanár.Név + "\n" + "\nTanár: " + óra.Tanár.Név
+ órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm") + "\n" + "\nIdőtartam: " + órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm")
+ óra.Csoportok.Aggregate((a, b) => a + ", " + b); + "\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; kivora.Visibility = ViewStates.Visible;
} }
@ -304,11 +346,9 @@ namespace OrarendAndroidApp
kovora.Visibility = ViewStates.Invisible; kovora.Visibility = ViewStates.Invisible;
} }
int x = (int)DateTime.Today.DayOfWeek - 1; int x = (int)DateTime.Today.DayOfWeek - 1;
if (x == -1) //Vasárnap
break;
Óra óra; Ó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.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; kovora.Visibility = ViewStates.Visible;
kezdveg.Visibility = ViewStates.Visible; kezdveg.Visibility = ViewStates.Visible;