示例#1
0
        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);
        }
示例#2
0
        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));
        }