private async void GetTimestandingDayAsync() { #region Object lijst opvullen DateTime datenow = DateTime.Now; List <TimeStandingDay> list_timestandingday = new List <TimeStandingDay>(); //Datum van vandaag klaarmaken om te versturen int date_last_hour = 0; int zitminuten = 60; int stauur = 1; DateTime datefirst = new DateTime(datenow.Year, datenow.Month, datenow.Day, 9, 0, 0); //Lijst ophalen van vandaag per uur if (datenow.Hour >= 9 && datenow.Hour < 17) // enkel de data tot en met het vorige uur worden weergegeven --> deze worden in een lijst gestoken { date_last_hour = datenow.Hour; DateTime datelast = new DateTime(datenow.Year, datenow.Month, datenow.Day, 17, 0, 0); list_timestandingday = await ImaniManager.GetTimeStandingDayAsync(requestedUser.UserId.ToString(), datefirst, datelast); int teVerwijderenIndex = date_last_hour - 9; if (list_timestandingday.Count == 0) { zitminuten = 0; stauur = 0; } else { for (int i = date_last_hour; i < 17; i++) { list_timestandingday.RemoveAt(teVerwijderenIndex); TimeStandingDay emptyTime = new TimeStandingDay { Hour = i, TimeStandingSeconds = 0 }; list_timestandingday.Add(emptyTime); } } } else if (datenow.Hour >= 17) // hele dag wordt uitgevoerd { date_last_hour = 17; DateTime datelast = new DateTime(datenow.Year, datenow.Month, datenow.Day, date_last_hour, 0, 0); list_timestandingday = await ImaniManager.GetTimeStandingDayAsync(requestedUser.UserId.ToString(), datefirst, datelast); if (list_timestandingday.Count == 0) { list_timestandingday.Clear(); for (int i = 9; i < 17; i++) { TimeStandingDay emptyTime = new TimeStandingDay { Hour = i, TimeStandingSeconds = 0 }; list_timestandingday.Add(emptyTime); } zitminuten = 0; stauur = 0; } } else if (datenow.Hour < 9) //alles van vandaag zal nog op 0 staan, leeg zijn. { for (int i = 9; i < 17; i++) { TimeStandingDay emptyTime = new TimeStandingDay { Hour = i, TimeStandingSeconds = 0 }; list_timestandingday.Add(emptyTime); } zitminuten = 0; stauur = 0; } #endregion #region Grafieken opuvllen met waarden //Opvullen Staaf diagrammen ---------------------------- for (int x = 0; x <= list_timestandingday.Count - 1; x++) //de waarden klaarstomen om per staaf weer te geven { if (list_timestandingday[x].TimeStandingSeconds == 0 && list_timestandingday[x].Hour < datenow.Hour) { dagUren.Add(new Entry(1) { Color = SkiaSharp.SKColor.Parse("#cf6b00"), Label = list_timestandingday[x].Hour.ToString() }); } else { dagUren.Add(new Entry(Convert.ToInt64(list_timestandingday[x].TimeStandingSeconds / 60)) { Color = SkiaSharp.SKColor.Parse("#cf6b00"), Label = list_timestandingday[x].Hour.ToString() }); } } if (list_timestandingday.Count == 0) { for (int x = 9; x < 17; x++) { dagUren.Add(new Entry(0) { Color = SkiaSharp.SKColor.Parse("#cf6b00"), Label = x.ToString() }); } } ChartStavenUren.Chart = new BarChart { Entries = dagUren, MaxValue = 60, LabelTextSize = 32 }; //Opvullen cirkeldiagram ------------------------------- Double som_standing = 0; int totaalUur = 3600; for (int x = 0; x <= list_timestandingday.Count - 1; x++) { som_standing += list_timestandingday[x].TimeStandingSeconds; if (list_timestandingday[x].TimeStandingSeconds != 0) //als er een uur gepaseerd is wordt er 3600 bijgevoegd. { totaalUur += 3600; } } int ExtraTijd = 0; if (totaalUur > (datenow - datefirst).TotalSeconds)//bugfix { ExtraTijd = 1; } ChartsStaVsZit.Chart = new DonutChart { Entries = staZitDagEntry, MaxValue = totaalUur - 3600, LabelTextSize = 32, HoleRadius = 0.5F }; staZitDagEntry.Add(new Entry(Convert.ToInt32(som_standing)) { Color = SkiaSharp.SKColor.Parse("#cf6b00") }); staZitDagEntry.Add(new Entry(Convert.ToInt32(totaalUur - som_standing - (ExtraTijd * 3600))) { Color = SkiaSharp.SKColor.Parse("#F9ECDF") }); //Opvullen linkerdeel ---------------------------------- List <TimeStandingDay> list_standing = new List <TimeStandingDay>(); int punten = 0; for (int x = 0; x <= list_timestandingday.Count - 1; x++) { if (list_timestandingday[x].TimeStandingSeconds != 0) { punten += 1; } } urenEntry.Add(new Entry(punten) { Color = SkiaSharp.SKColor.Parse("#cf6b00") }); urenEntry.Add(new Entry(8 - punten) { Color = SkiaSharp.SKColor.Parse("#F7F7F7") }); txtStandingHours.Text = punten.ToString(); //Deze waarde is voor de tekstbox in de ring ChartCirkelUren.Chart = new DonutChart { Entries = urenEntry, MaxValue = 8, HoleRadius = 0.9F }; //Opvullen rechterdeel --------------------------------- for (int x = 0; x <= list_timestandingday.Count - 1; x++) { if (list_timestandingday[x].Hour < datenow.Hour) { list_standing.Add(list_timestandingday[x]); } } int standing = list_standing.Count; if (datenow.Hour > 9) { var som_standing_uur = Convert.ToInt32((som_standing / 3600)); var som_standing_min = Convert.ToInt32(som_standing / 60 % 60); lblUurStand.Text = (som_standing_uur).ToString() + "h " + som_standing_min.ToString() + "m"; if (zitminuten == 60) { standing += 1; zitminuten = 0; } if ((standing - som_standing_uur - ExtraTijd) > datenow.Hour - 9) { standing -= 1; } if (som_standing_min > zitminuten) { zitminuten += 60; ExtraTijd += 1; } lblUurZit.Text = Convert.ToString(standing - som_standing_uur - ExtraTijd) + "h " + Convert.ToString(zitminuten - som_standing_min) + "m"; } else { lblUurStand.Text = "0h 0m"; lblUurZit.Text = "0h 0m"; } #endregion }
public static List <TimeStandingDay> CalculateTimeStandingDay(List <Track> tracks, int timeUUR) { try { List <TimeStandingDay> list = new List <TimeStandingDay>(); int a = 0; for (int x = 9; x < timeUUR; x++) //elk uur wordt overlopen, werkdag is van 9:00 tot 17:00 { int tussentijdseX = x; for (int i = 0; i < tracks.Count; i++) //elke track wordt overlopen { if (i == 0 || tracks[i - 1].isStanding != tracks[i].isStanding) //als het de eerste track is OF de huidige situatie is verschillend van de vorige. { TimeStandingDay timeStandingDay = new TimeStandingDay(); if (tracks[i].Date.Hour.ToString() == x.ToString()) // als het uur van de record die wordt overlopen gelijk is aan (het uur van de loop) x { timeStandingDay.Hour = x; a = 0; if (tracks[i].isStanding == true) //als de track.isStanding = 1 is --> dus de persoon is gaan rechtstaan { //als de laatste track rechtstaan is dan moet men de tijd tot het einde van de berekenen // dus als het de laatste track is OF het uur van de volende record is verschillend van het uur van de volgende record if (i + 1 == tracks.Count || tracks[i].Date.Hour != tracks[i + 1].Date.Hour) { DateTime StartOfRecorded = new DateTime(tracks[0].Date.Year, tracks[0].Date.Month, tracks[0].Date.Day, x + 1, 0, 0); timeStandingDay.TimeStandingSeconds = (StartOfRecorded - tracks[i].Date).TotalSeconds; list.Add(timeStandingDay); } else if (tracks[i + 1].Date.Hour == tracks[i].Date.Hour) //wanneer er 2 maal 1 op het einde voorkomt { if (tracks.Count == i + 2) { DateTime StartOfRecorded = new DateTime(tracks[0].Date.Year, tracks[0].Date.Month, tracks[0].Date.Day, x + 1, 0, 0); timeStandingDay.TimeStandingSeconds = (StartOfRecorded - tracks[i].Date).TotalSeconds; list.Add(timeStandingDay); } } } else //(tracks[i].isStanding == false) --> bij zitten, bij een 0 { //als het de eerste record is OF als het uur van de vorige record verschillend is van het uur van de huidige record if (i == 0 || tracks[i - 1].Date.Hour != tracks[i].Date.Hour) { DateTime StartOfRecorded = new DateTime(tracks[0].Date.Year, tracks[0].Date.Month, tracks[0].Date.Day, x, 0, 0); timeStandingDay.TimeStandingSeconds = (tracks[i].Date - StartOfRecorded).TotalSeconds; list.Add(timeStandingDay); } else //als het uur van de vorige record gelijk is aan het uur van de vorige record EN de status van de huidige record zitten is, 0 is (dus men is op dat moment gaan zitten) { timeStandingDay.TimeStandingSeconds = (tracks[i].Date - tracks[i - 1].Date).TotalSeconds; list.Add(timeStandingDay); } } } else if (i < tracks.Count && i != 0) { //--> als (tracks[i].Date.Hour.ToString() != x.ToString()) /* VOLLEDIG UUR STAAN * als de vorige track isStanding = true (1) * & als het uur van huidige track != het uur van de vorige track * & als het uur van huidige track - 1 != het uur van de vorige track * & als het uur van de vorige track + 1 = x * ==> dan 3600 */ if (tracks[i - 1].isStanding == true && tracks[i].Date.Hour != tracks[i - 1].Date.Hour && tracks[i].Date.Hour - 1 != tracks[i - 1].Date.Hour && tracks[i - 1].Date.Hour + 1 + a == x) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 3600; list.Add(timeStandingDay); a += 1; } else if (i == tracks.Count - 1 && list.Count != 0) { if (list[list.Count - 1].Hour != x && tracks[i].isStanding == false) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 0; list.Add(timeStandingDay); } else if (list[list.Count - 1].Hour != x && tracks[i].isStanding == true) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 3600; list.Add(timeStandingDay); } } else if (i == 1)//als het de tweede track is { if (tracks[i].Date.Hour > x) { if (tracks[i - 1].isStanding == false) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 3600; list.Add(timeStandingDay); } else if (tracks[i - 1].isStanding == true) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 0; list.Add(timeStandingDay); } } } } } // dit gedeelte moet worden uitgevoerd wanneer er de laatste value 2 (of meer) keer 0 is if (i == tracks.Count - 1 && list.Count != 0) { TimeStandingDay timeStandingDay = new TimeStandingDay(); if (list[list.Count - 1].Hour != x) { if (tracks[i].isStanding == false) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 0; list.Add(timeStandingDay); } else if (tracks[i].isStanding == true) { timeStandingDay.Hour = x; timeStandingDay.TimeStandingSeconds = 3600; list.Add(timeStandingDay); } } } } } List <TimeStandingDay> gefilterde_list = new List <TimeStandingDay>();; // elk item van de lijst moet overlopen worden dus kijken we hoevaak we dit moeten doen int listlengte = list.Count; for (int y = 0; y < listlengte; y++) { TimeStandingDay timeStandingDay = new TimeStandingDay(); if (y < listlengte) { if (y == listlengte - 1) // het laatste item { timeStandingDay.Hour = list[y].Hour; timeStandingDay.TimeStandingSeconds = list[y].TimeStandingSeconds; gefilterde_list.Add(timeStandingDay); } else if (list[y].Hour == list[y + 1].Hour) // als er meerdere tracks zijn van hetzelfde uur { int aantalitems = 0; while (y + aantalitems < listlengte && list[y].Hour == list[y + aantalitems].Hour) { timeStandingDay.TimeStandingSeconds += list[y + aantalitems].TimeStandingSeconds; timeStandingDay.Hour = list[y].Hour; aantalitems += 1; } gefilterde_list.Add(timeStandingDay); y += aantalitems - 1; } else // als er slechts 1 waarde is van een bepaald uur { timeStandingDay.Hour = list[y].Hour; timeStandingDay.TimeStandingSeconds = list[y].TimeStandingSeconds; gefilterde_list.Add(timeStandingDay); } } } List <TimeStandingDay> extraGefilterde_list = new List <TimeStandingDay>();; int aantalNullen = 0; int uur = 9; while (uur < timeUUR) { TimeStandingDay timeStandingDay = new TimeStandingDay(); if (uur - 9 - aantalNullen < gefilterde_list.Count) { if (gefilterde_list[uur - 9 - aantalNullen].Hour == uur) //als er een waarde bestaat voor het uur { extraGefilterde_list.Add(gefilterde_list[uur - 9 - aantalNullen]); uur += 1; } else // hier wordt er een item toegevoegd als het 0 is { timeStandingDay.Hour = uur; timeStandingDay.TimeStandingSeconds = 0; extraGefilterde_list.Add(timeStandingDay); aantalNullen += 1; uur += 1; } } else { uur += 1; } } return(extraGefilterde_list); } catch (Exception) { return(new List <TimeStandingDay>()); } }