예제 #1
0
        public async Task <SpecialOfferViewModel> GetValidShopOfferAsync(CancellationToken ct = default)
        {
            // retrieve all special offers
            List <SpecialOffer> specialOffers = await this._specialOfferRepository.GetAllAsync(ct);

            List <SpecialOffer> shopOffers = specialOffers.Where(o => o.Scope == OfferScope.Shop && o.ExpireDate > DateTime.Now).ToList();

            SpecialOfferViewModel shopOffer = null;

            // if the count is greater than 1 then we have a problem, we only ever want to display one shop offer
            if (shopOffers.Count == 1)
            {
                shopOffer = SpecialOfferConverter.Convert(shopOffers.First());

                // check if shop offer is a promo code
                if (shopOffer.Type == OfferType.PromoCode)
                {
                    if (String.IsNullOrEmpty(shopOffer.PromoCodeId) == false)
                    {
                        PromoCodeViewModel promoViewModel = PromoCodeConverter.Convert(await this._promoCodeRepository.GetByIdAsync(shopOffer.PromoCodeId, ct));
                        // check if promo is valid
                        if (promoViewModel.ExpireDate > DateTime.Now)
                        {
                            shopOffer.PromoCode = promoViewModel;
                        }
                    }
                }
            }

            return(shopOffer);
        }
        public static SpecialOfferViewModel Convert(SpecialOffer specialOffer)
        {
            SpecialOfferViewModel model = new SpecialOfferViewModel();

            model.Id             = specialOffer.Id;
            model.PromoCodeId    = specialOffer.PromoCodeId;
            model.Scope          = (OfferScope)specialOffer?.Scope;
            model.Type           = (OfferType)specialOffer.Type;
            model.ExpireDate     = (DateTime)specialOffer?.ExpireDate;
            model.DisplayMessage = specialOffer.DisplayMessage;
            if (specialOffer.SalePrice != null)
            {
                model.SalePrice = specialOffer.SalePrice;
            }

            return(model);
        }