예제 #1
0
        /// <summary>
        /// Get all transactions By EntryID
        /// </summary>
        /// <param name="entryID">EntryIDr</param>
        /// <returns>TransactionDTO</returns>
        public async Task <TransactionDTO> Get_TransactionsByEntryID(int entryID)
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var transaction = await db.Transactions.FindAsync(entryID);

                    if (transaction != null)
                    {
                        var transactionsDTO = new TransactionDTO
                        {
                            EntryID           = transaction.EntryID,
                            ReferenceNumber   = transaction.ReferenceNumber,
                            B_AcountNumber    = transaction.B_AcountNumber,
                            TransactionAmount = transaction.TransactionAmount,
                            TransactionType   = transaction.TransactionType,
                            Comments          = transaction.Comments,
                            TansactionDate    = transaction.TansactionDate,
                            TransactionCode   = transaction.TransactionCode
                        };
                        return(transactionsDTO);
                    }
                }
            }
            catch (Exception ex)
            {
                TransactionErrorMessage = ex.Message;
            }

            return(null);
        }
예제 #2
0
        public async Task <CustomerAccountDTO> GetCustomerByReferenceOrAccountNumber(string reference_number)
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var customer = await db.CustomerAccount.FirstOrDefaultAsync(c => c.ReferenceNumber == reference_number || c.B_AccountNumber == reference_number);

                    return(new CustomerAccountDTO
                    {
                        Id = customer.Id,
                        ReferenceNumber = customer.ReferenceNumber,
                        B_AccountNumber = customer.B_AccountNumber,
                        B_AccountName = customer.B_AccountName,
                        B_Name = customer.B_Name,
                        MomoNumber = customer.MomoNumber,
                        MomoProvider = customer.MomoProvider,
                        CustomerBalance = customer.CustomerBalance,
                        TelephoneNumber = customer.TelephoneNumber,
                        LastAccessed = customer.LastAccessed,
                        Notes = customer.Notes
                    });
                }
            }
            catch (Exception ex)
            {
                TransactionErrorMessage = ex.Message;
            }

            return(null);
        }
예제 #3
0
        /// <summary>
        /// Get all transactions By Reference or Account Number
        /// </summary>
        /// <param name="reference_account_number">Reference or Account number</param>
        /// <returns>TransactionDTO</returns>
        public async Task <TransactionDTO> Get_TransactionsByReferenceOrAccountNumber(string reference_account_number)
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var transaction = await db.Transactions.FirstOrDefaultAsync(t => t.ReferenceNumber == reference_account_number || t.B_AcountNumber == reference_account_number);

                    if (transaction != null)
                    {
                        var transactionsDTO = new TransactionDTO
                        {
                            EntryID           = transaction.EntryID,
                            ReferenceNumber   = transaction.ReferenceNumber,
                            B_AcountNumber    = transaction.B_AcountNumber,
                            TransactionAmount = transaction.TransactionAmount,
                            TransactionType   = transaction.TransactionType,
                            Comments          = transaction.Comments,
                            TansactionDate    = transaction.TansactionDate,
                            TransactionCode   = transaction.TransactionCode
                        };
                        return(transactionsDTO);
                    }
                }
            }
            catch (Exception ex)
            {
                TransactionErrorMessage = ex.Message;
            }

            return(null);
        }
