public ActionResult Third(string id)
        {
            DeliveryThirdModel model = new DeliveryThirdModel(id);

            if (string.IsNullOrWhiteSpace(model.Id) || this.Session[model.Id] == null)
            {
                return(RedirectToAction("First", "Delivery"));
            }
            DeliveryAddDTO             dto                    = (DeliveryAddDTO)this.Session[model.Id];
            List <SaleOrderExpressDTO> saleOrders             = dto.SaleOrders;
            List <SaleOrder>           entities               = this.saleOrderService.SearchNeedExpress();
            Dictionary <string, PurchaseItemCacheModel> items = ParameterHelper.GetPurchaseItem(PurchaseItemCategory.Product, false);

            foreach (SaleOrder entity in entities)
            {
                SaleOrderNeedExpressModel saleOrder    = new SaleOrderNeedExpressModel(entity);
                PurchaseItemCacheModel    purchaseItem = items[entity.Item];
                if (purchaseItem != null)
                {
                    saleOrder.ItemName = purchaseItem.Name;
                }
                if (saleOrders.Exists(x => x.Id == entity.Id))
                {
                    saleOrder.Selected = Constant.COMMON_Y;
                }
                model.SaleOrders.Add(saleOrder);
            }
            return(View(model));
        }
        public ActionResult PostAdd(string id, DeliveryFourthModel model)
        {
            JsonResultModel result = new JsonResultModel();

            try
            {
                Validate validate = new Validate();
                validate.CheckStringArgument(WebResource.Field_Id, id, true);
                validate.CheckObjectArgument <DeliveryFourthModel>("model", model);
                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                if (this.Session[id] == null)
                {
                    result.BuilderErrorMessage(WebResource.Message_DeliverySessionOut);
                    result.Data = "/Delivery/First";
                    return(Json(result));
                }

                model.PostValidate(ref validate);

                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[id];

                dto.Date           = model.Date;
                dto.ExpressCompany = model.ExpressCompany;
                dto.ExpressBill    = model.ExpressBill;
                dto.Remark         = model.Remark;
                dto.Creator        = this.Session["Mobile"].ToString();
                dto.Costs          = new List <CostAddDTO>();
                foreach (CostAddModel cost in model.Costs)
                {
                    dto.Costs.Add(new CostAddDTO {
                        Item = cost.Item, Money = cost.Money
                    });
                }
                this.deliveryService.Add(dto);

                result.Result = true;
                result.Data   = "/Delivery/Index";
                return(Json(result));
            }
            catch (Exception ex)
            {
                result.BuilderErrorMessage(ex.Message);
                return(Json(result));
            }
        }
        public ActionResult First(string id)
        {
            DeliveryFirstModel model = new DeliveryFirstModel(id);
            DeliveryAddDTO     dto;

            if (string.IsNullOrWhiteSpace(model.Id))
            {
                model.NewId();
                dto = new DeliveryAddDTO();
                this.Session[model.Id] = dto;
            }
            else
            {
                if (this.Session[model.Id] == null)
                {
                    this.Session[model.Id] = new DeliveryAddDTO();
                }
                dto = (DeliveryAddDTO)this.Session[model.Id];
            }

            List <DeliveryDetailAddDTO> deliveryProducts = dto.DeliveryDetails;

            List <Purchase> entities = this.purchaseService.GetDeliverable(PurchaseItemCategory.Product);
            Dictionary <string, PurchaseItemCacheModel> items = ParameterHelper.GetPurchaseItem(PurchaseItemCategory.Product, false);

            foreach (Purchase entity in entities)
            {
                PurchaseDeliveryModel  product      = new PurchaseDeliveryModel(entity);
                PurchaseItemCacheModel purchaseItem = items[entity.Item];
                if (purchaseItem != null)
                {
                    product.ItemName  = purchaseItem.Name;
                    product.PackUnit  = purchaseItem.OutUnit;
                    product.InOutRate = purchaseItem.InOutRate;
                }
                if (deliveryProducts.Count > 0)
                {
                    DeliveryDetailAddDTO deliveryProduct = deliveryProducts.Find(x => x.ItemCategory == PurchaseItemCategory.Product && x.PurchaseId == entity.Id);
                    if (deliveryProduct != null)
                    {
                        if (deliveryProduct.DeliveryQuantity > 0)
                        {
                            product.DeliveryQuantity = deliveryProduct.DeliveryQuantity.ToString("0.##");
                        }
                        if (deliveryProduct.PackQuantity > 0)
                        {
                            product.PackQuantity = deliveryProduct.PackQuantity.ToString("0.##");
                        }
                    }
                }
                model.Products.Add(product);
            }
            return(View(model));
        }
        public ActionResult PostSecond(string id, List <DeliveryDetailAddModel> packs)
        {
            JsonResultModel result = new JsonResultModel();

            try
            {
                Validate validate = new Validate();
                validate.CheckStringArgument(WebResource.Field_Id, id, true);
                validate.CheckList <DeliveryDetailAddModel>(WebResource.PurchaseItemCategory_Pack, packs);
                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                if (this.Session[id] == null)
                {
                    result.BuilderErrorMessage(WebResource.Message_DeliverySessionOut);
                    result.Data = "/Delivery/First";
                    return(Json(result));
                }
                DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[id];
                Dictionary <string, DeliveryDetailAddDTO>   packDict      = new Dictionary <string, DeliveryDetailAddDTO>();
                Dictionary <string, PurchaseItemCacheModel> purchaseItems = ParameterHelper.GetPurchaseItem(PurchaseItemCategory.Pack, false);
                foreach (DeliveryDetailAddModel pack in packs)
                {
                    pack.PostValidate(ref validate);
                    dto.DeliveryDetails.Add(new DeliveryDetailAddDTO
                    {
                        PurchaseId       = pack.PurchaseId,
                        Item             = pack.Item,
                        ItemCategory     = pack.ItemCategory,
                        ItemName         = pack.ItemName,
                        DeliveryQuantity = pack.DeliveryQuantity
                    });
                }

                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                this.Session[id] = dto;
                result.Data      = "/Delivery/Third?id=" + id;
                result.Result    = true;
            }
            catch (Exception ex)
            {
                result.BuilderErrorMessage(ex.Message);
            }
            return(Json(result));
        }
        public ActionResult Fourth(string id)
        {
            DeliveryFourthModel model = new DeliveryFourthModel(id);

            if (string.IsNullOrWhiteSpace(model.Id) || this.Session[model.Id] == null)
            {
                return(RedirectToAction("First", "Delivery"));
            }
            DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[model.Id];

            model.CurrentDate    = DataConvert.ConvertDateToString(dto.Date);
            model.ExpressCompany = dto.ExpressCompany;
            model.ExpressBill    = dto.ExpressBill;
            model.Remark         = dto.Remark;
            return(View(model));
        }
        public ActionResult Second(string id)
        {
            DeliverySecondModel model = new DeliverySecondModel(id);

            if (string.IsNullOrWhiteSpace(model.Id) || this.Session[model.Id] == null)
            {
                return(RedirectToAction("First", "Delivery"));
            }

            DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[model.Id];

            List <DeliveryDetailAddDTO> deliveryPacks         = dto.DeliveryDetails;
            List <Purchase>             entities              = this.purchaseService.GetDeliverable(PurchaseItemCategory.Pack);
            Dictionary <string, PurchaseItemCacheModel> items = ParameterHelper.GetPurchaseItem(PurchaseItemCategory.Pack, false);

            foreach (Purchase entity in entities)
            {
                PurchaseDeliveryModel  pack         = new PurchaseDeliveryModel(entity);
                PurchaseItemCacheModel purchaseItem = items[entity.Item];
                if (purchaseItem != null)
                {
                    pack.ItemName = purchaseItem.Name;
                }
                if (deliveryPacks.Count > 0)
                {
                    DeliveryDetailAddDTO deliveryPack = deliveryPacks.Find(x => x.ItemCategory == PurchaseItemCategory.Pack && x.PurchaseId == entity.Id);
                    if (deliveryPack != null)
                    {
                        if (deliveryPack.DeliveryQuantity > 0)
                        {
                            pack.DeliveryQuantity = deliveryPack.DeliveryQuantity.ToString("0.##");
                        }
                    }
                }
                model.Packs.Add(pack);
            }
            return(View(model));
        }
