Esempio n. 1
0
        /// <summary>
        /// 批量创建PO单:
        /// </summary>
        /// <param name="list"></param>
        public virtual BatchCreateBasketResultInfo BatchCreatePurchaseOrder(List <BasketItemsInfo> list)
        {
            List <ProductPMLine> tPMLineList = ExternalDomainBroker.GetProductLineInfoByPM(ServiceContext.Current.UserSysNo);
            bool tIsManager = list[0].IsManagerPM.Value;

            //如果没有产品线权限并且不是高级PM,则不允许创建
            //if ((tPMLineList == null || tPMLineList.Count == 0) && !tIsManager)
            //{
            //    throw new BizException(GetMessageString("Basket_PMNoLine"));
            //}
            FillProductLineInfo(list);
            string     createCompanyCode = string.Empty;
            var        conditionList     = new List <BasketItemsInfo>();
            List <int> POSysNo           = new List <int>();
            string     errorMsg          = "";
            //根据编号加载商品信息:
            string exceptionMsg = CheckBasketInfo(ref list);

            errorMsg += exceptionMsg;
            List <PurchaseOrderInfo> POs = new List <PurchaseOrderInfo>();

            //if (!string.IsNullOrEmpty(exceptionMsg) || exceptionMsg.Length > 0)
            //{
            //    throw new BizException(exceptionMsg);
            //}
            list.ForEach(x =>
            {
                //是否中转:
                if (x.IsTransfer == 1)
                {
                    x.StockSysNo = 5000 + x.StockSysNo;
                }
                createCompanyCode = x.CompanyCode;
            });

            //默认采购单类型为:正常;增值税率:0.17;结算货币:人民币(1);送货类型:厂房直送(12)
            var group = from item in list
                        group item by new { item.IsConsign, item.StockSysNo, item.VendorSysNo, item.PMSysNo, item.IsTransfer, item.ProductLine_SysNo }
            into g
                select new
            {
                Key        = g.Key,
                ResultList = g
            };

            foreach (var item in group)
            {
                POs.Clear();
                var ZPO = from i in item.ResultList
                          where i.Quantity >= 0
                          select i;
                var FPO = from i in item.ResultList
                          where i.Quantity < 0
                          select i;
                //正采购
                #region ZPO
                if (ZPO.Count() > 0)
                {
                    PurchaseOrderInfo modelPO = GetInitPO(createCompanyCode);
                    modelPO.VendorInfo = VendorProcessor.LoadVendorInfo(item.Key.VendorSysNo.Value);

                    modelPO.PurchaseOrderBasicInfo.ConsignFlag = (PurchaseOrderConsignFlag)Enum.Parse(typeof(PurchaseOrderConsignFlag), item.Key.IsConsign.Value.ToString());
                    if (null == modelPO.PurchaseOrderBasicInfo.StockInfo)
                    {
                        modelPO.PurchaseOrderBasicInfo.StockInfo = new BizEntity.Inventory.StockInfo();
                    }
                    modelPO.PurchaseOrderBasicInfo.StockInfo.SysNo = item.Key.StockSysNo;
                    if (null == modelPO.PurchaseOrderBasicInfo.ProductManager)
                    {
                        modelPO.PurchaseOrderBasicInfo.ProductManager = new BizEntity.IM.ProductManagerInfo();
                    }
                    //注释原因:因加入产品线验证,此处的归属PM应为产品线的PM
                    //modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = item.Key.PMSysNo;
                    modelPO.PurchaseOrderBasicInfo.PurchaseOrderType = PurchaseOrderType.Normal;
                    modelPO.PurchaseOrderBasicInfo.PayType.SysNo     = VendorDA.LoadVendorPayPeriodType(item.Key.VendorSysNo);
                    string companyCode = string.Empty;
                    foreach (var POitem in ZPO)
                    {
                        modelPO.PurchaseOrderBasicInfo.PurchaseOrderType = PurchaseOrderType.Normal;
                        //增加产品线和主PM字段回写
                        modelPO.PurchaseOrderBasicInfo.IsManagerPM          = POitem.IsManagerPM;
                        modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = POitem.PMSysNo;
                        modelPO.PurchaseOrderBasicInfo.ProductLineSysNo     = POitem.ProductLine_SysNo;
                        modelPO.POItems.Add(new PurchaseOrderItemInfo()
                        {
                            ItemSysNo      = POitem.ItemSysNo,
                            ProductSysNo   = POitem.ProductSysNo,
                            Quantity       = 0,
                            ReadyQuantity  = POitem.ReadyQuantity,
                            OrderPrice     = POitem.OrderPrice,
                            ProductID      = POitem.ProductID,
                            PurchaseQty    = POitem.Quantity,
                            UnitCost       = Decimal.Round(POitem.OrderPrice.Value * modelPO.PurchaseOrderBasicInfo.ExchangeRate.Value, 2),
                            Weight         = POitem.Weight,
                            ApportionAddOn = 0,
                            ReturnCost     = 0,
                            BriefName      = POitem.BriefName,
                            AvailableQty   = BasketDA.AvailableQtyByProductSysNO(POitem.ProductSysNo.Value),
                            M1             = BasketDA.M1ByProductSysNO(POitem.ProductSysNo.Value),
                            JingDongPrice  = BasketDA.JDPriceByProductSysNO(POitem.ProductSysNo.Value),
                            CompanyCode    = POitem.CompanyCode
                        });
                        companyCode = POitem.CompanyCode;
                    }
                    modelPO.CompanyCode = companyCode;
                    POs.Add(modelPO);
                }
                #endregion

                //负采购
                #region FPO
                if (FPO.Count() > 0)
                {
                    PurchaseOrderInfo modelPO = GetInitPO(createCompanyCode);
                    modelPO.VendorInfo = VendorProcessor.LoadVendorInfo(item.Key.VendorSysNo.Value);
                    modelPO.PurchaseOrderBasicInfo.ConsignFlag          = (PurchaseOrderConsignFlag)Enum.Parse(typeof(PurchaseOrderConsignFlag), item.Key.IsConsign.Value.ToString());
                    modelPO.PurchaseOrderBasicInfo.StockInfo.SysNo      = item.Key.StockSysNo;
                    modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = item.Key.PMSysNo;
                    modelPO.PurchaseOrderBasicInfo.PurchaseOrderType    = PurchaseOrderType.Negative;
                    modelPO.PurchaseOrderBasicInfo.PayType.SysNo        = VendorDA.LoadVendorPayPeriodType(item.Key.VendorSysNo);
                    modelPO.PurchaseOrderBasicInfo.MemoInfo.Memo        = GetMessageString("Basket_Memo_FPO");
                    string companyCode = string.Empty;
                    foreach (var POitem in FPO)
                    {
                        //增加产品线和主PM字段回写
                        modelPO.PurchaseOrderBasicInfo.IsManagerPM          = POitem.IsManagerPM;
                        modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = POitem.ProductLine_PMSysNo;
                        modelPO.PurchaseOrderBasicInfo.ProductLineSysNo     = POitem.ProductLine_SysNo;
                        modelPO.POItems.Add(new PurchaseOrderItemInfo()
                        {
                            ItemSysNo      = POitem.ItemSysNo,
                            ProductSysNo   = POitem.ProductSysNo,
                            Quantity       = 0,
                            OrderPrice     = POitem.OrderPrice,
                            ProductID      = POitem.ProductID,
                            PurchaseQty    = POitem.Quantity,
                            UnitCost       = Decimal.Round(POitem.OrderPrice.Value * modelPO.PurchaseOrderBasicInfo.ExchangeRate.Value, 2),
                            Weight         = POitem.Weight,
                            ApportionAddOn = 0,
                            ReturnCost     = 0,
                            BriefName      = POitem.BriefName,
                            AvailableQty   = BasketDA.AvailableQtyByProductSysNO(POitem.ProductSysNo.Value),
                            M1             = BasketDA.M1ByProductSysNO(POitem.ProductSysNo.Value),
                            JingDongPrice  = BasketDA.JDPriceByProductSysNO(POitem.ProductSysNo.Value),
                            CompanyCode    = POitem.CompanyCode
                        });
                        companyCode = POitem.CompanyCode;
                    }
                    modelPO.CompanyCode = companyCode;
                    POs.Add(modelPO);
                }
                #endregion
                int poItemCountNumber = 80;

                if (!string.IsNullOrEmpty(AppSettingManager.GetSetting("PO", "PoItemCountNumber")))
                {
                    poItemCountNumber = int.Parse(AppSettingManager.GetSetting("PO", "PoItemCountNumber"));
                }
                foreach (var poentity in POs)
                {
                    try
                    {
                        if (poentity.PurchaseOrderBasicInfo.MemoInfo == null)
                        {
                            poentity.PurchaseOrderBasicInfo.MemoInfo = new PurchaseOrderMemoInfo();
                        }
                        if (poentity.PurchaseOrderBasicInfo.ETATimeInfo == null)
                        {
                            poentity.PurchaseOrderBasicInfo.ETATimeInfo = new PurchaseOrderETATimeInfo();
                        }
                        if (poentity.EIMSInfo == null)
                        {
                            poentity.EIMSInfo = new PurchaseOrderEIMSInfo()
                            {
                                EIMSInfoList = new List <EIMSInfo>()
                            };
                        }
                        if (poentity.ReceivedInfoList == null)
                        {
                            poentity.ReceivedInfoList = new List <PurchaseOrderReceivedInfo>();
                        }
                        //如果在一个po单中Item超过80种,则自动拆分 每80种商品一单
                        if (poentity.POItems.Count > poItemCountNumber)
                        {
                            //string listvalue = SerializeHelper.JsonSerializer(poentity);
                            PurchaseOrderInfo posResult = poentity;
                            //SerializeHelper.JsonDeserialize<IPP.Oversea.CN.POASNMgmt.WebModel.ViewModels.PO.POModel>(listvalue);
                            var poitems = new List <PurchaseOrderItemInfo>();
                            for (int i = 1; i <= poentity.POItems.Count; i++)
                            {
                                poitems.Add(poentity.POItems[i - 1]);
                                if ((i % poItemCountNumber == 0 && i != 0) || i == poentity.POItems.Count)
                                {
                                    posResult.POItems = poitems;
                                    var poResult = PurchaseOrderProcessor.CreatePO(posResult);
                                    POSysNo.Add(poResult.SysNo.Value);
                                    poitems.Clear();
                                }
                            }
                        }
                        else
                        {
                            var poResult = PurchaseOrderProcessor.CreatePO(poentity);
                            POSysNo.Add(poResult.SysNo.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        errorMsg += ex.Message + Environment.NewLine;
                    }
                }
            }
            return(new BatchCreateBasketResultInfo()
            {
                SucessPOSysNos = POSysNo, ErrorMsg = errorMsg
            });
        }