Beispiel #1
0
 public void GetDateTest()
 {
     Assert.Equal(TimeTool.GetDate(testDate).Year, testDate.Year);
     Assert.Equal(TimeTool.GetDate(testDate).Month, testDate.Month);
     Assert.Equal(TimeTool.GetDate(testDate).Day, testDate.Day);
     Assert.Equal(0, TimeTool.GetDate(testDate).Hour);
     Assert.Equal(0, TimeTool.GetDate(testDate).Minute);
     Assert.Equal(0, TimeTool.GetDate(testDate).Second);
     Assert.Equal(0, TimeTool.GetDate(testDate).Millisecond);
 }         // GetDateTest
Beispiel #2
0
        public static IList <CustomerDeliveryAdresses> GetDeliveries(this IRepository <LeveringsProdukt> repository, UnitOfWork unitOfWork,
                                                                     DateTime startDate, DateTime endDate, int kundeId)
        {
            var finalProdukter = new List <LeveringsProdukt>();
            var deliveries     = new List <CustomerDeliveryAdresses>();

            startDate = startDate.Date;
            endDate   = endDate.Date;

            var qleveringer    = unitOfWork.Repository <TurLevering>().AsQuerable().Where(l => l.Ture.Dato >= startDate.Date && l.Ture.Dato <= endDate.Date && l.KundeId == kundeId);
            var leveringMonday = unitOfWork.Repository <TurLevering>().AsQuerable().Max(k => k.Ture.Dato).GetNextMonday().Date;

            var leveringDateMax = leveringMonday > startDate ? leveringMonday : startDate;

            if (qleveringer.Any())
            {
                if (qleveringer.Any(l => l.Ture.Dato > leveringDateMax))
                {
                    leveringDateMax = qleveringer.Max(l => l.Ture.Dato);
                }
                finalProdukter.AddRange(qleveringer.SelectMany(l => l.LeveringProdukts));
            }
            if (qleveringer.Any(l => l.Ture.Dato > leveringDateMax))
            {
                leveringDateMax = qleveringer.Max(l => l.Ture.Dato);
            }


            var maxDate = TimeTool.GetDate(DateTime.Now.Year, TimeTool.GetWeekNumber(leveringDateMax), (int)DayOfWeek.Monday).Date;

            maxDate = maxDate > startDate ? maxDate : startDate;
            if (leveringDateMax > maxDate.Date)
            {
                maxDate = leveringDateMax.Date;
            }

            if (maxDate.Date < endDate.Date)
            {
                List <Abonnementer> abonnementer = unitOfWork.Repository <Abonnementer>().AsQuerable().Where(t => t.Kunde.Id == kundeId).ToList();
                foreach (var tmpway in TimeTool.GetWeekAndYears(maxDate, endDate))
                {
                    var ableveringer = abonnementer.GetLeveringerForService(tmpway.Year, tmpway.Week, unitOfWork.Repository <ProductCustomerSpecialPrice>().AsQuerable());
                    ableveringer.All(abl =>
                    {
                        abl.Ture = new Ture()
                        {
                            TurId     = abl.Ture.TurId,
                            Week      = abl.Ture.Week,
                            Year      = abl.Ture.Year,
                            DayOfWeek = abl.Ture.DayOfWeek,
                            Dato      = TimeTool.GetDate(abl.Ture.Year, abl.Ture.Week, (int)abl.Ture.DayOfWeek)
                        };
                        return(true);
                    });

                    finalProdukter.AddRange(ableveringer.SelectMany(l => l.LeveringProdukts));
                }
            }

            var produkter = finalProdukter.OrderBy(p => p.TurLevering.Ture.Dato).ThenBy(p => p.Produkt.Navn).ToList();

            foreach (var levering in produkter.Where(p => p.TurLevering.Ture.Dato.Date >= startDate.Date && p.TurLevering.Ture.Dato <= endDate.Date))
            {
                if (deliveries.Any(m => m.AdressId == levering.TurLevering.AdresseId))
                {
                    if (deliveries.First(m => m.AdressId == levering.TurLevering.AdresseId)
                        .DeliveryWeeks.Any(dw => dw.Week == levering.TurLevering.Ture.Week))
                    {
                        if (deliveries.First(m => m.AdressId == levering.TurLevering.AdresseId)
                            .DeliveryWeeks.First(dw => dw.Week == levering.TurLevering.Ture.Week)
                            .DeliverDates.Any(l => l.Date.Date == levering.TurLevering.Ture.Dato.Date))
                        {
                            deliveries.First(m => m.AdressId == levering.TurLevering.AdresseId)
                            .DeliveryWeeks.First(dw => dw.Week == levering.TurLevering.Ture.Week)
                            .DeliverDates.First(l => l.Date.Date == levering.TurLevering.Ture.Dato.Date)
                            .Deliveries.Add(CustomerDelivery.CreateInstance(levering));
                        }
                        else
                        {
                            deliveries.First(m => m.AdressId == levering.TurLevering.AdresseId)
                            .DeliveryWeeks.First(dw => dw.Week == levering.TurLevering.Ture.Week)
                            .DeliverDates.Add(CustomerDeliverDates.CreateInstance(levering));
                        }
                    }
                    else
                    {
                        deliveries.First(m => m.AdressId == levering.TurLevering.AdresseId)
                        .DeliveryWeeks.Add(CustomerDeliveryWeek.CreateInstance(levering));
                    }
                }
                else
                {
                    deliveries.Add(CustomerDeliveryAdresses.CreateInstance(levering));
                }
            }
            return(deliveries.Distinct().ToList());
        }
        public static IEnumerable <TurLevering> GetLeveringerForService(this IEnumerable <Abonnementer> abonnementer, int year, int week
                                                                        , IQueryable <ProductCustomerSpecialPrice> priser)
        {
            var kundeLeveringer = new List <TurLevering>();

            //priser.Load();
            foreach (var abonnement in abonnementer)
            {
                if (abonnement.AbonnementRute == null)
                {
                    continue;
                }
                DateTime leveringsDato = TimeTool.GetDate(year, week, (int)abonnement.AbonnementRute.Ugedag);

                if (abonnement.AbonnementProdukts.Any(ap => ap.IsActive(leveringsDato) && !ap.OnPause(leveringsDato)) ||
                    abonnement.AbonnementProdukts.Any(ap => ap.IsInIntervalWeek(leveringsDato, week)) ||
                    abonnement.AbonnementProdukts.Any(ap => ap.IsIntervalOther(abonnement, leveringsDato, week, year)))
                {
                    var levering = new TurLevering()
                    {
                        Adresser  = abonnement.LeveringsAdresse,
                        AdresseId = abonnement.LeveringsAdresseId,
                        Zindex    = abonnement.RuteIndex,
                        //Kunde = abonnement.Kunde,
                        KundeId      = abonnement.KundeId,
                        LeveringsTid = leveringsDato.AddDays(-1),
                        AbonnementId = abonnement.Id,
                        Ture         = new Ture()
                        {
                            Week = week, Year = year, DayOfWeek = abonnement.AbonnementRute.Ugedag, TurId = abonnement.AbonnementRute.RuteId
                        }
                    };

                    if (abonnement.PrintPakkeList)
                    {
                        levering.PrintPakkeListe = true;
                    }
                    if (abonnement.PrintPakkeDato.HasValue && leveringsDato.Date == abonnement.PrintPakkeDato.Value.Date)
                    {
                        levering.PrintPakkeListe = true;
                    }

                    foreach (var abonnementProdukt in abonnement.AbonnementProdukts)
                    {
                        if (abonnementProdukt.IsActive(leveringsDato) && !abonnementProdukt.OnPause(leveringsDato))
                        {
                            if (abonnementProdukt.IsInIntervalWeek(leveringsDato, week))
                            {
                                var lp = new LeveringsProdukt()
                                {
                                    TurLevering  = levering,
                                    ProduktNr    = abonnementProdukt.ProduktNr,
                                    Produkt      = abonnementProdukt.Produkt,
                                    Antal        = abonnementProdukt.Antal,
                                    Id           = abonnementProdukt.Id,
                                    GrossistPris = abonnementProdukt.Produkt.GrossistPris,
                                    Weight       = abonnementProdukt.Produkt.Weight,
                                    KostPris     = abonnementProdukt.Produkt.KostPris,
                                    PrintLabel   = abonnementProdukt.PrintLabel,
                                    Provision    = abonnementProdukt.Produkt.Provision,
                                    SalgsPris    = abonnementProdukt.Produkt.SalgsPris
                                };
                                if (priser.Any(pc => pc.CustomerId == levering.KundeId && pc.ProductNr == abonnementProdukt.ProduktNr &&
                                               pc.FromDate <= leveringsDato && pc.ToDate >= leveringsDato))
                                {
                                    foreach (var pcsp in priser.Where(pc => pc.CustomerId == levering.KundeId && pc.ProductNr ==
                                                                      abonnementProdukt.ProduktNr && pc.FromDate <= leveringsDato && pc.ToDate >= leveringsDato)
                                             .OrderByDescending(p => p.Antal))
                                    {
                                        if (abonnementProdukt.Antal >= pcsp.Antal)
                                        {
                                            lp.SalgsPris = pcsp.Pris;
                                            break;
                                        }
                                    }
                                }
                                if (levering.LeveringProdukts.All(p => p.Produkt.ProduktNr != lp.Produkt.ProduktNr))
                                {
                                    levering.LeveringProdukts.Add(lp);
                                }
                                else
                                {
                                    levering.LeveringProdukts.First(p => p.Produkt.ProduktNr == lp.Produkt.ProduktNr).Antal +=
                                        lp.Antal;
                                }
                            }
                            else if (abonnementProdukt.IsIntervalOther(abonnement, leveringsDato, week, year))
                            {
                                var lp = new LeveringsProdukt()
                                {
                                    TurLevering  = levering,
                                    ProduktNr    = abonnementProdukt.ProduktNr,
                                    Produkt      = abonnementProdukt.Produkt,
                                    Antal        = abonnementProdukt.Antal,
                                    Id           = abonnementProdukt.Id,
                                    GrossistPris = abonnementProdukt.Produkt.GrossistPris,
                                    Weight       = abonnementProdukt.Produkt.Weight,
                                    KostPris     = abonnementProdukt.Produkt.KostPris,
                                    PrintLabel   = abonnementProdukt.PrintLabel
                                    ,
                                    Provision = abonnementProdukt.Produkt.Provision,
                                    SalgsPris = abonnementProdukt.Produkt.SalgsPris
                                };
                                //if (priser.Any(pc => pc.CustomerId == levering.KundeId && pc.ProductNr == abonnementProdukt.ProduktNr
                                //    && pc.FromDate <= leveringsDato && pc.ToDate >= leveringsDato))
                                //{
                                foreach (var pcsp in priser.Where(pc => pc.CustomerId == levering.KundeId && pc.ProductNr ==
                                                                  abonnementProdukt.ProduktNr && pc.FromDate <= leveringsDato && pc.ToDate >= leveringsDato)
                                         .OrderByDescending(p => p.Antal))
                                {
                                    if (abonnementProdukt.Antal >= pcsp.Antal)
                                    {
                                        lp.SalgsPris = pcsp.Pris;
                                        break;
                                    }
                                }
                                // }
                                if (levering.LeveringProdukts.All(p => p.Produkt.ProduktNr != lp.Produkt.ProduktNr))
                                {
                                    levering.LeveringProdukts.Add(lp);
                                }
                                else
                                {
                                    levering.LeveringProdukts.First(p => p.Produkt.ProduktNr == lp.Produkt.ProduktNr).Antal += lp.Antal;
                                }
                            }
                        }
                    }
                    if (levering.LeveringProdukts.Any())
                    {
                        if (levering.Adresser != null && levering.Adresser.X.HasValue && levering.Adresser.Y.HasValue)
                        {
                            kundeLeveringer.Add(levering);
                        }
                    }
                }
            }
            return(kundeLeveringer.Distinct().ToList());
        }
 public static bool IsIntervalOther(this AbonnementProdukt abonnementProdukt, Abonnementer abonnement, DateTime leveringsDato,
                                    int week, int year)
 {
     if (abonnementProdukt.Interval == Interval.FørstDagHverMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Sunday);
         for (int i = 0; i < 7; i++)
         {
             if (Date.Day == 1)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(-1);
             }
         }
         if (Date.Day == 1 && abonnementProdukt.IsActive(Date) && !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.SidstDagHverMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Monday);
         for (int i = 0; i <= 6; i++)
         {
             if (Date.AddDays(1).Day == 1)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(1);
             }
         }
         if (Date.AddDays(1).Day == 1 && abonnementProdukt.IsActive(Date) && !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.SidstArbejdsdagIMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Monday);
         for (int i = 0; i <= 4; i++)
         {
             if (Date.AddDays(1).Day == 1 || Date.DayOfWeek == DayOfWeek.Friday)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(1);
             }
         }
         if ((Date.AddDays(1).Day == 1 || Date.DayOfWeek == DayOfWeek.Friday) && abonnementProdukt.IsActive(Date) &&
             !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.FørstArbejdsdagIMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Friday);
         for (int i = 0; i <= 4; i++)
         {
             if (Date.Day == 1)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(-1);
             }
         }
         if (Date.Day == 1 && abonnementProdukt.IsActive(Date) && !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.SidsteValgteDagIMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Monday);
         for (int i = 0; i <= 6; i++)
         {
             if (Date.DayOfWeek == abonnement.Ugedag || Date.AddDays(1).Day == 1)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(1);
             }
         }
         if (Date.DayOfWeek == abonnement.Ugedag && Date.AddDays(7).Day <= 7 &&
             abonnementProdukt.IsActive(Date) && !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.FørsteValgteDagIMåned)
     {
         DateTime Date = TimeTool.GetDate(year, week, (int)DayOfWeek.Sunday);
         for (int i = 0; i <= 6; i++)
         {
             if (Date.DayOfWeek == abonnement.Ugedag || Date.Day == 1)
             {
                 break;
             }
             else
             {
                 Date = Date.AddDays(-1);
             }
         }
         if (Date.Day <= 7 && Date.DayOfWeek == abonnement.Ugedag && abonnementProdukt.IsActive(Date) && !abonnementProdukt.OnPause(Date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.LigeMåned)
     {
         var date = TimeTool.GetDate(year, week, abonnement.Ugedag);
         if (date.Month % 2 == 0 &&
             date.Day <= 7 && abonnement.Ugedag == date.DayOfWeek &&
             abonnementProdukt.IsActive(date) &&
             !abonnementProdukt.OnPause(date))
         {
             return(true);
         }
     }
     else if (abonnementProdukt.Interval == Interval.UligeMåned)
     {
         var date = TimeTool.GetDate(year, week, abonnement.Ugedag);
         if (date.Month % 2 == 1 &&
             date.Day <= 7 &&
             abonnement.Ugedag == date.DayOfWeek &&
             abonnementProdukt.IsActive(date) &&
             !abonnementProdukt.OnPause(date))
         {
             return(true);
         }
     }
     return(false);
 }