/// <summary> /// Adds a coupon to the Cart. /// </summary> /// <param name="param"></param> /// <returns>The lightweight CartViewModel</returns> public virtual async Task <CartViewModel> AddCouponAsync(CouponParam param) { var cart = await CartRepository.AddCouponAsync(param).ConfigureAwait(false); await CartRepository.RemoveCouponsAsync(new RemoveCouponsParam { CartName = param.CartName, CouponCodes = GetInvalidCouponsCode(cart.Coupons).ToList(), CustomerId = param.CustomerId, Scope = param.Scope }).ConfigureAwait(false); var vmParam = new CreateCartViewModelParam { Cart = cart, CultureInfo = param.CultureInfo, IncludeInvalidCouponsMessages = true, BaseUrl = param.BaseUrl }; var viewModel = await CreateCartViewModelAsync(vmParam).ConfigureAwait(false); AddSuccessMessageIfRequired(param, viewModel, param.CultureInfo); return(viewModel); }