public TransactionResult PrepaidCardLoad(string customerId, TransactionDTO transaction, string language) { TransactionResult transactionResult = new TransactionResult(false, ""); IHasBalances debitProduct = helper.GetProduct(transaction.DebitProductType, transaction.DebitProductId, out transactionResult, language); transactionResult = transferServices.CheckDebitBalance(debitProduct, transaction.Amount, language); if (!transactionResult.HasError) { var prepaidCard = cardServices.GetPrePaidCardById(transaction.CreditProductId, out transactionResult, language); if (!transactionResult.HasError) { transferServices.DebitProduct(debitProduct, transaction.Amount, transaction.Expenses); LoadPrepaidCard(prepaidCard, transaction.Amount); transactionResult = helper.UpdateProduct(transaction.DebitProductType, debitProduct, language); if (!transactionResult.HasError) { transactionResult = cardServices.UpdatePrepaidCard(prepaidCard, language); if (!transactionResult.HasError) { transactionServices.LogTransaction(customerId, "ΦΟΡΤΙΣΗ ΠΡΟΠΛ. ΚΑΡΤΑΣ", debitProduct.AvailableBalance, transaction); } } } } return(transactionResult); }
internal IHasBalances GetProduct(string debitProductType, string debitProduct, out TransactionResult transactionResult, string language) { IHasBalances product = null; transactionResult = new TransactionResult(false, ""); switch (debitProductType) { case "isAccount": product = accountServices.GetAccountById(debitProduct, out transactionResult, language); break; case "isCreditCard": product = cardServices.GetCreditCardById(debitProduct, out transactionResult, language); break; case "isPrepaidCard": product = cardServices.GetPrePaidCardById(debitProduct, out transactionResult, language); break; case "isLoan": product = loanServices.GetLoanById(debitProduct, out transactionResult, language); break; } return(product); }
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 Transfer(string customerId, TransactionDTO transaction, string language) { var transactionResult = new TransactionResult(false, ""); IHasBalances debitProduct = helper.GetProduct(transaction.DebitProductType, transaction.DebitProductId, out transactionResult, language); transactionResult = CheckDebitBalance(debitProduct, transaction.Amount, language); if (!transactionResult.HasError) { DebitProduct(debitProduct, transaction.Amount, transaction.Expenses); transactionResult = helper.UpdateProduct(transaction.DebitProductType, debitProduct, language); if (!transactionResult.HasError && transaction.Bank == "AGILGRAA") { Account creditProduct = accountServices.GetAccountById(transaction.CreditProductId, out transactionResult, language); if (!transactionResult.HasError) { CreditProduct(creditProduct, transaction.Amount); transactionResult = accountServices.UpdateAccount(creditProduct, language); } } if (!transactionResult.HasError) { transactionResult = helper.UpdateProduct(transaction.DebitProductType, debitProduct, language); if (!transactionResult.HasError) { transactionServices.LogTransaction(customerId, "ΜΕΤΑΦΟΡΑ ΧΡΗΜΑΤΩΝ", debitProduct.AvailableBalance, transaction); } } } return(transactionResult); }
public TransactionResult CheckDebitBalance(IHasBalances debitProduct, decimal debitAmount, string language) { TransactionResult transactionResult = new TransactionResult(false, ""); if (debitProduct.AvailableBalance <= 0 || debitProduct.AvailableBalance < debitAmount) { transactionResult.HasError = true; transactionResult.Message = language == "greek" ? "Λάθος υπόλοιπο λογαριασμού" : "Incorrect account balance"; } return(transactionResult); }
public TransactionResult ThirdPartyPayment(string customerId, 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); if (!transactionResult.HasError) { transferServices.DebitProduct(debitProduct, transaction.Amount, transaction.Expenses); transactionResult = helper.UpdateProduct(transaction.DebitProductType, debitProduct, language); if (!transactionResult.HasError) { transactionServices.LogTransaction(customerId, "ΗΛΕΚΤΡΟΝΙΚΗ ΠΛΗΡΩΜΗ", debitProduct.AvailableBalance, transaction); } } return(transactionResult); }
internal TransactionResult UpdateProduct(string debitProductType, IHasBalances debitProduct, string language) { var transactionResult = new TransactionResult(false, ""); try { switch (debitProductType) { case "isAccount": try { accountServices.UpdateAccount(debitProduct as Account, language); } catch (Exception) { string errorMessage = language == "greek" ? "Λάθος κατά την χρέωση του λογαριασμού" : "There was a problem during the debit of the account"; throw new Exception(errorMessage); } break; case "isCreditCard": try { cardServices.UpdateCreditCard(debitProduct as CreditCard); } catch (Exception) { string errorMessage = language == "greek" ? "Λάθος κατά την χρέωση της πιστωτικής κάρτας" : "There was a problem during the debit of the credit card"; throw new Exception(errorMessage); } break; case "isPrepaidCard": try { cardServices.UpdatePrepaidCard(debitProduct as PrepaidCard, language); } catch (Exception) { string errorMessage = language == "greek" ? "Λάθος κατά την χρέωση της προπληρωμένης κάρτας" : "There was a problem during the debit of the prepaid card"; throw new Exception(errorMessage); } break; case "isLoan": try { loanServices.LoanUpdate(debitProduct as Loan); } catch (Exception) { string errorMessage = language == "greek" ? "Λάθος κατά την χρέωση του δανείου" : "There was a problem during the debit of the loan"; throw new Exception(errorMessage); } break; } } catch (Exception ex) { transactionResult.HasError = true; transactionResult.Message = ex.Message; } return(transactionResult); }
public void Payment(IHasBalances debitProduct, IHasInstallment productForPayment, decimal paymentAmount, decimal expenses) { transferServices.DebitProduct(debitProduct, paymentAmount, expenses); PayDebt(productForPayment, paymentAmount); }
public void CreditProduct(IHasBalances creditProduct, decimal amount) { creditProduct.AvailableBalance += amount; creditProduct.LedgerBalance += amount; }
public void DebitProduct(IHasBalances debitProduct, decimal amount, decimal expenses) { debitProduct.AvailableBalance -= amount + expenses; debitProduct.LedgerBalance -= amount + expenses; }