/// <summary>
            /// Captures the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the captured tender line.</returns>
            private static CapturePaymentServiceResponse CapturePayment(CapturePaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine.Amount <= 0)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "Only positive amount can be paid by credit memo.");
                }

                if (string.IsNullOrWhiteSpace(request.TenderLine.CreditMemoId))
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "Credit memo identifier is not specified.");
                }

                var payCreditMemoRealtimeRequest = new PayCreditMemoRealtimeRequest(
                    request.TenderLine.CreditMemoId,
                    request.RequestContext.GetPrincipal().ChannelId.ToString(CultureInfo.InvariantCulture),
                    request.RequestContext.GetPrincipal().TerminalId.ToString(CultureInfo.InvariantCulture),
                    request.RequestContext.GetPrincipal().UserId,
                    request.Transaction.Id,
                    request.Transaction.ReceiptId,
                    request.TenderLine.Currency,
                    request.TenderLine.Amount);

                request.RequestContext.Execute <NullResponse>(payCreditMemoRealtimeRequest);

                request.TenderLine.Status     = TenderLineStatus.Committed;
                request.TenderLine.IsVoidable = false;

                return(new CapturePaymentServiceResponse(request.TenderLine));
            }
Esempio n. 2
0
            /// <summary>
            /// Pay by credit memo.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The <see cref="NullResponse"/> response.</returns>
            private static NullResponse PayCreditMemo(PayCreditMemoRealtimeRequest request)
            {
                var transactionClient = new TransactionService.TransactionServiceClient(request.RequestContext);

                transactionClient.PayCreditMemo(request.CreditMemoId, request.StoreId, request.TerminalId, request.StaffId, request.TransactionId, request.ReceiptId, request.CurrencyCode, request.Amount);

                return(new NullResponse());
            }