public decimal Balance(BaseBalanceDto dto) { try { var parameter = (RefundOriginalPaymentDto)dto; var amountToRefundPending = parameter.AmountToRefund; var amountRefunded = decimal.Zero; var validPayments = GetValidPayments(parameter.Booking); foreach (var validPayment in validPayments) { if (amountToRefundPending == decimal.Zero) { break; } var amountToRefundInCurrentPayment = GetAmountToRefundInCurrentPayment(validPayment.CollectedAmount, ref amountToRefundPending); amountRefunded += TryAddPayment(parameter, amountToRefundInCurrentPayment, validPayment); } if (amountRefunded < parameter.AmountToRefund) { var amountPendingTransfer = parameter.AmountToRefund - amountRefunded; _feeService.SellServiceFee(parameter.Booking.CurrencyCode, _configuration.CrmPendingTransferFeeCode, parameter.Signature, amountPendingTransfer); _bookingCommiter.BookingCommit(parameter.Booking.RecordLocator, $"{CommentConst}, Pending to refund.", string.Empty, parameter.Signature); var amountPendingTransferRounded = Math.Abs(decimal.Round(amountPendingTransfer, 2, MidpointRounding.ToEven)); throw new PendingTransferException($"the booking has a pending transfer <<{amountPendingTransferRounded}>>.", amountRefunded); } return(amountRefunded); } catch (PendingTransferException ex) { var errorMessage = $"Error in: {GetType().FullName}, method: RefundOriginalPayment, exception: PendingTransferException, message: {ex.Message}."; throw new PendingTransferException(errorMessage, ex.AmountRefounded); } catch (Exception ex) { var errorMessage = $"Error in: {GetType().FullName}, method: RefundOriginalPayment, exception: RefundOriginalPaymentException, message: {ex.Message}."; throw new RefundOriginalPaymentException(errorMessage); } }
public decimal Balance(BaseBalanceDto dto) { var parameter = (AgencyPaymentDto)dto; var balanceDueRound = decimal.Round(parameter.BalanceDue, 2, MidpointRounding.ToEven); AddPayment(new PaymentToBookingDto() { PaymentMethodType = PaymentMethodType.AgencyAccount, AccountNumber = parameter.AccountNumber, AccountTransactionCode = string.Empty, BalanceDue = parameter.BalanceDue, CurrencyCode = parameter.CurrencyCode, PaymentText = PaymentTextConst, Signature = parameter.Signature }); return(balanceDueRound); }
public decimal Balance(BaseBalanceDto dto) { var parameter = (CreditShellPaymentDto)dto; var totalAmount = 0M; var balanceDueRound = decimal.Round(parameter.BalanceDue, 2, MidpointRounding.ToEven); AddPayment(new PaymentToBookingDto() { PaymentMethodType = PaymentMethodType.CustomerAccount, AccountNumber = string.Empty, AccountTransactionCode = parameter.AccountTransactionCode, BalanceDue = parameter.BalanceDue, CurrencyCode = parameter.BookingCurrencyCode, PaymentText = PaymentTextConst, Signature = parameter.Signature }); totalAmount += balanceDueRound; if (parameter.RefundValue > 0M) { decimal agencyPaymentBalanceDue; string currencyCode; if (parameter.RefundType.Equals(IncrementTypeConst.Cash)) { agencyPaymentBalanceDue = parameter.RefundValue * -1; currencyCode = parameter.RefundCurrencyCode; } else { agencyPaymentBalanceDue = parameter.BalanceDue * (parameter.RefundValue / 100); currencyCode = parameter.BookingCurrencyCode; } var agencyPaymentBalanceDueRound = decimal.Round(agencyPaymentBalanceDue, 2, MidpointRounding.ToEven); AddPayment(new PaymentToBookingDto() { PaymentMethodType = PaymentMethodType.AgencyAccount, AccountNumber = AccountNumberConst.Increment, AccountTransactionCode = String.Empty, BalanceDue = agencyPaymentBalanceDueRound, CurrencyCode = currencyCode, PaymentText = PaymentTextConst, Signature = parameter.Signature }); totalAmount += agencyPaymentBalanceDueRound; AddPayment(new PaymentToBookingDto() { PaymentMethodType = PaymentMethodType.CustomerAccount, AccountNumber = string.Empty, AccountTransactionCode = parameter.IncrementAccountTransactionCode, BalanceDue = agencyPaymentBalanceDueRound, CurrencyCode = parameter.BookingCurrencyCode, PaymentText = PaymentTextConst, Signature = parameter.Signature }); } return(totalAmount); }