コード例 #1
0
ファイル: OrderedProduct.cs プロジェクト: efarr/Simple-CS-BDD
 internal void ApplyDiscount(DatedDiscount datedDiscount)
 {
     if (datedDiscount.DoesApplyTo(_product))
     {
         _appliedDiscount = new AppliedDiscount(datedDiscount.DiscountPercent, _appliedDiscount);
     }
 }
コード例 #2
0
ファイル: Product.cs プロジェクト: bennnym/Myob.Fma
        public void UpdateOffers(Holidays holiday, AppliedDiscount discount)
        {
            if (AppliedOffers.ContainsKey(holiday))
            {
                AppliedOffers.Remove(holiday);
            }

            AppliedOffers.Add(holiday, discount);
        }
コード例 #3
0
        public AppliedDiscount CalculateDiscount(IEnumerable <ParcelOrderOutputItem> items)
        {
            var appliedDiscount = new AppliedDiscount
            {
                TotalCost = items.Select(i => i.Cost).Sum()
            };

            var groupedByParcelDiscountType = items.GroupBy(g => new
            {
                g.DiscountTypes,
                g.ParcelType
            });

            groupedByParcelDiscountType.ToList().ForEach(grp =>
            {
                var discountRule = (_configuredDiscounts.Where(t => t.DiscountTypes.Equals(grp.Key.DiscountTypes))).SingleOrDefault();

                if (discountRule != null)
                {
                    var totalCounts = grp.Count();
                    var groups      = Math.Abs(totalCounts / discountRule.Limit);

                    if (groups <= 0)
                    {
                        return;
                    }
                    var i = 0;

                    IEnumerable <ParcelOrderOutputItem> modifiedGroup = grp;

                    do
                    {
                        var min = modifiedGroup.Select(m => m.Cost).Min();
                        appliedDiscount.SavedCost += min;
                        appliedDiscount.TotalCost -= min;
                        modifiedGroup              = grp.Where(c => !c.Cost.Equals(min)).ToList();
                        i += 1;
                    } while (i < groups);
                }
            });

            return(appliedDiscount);
        }
コード例 #4
0
      public List <AppliedDiscount> DiscountsApplicable(List <ProductQuantity> productList)
      {
          var discountsApplied = new List <AppliedDiscount>();

          foreach (var item in productList)
          {
              if (item.Product.Id == _discountedProduct.Id)
              {
                  var discount        = CalculateDiscount(item);
                  var appliedDiscount = new AppliedDiscount
                  {
                      Type        = DiscountType.Percentage,
                      Description = $"{item.Product.Name} {_percentage:P0} OFF: - {discount.ToCurrencyString()}",
                      Amount      = discount
                  };

                  discountsApplied.Add(appliedDiscount);
              }
          }

          return(discountsApplied);
      }
コード例 #5
0
        public AppliedDiscount CalculateMixedDiscount(IEnumerable <ParcelOrderOutputItem> items)
        {
            var appliedDiscount = new AppliedDiscount
            {
                TotalCost = items.Select(i => i.Cost).Sum()
            };

            var discountRule = (_configuredDiscounts.Where(t => t.DiscountTypes.Equals(DiscountTypes.Mixed))).SingleOrDefault();

            if (discountRule == null)
            {
                throw new NotSupportedException("Discount Ruleset not supported.");
            }

            var totalCounts = items.Count();

            var groups = Math.Abs(totalCounts / discountRule.Limit);

            if (groups <= 0)
            {
                return(appliedDiscount);
            }
            var i = 0;

            var modifiedGroup = items;

            do
            {
                var min = modifiedGroup.Select(m => m.Cost).Min();
                appliedDiscount.SavedCost += min;
                appliedDiscount.TotalCost -= min;
                modifiedGroup              = modifiedGroup.Where(c => !c.Cost.Equals(min)).ToList();
                i += 1;
            } while (i < groups);

            return(appliedDiscount);
        }
コード例 #6
0
        public IEnumerable <AppliedDiscount> DiscountsApplicable(IEnumerable <ProductQuantity> items)
        {
            var itemArray = items as ProductQuantity[] ?? items.ToArray();

            var discountsApplied = new List <AppliedDiscount>();

            foreach (var item in itemArray)
            {
                if (item.Product.ProductId == _discountedItem.ProductId)
                {
                    var discount        = CalculateDiscount(item);
                    var appliedDiscount = new AppliedDiscount
                    {
                        Type   = DiscountType.Percentage,
                        Text   = $"{item.Product.Name} {_percentage:P0} OFF: - {discount.ToCurrencyString()}",
                        Amount = discount
                    };

                    discountsApplied.Add(appliedDiscount);
                }
            }

            return(discountsApplied);
        }