public void Notify(params object[] args) { if (args == null || args.Length == 0 || !(args[0] is UFSoft.UBF.Business.EntityEvent)) { return; } if (args == null || args.Length == 0 || !(args[0] is UFSoft.UBF.Business.EntityEvent)) { return; } BusinessEntity.EntityKey key = ((UFSoft.UBF.Business.EntityEvent)args[0]).EntityKey; if (key == null) { return; } UFIDA.U9.CBO.SCM.Item.ItemMaster holder = key.GetEntity() as UFIDA.U9.CBO.SCM.Item.ItemMaster; if (holder == null) { return; } ItemSubTable itemSub = ItemSubTable.Finder.Find("ItemMaster=" + holder.ID + ""); if (itemSub != null) { using (ISession session = Session.Open()) { itemSub.Remove(); session.Commit(); } } }
private List <ShipPlanIDDTO> CreatShipPlanList(CreatShipPlan bpObj) { List <ShipPlanIDDTO> listShip = new List <ShipPlanIDDTO>(); using (ISession session = Session.Open()) { ShipPlanDetailBE.ShipPlanDetailHead shipPlan = ShipPlanDetailBE.ShipPlanDetailHead.Create(); ShipDetailTypeBE.ShipDetailType formType = ShipDetailTypeBE.ShipDetailType.Finder.Find("IsCreatedByPush=1"); if (formType == null) { throw new Exception("未设置出运明细单生单的单据类型,请设置出运明细单单据类型为“上游单据推出”"); } shipPlan.DocumnetType = formType; shipPlan.SourceDocumnetType = AllEnumBE.SourceTypeEnum.SoOrder; shipPlan.Status = AllEnumBE.DocumnetSate.OpenState; //单据状态 shipPlan.ShipPlanState = AllEnumBE.ShipPlanStateEnum.NotShipPlan; //出运状态 shipPlan.BusinessDate = DateTime.Now; //设置默认行号 GetProfileValueProxy lineNo = new GetProfileValueProxy(); lineNo.ProfileCode = "SysLineNo"; PVDTOData pVTDOData = lineNo.Do(); string row = pVTDOData.ProfileValue; //财务费率 decimal fiFeeRate = 0; GetProfileValueProxy bpObj1 = new GetProfileValueProxy(); bpObj1.ProfileCode = "FTFIFee"; bpObj1.ProfileOrg = Base.Context.LoginOrg.ID; PVDTOData pVDTOData = bpObj1.Do(); if (pVDTOData != null && pVDTOData.ProfileValue != null) { fiFeeRate = decimal.Parse(pVDTOData.ProfileValue); } string docNo = "", shipplingType = "", soLine = ""; long customer = 0, currenty = 0; int count = 1; foreach (SOLineIDDTO lineDto in bpObj.SOLineIDDTO) { UFIDA.U9.SM.SO.SOLine line = SM.SO.SOLine.Finder.FindByID(lineDto.SOLine); if (line == null) { continue; } //不同的客户、币种、装箱方式不允许拉式生成同一个出运明细单 if (count > 1) { if (customer != 0 && customer != line.SO.OrderBy.Customer.ID) { throw new Exception("销售订单" + line.SO.DocNo + "的客户与单号" + docNo + "的客户不一致,不能生成同一个出运明细单"); } if (currenty != 0 && currenty != line.SO.TC.ID) { throw new Exception("销售订单" + line.SO.DocNo + "的币种与单号" + docNo + "的币种不一致,不能生成同一个出运明细单"); } if (shipplingType != "" && shipplingType != line.DescFlexField.PubDescSeg11) { throw new Exception("销售订单" + line.SO.DocNo + "行号" + line.DocLineNo + "的装箱方式与单号" + docNo + "行号" + soLine + "装箱方式不一致,不能生成同一个出运明细单"); } } docNo = line.SO.DocNo; customer = line.SO.OrderBy.Customer.ID; currenty = line.SO.TC.ID; shipplingType = line.DescFlexField.PubDescSeg11; soLine = line.DocLineNo.ToString(); //赋值表头信息 shipPlan.SaleMan = line.SO.Seller; //业务员 shipPlan.Client = line.SO.OrderBy.Customer; //客户 if (line.SO.OrderBy.Customer != null) { // shipPlan.Consignee = line.SO.OrderBy.Customer.a //提箱港区 地区档案 从销售订单带出,从客户带出 if (line.SO.OrderBy.Customer.Territory != null) { shipPlan.CargoPort = line.SO.OrderBy.Customer.Territory;// } } if (line.SO.ShipToSite != null && line.SO.ShipToSite.CustomerSite != null)//收货位置 { //shipPlan. } shipPlan.Department = line.SO.SaleDepartment; //部门 shipPlan.Currency = line.SO.TC; //币种 shipPlan.DealMode = line.SO.BargainMode; //成交方式 //贸易国别 国家\地区档案 从销售订单带出 //shipPlan.Country = line.SO. shipPlan.Transportation = line.SO.TransMode; // if (line.SO.DescFlexField.PrivateDescSeg14 != "") { Base.Organization.Organization org = Base.Organization.Organization.FindByCode(line.SO.DescFlexField.PrivateDescSeg14); if (org != null) { shipPlan.GetOrderOrg = org; } else { throw new Exception("销售订单" + line.SO.DocNo + "接单组织为空,不能生成出运明细单"); } } else { throw new Exception("销售订单" + line.SO.DocNo + "接单组织为空,不能生成出运明细单"); } //出口口岸 港口档案 从销售订单带出 shipPlan.ExportPort = line.SO.ShippingPort; //进港区 地区档案 从销售订单带出 //shipPlan.IntoPort //目的口岸 港口档案 从销售订单带出 shipPlan.DestinationPort = line.SO.AimPort; //运输方式 shipPlan.Transportation = line.SO.TransMode; //贸易方式 shipPlan.TradeMode = line.SO.TradeMode; //收汇天数,从销售订单公共扩展字段1带出 if (line.SO.OrderBy.CustomerKey.GetEntity().DescFlexField.PubDescSeg1 == "") { shipPlan.NumberDay = 0; } else { shipPlan.NumberDay = Convert.ToInt32(line.SO.OrderBy.CustomerKey.GetEntity().DescFlexField.PubDescSeg1); } //赋值表体信息 ShipPlanDetailBE.ShipPlanDetailLine shipLine = ShipPlanDetailBE.ShipPlanDetailLine.Create(shipPlan); //包装工厂 值集值 从销售订单行带出 //Base.FlexField.ValueSet.DefineValue flexField = Base.FlexField.ValueSet.DefineValue.Finder.Find("Code='Z022'"); if (line.DescFlexField.PrivateDescSeg18 != "") { Base.FlexField.ValueSet.DefineValue flexField = Base.FlexField.ValueSet.DefineValue.Finder.Find("ValueSetDef.Code='Z002' and Code='" + line.DescFlexField.PrivateDescSeg18 + "'"); // flexField.ValueSetDef.CodeAttribute shipLine.PackingHouse = flexField; } if (line.DescFlexField.PrivateDescSeg12 != "") //验货方式直接 { Base.FlexField.ValueSet.DefineValue flexField = Base.FlexField.ValueSet.DefineValue.Finder.Find("ValueSetDef.Code='Z009' and Code='" + line.DescFlexField.PrivateDescSeg12 + "'"); shipLine.ExamineCargoMode = flexField; //shipLine.ExamineCargoMode = AllEnumBE.ExamineCargoModeEnum.GetFromValue(line.DescFlexField.PrivateDescSeg12); } //else // shipLine.ExamineCargoMode = AllEnumBE.ExamineCargoModeEnum.Empty; shipLine.RowNo = Convert.ToInt32(row); shipLine.SrcSO = line.SO; shipLine.SrcDocNo = line.SO.DocNo; shipLine.SrcLineID = line.ID; shipLine.SrcLineNo = line.DocLineNo.ToString(); //shipLine.SrcSOKey = line. if (line.ItemInfo == null || line.ItemInfo.ItemID == null) { throw new Exception("销售订单" + line.SO.DocNo + "行" + line.DocLineNo + "找不见对应料品信息,不能生成出运明细单"); } shipLine.Item = line.ItemInfo.ItemID; shipLine.Standard = line.ItemInfo.ItemID.SPECS; shipLine.NumberUom = line.TU; shipLine.Ultimately = line.FinallyPriceTC;//最终价 //外销价 十进制 销售订单带出 if (line.DescFlexField.PrivateDescSeg5 != "") { shipLine.ExportSales = decimal.Parse(line.DescFlexField.PrivateDescSeg5);//外销价 } shipLine.Qty = lineDto.ShipQty; shipPlan.FinancialCost += shipPlan.FinancialCost + (shipLine.ExportSales * shipLine.Qty * fiFeeRate / 100); //反写销售订单已出运数量 //if (line.DescFlexField.PrivateDescSeg8 != "") //{ // line.DescFlexField.PrivateDescSeg8 = (decimal.Parse(line.DescFlexField.PrivateDescSeg8) + lineDto.ShipQty).ToString();//反写销售订单行的已出运数量 //} //else // line.DescFlexField.PrivateDescSeg8 = lineDto.ShipQty.ToString(); //验货方式销售订单行私有字段12 //带出料品的总箱数、内箱数、外箱数、毛重、净重、体积、长、宽、高,体积、总体积 //料品的字表字段 ItemSubTable itemsub = ItemSubTable.Finder.Find("ItemMaster=" + line.ItemInfo.ItemID.ID); if (itemsub != null) { //string sumBoxNumber = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg3;//料品的扩展字段;箱数 //string inBoxNumber = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg27;//料品的扩展字段;内箱数 //string outerBoxNumber = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg28;//料品的扩展字段;外箱数 //string grossWeight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg2;//料品的扩展字段:毛重 ////string netWeight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg3;//料品的扩展字段:净重 //string length = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg8;//料品的扩展字段:长 //string weith = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg9;//料品的扩展字段:宽 //string hight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg10;//料品的扩展字段:高 //string sumBoxNumber = itemsub.BoxNumber; ;//料品的扩展字段;箱数 //string inBoxNumber = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg27;//料品的扩展字段;内箱数 //string outerBoxNumber = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg28;//料品的扩展字段;外箱数 //string grossWeight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg2;//料品的扩展字段:毛重 ////string netWeight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg3;//料品的扩展字段:净重 //string length = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg8;//料品的扩展字段:长 //string weith = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg9;//料品的扩展字段:宽 //string hight = line.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg10;//料品的扩展字段:高 shipLine.SumBoxNumber = itemsub.BoxNumber; shipLine.InBoxNumber = itemsub.InnerBoxNumber; shipLine.OuterBoxNumber = itemsub.OutBoxNumber; shipLine.GrossWeight = itemsub.GrossWeight; //毛重 shipLine.NetWeight = itemsub.NetWeight; //净重 shipLine.SumGross = shipLine.GrossWeight * shipLine.Qty; //总毛重 shipLine.Length = itemsub.BoxLong; shipLine.Weith = itemsub.BoxWidth; shipLine.Higth = itemsub.BoxHight; shipLine.Bulks = shipLine.Length * shipLine.Weith * shipLine.Higth; //体积 shipLine.SumBulk = shipLine.Bulks * shipLine.Qty; //总体积 } #region 产生佣金表,放到BE里生成 //if (line.DescFlexField.PrivateDescSeg6.ToLower() == "true") //{ // OrderLineBrokerage.EntityList brokerage = OrderLineBrokerage.Finder.FindAll("OrderLineID='" + line.ID + "'"); // if (brokerage != null && brokerage.Count > 0) // { // OrderLineBrokerage shipLineBroke = null; // foreach (OrderLineBrokerage orderBrokerage in brokerage) // { // shipLineBroke = OrderLineBrokerage.Create(); // shipLineBroke.SourceType = AllEnumBE.SourceTypeEnum.ShipPlanDoc; // shipLineBroke.ShipPlanLine = shipLine; // shipLineBroke.ShipPlanRowNo = int.Parse(row); // shipLineBroke.Client = orderBrokerage.Client; // shipLineBroke.Product = orderBrokerage.Product; // shipLineBroke.BrokerageRatio = orderBrokerage.BrokerageRatio; // shipLineBroke.Payee = orderBrokerage.Payee; // shipLineBroke.PayAmount = orderBrokerage.PayAmount; // shipLineBroke.PayCurrency = orderBrokerage.PayCurrency; // shipLineBroke.OutPayment = orderBrokerage.OutPayment; // shipLineBroke.OrderCurrency = orderBrokerage.OrderCurrency; // shipLineBroke.Rate = orderBrokerage.Rate; // } // } //} #endregion row = (int.Parse(row) + int.Parse(pVTDOData.ProfileValue)).ToString(); count++; } session.Commit(); ShipPlanIDDTO shipID = new ShipPlanIDDTO(); shipID.DocNo = shipPlan.DocNo; shipID.ShipPlan = shipPlan.ID; listShip.Add(shipID); } return(listShip); }
/// <summary> /// 为实体Dto赋值 /// </summary> /// <param name="SO">销售订单集合</param> /// <param name="SoLine">销售订单行集合与销售订单集合互斥</param> /// <param name="dotList">成本预测实体DTo</param> private List <CostForecastBE.CostForecastDTO> SetCostDto(List <SM.SO.SO.EntityKey> SO, List <SM.SO.SOLine.EntityKey> SoLine) { List <CostForecastBE.CostForecastDTO> dtoList = new List <CostForecastBE.CostForecastDTO>();//订单成本预测实体集合 #region 参数声明 CostForecastBE.CostForecastDTO dto = null; //订单成本预测实体dto CostForecastBE.CostForecastDTO dtoOne = null; //成品成本预测实体dto //获取所需预置参数 CalculateDtoFieldExtend.GetPresetParameter(); #endregion //整单成本预测 if (SO != null && SO.Count > 0) { //从UI得到的销售订单应该是已经按照销售订单过滤了的 SM.SO.SO soEntity = null; using (ISession session = Session.Open()) { foreach (SM.SO.SO.EntityKey soKey in SO) //遍历销售订单集合 { //得到对应销售订单 soEntity = soKey.GetEntity(); if (soEntity == null) { throw new Exception("请确认查询方式是否设置为整单成本预测"); //continue; } dto = new CostForecastBE.CostForecastDTO(); dto.SONo = soEntity; //赋值销售订单 dto.ForecastType = AllEnumBE.CostForecastTypeEnum.AllCostForecast; //预测类型整单成本预测 if (soEntity.DescFlexField.PrivateDescSeg6 != "") { dto.OceanFreight = decimal.Parse(soEntity.DescFlexField.PrivateDescSeg6);//国际费用 } if (soEntity.DescFlexField.PrivateDescSeg8 != "") { dto.OtherFee = decimal.Parse(soEntity.DescFlexField.PrivateDescSeg8);//其他国外费用 } if (soEntity.DescFlexField.PrivateDescSeg5 != "") { dto.DomesticFee = decimal.Parse(soEntity.DescFlexField.PrivateDescSeg5);//国内运费 } if (soEntity.DescFlexField.PrivateDescSeg7 != "") { dto.OtherDomesticFee = decimal.Parse(soEntity.DescFlexField.PrivateDescSeg7);//其他国内费用 } #region 计算整单体积 decimal allVolume = 0; foreach (SM.SO.SOLine soLineEntity in soEntity.SOLines) //遍历销售订单行集合计算整单体积 { //bool isCalculateFreight = 0;// //单行的体积=单行的箱数*料品.体积 //单行的箱数=订单数量/料品.装箱数量 //判断料品的装箱数量与装箱体积是否为空 UFIDA.U9.Cust.GS.FT.ItemSubTableBE.ItemSubTable itemSub = UFIDA.U9.Cust.GS.FT.ItemSubTableBE.ItemSubTable.Finder.Find("ItemMaster=" + soLineEntity.ItemInfo.ItemID.ID + ""); //if (itemSub == null) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的装箱数量"); //} //if(itemSub.BoxNumber ==0) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的装箱数量"); //} //if (itemSub.GrossWeight == 0) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的毛重"); //} //if (itemSub.BoxLong == 0) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的装箱长度"); //} //if (itemSub.BoxWidth == 0) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的装箱宽度"); //} //if (itemSub.BoxHight == 0) //{ // throw new Exception("请录入" + soLineEntity.SO.DocNo + "行" + soLineEntity.DocLineNo + "对应料品的装箱高度"); //} //decimal itemQty = decimal.Parse(soLineEntity.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg3);//料品装箱数量 //decimal itemRough = decimal.Parse(soLineEntity.ItemInfo.ItemIDKey.GetEntity().DescFlexField.PrivateDescSeg2);//料品毛重 if (itemSub != null) { decimal itemVolume = itemSub.BoxLong * itemSub.BoxWidth * itemSub.BoxHight;//料品体积 if (itemSub.BoxNumber == 0) { allVolume += soLineEntity.OrderByQtyTU * itemVolume;//整单体积 } else { allVolume += (soLineEntity.OrderByQtyTU / itemSub.BoxNumber) * itemVolume;//整单体积 } } } #endregion #region 遍历得到销售订单行 string dtoDemo = ""; foreach (SM.SO.SOLine soLineEntity in soEntity.SOLines) //遍历销售订单行集合 { string dtoOneDemo = ""; UFIDA.U9.Cust.GS.FT.ItemSubTableBE.ItemSubTable itemSub = UFIDA.U9.Cust.GS.FT.ItemSubTableBE.ItemSubTable.Finder.Find("ItemMaster=" + soLineEntity.ItemInfo.ItemID.ID + ""); //计算共用值 decimal itemQty = 0; //料品装箱数量 decimal itemRough = 0; //料品毛重 decimal itemVolume = 0; //料品体积 if (itemSub != null) { itemQty = itemSub.BoxNumber; //料品装箱数量 itemRough = itemSub.GrossWeight; //料品毛重 itemVolume = itemSub.BoxLong * itemSub.BoxWidth * itemSub.BoxHight; //料品体积 } decimal rmbCost = 0; //工具人民币采购成本 decimal dollorCost = 0; //工具美元采购成本 decimal allFee = 0; //成品各项费用 dtoOne = new CostForecastBE.CostForecastDTO(); dtoOne.ForecastType = AllEnumBE.CostForecastTypeEnum.OneCostForecast; //预测类型 dtoOne.SONo = soEntity; //销售订单 dtoOne.SOLine = soLineEntity; //销售订单行 dtoOne.Brokerage = CalculateDtoFieldExtend.GetBrokerage(soLineEntity); //佣金 dtoOne.Discount = CalculateDtoFieldExtend.GetDiscount(soLineEntity); //折扣 if (itemQty == 0 || itemRough == 0 || itemVolume == 0) { dtoOne.OceanFreight = 0; dtoOne.DomesticFee = 0; } else { dtoOne.OceanFreight = CalculateDtoFieldExtend.GetOceanFreight(itemQty, itemRough, itemVolume, soLineEntity); //海运费 dtoOne.DomesticFee = CalculateDtoFieldExtend.GetDomesticFee(itemQty, itemRough, itemVolume, allVolume, soLineEntity); //国内运费 } dtoOne.OtherFee = CalculateDtoFieldExtend.GetOtherOceanFreight(soLineEntity); //其他国外费 dtoOne.OtherDomesticFee = CalculateDtoFieldExtend.GetOtherOceanFreight(soLineEntity); //其他国内费 //随单BOM OrderBomBE.OrderBomHead.EntityList orderBom = OrderBomBE.OrderBomHead.Finder.FindAll("OrderLine=@SOLine", new OqlParam(soLineEntity.ID)); dtoOne.TaxCredits = CalculateDtoFieldExtend.GetTaxCredits(soLineEntity, orderBom); //退税额 dtoOne.ProcurementCost = CalculateDtoFieldExtend.GetProcurementCost(soLineEntity, orderBom); //包装采购成本 dtoOne.LabourCharges = CalculateDtoFieldExtend.GetLabourCharges(soLineEntity); //包装人工费用 dtoOne.ProductCost = CalculateDtoFieldExtend.GetProductCost(soLineEntity, ref rmbCost, ref dollorCost, orderBom); //产品采购成本 dtoOne.RMBProductCost = rmbCost; //工具人民币采购成本 dtoOne.DollorProductCost = dollorCost; //工具美元采购成本 dtoOne.AdministrativeFee = CalculateDtoFieldExtend.GetAdministrativeFee(soLineEntity); //管理费 dtoOne.Interest = CalculateDtoFieldExtend.GetInterest(soLineEntity); //利息 dtoOne.MouldFee = CalculateDtoFieldExtend.GetMouldFee(soLineEntity); //模具费‘ dtoOne.Labelling = CalculateDtoFieldExtend.GetLabelling(soLineEntity, orderBom); //防盗标签费 dtoOne.CreditInsurance = CalculateDtoFieldExtend.GetCreditInsurance(soLineEntity); //信用保险费 dtoOne.BankCharge = CalculateDtoFieldExtend.GetBankCharge(soLineEntity); //银行费用 //dtoOne.OrderBomHead = orderBom;//随单Bom dtoOne.ForecastTime = DateTime.Now; dtoOne.ForecastMan = UFIDA.U9.Base.Context.LoginUser; //成品预测利润:各中类成品外销额-成品各项费用+成品退税额 allFee = dtoOne.Brokerage + dtoOne.Discount + dtoOne.OceanFreight + dtoOne.OtherFee + dtoOne.DomesticFee + dtoOne.OtherDomesticFee + dtoOne.ProcurementCost + dtoOne.LabourCharges + dtoOne.ProductCost + dtoOne.AdministrativeFee + dtoOne.Interest + dtoOne.MouldFee + dto.Labelling + dtoOne.CreditInsurance + dtoOne.BankCharge; dtoOne.ProductForecastRate = soLineEntity.TotalMoneyTC - allFee + dto.TaxCredits; dtoOne.ProductRate = dto.ProductForecastRate / soLineEntity.TotalMoneyTC; //备注 dtoOne.Demo = dtoOneDemo; dtoList.Add(dtoOne); #region 汇总到整单成本预测 dto.Brokerage += dtoOne.Brokerage; dto.Discount += dtoOne.Discount; dto.OceanFreight += dtoOne.OceanFreight;//海运费 dto.TaxCredits += dtoOne.TaxCredits; dto.ProcurementCost += dtoOne.ProcurementCost; dto.LabourCharges += dtoOne.LabourCharges; dto.ProductCost += dtoOne.ProductCost; dto.RMBProductCost += dtoOne.RMBProductCost; dto.DollorProductCost += dtoOne.DollorProductCost; dto.AdministrativeFee += dtoOne.AdministrativeFee; dto.Interest += dtoOne.Interest; dto.MouldFee += dtoOne.MouldFee; dto.Labelling += dtoOne.Labelling; dto.CreditInsurance += dtoOne.CreditInsurance; dto.BankCharge += dtoOne.BankCharge; dto.ListForecastRate += dto.ProductForecastRate; //备注 dto.Demo = ""; //dto.SOLine = soLineEntity; //随单BOM #endregion //得到销售订单行soLineEntity #region 计算成本预测字段值 //根据销售订单行得到随单Bom表 OrderBomHead bomHead = OrderBomHead.Finder.Find(""); #endregion } dto.ListRate = dto.ProductForecastRate / soEntity.TotalMoneyAC; //整单利润率 dto.ForecastTime = DateTime.Now; //预测时间 dto.ForecastMan = UFIDA.U9.Base.Context.LoginUser; //预测人 dtoList.Add(dto); //soEntity.DescFlexField.PrivateDescSeg7 = dto.OceanFreight.ToString(); #endregion } session.Commit(); } } else if (SoLine != null && SoLine.Count > 0) { using (Session seesion = Session.Open()) { //成品成本预测 //从UI得到的销售订单行应该是已经按照销售订单行过滤了的 foreach (SM.SO.SOLine.EntityKey soLineKey in SoLine) //遍历销售订单行集合 { //得到销售订单行 //SM.SO.SOLine soLineEntity = soLineKey.GetEntity(); SM.SO.SOLine line = SM.SO.SOLine.Finder.FindByID(soLineKey.ID); if (line == null) { throw new Exception("请确认查询方案设置为成品成本预测"); } SM.SO.SOLine soLineEntity = line; #region 计算整单体积 decimal allVolume = 0; foreach (SM.SO.SOLine soLine in soLineEntity.SO.SOLines) //遍历销售订单行集合计算整单体积 { //单行的体积=单行的箱数*料品.体积 //单行的箱数=订单数量/料品.装箱数量 //判断料品的装箱数量与装箱体积是否为空 ItemSubTable itemsub = ItemSubTable.Finder.Find("ItemMaster=" + soLine.ItemInfo.ItemID.ID); //if(itemsub == null) // throw new Exception("请维护" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品子表装箱长度、装箱宽度、装箱高度、装箱数量、毛重字段"); //if(itemsub.BoxNumber == 0) //{ // throw new Exception("请录入" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品的装箱数量"); //} //if (itemsub.GrossWeight ==0 ) //{ // throw new Exception("请录入" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品的毛重"); //} //if (itemsub.BoxLong == 0) //{ // throw new Exception("请录入" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品的装箱长度"); //} //if (itemsub.BoxWidth == 0) //{ // throw new Exception("请录入" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品的装箱宽度"); //} //if (itemsub.BoxHight == 0) //{ // throw new Exception("请录入" + soLine.SO.DocNo + "行" + soLine.DocLineNo + "对应料品的装箱高度"); //} if (itemsub != null) { decimal itemQty = itemsub.BoxNumber; //料品装箱数量 decimal itemRough = itemsub.GrossWeight; //料品毛重 decimal itemVolume = itemsub.BoxLong * itemsub.BoxWidth * itemsub.BoxHight; //料品体积 allVolume += (soLine.OrderByQtyTU / itemQty) * itemVolume; //整单体积 } } #endregion #region 计算成本预测字段值 //根据销售订单行得到随单Bom表 //计算共用值 ItemSubTable itemsub1 = ItemSubTable.Finder.Find("ItemMaster=" + soLineEntity.ItemInfo.ItemID.ID); int itemQty1 = 0; //料品装箱数量 decimal itemRough1 = 0; //料品毛重 decimal itemVolume1 = 0; //料品体积 if (itemsub1 != null) { itemQty1 = itemsub1.OutBoxNumber; //料品装箱数量 itemRough1 = itemsub1.GrossWeight; //料品毛重 itemVolume1 = itemsub1.Length * itemsub1.Width * itemsub1.Hight; //料品体积 } decimal rmbCost = 0; //工具人民币采购成本 decimal dollorCost = 0; //工具美元采购成本 decimal allFee = 0; //成品各项费用 dtoOne = new CostForecastBE.CostForecastDTO(); dtoOne.ForecastType = AllEnumBE.CostForecastTypeEnum.OneCostForecast; //预测类型 dtoOne.SONo = soLineEntity.SO; //销售订单 dtoOne.SOLine = soLineEntity; //销售订单行 dtoOne.Brokerage = CalculateDtoFieldExtend.GetBrokerage(soLineEntity); //佣金 dtoOne.Discount = CalculateDtoFieldExtend.GetDiscount(soLineEntity); //折扣 if (itemQty1 == 0 || itemRough1 == 0 || itemVolume1 == 0) { dtoOne.OceanFreight = 0; dtoOne.DomesticFee = 0; } else { dtoOne.OceanFreight = CalculateDtoFieldExtend.GetOceanFreight(itemQty1, itemRough1, itemVolume1, soLineEntity); //海运费 dtoOne.DomesticFee = CalculateDtoFieldExtend.GetDomesticFee(itemQty1, itemRough1, itemVolume1, allVolume, soLineEntity); //国内运费 } dtoOne.OtherFee = CalculateDtoFieldExtend.GetOtherOceanFreight(soLineEntity); //其他国外费 dtoOne.OtherDomesticFee = CalculateDtoFieldExtend.GetOtherOceanFreight(soLineEntity); //其他国内费 //随单BOM OrderBomBE.OrderBomHead.EntityList orderBom = OrderBomBE.OrderBomHead.Finder.FindAll("OrderLine=@BomMaster", new OqlParam(soLineEntity.ID)); dtoOne.TaxCredits = CalculateDtoFieldExtend.GetTaxCredits(soLineEntity, orderBom); //退税额 dtoOne.ProcurementCost = CalculateDtoFieldExtend.GetProcurementCost(soLineEntity, orderBom); //包装采购成本 dtoOne.LabourCharges = CalculateDtoFieldExtend.GetLabourCharges(soLineEntity); //包装人工费用 dtoOne.ProductCost = CalculateDtoFieldExtend.GetProductCost(soLineEntity, ref rmbCost, ref dollorCost, orderBom); //产品采购成本 dtoOne.RMBProductCost = rmbCost; //工具人民币采购成本 dtoOne.DollorProductCost = dollorCost; //工具美元采购成本 dtoOne.AdministrativeFee = CalculateDtoFieldExtend.GetAdministrativeFee(soLineEntity); //管理费 dtoOne.Interest = CalculateDtoFieldExtend.GetInterest(soLineEntity); //利息 dtoOne.MouldFee = CalculateDtoFieldExtend.GetMouldFee(soLineEntity); //模具费‘ dtoOne.Labelling = CalculateDtoFieldExtend.GetLabelling(soLineEntity, orderBom); //防盗标签费 dtoOne.CreditInsurance = CalculateDtoFieldExtend.GetCreditInsurance(soLineEntity); //信用保险费 dtoOne.BankCharge = CalculateDtoFieldExtend.GetBankCharge(soLineEntity); //银行费用 //dtoOne.OrderBomHead = orderBom;//随单Bom dtoOne.ForecastTime = DateTime.Now; dtoOne.ForecastMan = UFIDA.U9.Base.Context.LoginUser; //成品预测利润:各中类成品外销额-成品各项费用+成品退税额 allFee = dtoOne.Brokerage + dtoOne.Discount + dtoOne.OceanFreight + dtoOne.OtherFee + dtoOne.DomesticFee + dtoOne.OtherDomesticFee + dtoOne.ProcurementCost + dtoOne.LabourCharges + dtoOne.ProductCost + dtoOne.AdministrativeFee + dtoOne.Interest + dtoOne.MouldFee + dtoOne.Labelling + dtoOne.CreditInsurance + dtoOne.BankCharge; dtoOne.ProductForecastRate = soLineEntity.TotalMoneyTC - allFee + dtoOne.TaxCredits; dtoOne.ProductRate = dtoOne.ProductForecastRate / soLineEntity.TotalMoneyTC; //反写销售订单行预测状态 if (soLineEntity.DescFlexField.PrivateDescSeg18 == "") { soLineEntity.DescFlexField.PrivateDescSeg18 = "Y"; } //else if (soLineEntity.DescFlexField.PrivateDescSeg18 == "N") //{ // soLineEntity.DescFlexField.PrivateDescSeg18 = "M"; //} dtoList.Add(dtoOne); #endregion } seesion.Commit(); } } else { throw new Exception("未选择任何需要预测的订单"); } return(dtoList); //CreatEntity(dtoList); }