示例#1
0
        public Cart ApplyCampaigns(Cart cart)
        {
            var validCampaigns = new List <Campaign>();                                                                                                    //Sepette bulunan ürün kategorileri için uygun olan kampanyaları eklemek için kullanılır.
            var allCampaigns   = _campaignBusiness.GetList();                                                                                              //Kapmanya listesini getir.

            if (allCampaigns != null && allCampaigns.Count > 0)                                                                                            //Kampanya listesi dolu mu?
            {
                foreach (var campaign in allCampaigns)                                                                                                     //Kampanyalarda dön.
                {
                    var productCount = cart.Products.Where(p => campaign.Categories.Any(c => c.Id == p.Category.Parent.Id)).Select(x => x.Quantity).Sum(); //Sepetteki ürünlerden, kampanya kategorilerine ait olan ürün sayısını getir.
                    if (campaign.MinimumProduct <= productCount)                                                                                           //Sepetteki ürün kategorisi uyan ürünlerin sayısı, kampanyadaki minimum ürün sayısından eşit veya büyük mü?
                    {
                        validCampaigns.Add(campaign);
                    }
                }
            }

            //Ürün adetleride dikkate alınarak, sepetteki ürünlerin toplam tutarı sepete girildi.
            cart.Amount = cart.Products.Sum(p => p.Price * p.Quantity);

            //Sepetteki ürünler için geçerli kampanya listesi dolu mu?
            if (validCampaigns != null && validCampaigns.Count > 0)
            {
                cart.ValidCampaign = validCampaigns.OrderByDescending(x => x.Discount).First(); //Liste içerisinden indirim oranı en yüksek olan kampanyayı seç.

                //Not: Maximum indirim oranına göre kampanya seçiminde, listedeki kampanyaların indirim tiplerinde rate ve amount varsa.
                //Ayrıca, indirim tipi amount olan kampanyanın indirimi tüm ürünler için toplanarak maximum indirimin hangi kampanyada olduğu belirlenmesi gerekir.
                //Zaman yeterse bu kontrolüde ekleyeceğim.

                if (cart.ValidCampaign.DiscountType == DiscountType.Rate)                                     //Kampanyanın indirim tipi oran mı?
                {
                    cart.DiscountAmount = cart.Amount - (cart.Amount * (cart.ValidCampaign.Discount * 0.01)); //Kampanyadaki indirim oranı kadar indirim yapıldı.
                }
                else if (cart.ValidCampaign.DiscountType == DiscountType.Amount)                              //Kampanyanın indirim tipi tutar mı?
                {
                    var productCount = cart.Products.Sum(p => p.Quantity);
                    cart.DiscountAmount = cart.Amount - (cart.ValidCampaign.Discount * productCount); //Kampanyadaki indirim tutarı kadar her ürün için indirim yapıldı.
                }
            }

            return(cart);
        }
示例#2
0
        public ActionResult Index()
        {
            var campaignList = _campaignBusiness.GetList();

            return(View(campaignList));
        }