Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }