/// <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"); } switch (request.TenderLine.Status) { case TenderLineStatus.PendingCommit: IRequestHandler paymentService = ResolvePaymentService(request.RequestContext, request.GetType(), request.TenderLine.TenderTypeId); return(request.RequestContext.Runtime.Execute <CapturePaymentServiceResponse>(request, request.RequestContext, paymentService)); case TenderLineStatus.Committed: return(new CapturePaymentServiceResponse(request.TenderLine)); case TenderLineStatus.Historical: case TenderLineStatus.Voided: // for tender lines that are voided or historical do nothing and simple return same tender line. return(new CapturePaymentServiceResponse(request.TenderLine)); case TenderLineStatus.NotProcessed: case TenderLineStatus.None: throw new DataValidationException( DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidRequest, string.Format("Tender line in status {0} cannot be captured.", request.TenderLine.Status)); default: throw new DataValidationException( DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidRequest, string.Format("Tender line in status {0} is not supported.", request.TenderLine.Status)); } }
/// <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)); }
/// <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.RequestContext == null) { throw new ArgumentException("request.RequestContext cannot be null."); } // Post redeem type reward point trans to HQ. var redeemLoyaltyRewardPointServiceRequest = new PostLoyaltyCardRewardPointRealtimeRequest(LoyaltyRewardPointEntryType.Redeem, request.Transaction); request.RequestContext.Execute <NullResponse>(redeemLoyaltyRewardPointServiceRequest); var refundLoyaltyRewardPointServiceRequest = new PostLoyaltyCardRewardPointRealtimeRequest(LoyaltyRewardPointEntryType.Refund, request.Transaction); request.RequestContext.Execute <NullResponse>(refundLoyaltyRewardPointServiceRequest); request.TenderLine.Status = TenderLineStatus.Committed; request.TenderLine.IsVoidable = false; return(new CapturePaymentServiceResponse(request.TenderLine)); }
/// <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"); } var payUsingGiftCardRequest = new PayGiftCardRealtimeRequest( request.TenderLine.GiftCardId, request.TenderLine.AmountInTenderedCurrency, // amount in gift card currency request.TenderLine.Currency, // gift card currency code request.RequestContext.GetPrincipal().ChannelId, request.RequestContext.GetTerminal() == null ? string.Empty : request.RequestContext.GetTerminal().TerminalId, request.RequestContext.GetPrincipal().UserId ?? string.Empty, request.Transaction.Id, request.Transaction.ReceiptId ?? string.Empty); request.RequestContext.Execute <NullResponse>(payUsingGiftCardRequest); // To match ePOS behavior (and not break statement calculation and posting) updating tender // line to respresent payment done in channel currency. request.TenderLine.Currency = request.RequestContext.GetChannelConfiguration().Currency; request.TenderLine.AmountInTenderedCurrency = request.TenderLine.Amount; request.TenderLine.ExchangeRate = 1.0m; request.TenderLine.Status = TenderLineStatus.Committed; request.TenderLine.IsVoidable = true; return(new CapturePaymentServiceResponse(request.TenderLine)); }