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
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); }