public static CustomerDeliveryWeek CreateInstance(LeveringsProdukt levering)
 {
     return(new CustomerDeliveryWeek()
     {
         Week = levering.TurLevering.Ture.Week,
         DeliverDates = new List <CustomerDeliverDates>()
         {
             CustomerDeliverDates.CreateInstance(levering)
         }
     });
 }
 public static CustomerDelivery CreateInstance(LeveringsProdukt levering)
 {
     return(new CustomerDelivery
     {
         Number = levering.Antal,
         Pris = levering.SalgsPris,
         Produkt = levering.Produkt.Navn,
         ProduktNumber = levering.ProduktNr,
         Id = levering.Id,
         IsPreAbonnement = 0
     });
 }
 public static CustomerDeliverDates CreateInstance(LeveringsProdukt levering)
 {
     return(new CustomerDeliverDates()
     {
         DayOfWeek = PauseSystem.Helpers.UIHelper.ToSentenceCase(System.Globalization.CultureInfo.GetCultureInfo("da-DK").DateTimeFormat.GetDayName(levering.TurLevering.Ture.Dato.DayOfWeek)),
         Date = levering.TurLevering.Ture.Dato,
         DateString = levering.TurLevering.Ture.Dato.ToShortDateString(),
         Deliveries = new List <CustomerDelivery> {
             CustomerDelivery.CreateInstance(levering)
         }
     });
 }
 public static CustomerDeliveryAdresses CreateInstance(LeveringsProdukt levering)
 {
     return(new CustomerDeliveryAdresses()
     {
         Adress = levering.TurLevering.Adresser.Adresse + " " + levering.TurLevering.Adresser.Etage,
         AdressId = levering.TurLevering.AdresseId,
         City = levering.TurLevering.Adresser.City,
         PostalCode = levering.TurLevering.Adresser.PostNr,
         DeliveryWeeks = new List <CustomerDeliveryWeek>()
         {
             CustomerDeliveryWeek.CreateInstance(levering)
         }
     });
 }
        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());
        }