コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: VendorSettleBP.cs プロジェクト: sanlonezhang/ql
        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);
        }
コード例 #3
0
ファイル: VendorSettleBP.cs プロジェクト: sanlonezhang/ql
        /// <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);
        }
コード例 #4
0
ファイル: VendorSettleBP.cs プロジェクト: sanlonezhang/ql
        /// <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));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: VendorSettleBP.cs プロジェクト: sanlonezhang/ql
        /// <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);
        }