Beispiel #1
0
        public void A2TestAddAttendences()
        {
            var model = deltagareVMLogic.GetAllDeltagare().FirstOrDefault(x => x.DeltagarNamn == deltagarNamn);

            for (int i = 1; i < 53; i++)
            {
                var attendence = närvaroVMLogic.GetAttendenceForDate(DateTime.Now.AddDays(-(i * 7)), model).FirstOrDefault();
                attendence.Måndag  = BI.Models.Attendence.AttendenceOption.HeldagMat;
                attendence.Tisdag  = BI.Models.Attendence.AttendenceOption.HeldagMat;
                attendence.Onsdag  = BI.Models.Attendence.AttendenceOption.HeldagMat;
                attendence.Torsdag = BI.Models.Attendence.AttendenceOption.HeldagMat;
                attendence.Fredag  = BI.Models.Attendence.AttendenceOption.HeldagMat;

                närvaroVMLogic.UpdateAttendence(attendence);
            }
            Assert.AreEqual(52, närvaroVMLogic.GetAllAttendence().Where(x => x.DeltagarNamn == deltagarNamn).ToList().Count);
        }
        public List <MatListaMonthViewModel> GetAttendenceForMonth(int month, int year)
        {
            var returningList = new List <MatListaMonthViewModel>();

            var attendenceData = närvaroLogic.GetAllAttendence().Where(x => x.DateConcerning.Month == month && x.DateConcerning.Year == year);
            var deltagarna     = deltagarLogic.GetAllDeltagare();

            foreach (var deltagare in deltagarna)
            {
                int beställningarAntal = 0;
                var deltagarAttendence = attendenceData.Where(x => x.DeltagarIdInQuestion == deltagare.Id).OrderBy(x => x.DateConcerning).ToList();
                if (deltagarAttendence.Count != 0)
                {
                    var firstWeekDate = deltagarAttendence.FirstOrDefault().DateConcerning;
                    var check3DaysBeforeIfSameMonth = firstWeekDate.AddDays(-3).Month;
                    if (check3DaysBeforeIfSameMonth == firstWeekDate.Month)
                    {
                        // kolla sista datumet på sista veckan månaden innan
                        var daysToCountFromFridayBackwars = 0;
                        if (firstWeekDate.AddDays(-6).Month == firstWeekDate.Month)
                        {
                            daysToCountFromFridayBackwars = 3;
                        }
                        else if (firstWeekDate.AddDays(-5).Month == firstWeekDate.Month)
                        {
                            daysToCountFromFridayBackwars = 2;
                        }
                        else if (firstWeekDate.AddDays(-4).Month == firstWeekDate.Month)
                        {
                            daysToCountFromFridayBackwars = 1;
                        }
                        var oldmonth = month - 1;
                        var oldyear  = year;
                        if (month == 1)
                        {
                            oldmonth = 12;
                            oldyear  = year - 1;
                        }
                        var attendenceForDatWeek = närvaroLogic.GetAllAttendence().Where(x => x.DateConcerning.Month == oldmonth && x.DateConcerning.Year == oldyear && x.DeltagarIdInQuestion == deltagare.Id).OrderByDescending(x => x.DateConcerning).ToList().FirstOrDefault();
                        if (attendenceForDatWeek != null)
                        {
                            if (attendenceForDatWeek.Fredag == Models.Attendence.AttendenceOption.HeldagMat ||
                                attendenceForDatWeek.Fredag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                attendenceForDatWeek.Fredag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                            {
                                beställningarAntal++;
                            }
                            if (daysToCountFromFridayBackwars >= 1)
                            {
                                if (attendenceForDatWeek.Torsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                    attendenceForDatWeek.Torsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                    attendenceForDatWeek.Torsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                                {
                                    beställningarAntal++;
                                }
                            }
                            if (daysToCountFromFridayBackwars >= 2)
                            {
                                if (attendenceForDatWeek.Onsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                    attendenceForDatWeek.Onsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                    attendenceForDatWeek.Onsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                                {
                                    beställningarAntal++;
                                }
                            }
                            if (daysToCountFromFridayBackwars == 3)
                            {
                                if (attendenceForDatWeek.Tisdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                    attendenceForDatWeek.Tisdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                    attendenceForDatWeek.Tisdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                                {
                                    beställningarAntal++;
                                }
                            }
                        }
                    }
                }
                for (int i = 0; i < deltagarAttendence.Count; i++)
                {
                    if (i == deltagarAttendence.Count - 1)
                    {
                        var daysToCountFromMonday = 0;
                        if (deltagarAttendence[i].DateConcerning.AddDays(1).Month == deltagarAttendence[i].DateConcerning.Month)
                        {
                            daysToCountFromMonday = 1;
                        }
                        if (deltagarAttendence[i].DateConcerning.AddDays(2).Month == deltagarAttendence[i].DateConcerning.Month)
                        {
                            daysToCountFromMonday = 2;
                        }
                        if (deltagarAttendence[i].DateConcerning.AddDays(3).Month == deltagarAttendence[i].DateConcerning.Month)
                        {
                            daysToCountFromMonday = 3;
                        }
                        if (deltagarAttendence[i].DateConcerning.AddDays(4).Month == deltagarAttendence[i].DateConcerning.Month)
                        {
                            daysToCountFromMonday = 4;
                        }

                        if (daysToCountFromMonday == 4)
                        {
                            if (deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.HeldagMat ||
                                deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                            {
                                beställningarAntal++;
                            }
                        }
                        if (daysToCountFromMonday >= 3)
                        {
                            if (deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                            {
                                beställningarAntal++;
                            }
                        }
                        if (daysToCountFromMonday >= 2)
                        {
                            if (deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                            {
                                beställningarAntal++;
                            }
                        }
                        if (daysToCountFromMonday >= 1)
                        {
                            if (deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.HeldagMat ||
                                deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                                deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                            {
                                beställningarAntal++;
                            }
                        }
                        if (deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                    }
                    else
                    {
                        if (deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Måndag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                        if (deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Tisdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                        if (deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Onsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                        if (deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Torsdag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                        if (deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.HeldagMat ||
                            deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.HalvdagMat ||
                            deltagarAttendence[i].Fredag == Models.Attendence.AttendenceOption.FrånvarandeMat)
                        {
                            beställningarAntal++;
                        }
                    }
                }
                var pris  = PrisDb.Find(x => true).FirstOrDefault().Pris;
                var model = new MatListaMonthViewModel
                {
                    Antal          = beställningarAntal,
                    DateConcerning = Convert.ToDateTime(year.ToString() + "-" + month.ToString() + "-01"),
                    MatId          = deltagare.MatId,
                    DeltagarNamn   = deltagare.DeltagarNamn,
                    PrisPerMatlåda = pris,
                    TotalKostnad   = (pris * beställningarAntal)
                };
                returningList.Add(model);
            }
            return(returningList);
        }