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); }