예제 #1
0
        public TransactionResult AgilePayment(string customerId, string title, TransactionDTO transaction, string language)
        {
            var transactionResult = new TransactionResult(false, "");

            IHasBalances debitProduct = helper.GetProduct(transaction.DebitProductType, transaction.DebitProductId, out transactionResult, language);

            transactionResult = transferServices.CheckDebitBalance(debitProduct, transaction.Amount, language);
            IHasInstallment productForPayment = (IHasInstallment)helper.GetProduct(transaction.CreditProductType, transaction.CreditProductId, out transactionResult, language);

            if (!transactionResult.HasError)
            {
                transactionResult = CheckDebt(productForPayment, transaction.Amount, language);
                if (!transactionResult.HasError)
                {
                    Payment(debitProduct, productForPayment, transaction.Amount, transaction.Expenses);
                    transactionResult = helper.UpdateProduct(transaction.CreditProductType, (IHasBalances)productForPayment, language);
                    if (!transactionResult.HasError)
                    {
                        transactionResult = helper.UpdateProduct(transaction.DebitProductType, debitProduct, language);
                        if (!transactionResult.HasError)
                        {
                            transactionServices.LogTransaction(customerId, title, debitProduct.AvailableBalance, transaction);
                        }
                    }
                }
            }

            return(transactionResult);
        }
예제 #2
0
        public TransactionResult CheckDebt(IHasInstallment productForPayment, decimal paymentAmount, string language)
        {
            var transactionResult = new TransactionResult(false, "");

            if ((productForPayment.NextInstallmentAmount < paymentAmount) && (productForPayment.Debt < paymentAmount))
            {
                string errorMessage = language == "greek" ? "Το ποσό πληρωμής είναι μεγαλύτερο από το σύνολο οφειλών" : "The payment amount is bigger than the total debt";
                transactionResult = new TransactionResult(true, errorMessage);
            }
            else if (productForPayment.NextInstallmentAmount < paymentAmount)
            {
                string errorMessage = language == "greek" ? "Το ποσό πληρωμής είναι μεγαλύτερο από την τρέχων οφειλή" : "The payment amount is bigger than the current installment";
                transactionResult = new TransactionResult(true, errorMessage);
            }

            return(transactionResult);
        }
예제 #3
0
 private void PayDebt(IHasInstallment productForPayment, decimal paymentAmount)
 {
     if (productForPayment.NextInstallmentAmount >= paymentAmount)
     {
         productForPayment.NextInstallmentAmount -= paymentAmount;
         productForPayment.Debt -= paymentAmount;
     }
     else
     {
         productForPayment.NextInstallmentAmount = 0;
         productForPayment.Debt -= paymentAmount;
         if (productForPayment is Loan)
         {
             (productForPayment as Loan).RepaymentBalance -= paymentAmount;
         }
     }
 }
예제 #4
0
 public void Payment(IHasBalances debitProduct, IHasInstallment productForPayment, decimal paymentAmount, decimal expenses)
 {
     transferServices.DebitProduct(debitProduct, paymentAmount, expenses);
     PayDebt(productForPayment, paymentAmount);
 }