예제 #4
0
        /// <summary>
        /// Create or Post a transaction
        /// </summary>
        /// <param name="trans">Transaction details</param>
        /// <returns></returns>
        public async Task <string> Create_Transactions(TransactionDTO trans)
        {
            string msg = "";

            try
            {
                using (db = new PROVISIODBContext())
                {
                    //get associated customer accont and update the balance
                    var customer = await db.CustomerAccount.FirstOrDefaultAsync(c => c.ReferenceNumber == trans.ReferenceNumber);

                    if (customer == null)
                    {
                        msg = $"No customer found with Reference Number: {trans.ReferenceNumber}.";
                    }
                    else
                    {
                        var t = await db.Transactions.FindAsync(trans.EntryID);

                        if (t == null)//transaction found
                        {
                            var transaction = new Transactions
                            {
                                EntryID           = trans.EntryID,
                                ReferenceNumber   = trans.ReferenceNumber,
                                B_AcountNumber    = trans.ReferenceNumber,
                                TransactionType   = trans.TransactionType,
                                Comments          = trans.Comments,
                                TransactionAmount = trans.TransactionAmount,
                                TansactionDate    = trans.TansactionDate,
                                TransactionCode   = trans.TransactionCode
                            };

                            db.Transactions.Add(transaction);

                            customer.CustomerBalance = GetNewBalance(customer.CustomerBalance, trans.TransactionAmount, trans.TransactionType);

                            var i = await db.SaveChangesAsync();

                            msg = i > 0 ? "Transaction Saved successfully" : "Something went wrong. Try again later";
                        }
                        else //transaction with found with the EntryID
                        {
                            //update the customer
                            msg = await Update_TransactionsAsync(trans);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }

            return(msg);
        }
예제 #5
0
        /// <summary>
        /// Update an existing transaction, by EntryID,
        /// </summary>
        /// <param name="transaction">Transaxtion object</param>
        /// <returns>Response indicating success or failure</returns>
        public async Task <string> Update_TransactionsAsync(TransactionDTO transaction)
        {
            string msg = "";

            try
            {
                using (db = new PROVISIODBContext())
                {
                    var customer = await db.CustomerAccount.FirstOrDefaultAsync(c => c.ReferenceNumber == transaction.ReferenceNumber);

                    if (customer == null)
                    {
                        msg = $"No customer found with Reference Number: {transaction.ReferenceNumber}.";
                    }
                    else
                    {
                        var t = await db.Transactions.FindAsync(transaction.EntryID);

                        if (t == null)
                        {
                            msg = "No transaction found to Update";
                        }
                        else
                        {
                            t.EntryID           = transaction.EntryID;
                            t.TransactionAmount = transaction.TransactionAmount;
                            t.TansactionDate    = transaction.TansactionDate;
                            t.TransactionCode   = transaction.TransactionCode;
                            t.Comments          = transaction.Comments;
                            t.LastUpdated       = DateTime.Now;

                            customer.CustomerBalance = GetNewBalance(customer.CustomerBalance, transaction.TransactionAmount, transaction.TransactionType);
                        }
                        var i = await db.SaveChangesAsync();

                        msg = i > 0 ? "Transaction Saved successfully" : "Something went wrong. Try again later";
                    }
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }

            return(msg);
        }
예제 #6
0
        /// <summary>
        /// Create a Customer account
        /// </summary>
        /// <param name="customer"></param>
        /// <returns></returns>
        public async Task <string> AddCustomerAccount(CustomerAccountDTO customer)
        {
            if (customer == null)
            {
                return("Please provide a valid customer information.");
            }
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var IsExistingCustomer = db.CustomerAccount.Any(c => c.ReferenceNumber == customer.ReferenceNumber || c.B_AccountNumber == customer.B_AccountNumber || c.MomoNumber == customer.MomoNumber);
                    if (IsExistingCustomer)
                    {
                        TransactionErrorMessage = "There's an existing customer with the same Reference/Account number or Momo number";
                        return(null);
                    }

                    var new_customer = new CustomerAccount
                    {
                        Id = customer.Id,
                        ReferenceNumber = customer.ReferenceNumber,
                        B_AccountNumber = customer.B_AccountNumber,
                        B_AccountName   = customer.B_AccountName,
                        B_Name          = customer.B_Name,
                        MomoNumber      = customer.MomoNumber,
                        MomoProvider    = customer.MomoProvider,
                        CustomerBalance = customer.CustomerBalance,
                        TelephoneNumber = customer.TelephoneNumber,
                        LastAccessed    = customer.LastAccessed,
                        Notes           = customer.Notes
                    };

                    db.CustomerAccount.Add(new_customer);

                    var i = await db.SaveChangesAsync();

                    return(i > 0 ? "Account Created Successfully" : "Unale to Create Account, please contact API provider.");
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
예제 #7
0
        /// <summary>
        /// Get all customers accounts
        /// </summary>
        /// <returns></returns>
        public IEnumerable <CustomerAccountDTO> GetAll_CustomersAccounts()
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var customersDTO = new List <CustomerAccountDTO>()
                    ;
                    var customers = db.CustomerAccount.ToList();

                    if (customers != null && customers.Count > 0)
                    {
                        foreach (var customer in customers)
                        {
                            var _customer = new CustomerAccountDTO
                            {
                                Id = customer.Id,
                                ReferenceNumber = customer.ReferenceNumber,
                                B_AccountNumber = customer.B_AccountNumber,
                                B_AccountName   = customer.B_AccountName,
                                B_Name          = customer.B_Name,
                                MomoNumber      = customer.MomoNumber,
                                MomoProvider    = customer.MomoProvider,
                                CustomerBalance = customer.CustomerBalance,
                                TelephoneNumber = customer.TelephoneNumber,
                                LastAccessed    = customer.LastAccessed,
                                Notes           = customer.Notes
                            };
                            customersDTO.Add(_customer);
                        }
                    }
                    return(customersDTO);
                }
            }
            catch (Exception ex)
            {
                TransactionErrorMessage = ex.Message;
                return(null);
            }
        }
예제 #8
0
        /// <summary>
        /// Get all transactions accounts
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <TransactionDTO> > GetAll_TransactionsAsync()
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var transactionsDTO = new List <TransactionDTO>();

                    var _transactionsList = await db.Transactions.ToListAsync();

                    if (_transactionsList != null && _transactionsList.Count > 0)
                    {
                        foreach (var transaction in _transactionsList)
                        {
                            var _transaction = new TransactionDTO
                            {
                                EntryID           = transaction.EntryID,
                                ReferenceNumber   = transaction.ReferenceNumber,
                                B_AcountNumber    = transaction.B_AcountNumber,
                                TransactionAmount = transaction.TransactionAmount,
                                TransactionType   = transaction.TransactionType,
                                Comments          = transaction.Comments,
                                TansactionDate    = transaction.TansactionDate,
                                TransactionCode   = transaction.TransactionCode
                            };
                            transactionsDTO.Add(_transaction);
                        }
                    }

                    return(transactionsDTO);
                }
            }
            catch (Exception ex)
            {
                TransactionErrorMessage = ex.Message;
                return(null);
            }
        }
예제 #9
0
        public async Task <string> DeleteTansaction(int entryID)
        {
            try
            {
                using (db = new PROVISIODBContext())
                {
                    var transaction = await db.Transactions.FindAsync(entryID);

                    if (transaction == null)
                    {
                        return($"This transaction could not be found to delete.");
                    }

                    db.Transactions.Remove(transaction);
                    var i = await db.SaveChangesAsync();

                    return(i > 0 ? "Transaction deleted successfully" : "Something went wrong, try again later.");
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }