public async Task CanCalculateGiftCardRemainingAmount() { await _giftCardService.InsertGiftCardUsageHistoryAsync( new GiftCardUsageHistory { GiftCardId = _giftCard2.Id, UsedWithOrderId = 1, UsedValue = 30 }); await _giftCardService.InsertGiftCardUsageHistoryAsync( new GiftCardUsageHistory { GiftCardId = _giftCard2.Id, UsedWithOrderId = 1, UsedValue = 20 }); await _giftCardService.InsertGiftCardUsageHistoryAsync( new GiftCardUsageHistory { GiftCardId = _giftCard2.Id, UsedWithOrderId = 1, UsedValue = 5 }); var remainingAmount = await _giftCardService.GetGiftCardRemainingAmountAsync(_giftCard2); remainingAmount.Should().Be(45); }
/// <summary> /// Prepare paged gift card list model /// </summary> /// <param name="searchModel">Gift card search model</param> /// <returns> /// A task that represents the asynchronous operation /// The task result contains the gift card list model /// </returns> public virtual async Task <GiftCardListModel> PrepareGiftCardListModelAsync(GiftCardSearchModel searchModel) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } //get parameters to filter gift cards var isActivatedOnly = searchModel.ActivatedId == 0 ? null : searchModel.ActivatedId == 1 ? true : (bool?)false; //get gift cards var giftCards = await _giftCardService.GetAllGiftCardsAsync(isGiftCardActivated : isActivatedOnly, giftCardCouponCode : searchModel.CouponCode, recipientName : searchModel.RecipientName, pageIndex : searchModel.Page - 1, pageSize : searchModel.PageSize); //prepare list model var model = await new GiftCardListModel().PrepareToGridAsync(searchModel, giftCards, () => { return(giftCards.SelectAwait(async giftCard => { //fill in model values from the entity var giftCardModel = giftCard.ToModel <GiftCardModel>(); //convert dates to the user time giftCardModel.CreatedOn = await _dateTimeHelper.ConvertToUserTimeAsync(giftCard.CreatedOnUtc, DateTimeKind.Utc); //fill in additional values (not existing in the entity) var giftAmount = await _giftCardService.GetGiftCardRemainingAmountAsync(giftCard); giftCardModel.RemainingAmountStr = await _priceFormatter.FormatPriceAsync(giftAmount, true, false); giftCardModel.AmountStr = await _priceFormatter.FormatPriceAsync(giftCard.Amount, true, false); return giftCardModel; })); }); return(model); }
public virtual async Task <IActionResult> Edit(GiftCardModel model, bool continueEditing) { if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageGiftCards)) { return(AccessDeniedView()); } //try to get a gift card with the specified id var giftCard = await _giftCardService.GetGiftCardByIdAsync(model.Id); if (giftCard == null) { return(RedirectToAction("List")); } var order = await _orderService.GetOrderByOrderItemAsync(giftCard.PurchasedWithOrderItemId ?? 0); model.PurchasedWithOrderId = order?.Id; model.RemainingAmountStr = await _priceFormatter.FormatPriceAsync(await _giftCardService.GetGiftCardRemainingAmountAsync(giftCard), true, false); model.AmountStr = await _priceFormatter.FormatPriceAsync(giftCard.Amount, true, false); model.CreatedOn = await _dateTimeHelper.ConvertToUserTimeAsync(giftCard.CreatedOnUtc, DateTimeKind.Utc); model.PrimaryStoreCurrencyCode = (await _currencyService.GetCurrencyByIdAsync(_currencySettings.PrimaryStoreCurrencyId)).CurrencyCode; model.PurchasedWithOrderNumber = order?.CustomOrderNumber; if (ModelState.IsValid) { giftCard = model.ToEntity(giftCard); await _giftCardService.UpdateGiftCardAsync(giftCard); //activity log await _customerActivityService.InsertActivityAsync("EditGiftCard", string.Format(await _localizationService.GetResourceAsync("ActivityLog.EditGiftCard"), giftCard.GiftCardCouponCode), giftCard); _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.GiftCards.Updated")); if (!continueEditing) { return(RedirectToAction("List")); } return(RedirectToAction("Edit", new { id = giftCard.Id })); } //prepare model model = await _giftCardModelFactory.PrepareGiftCardModelAsync(model, giftCard, true); //if we got this far, something failed, redisplay form return(View(model)); }