public PartialViewResult AjaxAddProduct(int produktNr, int adressId, DateTime date) { var preAbonnement = new PreAbonnementProdukt { AddressId = adressId, ProduktNr = produktNr, StartDate = date, EndDate = null, DayOfWeek = (int)date.DayOfWeek, Antal = 1, CreatedAt = DateTime.Now, CreatedBy = User.Identity.Name, Interval = 0, Produkt = Produkt.AsQuerable().Where(x => x.ProduktNr == produktNr).FirstOrDefault() }; PreAbonnementRepositry.Insert(preAbonnement); unitOfWork.Commit(); var produkt = unitOfWork.Repository <Produkt>().AsQuerable().FirstOrDefault(x => x.ProduktNr == produktNr); return(PartialView("_UCDelivery", new CustomerDeliveryDetail { CustomerDelivery = CustomerDelivery.CreateInstance(preAbonnement), AddressId = adressId, Date = date })); //{ // Number = 1, // ProduktNumber = produkt.ProduktNr, // Produkt = produkt.Navn, // Id = produkt.Id //}); }
private IList <CustomerDeliveryAdresses> MergePreAbonnementDeliveries(IList <CustomerDeliveryAdresses> deliveries, DateTime startDate, DateTime endDate, int kundeId) { //var deliveries = new List<CustomerDeliveryAdresses>(); foreach (var preAbonnement in PreAbonnementRepositry.AsQuerable().Where(p => p.StartDate >= startDate.Date && p.StartDate <= endDate.Date)) { if (deliveries.Any(m => m.AdressId == preAbonnement.AddressId)) { if (deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.Any(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate))) { if (deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.Any(l => l.Date.Date == preAbonnement.StartDate)) { if (deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.First(l => l.Date.Date == preAbonnement.StartDate) .Deliveries.Any(x => x.ProduktNumber == preAbonnement.ProduktNr)) { deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.First(l => l.Date.Date == preAbonnement.StartDate) .Deliveries.First(x => x.ProduktNumber == preAbonnement.ProduktNr).Number += preAbonnement.Antal; preAbonnement.Antal = deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.First(l => l.Date.Date == preAbonnement.StartDate) .Deliveries.First(x => x.ProduktNumber == preAbonnement.ProduktNr).Number; PreAbonnementRepositry.Update(preAbonnement); // unitOfWork.Commit(); continue; } deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.First(l => l.Date.Date == preAbonnement.StartDate) .Deliveries.Add(CustomerDelivery.CreateInstance(preAbonnement)); } else { deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.First(dw => dw.Week == Helpers.TimeTool.GetWeekNumber(preAbonnement.StartDate)) .DeliverDates.Add(CustomerDeliverDates.CreateInstance(preAbonnement)); } } else { deliveries.First(m => m.AdressId == preAbonnement.AddressId) .DeliveryWeeks.Add(CustomerDeliveryWeek.CreateInstance(preAbonnement)); } } else { deliveries.Add(CustomerDeliveryAdresses.CreateInstance(preAbonnement)); } } return(deliveries.Distinct().ToList()); }
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()); }