/// <summary>
            /// Cancels the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the canceled tender line.</returns>
            private static VoidPaymentServiceResponse CancelPayment(VoidPaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine == null)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "request.TenderLine is null.");
                }

                if (request.TenderLine.Amount <= 0)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "Issued credit memo cannot be voided.");
                }

                string orgUnitNumber = request.RequestContext.GetOrgUnit().OrgUnitNumber;

                var unlockCreditMemoRealtimeRequest = new UnlockCreditMemoRealtimeRequest(
                    request.TenderLine.CreditMemoId,
                    orgUnitNumber,
                    request.RequestContext.GetTerminal().TerminalId);

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

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

                return(new VoidPaymentServiceResponse(request.TenderLine));
            }
            /// <summary>
            /// Cancels the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the canceled tender line.</returns>
            private static VoidPaymentServiceResponse CancelPayment(VoidPaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine == null)
                {
                    throw new ArgumentException("request.TenderLine cannot be null.");
                }

                if (request.RequestContext == null)
                {
                    throw new ArgumentException("request.RequestContext cannot be null.");
                }

                if (request.Transaction == null)
                {
                    throw new ArgumentException("request.Transaction cannot be null.");
                }

                // Remove redeem reward point lines
                if (request.Transaction.LoyaltyRewardPointLines != null)
                {
                    IEnumerable <LoyaltyRewardPointLine> otherLines = request.Transaction.LoyaltyRewardPointLines.Where(
                        l => (l.EntryType != LoyaltyRewardPointEntryType.Redeem && l.EntryType != LoyaltyRewardPointEntryType.Refund));
                    request.Transaction.LoyaltyRewardPointLines = new Collection <LoyaltyRewardPointLine>(otherLines.ToList());
                }

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

                return(new VoidPaymentServiceResponse(request.TenderLine));
            }
            /// <summary>
            /// Cancels the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the canceled tender line.</returns>
            private static VoidPaymentServiceResponse CancelPayment(VoidPaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (!request.TenderLine.IsVoidable)
                {
                    throw new PaymentException(
                              PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_TenderLineCannotBeVoided,
                              string.Format("Tender line {0} cannot be voided.", request.TenderLine.TenderLineId));
                }

                IRequestHandler paymentService = ResolvePaymentService(request.RequestContext, request.GetType(), request.TenderLine.TenderTypeId);

                return(request.RequestContext.Runtime.Execute <VoidPaymentServiceResponse>(request, request.RequestContext, paymentService));
            }
Beispiel #4
0
            /// <summary>
            /// Cancels the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the canceled tender line.</returns>
            private static VoidPaymentServiceResponse CancelPayment(VoidPaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine == null)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "request.TenderLine is null.");
                }

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

                // For customer account payments, there is no extra step needed.
                return(new VoidPaymentServiceResponse(request.TenderLine));
            }
            /// <summary>
            /// Cancels the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the canceled tender line.</returns>
            private static VoidPaymentServiceResponse CancelPayment(VoidPaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine == null)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "request.TenderLine is null.");
                }

                var voidGiftCardPayment = new VoidGiftCardPaymentRealtimeRequest(
                    request.TenderLine.GiftCardId,
                    request.RequestContext.GetPrincipal().ChannelId,
                    request.RequestContext.GetTerminal() == null ? string.Empty : request.RequestContext.GetTerminal().TerminalId);

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

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

                return(new VoidPaymentServiceResponse(request.TenderLine));
            }