/// <summary> /// 创建销售订单折扣明细 /// </summary> /// <param name="disLine">折扣行</param> /// <param name="solineID">销售订单行ID</param> /// <param name="totalMoney">折扣后金额</param> /// <param name="disMoney">折扣金额</param> /// <param name="price">外销价</param> /// <param name="soKey">销售订单实体Key</param> private void CreateSODicount(UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine disLine, AllEnumBE.DiscountTypeEnum dicountType, decimal discountPrice, decimal discountRate, long solineID, decimal totalMoney, decimal disMoney, decimal price, UFIDA.U9.SM.SO.SO.EntityKey soKey) { UFIDA.U9.Cust.GS.FT.SODiscountBE.SODiscount soDis = UFIDA.U9.Cust.GS.FT.SODiscountBE.SODiscount.Finder.Find("SOLine=@SOLine", new OqlParam("SOLine", solineID)); if (soDis == null) { soDis = UFIDA.U9.Cust.GS.FT.SODiscountBE.SODiscount.Create(); } UFIDA.U9.SM.SO.SOLine soLineEntity = UFIDA.U9.SM.SO.SOLine.Finder.FindByID(solineID); if (soLineEntity != null) { soDis.SOLineKey = soLineEntity.Key; soDis.DiscountType = dicountType; soDis.BeforePrice = discountPrice; soDis.BeforeRate = discountRate; soDis.DiscountPrice = discountPrice; soDis.DiscountRate = discountRate; soDis.DiscountMoney = totalMoney; soDis.CalAmount = disMoney; soDis.ExportPrice = price; soDis.SOKey = soKey; if (disLine != null) { soDis.DiscountLineKey = disLine.Key; } } }
private void ModifySOPrice(long so, List <ReturnDiscountDTO> dtoList) { List <UFIDA.U9.ISV.SM.SaleOrderDTOData> soDtoList = QuerySOByDocNo(so); foreach (UFIDA.U9.ISV.SM.SaleOrderDTOData soHead in soDtoList) { UFIDA.U9.SM.SO.SO soDoc = UFIDA.U9.SM.SO.SO.Finder.FindByID(soHead.ID); soHead.DescFlexField.PrivateDescSeg1 = "True"; foreach (ReturnDiscountDTO dto in dtoList) { UFIDA.U9.ISV.SM.SOLineDTOData soLineDto = soHead.SOLines.Find(delegate(UFIDA.U9.ISV.SM.SOLineDTOData dtoTemp) { return(dtoTemp.ID == dto.SoLineID); }); if (soLineDto == null) { continue; } UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine discountLine = UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine.Finder.FindByID(dto.DiscountID); decimal price = 0;//外销价 if (string.IsNullOrEmpty(soLineDto.DescFlexField.PrivateDescSeg5)) { soLineDto.DescFlexField.PrivateDescSeg5 = soLineDto.OrderPriceTC.ToString(); } price = decimal.Parse(soLineDto.DescFlexField.PrivateDescSeg5); decimal DiscountRatio = 0; decimal DiscountPrice = 0; AllEnumBE.DiscountTypeEnum DiscountType = AllEnumBE.DiscountTypeEnum.Empty; if (!dto.IsReset) { DiscountRatio = dto.DiscountRatio; DiscountPrice = dto.DiscountPrices; DiscountType = dto.DiscountType; } else { #region 重新读取折扣信息 string strWhere = "DiscountHead.Custmor.Code=@Customer and DiscountHead.Product.Code=@Item and ValidDate<=@Date and UnValidDate>=@Date and DiscountHead.Org=@Org and DiscountHead.States=2"; OqlParam[] appOqlparm = new OqlParam[] { new OqlParam("Customer", soHead.OrderBy.Code), new OqlParam("Item", soLineDto.ItemInfo.ItemCode), new OqlParam("Date", soHead.BusinessDate), new OqlParam("Org", Context.LoginOrg.ID) }; UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine.EntityList DiscountList = UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine.Finder.FindAll(strWhere, appOqlparm); foreach (UFIDA.U9.Cust.GS.FT.DiscountBE.DiscountLine Discount in DiscountList) { bool isBreak = false; if (Discount.DiscountType == AllEnumBE.DiscountTypeEnum.PercentValues)//百分比 { //如果是百分比,则使用外销价*百分比 DiscountRatio = Discount.Discount; isBreak = true; } if (Discount.DiscountType == AllEnumBE.DiscountTypeEnum.FixedValues && soHead.TC.ID == Discount.CurrencyType.ID)//固定值 { //如果是固定值,并且币种相同,则使用外销价-固定值设定的单价 DiscountPrice = Discount.Prices; isBreak = true; } DiscountType = Discount.DiscountType; discountLine = Discount; if (isBreak) { break; } } #endregion } soLineDto.FinallyPriceTC = price; if (DiscountType == AllEnumBE.DiscountTypeEnum.PercentValues)//百分比 { //如果是百分比,则使用外销价*百分比 soLineDto.FinallyPriceTC = price - price * DiscountRatio; } if (DiscountType == AllEnumBE.DiscountTypeEnum.FixedValues)//固定值 { //如果是固定值,并且币种相同,则使用外销价-固定值设定的单价 // update Bug:96 Ldward 20150205 if (price < DiscountPrice) { throw new Exception("固定折扣小于外销价生成折扣失败,请确认!"); } soLineDto.FinallyPriceTC = price - DiscountPrice; } soLineDto.DescFlexField.PrivateDescSeg19 = "True"; soLineDto.PriceCalField = "FinallyPrice";//价格来源改为手工 soLineDto.DescFlexField.PrivateDescSeg21 = (price * soLineDto.OrderByQtyTU - soLineDto.FinallyPriceTC * soLineDto.OrderByQtyTU).ToString(); CreateSODicount(discountLine, DiscountType, DiscountPrice, DiscountRatio, soLineDto.ID, soLineDto.FinallyPriceTC * soLineDto.OrderByQtyTU, price * soLineDto.OrderByQtyTU - soLineDto.FinallyPriceTC * soLineDto.OrderByQtyTU, price, soDoc.Key); } } UFIDA.U9.ISV.SM.Proxy.CommonModifySOSRVProxy sv = new ISV.SM.Proxy.CommonModifySOSRVProxy(); sv.SOs = soDtoList; sv.TargetOrgCode = Context.LoginOrg.Code; sv.Do(); }