コード例 #1
0
        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
        }
コード例 #2
0
        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>());
            }
        }