Beispiel #7
0
        /// <summary>
        /// 新增交付记录
        /// </summary>
        /// <param name="dto">新增交付数据对象</param>
        public void Add(DeliveryAddDTO dto)
        {
            using (DbConnection conn = DbHelper.CreateConnection())
            {
                DbTransaction trans = null;
                try
                {
                    conn.Open();
                    trans = conn.BeginTransaction();
                    if (trans == null)
                    {
                        throw new ArgumentNullException("DbTransaction");
                    }

                    #region Delivery and Cost

                    Delivery entity = new Delivery();
                    entity.Create(dto.Date, dto.ExpressCompany, dto.ExpressBill, dto.IncludeOrder, dto.Summary, dto.Remark, dto.Costs, dto.Creator);
                    this.deliveryRepository.Insert(trans, entity);
                    foreach (Cost cost in entity.Costs)
                    {
                        this.costRepository.Insert(trans, cost);
                    }

                    #endregion

                    Dictionary <string, Sale>   sales = new Dictionary <string, Sale>();
                    Dictionary <string, string> items = new Dictionary <string, string>();
                    foreach (DeliveryDetailAddDTO detail in dto.DeliveryDetails)
                    {
                        #region Purchase
                        Purchase purchase = this.purchaseRepository.Select(trans, detail.PurchaseId);
                        if (purchase == null || purchase.Category != detail.ItemCategory || purchase.Item != detail.Item)
                        {
                            throw new EasySoftException(string.Format("关联的采购单不存在或项目不正确。采购单ID:{0}, 采购项:{1}", purchase.Id, detail.ItemName));
                        }

                        if (purchase.Inventory < detail.DeliveryQuantity)
                        {
                            throw new EasySoftException(string.Format("库存不足。采购单ID:{0}, 采购项:{1}", purchase.Id, detail.ItemName));
                        }

                        purchase.Delivery(detail.DeliveryQuantity, dto.Creator);
                        this.purchaseRepository.Update(trans, purchase);
                        #endregion

                        #region DeliveryDetail
                        DeliveryDetail detailEntity = new DeliveryDetail();
                        detailEntity.Create(entity.Id, purchase.Id, detail.ItemCategory, detail.DeliveryQuantity, detail.PackQuantity, detail.PackUnit, dto.Creator);
                        this.deliveryDetailRepository.Insert(trans, detailEntity);
                        #endregion
                    }

                    #region SaleOrder
                    if (dto.IncludeOrder == Constant.COMMON_Y)
                    {
                        foreach (SaleOrderExpressDTO order in dto.SaleOrders)
                        {
                            SaleOrder orderEntity = this.saleOrderRepository.Select(trans, order.Id);
                            if (orderEntity == null || orderEntity.NeedExpress == Constant.COMMON_N || orderEntity.Item != order.Item || orderEntity.Quantity != order.Quantity || orderEntity.Status != SaleOrderStatus.Ordered)
                            {
                                throw new EasySoftException(string.Format("关联的订单不存在或状态不正确,订单信息Id:{0}, 订单项:{1}", order.Id, order.ItemName));
                            }
                            orderEntity.SentExpress(orderEntity.Id, dto.Creator);
                            this.saleOrderRepository.Update(trans, orderEntity);
                        }
                    }
                    #endregion

                    #region Sale
                    foreach (SaleAddDTO sale in dto.Sales)
                    {
                        Sale saleEntity = new Sale();
                        saleEntity.Create(entity.Id, sale.Item, sale.Quantity, sale.Unit, dto.Creator);
                        this.saleRepository.Insert(trans, saleEntity);
                    }
                    #endregion

                    trans.Commit();
                }
                catch
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                    }
                    throw;
                }
            }
        }
        public ActionResult PostThird(string id, List <SaleOrderExpressModel> orders)
        {
            JsonResultModel result = new JsonResultModel();

            try
            {
                Validate validate = new Validate();
                validate.CheckStringArgument(WebResource.Field_Id, id, true);
                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }
                if (this.Session[id] == null)
                {
                    result.BuilderErrorMessage(WebResource.Message_DeliverySessionOut);
                    result.Data = "/Delivery/First";
                    return(Json(result));
                }

                if (orders != null && orders.Count > 0)
                {
                    DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[id];
                    dto.IncludeOrder = Constant.COMMON_Y;

                    Dictionary <string, SaleOrderExpressModel> orderDict = new Dictionary <string, SaleOrderExpressModel>();
                    foreach (SaleOrderExpressModel order in orders)
                    {
                        order.PostValidate(ref validate);
                        dto.SaleOrders.Add(new SaleOrderExpressDTO {
                            Id = order.Id, Item = order.Item, ItemName = order.ItemName, Quantity = order.Quantity, Unit = order.Unit
                        });
                        if (orderDict.ContainsKey(order.Item))
                        {
                            orderDict[order.Item].Quantity += order.Quantity;
                        }
                        else
                        {
                            orderDict.Add(order.Item, order);
                        }
                    }

                    List <string> summary = new List <string>();
                    foreach (KeyValuePair <string, SaleOrderExpressModel> saleAdd in orderDict)
                    {
                        summary.Add(string.Format("{0}{1}{2}", saleAdd.Value.ItemName, saleAdd.Value.Quantity, saleAdd.Value.Unit));
                        SaleAddDTO saleDto = dto.Sales.Find(x => x.Item == saleAdd.Value.Item);
                        if (saleDto == null)
                        {
                            throw new EasySoftException(string.Format("出库产品中没有包含{0}", saleAdd.Value.ItemName));
                        }
                        else
                        {
                            dto.Sales.RemoveAll(x => x.Item == saleAdd.Value.Item);
                            saleDto.Quantity -= saleAdd.Value.Quantity;
                            if (saleDto.Quantity < 0)
                            {
                                throw new EasySoftException(string.Format("{0}的出库量少于订单数量", saleAdd.Value.ItemName));
                            }
                            dto.Sales.Add(saleDto);
                        }
                    }
                    dto.Summary      = string.Format("{0}, 其中包含快递{1}", dto.Summary, string.Join(", ", summary.ToArray()));
                    this.Session[id] = dto;
                }

                result.Data   = "/Delivery/Fourth?id=" + id;
                result.Result = true;
            }
            catch (Exception ex)
            {
                result.BuilderErrorMessage(ex.Message);
            }
            return(Json(result));
        }
        public ActionResult PostFirst(string id, List <DeliveryDetailAddModel> products)
        {
            JsonResultModel result = new JsonResultModel();

            try
            {
                Validate validate = new Validate();
                validate.CheckStringArgument(WebResource.Field_Id, id, true);
                validate.CheckList <DeliveryDetailAddModel>(WebResource.PurchaseItemCategory_Product, products);
                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                if (this.Session[id] == null)
                {
                    result.BuilderErrorMessage(WebResource.Message_DeliverySessionOut);
                    result.Data = "/Delivery/First";
                    return(Json(result));
                }
                DeliveryAddDTO dto = (DeliveryAddDTO)this.Session[id];
                Dictionary <string, SaleAddDTO> saleAddDict = new Dictionary <string, SaleAddDTO>();
                foreach (DeliveryDetailAddModel product in products)
                {
                    product.PostValidate(ref validate);
                    dto.DeliveryDetails.Add(new DeliveryDetailAddDTO
                    {
                        PurchaseId       = product.PurchaseId,
                        Item             = product.Item,
                        ItemCategory     = product.ItemCategory,
                        ItemName         = product.ItemName,
                        DeliveryQuantity = product.DeliveryQuantity,
                        PackQuantity     = product.PackQuantity,
                        PackUnit         = product.PackUnit
                    });
                    if (saleAddDict.ContainsKey(product.Item))
                    {
                        saleAddDict[product.Item].Quantity += product.PackQuantity;
                    }
                    else
                    {
                        saleAddDict.Add(product.Item, new SaleAddDTO {
                            Item = product.Item, ItemName = product.ItemName, Quantity = product.PackQuantity, Unit = product.PackUnit
                        });
                    }
                }
                List <string> summary = new List <string>();
                foreach (KeyValuePair <string, SaleAddDTO> saleAdd in saleAddDict)
                {
                    summary.Add(string.Format("{0}{1}{2}", saleAdd.Value.ItemName, saleAdd.Value.Quantity, saleAdd.Value.Unit));
                    dto.Sales.Add(saleAdd.Value);
                }
                dto.Summary = string.Join(",", summary.ToArray());
                if (validate.IsFailed)
                {
                    result.BuilderErrorMessage(validate.ErrorMessages);
                    return(Json(result));
                }

                this.Session[id] = dto;
                result.Data      = "/Delivery/Second?id=" + id;
                result.Result    = true;
            }
            catch (Exception ex)
            {
                result.BuilderErrorMessage(ex.Message);
            }
            return(Json(result));
        }