示例#1
0
            /// <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));
            }