/// <summary>
            /// Issue new gift card.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the gift card information.</returns>
            private static GetGiftCardServiceResponse IssueGiftCard(IssueGiftCardServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (string.IsNullOrWhiteSpace(request.Id))
                {
                    throw new ArgumentException("request.Id is null or empty.", "request");
                }

                if (request.Amount <= 0)
                {
                    throw new ArgumentException("request.Amount has to be positive value.", "request");
                }

                if (string.IsNullOrWhiteSpace(request.CurrencyCode))
                {
                    throw new ArgumentException("request.Id is null or empty.", "request");
                }

                if (!request.CurrencyCode.Equals(request.RequestContext.GetChannelConfiguration().Currency, StringComparison.OrdinalIgnoreCase))
                {
                    throw new PaymentException(
                              PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,
                              string.Format("Gift card cannot be issued in currency different from channel currency. Currency requested: {0}", request.CurrencyCode));
                }

                ValidateNotAlreadyAdded(request.Transaction, request.Id);

                var issueGiftCardRequest = new IssueGiftCardRealtimeRequest(
                    request.Id,
                    request.Amount,
                    request.CurrencyCode,
                    request.RequestContext.GetPrincipal().ChannelId,
                    request.RequestContext.GetTerminal() == null ? string.Empty : request.RequestContext.GetTerminal().TerminalId,
                    request.RequestContext.GetPrincipal().UserId,
                    request.Transaction.Id,
                    string.Empty); // ReceiptId is passed as an empty string in EPOS too at this point.

                GiftCard issuedGiftCard = request.RequestContext.Execute <SingleEntityDataServiceResponse <GiftCard> >(issueGiftCardRequest).Entity;

                return(new GetGiftCardServiceResponse(issuedGiftCard));
            }
            /// <summary>
            /// Issue gift card.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The <see cref="SingleEntityDataServiceResponse{GiftCard}"/> response that contains gift card.</returns>
            private static SingleEntityDataServiceResponse <GiftCard> IssueGiftCard(IssueGiftCardRealtimeRequest request)
            {
                var transactionClient = new TransactionService.TransactionServiceClient(request.RequestContext);

                string cardId;

                transactionClient.IssueGiftCard(request.GiftCardId, request.Amount, request.CurrencyCode, request.ChannelId, request.TerminalId, request.StaffId, request.TransactionId, request.ReceiptId, out cardId);

                GiftCard giftCard = new GiftCard
                {
                    Id = cardId,
                    BalanceCurrencyCode   = request.CurrencyCode,
                    Balance               = request.Amount,
                    CardCurrencyCode      = request.CurrencyCode,
                    BalanceInCardCurrency = request.Amount
                };

                return(new SingleEntityDataServiceResponse <GiftCard>(giftCard));
            }