Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
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);
        }
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 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;
 }