public void Update(OrderViewModel orderVm) { //Mapping to order domain var order = _mapper.Map <OrderViewModel, Order>(orderVm); //Get order Detail var newDetails = order.OrderDetails; //new details added var addedDetails = newDetails.Where(x => x.Id == 0).ToList(); //get updated details var updatedDetails = newDetails.Where(x => x.Id != 0).ToList(); //Existed details var existedDetails = _orderDetailRepository.FindAll(x => x.OrderId == orderVm.Id); //Clear db order.OrderDetails.Clear(); foreach (var detail in updatedDetails) { var product = _productRepository.FindById(detail.ProductId); detail.Price = product.Price; _orderDetailRepository.Update(detail); } foreach (var detail in addedDetails) { var product = _productRepository.FindById(detail.ProductId); detail.Price = product.Price; _orderDetailRepository.Add(detail); } _orderDetailRepository.RemoveMultiple(existedDetails.Except(updatedDetails).ToList()); _orderRepository.Update(order); }
public PartialViewResult GenerateReport(OrderReportViewModel viewModel) { string reportType = ReportService.GetReportType(viewModel.ReportType); if (reportType == null) { ModelState.AddModelError("ReportType", "Report Type is invalid"); } if (!viewModel.ReportIds.Any()) { ModelState.AddModelError("ReportIds", "Report type is required"); } Dictionary <string, string> files = null; if (ModelState.IsValid) { var orderId = viewModel.OrderId; var reportsFolder = string.Format("~/Documents/Reports/{0}/", orderId); var order = _orderRepository.Get(orderId); bool isCustom = order.Customer.CustomerTypeId == OmsCustomerType.Custom; List <CustomerLocation> locations = null; List <AnimalOrderDetail> animalOrderDetails = null; List <ColdWeightEntryDetail> coldWeightDetails = null; if (isCustom) { var coldWeightEntry = _coldWeightEntryRepository.GetByOrderId(orderId); if (coldWeightEntry == null) { ModelState.AddModelError("ColdWeight", "No AnimalNumbers"); OrderReportViewModel reportViewModel = _orderReportService.Get(viewModel.OrderId); return(PartialView("_Report", reportViewModel)); } coldWeightDetails = coldWeightEntry.ColdWeightEntryDetails.ToList(); // All records from dbo.AnimalOrderDetail by Order animalOrderDetails = coldWeightDetails.SelectMany(cw => cw.AnimalOrderDetails).ToList(); } foreach (var report in viewModel.ReportIds) { var reportName = ReportService.GetReportName(report); DeleteOldReports(reportsFolder, reportName + "*." + reportType); if (isCustom) { foreach (var detail in coldWeightDetails) { var sides = _coldWeightEntryDetailRepository.GetSideWeigths(detail.Id); foreach (var side in sides) { if (!side.Value.HasValue) { continue; } var orderDetailsForSides = animalOrderDetails.Where(a => a.ColdWeightDetailId == detail.Id) .Select(a => a.OrderDetail).ToList() .FindAll(x => x.SideTypeId == side.Key); var path = string.Format("{0}{1}BackTag{2}{3}{4}.{5}", reportsFolder, reportName, detail.AnimalNumber, side.Key, side.Value, reportType); var filename = GetFilenameSafe(path); switch (reportName) { case OrderReportViewModel.ReportTypes.ProductionManifest: ReportService.GenerateProductionManifest(order, orderDetailsForSides, filename, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); break; case OrderReportViewModel.ReportTypes.ShippingManifest: var location = _customerLocationRepository.Get(side.Value.Value); ReportService.GenerateShippingManifest(order, orderDetailsForSides, filename, location, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); break; case OrderReportViewModel.ReportTypes.ProductionDetail: { var currentLocation = _customerLocationRepository.Get(side.Value.Value); var labels = GetLabelsByOrderDetailsId(orderDetailsForSides); ReportService.GenerateProductionManifestDetail(order, labels, filename, currentLocation, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); break; } case OrderReportViewModel.ReportTypes.YieldReport: { var coldWeightsDeatails = _coldWeightEntryService.GetItems(orderId).ToList(); var labels = GetLabelsByOrderDetailsId(orderDetailsForSides); ReportService.GenerateYield(order, labels, filename, reportType, coldWeightsDeatails, (UnitsType)viewModel.UnitsType); break; } } } } } else { if (reportName == OrderReportViewModel.ReportTypes.ProductionManifest) { var path = string.Format("{0}{1}.{2}", reportsFolder, reportName, reportType); var filename = GetFilenameSafe(path); var orderDetails = _orderDetailRepository.FindAll(x => x.OrderId == order.Id).ToList(); ReportService.GenerateProductionManifest(order, orderDetails, filename, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); } if (reportName == OrderReportViewModel.ReportTypes.ShippingManifest) { locations = GetLocations(order).ToList(); foreach (var currentLocation in locations) { var location = currentLocation; var path = string.Format("{0}{1}_{2}.{3}", reportsFolder, reportName, location.Id, reportType); var filename = GetFilenameSafe(path); var orderDetails = _orderDetailRepository .FindAll(x => x.OrderId == orderId && x.CustomerLocationId == location.Id) .ToArray(); ReportService.GenerateShippingManifest(order, orderDetails, filename, location, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); } } if (reportName == OrderReportViewModel.ReportTypes.ProductionDetail) { locations = locations ?? GetLocations(order).ToList(); foreach (var currentLocation in locations) { var location = currentLocation; var path = string.Format("{0}{1}{2}.{3}", reportsFolder, reportName, location.Id, reportType); var filename = GetFilenameSafe(path); var orderDetailsForSides = _orderDetailRepository .FindAll(x => x.OrderId == orderId && x.CustomerLocationId == location.Id).ToList(); var labels = GetLabelsByOrderDetailsId(orderDetailsForSides); ReportService.GenerateProductionManifestDetail(order, labels, filename, currentLocation, reportType, (UnitsType)viewModel.UnitsType, viewModel.SuppressWeights); } } if (reportName == OrderReportViewModel.ReportTypes.YieldReport) { var path = string.Format("{0}{1}.{2}", reportsFolder, reportName, reportType); var filename = GetFilenameSafe(path); var coldWeightsDeatails = _coldWeightEntryService.GetItems(order.Id).ToList(); var orderDetails = _orderDetailRepository.FindAll(x => x.OrderId == order.Id).ToList(); var labels = GetLabelsByOrderDetailsId(orderDetails); ReportService.GenerateYield(order, labels, filename, reportType, coldWeightsDeatails); } } } files = Directory.GetFiles(GetFilenameSafe(reportsFolder), "*." + reportType, SearchOption.TopDirectoryOnly) .Select(Path.GetFileName) .ToDictionary(x => x, x => string.Format("{0}{1}", reportsFolder, x)); } FillLookups(); OrderReportViewModel model = _orderReportService.Get(viewModel.OrderId); model.ReportIds = viewModel.ReportIds; model.ReportFiles = files; return(PartialView("_Report", model)); }