Ejemplo n.º 1
0
        public Result <Transaction> Register(int accountID, RegisterTransactionOptions options)
        {
            var result = _account.GetAccountbyID(accountID);

            if (result.Code != ResultCodes.Success)
            {
                return new Result <Transaction>()
                       {
                           Code    = ResultCodes.BadRequest,
                           Message = $"Could not find Account ID {accountID}"
                       }
            }
            ;

            // check account balance. Must be >= options.Type * options.Amount
            if (options.Type == Model.Types.TransactionType.Credit && result.Data.Balance + (int)options.Type * options.Amount < 0)
            {
                return new Result <Transaction>()
                       {
                           Code    = ResultCodes.BadRequest,
                           Message = $"Not enough balance for Account ID {accountID} !"
                       }
            }
            ;

            var transaction = new Transaction()
            {
                Amount     = options.Amount,
                Type       = options.Type,
                TransDescr = options.TransDescr
            };

            // update account balance
            result.Data.Balance += (int)options.Type * options.Amount;
            result.Data.Transactions.Add(transaction);

            try
            {
                _dBContext.SaveChanges();

                return(new Result <Transaction>()
                {
                    Code = ResultCodes.Success,
                    Message = $"New Transaction amount {options.Amount} {((options.Type == Model.Types.TransactionType.Credit) ? "Deducted" : "Added")} for Acount {result.Data.AccountNumber}",
                    Data = transaction
                });
            }
            catch (Exception ex)
            {
                return(new Result <Transaction>()
                {
                    Code = ResultCodes.InternalServerError,
                    Message = $"Fail to save Transaction for account ID {accountID}. Details: {ex.Message}"
                });
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> RegisterCards([FromBody] RegisterTransactionOptions options)
        {
            var cards = await _transactions.RegisterTransactionAsync(options);

            if (cards.Code != ResultCodes.Success)
            {
                return(StatusCode(cards.Code, cards.Message));
            }

            return(Json(cards));
        }
Ejemplo n.º 3
0
        public async void Test_RegisterTranactionAsync()
        {
            var options = new RegisterTransactionOptions()
            {
                Type   = TransactionType.Credit,
                Amount = 2600
            };

            var transaction = await _transaction.RegisterTranactionAsync(3, options);

            Assert.NotNull(transaction);
        }
Ejemplo n.º 4
0
        public async void Test_RegisterTransactionAsync()
        {
            var options = new RegisterTransactionOptions()
            {
                cardsId   = 1,
                TransType = TransactionType.CardPresent,
                Amount    = 300
            };

            var transaction = await _transaction.RegisterTransactionAsync(options);

            Assert.NotNull(transaction);
        }
Ejemplo n.º 5
0
        public void Add_New_Transaction_With_DI()
        {
            var options = new RegisterTransactionOptions()
            {
                Amount     = 1500.0m,
                TransDescr = "Salary Payment",
                Type       = TransactionType.Debit
            };

            var transaction = _transaction.Register(5, options);

            Assert.NotNull(transaction);
        }
Ejemplo n.º 6
0
        public async Task <Result <Transaction> > RegisterTransactionAsync(RegisterTransactionOptions options)
        {
            if (options.Amount <= 0)
            {
                return(new Result <Transaction>()
                {
                    Code = ResultCodes.BadRequest,
                    Message = $"Prepei na doseis poso megalirerro tou midenos."
                });
            }


            var cards = (await _cards.GetCardsByIdAsync(options.cardsId)).Data;//fernoume tin karta kai ta transaction(limits) ola (incluce)


            if (cards != null)//an i karta iparxei
            {
                DateTime d            = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                string   transDateNow = d.ToString();


                //pernoume ta simerina transactions (limits) kai eCommerce kai cardPresent, ola (to poli mexri dio na mas ferei)
                var transToday = cards.Transactions
                                 .Where(t => t.Created == transDateNow)
                                 .ToList();


                if (cards.Balance > options.Amount)
                {
                    if (options.TransType == TransactionType.CardPresent)
                    {
                        var CardPresentToday = transToday.Where(t => t.Type == TransactionType.CardPresent)//fere tin simerini(transToday vl pio pano) eggrafi  me ton tipo cardPresent
                                               .SingleOrDefault();

                        if (CardPresentToday == null)
                        {
                            var t = new Transaction()
                            {
                                Type   = options.TransType,
                                Amount = options.Amount + CardPresentToday.Amount
                            };
                            cards.Transactions.Add(t);
                            cards.Balance = cards.Balance - options.Amount;
                            _dbContext.Update(t);
                            await _dbContext.SaveChangesAsync();

                            return(new Result <Transaction>()
                            {
                                Code = ResultCodes.Success,
                                Data = t
                            });
                        }
                        else//an idi simera exei ginei mia cardPresent
                        {
                            if (CardPresentToday.Amount + options.Amount <= 1500)
                            {
                                var t = new Transaction()
                                {
                                    Type   = options.TransType,
                                    Amount = CardPresentToday.Amount + options.Amount
                                };
                                CardPresentToday = t;
                                cards.Balance    = cards.Balance - options.Amount;
                                await _dbContext.SaveChangesAsync();

                                return(new Result <Transaction>()
                                {
                                    Code = ResultCodes.Success,
                                    Data = t
                                });
                            }
                            else
                            {
                                return(new Result <Transaction>()
                                {
                                    Code = ResultCodes.BadRequest,
                                    Message = $"Me tin agora afti ksepernas to orio tou cardPresent pou einai 1500"
                                });
                            }
                        }
                    }
                    else if (options.TransType == TransactionType.CardPresent)
                    {
                        var ECommerceToday = transToday.Where(t => t.Type == TransactionType.ECommerce)
                                             .SingleOrDefault();

                        if (ECommerceToday == null)
                        {
                            var t = new Transaction()
                            {
                                Type   = options.TransType,
                                Amount = options.Amount + ECommerceToday.Amount
                            };
                            cards.Transactions.Add(t);
                            cards.Balance = cards.Balance - options.Amount;
                            _dbContext.Update(t);
                            await _dbContext.SaveChangesAsync();

                            return(new Result <Transaction>()
                            {
                                Code = ResultCodes.Success,
                                Data = t
                            });
                        }
                        else
                        {
                            if (ECommerceToday.Amount + options.Amount <= 500)
                            {
                                var t = new Transaction()
                                {
                                    Type   = options.TransType,
                                    Amount = ECommerceToday.Amount + options.Amount
                                };
                                ECommerceToday = t;
                                cards.Balance  = cards.Balance - options.Amount;
                                await _dbContext.SaveChangesAsync();

                                return(new Result <Transaction>()
                                {
                                    Code = ResultCodes.Success,
                                    Data = t
                                });
                            }
                            else
                            {
                                return(new Result <Transaction>()
                                {
                                    Code = ResultCodes.BadRequest,
                                    Message = $"Me tin agora afti ksepernas to orio tou cardPresent pou einai 1500"
                                });
                            }
                        }
                    }
                    else
                    {
                        return(new Result <Transaction>()
                        {
                            Code = ResultCodes.BadRequest,
                            Message = $"Kati den epelekses kala me to tipo tis kinisis"
                        });
                    }
                }
                else
                {
                    return(new Result <Transaction>()
                    {
                        Code = ResultCodes.BadRequest,
                        Message = $"To poso agoras {options.Amount} ksepernaei to poso tou ipoloipou tis kartas {cards.Balance}"
                    });
                }
            }
            else
            {
                return(new Result <Transaction>()
                {
                    Code = ResultCodes.BadRequest,
                    Message = $"Den iparxei i karta me kodiko {options.cardsId}"
                });
            }
        }
Ejemplo n.º 7
0
        public async Task <Result <Transaction> > RegisterTranactionAsync(int accountId, RegisterTransactionOptions options)
        {
            if (options.Amount < 0)
            {
                return new Result <Transaction>()
                       {
                           Code    = ResultCodes.BadRequest,
                           Message = $"To poso pou edoses einai < 0."
                       }
            }
            ;

            var account = (await _account.GetAccountByIdAsync(accountId)).Data;

            if (options.Type == TransactionType.Debit)
            {
                if (options.Amount > account.Balance)
                {
                    return(new Result <Transaction>()
                    {
                        Code = ResultCodes.BadRequest,
                        Message = $"Thes na xreoseis {options.Amount} evro eno o logariamos exei {account.Balance}. Akiro."
                    });
                }
            }

            if (account != null)
            {
                var transaction = new Transaction()
                {
                    Type   = options.Type,
                    Amount = options.Amount
                };



                account.Transactions.Add(transaction);

                account.Balance = account.Balance + ((int)options.Type) * options.Amount;

                _dBContext.Update <Account>(account);
                await _dBContext.SaveChangesAsync();

                return(new Result <Transaction>()
                {
                    Code = ResultCodes.Success,
                    Data = transaction
                });
            }
            else
            {
                return(new Result <Transaction>()
                {
                    Code = ResultCodes.BadRequest,
                    Message = $"Den vrethike account me kodiko {accountId}"
                });
            }
        }