Exemplo n.º 1
0
        private List <OrderDeliveryPackageReportModel> GetDeliveryPackage(ReportFilter filterModel)
        {
            var fromDate        = DateTime.Today;
            var isAllFromDate   = true;
            var toDate          = DateTime.Today;
            var isAllToDate     = true;
            var listOffices     = new int[1];
            var isGetAllOffices = true;

            //Filter by deliver to
            if (filterModel.ListOffices != null && filterModel.ListOffices.Count() > 0)
            {
                listOffices     = filterModel.ListOffices;
                isGetAllOffices = false;
            }
            //Filter by date
            if (filterModel.FromDate.HasValue)
            {
                fromDate      = filterModel.FromDate.Value.Date;
                isAllFromDate = false;
            }
            if (filterModel.ToDate.HasValue)
            {
                toDate      = filterModel.ToDate.Value.Date.AddDays(1);
                isAllToDate = false;
            }
            var orderDeliveryPackageIds = (from x in _orderDeliveryPackageRepository.Search("").Where(p =>
                                                                                                      (listOffices.Contains(p.MyOfficeId) || (isGetAllOffices && filterModel.AllowListOffices.Contains(p.MyOfficeId))) &&
                                                                                                      ((p.CreateDate >= fromDate || isAllFromDate) && (p.CreateDate <= toDate || isAllToDate)))
                                           select x.OrderDeliveryPackageId).ToList();
            var orders = _orderRepository.Search("").Where(p => orderDeliveryPackageIds.Contains(p.OrderDeliveryPackageId.Value)).Include(p => p.OrderDetails.Select(t => t.Product.Category));
            var model  = new List <OrderDeliveryPackageReportModel>();

            foreach (var item in orderDeliveryPackageIds)
            {
                var defaultOrder    = orders.FirstOrDefault(p => p.OrderDeliveryPackageId == item);
                var defaultShipping = _shippingServiceRepository.GetAll().FirstOrDefault(p => p.ShippingServiceId == defaultOrder.ShippingServiceId);
                var detail          = new OrderDeliveryPackageReportModel
                {
                    CustomerName         = defaultOrder.Customer.CustomerName,
                    CustomerAddress      = defaultOrder.Customer.Address,
                    CustomerPhone        = defaultOrder.Customer.PhoneNumber,
                    PaymentType          = defaultOrder.PaymentType,
                    ShippingAddress      = defaultShipping == null ? "" : defaultShipping.Address,
                    ShippingServiceName  = defaultShipping == null ? defaultOrder.Customer.CustomerShortName : defaultShipping.ShippingServiceName,
                    ShippingServicePhone = defaultShipping == null ? "" : defaultShipping.PhoneNumber,
                    Total = orders.Where(p => p.OrderDeliveryPackageId == item).Sum(p => p.TotalCost),
                    ProductReportModels = new List <ProductReportModel>()
                };
                if (defaultShipping != null)
                {
                    detail.StartAt = defaultShipping.StartAt;
                }
                foreach (var order in orders.Where(p => p.OrderDeliveryPackageId == item))
                {
                    foreach (var orderDetail in order.OrderDetails)
                    {
                        var categoryName = orderDetail.Product.ProductName;
                        var existProduct = detail.ProductReportModels.FirstOrDefault(p => p.ProductId == orderDetail.ProductId);
                        if (existProduct != null)
                        {
                            existProduct.Amount += orderDetail.Amount;
                        }
                        else
                        {
                            detail.ProductReportModels.Add(new ProductReportModel {
                                Amount = orderDetail.Amount, CategoryName = categoryName, ProductId = orderDetail.ProductId
                            });
                        }
                    }
                }
                model.Add(detail);
            }
            return(model);
        }