/// <summary> /// Get the gift card. /// </summary> /// <param name="request">The request.</param> /// <returns>A response containing the gift card information.</returns> private static GetGiftCardServiceResponse GetGiftCard(GetGiftCardServiceRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if (string.IsNullOrWhiteSpace(request.GiftCardId)) { throw new ArgumentException("request.Id is null or empty.", "request"); } var requestGetGiftCardBalance = new GetGiftCardRealtimeRequest(request.GiftCardId); GiftCard card = request.RequestContext.Execute <SingleEntityDataServiceResponse <GiftCard> >(requestGetGiftCardBalance).Entity; GetCurrencyValueServiceResponse convertBalanceToChannelCurrencyResponse = FromGiftCardCurrency(request.RequestContext, card.BalanceInCardCurrency, card.CardCurrencyCode); GiftCard giftCard = new GiftCard { Id = request.GiftCardId, BalanceCurrencyCode = convertBalanceToChannelCurrencyResponse.ToCurrencyCode, Balance = convertBalanceToChannelCurrencyResponse.RoundedConvertedAmount, CardCurrencyCode = card.CardCurrencyCode, BalanceInCardCurrency = card.BalanceInCardCurrency }; return(new GetGiftCardServiceResponse(giftCard)); }
/// <summary> /// Executes the workflow to get scan result. /// </summary> /// <param name="request">Instance of <see cref="GetScanResultRequest"/>.</param> /// <returns>Instance of <see cref="GetScanResultResponse"/>.</returns> protected override GetScanResultResponse Process(GetScanResultRequest request) { ThrowIf.Null(request, "request"); var getBarcodeRequest = new GetBarcodeRequest(request.ScanInfo); var getBarcodeResponse = this.Context.Runtime.Execute <GetBarcodeResponse>(getBarcodeRequest, this.Context); Barcode barcode = getBarcodeResponse.Barcode; BarcodeMaskType maskType = barcode == null ? BarcodeMaskType.None : barcode.Mask.MaskType; ScanResult result = new ScanResult(request.ScanInfo.ScannedText) { Barcode = barcode, MaskType = maskType }; switch (maskType) { case BarcodeMaskType.Item: { result.Product = this.GetSingleProductByItemId(barcode.ItemBarcode.ItemId, barcode.ItemBarcode.InventoryDimensionId); break; } case BarcodeMaskType.Customer: { result.Customer = this.GetCustomerById(barcode.CustomerId); break; } case BarcodeMaskType.DiscountCode: { // ScanResult.Barcode already contains discount information so no additional lookup required. break; } case BarcodeMaskType.LoyaltyCard: { result.LoyaltyCard = this.GetLoyaltyCardById(barcode.LoyaltyCardNumber); result.Customer = this.GetCustomerByLoyaltyCard(result.LoyaltyCard); break; } case BarcodeMaskType.GiftCard: { var getGiftCardRequest = new GetGiftCardServiceRequest(barcode.GiftCardNumber); var getGiftCardResponse = this.Context.Execute <GetGiftCardServiceResponse>(getGiftCardRequest); result.GiftCard = getGiftCardResponse.GiftCard; break; } case BarcodeMaskType.None: { // If barcode is not found try to find entities by id with following priority: Product -> Customer -> Loyalty card. result.Product = this.GetSingleProductByItemId(request.ScanInfo.ScannedText, null); if (result.Product != null) { result.MaskType = BarcodeMaskType.Item; break; } result.Customer = this.GetCustomerById(request.ScanInfo.ScannedText); if (result.Customer != null) { result.MaskType = BarcodeMaskType.Customer; break; } result.LoyaltyCard = this.GetLoyaltyCardById(request.ScanInfo.ScannedText); if (result.LoyaltyCard != null) { result.MaskType = BarcodeMaskType.LoyaltyCard; result.Customer = this.GetCustomerByLoyaltyCard(result.LoyaltyCard); } break; } default: { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_UnSupportedType, string.Format(CultureInfo.CurrentUICulture, "The barcode type : {0} is not supported to add to transaction", maskType)); } } return(new GetScanResultResponse(result)); }