internal void FillResult(List <IPromotionRule> rules)
        {
            this.dataGridViewCostume.DataSource = null;
            if (this.Result == null)
            {
                this.Result = new List <TKeyValue <decimal, decimal> >();
            }
            foreach (var item in rules)
            {
                DiscountPromotionRule rule = (DiscountPromotionRule)item;
                this.Result.Add(new TKeyValue <decimal, decimal>(rule.HitBuyCout, rule.Discount));
            }

            this.dataGridViewCostume.DataSource = Result;
        }
Esempio n. 2
0
        public decimal SettlementMoney(List <InSalesPromotionCostumeInfo> infoList, SalesPromotion salesPromotion, decimal minDiscount, Boolean round)
        {
            List <IPromotionRule>     rules = salesPromotion.Rules;
            Dictionary <int, decimal> dict  = new Dictionary <int, decimal>();

            foreach (IPromotionRule item in rules)
            {
                DiscountPromotionRule rule = (DiscountPromotionRule)item;
                if (!dict.ContainsKey(rule.HitBuyCout))
                {
                    dict.Add(rule.HitBuyCout, (decimal)rule.Discount / 100);
                }
            }
            int     buyAllCount = 0;
            decimal allPrice    = 0;

            foreach (InSalesPromotionCostumeInfo info in infoList)
            {
                buyAllCount += info.BuyCount;
                allPrice    += (info.Price * info.BuyCount);
            }


            List <int> keyList = new List <int>();// dict.Keys.ToList();

            foreach (var item in dict.Keys)
            {
                keyList.Add(item);
            }
            keyList.Sort();
            for (int i = (keyList.Count - 1); i >= 0; i--)
            {
                int buyCountKey = keyList[i];
                if (buyAllCount >= buyCountKey)
                {
                    decimal value  = dict[buyCountKey];
                    decimal min    = minDiscount / 100;
                    decimal result = 0;
                    if (value < min)
                    {
                        if (round)
                        {
                            foreach (InSalesPromotionCostumeInfo info in infoList)
                            {
                                result += MathHelper.Rounded(info.Price * min, 0) * info.BuyCount;;
                            }
                            return(result);
                        }
                        else
                        {
                            foreach (InSalesPromotionCostumeInfo info in infoList)
                            {
                                result += (info.Price * info.BuyCount) * min;
                            }
                            return(result);
                        }
                    }
                    else
                    {
                        if (round)
                        {
                            foreach (InSalesPromotionCostumeInfo info in infoList)
                            {
                                result += MathHelper.Rounded(info.Price * value, 0) * info.BuyCount;
                            }
                            return(result);
                        }
                        else
                        {
                            foreach (InSalesPromotionCostumeInfo info in infoList)
                            {
                                result += (info.Price * info.BuyCount) * value;
                            }
                            return(result);
                        }
                    }
                }
            }

            return(allPrice);
        }