public CollectionPaymentItem CreateSettleItem(CollectionPaymentItem entity) { DataCommand command = null; if (entity.AcquireReturnPointType.HasValue) { command = DataCommandManager.GetDataCommand("CreateCollVendorSettleItem"); command.SetParameterValue("@AcquireReturnPoint", entity.AcquireReturnPoint.Value); command.SetParameterValue("@AcquireReturnPointType", entity.AcquireReturnPointType.Value); } else { command = DataCommandManager.GetDataCommand("CreateCollVendorSettleItemNOAcquireRP"); } command.SetParameterValue("@SettleSysNo", entity.SettleSysNo); command.SetParameterValue("@POConsignToAccLogSysNo", entity.POConsignToAccLogSysNo); command.SetParameterValue("@Cost", entity.Cost); //command.SetParameterValue("@CurrencySysNo", entity.); command.SetParameterValue("@SettlePercentage", entity.SettlePercentage); command.SetParameterValue("@SettleType", entity.SettleType); command.SetParameterValue("@ConsignSettleRuleSysNO", entity.SettleRuleSysNo); CommonHelper.SetCommonParams(command); entity.ItemSysNo = System.Convert.ToInt32(command.ExecuteScalar()); return(entity); }
private static decimal?CalculateRuleCost(CollectionPaymentItem msg) { int sysNo = msg.POConsignToAccLogSysNo.Value; SettleRulesEntity entity = GetRuleByLogSysNo(sysNo); if (entity == null) //如果未能匹配到结算规则,则返回原价 { return(null); } //如果匹配到的结算规则的结算数量未设置,则默认为无穷多 //如果设置了结算数量,则按照结算数量进行匹配 if (entity.SettleRuleQuantity.HasValue) { //计算剩余的结算数量 int resultQuantity = entity.SettleRuleQuantity.Value - (entity.SettleedQuantity ?? 0); //if (resultQuantity < Math.Abs(msg.Quantity)) if (resultQuantity < Math.Abs(msg.ConsignQty)) { return(null); } } //修改规则中的已结算数量 entity.SettleedQuantity = (entity.SettleedQuantity ?? 0) + Math.Abs(msg.Quantity); //@@ //记录规则编号 msg.ConsignSettleRuleSysNO = entity.SysNo; //@@ return(entity.NewSettlePrice); }
/// <summary> /// 为SettleItem的属性赋值 /// </summary> /// <param name="currentItem">Acclog</param> /// <param name="settleItem">SettleItem</param> //private static void SetItemValue(ConsginToAccLogEntity currentItem, CollectionPaymentItemMsg settleItem) private static void SetItemValue(ConsginToAccLogEntity currentItem, CollectionPaymentItem settleItem) { settleItem.ConsignQty = currentItem.Quantity; settleItem.ConsignToAccStatus = currentItem.Status; //@@ settleItem.CreateCost = currentItem.CreateCost; //@@ settleItem.CreateTime = DateTime.Now; settleItem.ConsignToAccLogInfo = new ConsignToAcctLogInfo { LogSysNo = currentItem.SysNo, CreateCost = currentItem.CreateCost, StockSysNo = currentItem.StockSysNo, ProductQuantity = currentItem.Quantity }; settleItem.FoldCost = currentItem.FoldCost; settleItem.MinCommission = currentItem.MinCommission; //@@ //settleItem.OnLineQty settleItem.POConsignToAccLogSysNo = currentItem.SysNo; settleItem.Point = currentItem.Point; settleItem.ProductID = currentItem.ProductID; settleItem.ProductName = currentItem.ProductName; settleItem.ProductSysNo = currentItem.ProductSysNo; settleItem.Quantity = currentItem.Quantity; //@@ settleItem.RetailPrice = currentItem.RetailPrice; //@@ settleItem.SettlePercentage = currentItem.SettlePercentage; //settleItem.SettleSysNo settleItem.SettleType = currentItem.SettleType; settleItem.StockName = currentItem.StockName; settleItem.StockSysNo = currentItem.StockSysNo; //@@ settleItem.VendorName = currentItem.VendorName; //@@ settleItem.VendorSysNo = currentItem.VendorSysNo; //@@ //计算结算金额 settleItem.Cost = CalculateCost(currentItem, settleItem); }
/// <summary> /// 计算结算金额 /// </summary> /// <param name="currentItem">Acclog</param> /// <param name="settleItem">代销结算Item</param> /// <returns>结算金额</returns> private static decimal CalculateCost(ConsginToAccLogEntity currentItem, CollectionPaymentItem settleItem) { Decimal cost; //计算结算金额 if (settleItem.SettleType.ToUpper() == "O") { //CRL20438 By Kilin //对于负数的单据不启用规则 //if (settleItem.Quantity > 0) if (settleItem.ConsignQty > 0) { //通过规则进行价格计算 decimal?ruleCost = CalculateRuleCost(settleItem); //规则应用成功 if (ruleCost.HasValue) { cost = ruleCost.Value; goto Lable_Result; } } //传统模式结算价统一用正常采购价格 //<!--CRL21118 Modify By Kilin 去除积分扣除 cost = currentItem.SettleCost;//- currentItem.Point / 10m; //--> } else if (settleItem.SettleType.ToUpper() == "P") { if (!currentItem.SettlePercentage.HasValue) { throw new InvalidOperationException("结算类型为P的AccLog必须有SettlePercentage"); } Decimal profit = currentItem.RetailPrice * currentItem.SettlePercentage.Value / 100m; if (profit >= currentItem.MinCommission) { //<!--CRL21118 Modify By Kilin 去除积分扣除 cost = currentItem.RetailPrice * (1 - currentItem.SettlePercentage.Value / 100m); // -currentItem.Point / 10m; //--> } else { cost = currentItem.RetailPrice - currentItem.MinCommission; } } else { throw new InvalidOperationException(string.Format("非法的SettleType:{0}", settleItem.SettleType)); } Lable_Result: return(Math.Round(cost, 2, MidpointRounding.AwayFromZero)); }
public bool DeleteSettleItem(CollectionPaymentItem entity) { if (entity.ItemSysNo.HasValue) { DataCommand command = DataCommandManager.GetDataCommand("DeleteCollVendorSettleItem"); command.SetParameterValue("@SysNo", entity.ItemSysNo.Value); CommonHelper.SetCommonParams(command); command.ExecuteNonQuery(); } return(true); }
/// <summary> /// 根据AccLog构建代收代付结算单 /// </summary> /// <param name="acclogList">AccLog</param> /// <returns>代收代付结算单列表</returns> private List <CollectionPaymentInfo> GetVendorSettleList(List <ConsginToAccLogEntity> acclogList) { var vendorSettleList = new List <CollectionPaymentInfo>(); //检查SettleType,去除非法数据 var invalidDataQuery = from item in acclogList where (item.SettleType.ToUpper() != "O" && item.SettleType.ToUpper() != "P" || item.SettleType.ToUpper() == "P" && !item.SettlePercentage.HasValue) select item; var invalidList = invalidDataQuery.ToList(); //如果存在错误数据,则发邮件提醒 SendMailForInvalidData(invalidList); //排除错误数据 var validDataQuery = acclogList.Except(invalidDataQuery); var groups = from item in validDataQuery group item by new { item.VendorSysNo, item.VendorName, item.StockSysNo, item.CurrencySysNo, item.TaxRate, item.PMUserSysNo, item.PayPeriodType } into team select team; foreach (var group in groups) { CollectionPaymentInfo settle = null; var i = 0; foreach (var item in group) { //每个代销结算单最多只能有MaxItemCount个Item if (i % GlobalSettings.MaxItemCount == 0) { settle = new CollectionPaymentInfo(); vendorSettleList.Add(settle); settle.CreateUser = GlobalSettings.UserName; settle.CreateUserSysNo = GlobalSettings.UserSysNo; settle.CurrentUserSysNo = GlobalSettings.UserSysNo; //服务端会把CurrentUserSysNo 赋值给CreateUserSysNo (TMD太贱了) settle.CreateTime = DateTime.Now; settle.CurrencySysNo = group.Key.CurrencySysNo; //@@ settle.CurrencyCode = group.Key.CurrencySysNo; //@@ settle.PayPeriodType = group.Key.PayPeriodType; settle.ReturnPointPM = group.Key.PMUserSysNo; settle.Status = POCollectionPaymentSettleStatus.Origin; //@@ //??settle.StockName = group.Key.TaxRate.ToString(); settle.StockSysNo = group.Key.StockSysNo; //@@ settle.TaxRate = group.Key.TaxRate; //@@ settle.VendorName = group.Key.VendorName; //@@ settle.VendorSysNo = group.Key.VendorSysNo; //@@ settle.VendorInfo = new VendorInfo { SysNo = group.Key.VendorSysNo }; settle.Note = "System Create"; settle.SettleItems = new List <CollectionPaymentItem>(); settle.PMInfo = new ECCentral.BizEntity.IM.ProductManagerInfo { SysNo = group.Key.PMUserSysNo }; } CollectionPaymentItem settleItem = new CollectionPaymentItem(); //为SettleItem的属性赋值 SetItemValue(item, settleItem); settle.SettleItems.Add(settleItem); i++; } } //计算TotalAmt //vendorSettleList.ForEach(x => x.TotalAmt = x.SettleItems.Sum(y => y.Cost * y.Quantity)); vendorSettleList.ForEach(x => x.TotalAmt = x.SettleItems.Sum(y => y.Cost * y.ConsignQty)); return(vendorSettleList); }