Exemplo n.º 1
0
        public void ApplyDiscount(Order order)
        {
            //indirimi bul uygula
            DiscountCalculateItem discountCalculateItem = DiscountCalculator.CalculateAndApplyDiscount(order);

            //indirmi orderDetail'a paylaştır
            if (discountCalculateItem != null)
            {
                DiscountCalculator.CalculateAndApplyUnitDiscount(discountCalculateItem);
            }
        }
Exemplo n.º 2
0
        public override void CalculateAndApplyUnitDiscount(DiscountCalculateItem discountCalculateItem)
        {
            decimal            unitDiscountAmount = discountCalculateItem.DiscountAmount / discountCalculateItem.TotalQuantity;
            List <OrderDetail> orderDetailList    = OrderDetailService.GetListByOrderIdCategoryId(discountCalculateItem.OrderId, discountCalculateItem.CategoryId);

            foreach (var orderDetail in orderDetailList)
            {
                orderDetail.TotalDiscountAmount = orderDetail.TotalDiscountAmount + unitDiscountAmount * orderDetail.Quantity;
                OrderDetailService.Update(orderDetail);
            }
        }
Exemplo n.º 3
0
        public override DiscountCalculateItem CalculateAndApplyDiscount(Order order)
        {
            //step1: sepette her kategoride toplam kaç ürün var
            List <OrderDetail> orderDetailList = OrderDetailService.GetByOrderId(order.Id);
            var orderDetailSummaryList         = orderDetailList.GroupBy(p => p.CategoryId).Select(g => new
            {
                CategoryId = g.Key,
                Quantity   = g.Sum(t => t.Quantity)
            });

            //step2: her kategori için geçerli kampanyaları bul ve indirimi hesapla
            List <DiscountCalculateItem> discountCalculateItemList = new List <DiscountCalculateItem>();

            foreach (var item in orderDetailSummaryList)
            {
                List <Campaign> currentCampaignList = _campaignService.GetCurrentCampaignList(item.CategoryId, item.Quantity);
                if (currentCampaignList.Count != 0)
                {
                    foreach (var campaignItem in currentCampaignList)
                    {
                        DiscountCalculateItem discountCalculateItem = new DiscountCalculateItem();
                        discountCalculateItem.OrderId       = order.Id;
                        discountCalculateItem.CategoryId    = item.CategoryId;
                        discountCalculateItem.TotalQuantity = item.Quantity;
                        if (campaignItem.DiscountType == (int)DiscountType.RATE)
                        {
                            discountCalculateItem.DiscountAmount = (order.OriginalPrice * campaignItem.Rate) / 100;
                        }
                        else if (campaignItem.DiscountType == (int)DiscountType.AMOUNT)
                        {
                            discountCalculateItem.DiscountAmount = campaignItem.DiscountAmount;
                        }
                        discountCalculateItemList.Add(discountCalculateItem);
                    }
                }
                else
                {
                    return(null);
                }
            }

            //step3:Max indirim tutarlı olanı bul
            var maxDiscountCampaign = discountCalculateItemList.OrderByDescending(i => i.DiscountAmount).First();

            //indirimi order'a uygula
            order.TotalPrice          = order.TotalPrice - maxDiscountCampaign.DiscountAmount;
            order.TotalCampaignAmount = maxDiscountCampaign.DiscountAmount;
            OrderService.Update(order);

            return(maxDiscountCampaign);
        }
Exemplo n.º 4
0
 public abstract void CalculateAndApplyUnitDiscount(DiscountCalculateItem discountCalculateItem);