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); }
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); }
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; } } }
public void Payment(IHasBalances debitProduct, IHasInstallment productForPayment, decimal paymentAmount, decimal expenses) { transferServices.DebitProduct(debitProduct, paymentAmount, expenses); PayDebt(productForPayment, paymentAmount); }