From 74966f30761e0069c9c12a4c3ed81855f01a39fc Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 26 Feb 2017 02:11:18 +0100 Subject: [PATCH] =?UTF-8?q?Helyettes=C3=ADt=C3=A9sek=20megjelennek,=20jav?= =?UTF-8?q?=C3=ADt=C3=A1sok,=20stb.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- Orarend/API.cs | 11 ++-- OrarendAndroidApp/MainActivity.cs | 92 ++++++++++++++++++++++--------- 2 files changed, 72 insertions(+), 31 deletions(-) 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;