public void ShouldAddNewTransaction()
        {
            var transactionTableRepository    = Substitute.For <ITransactionTableRepository>();
            TransactionServices  transService = new TransactionServices(transactionTableRepository);
            TransactionStoryInfo args         = new TransactionStoryInfo()
            {
                sellerId        = 1,
                customerId      = 2,
                shareId         = 1,
                AmountOfShares  = 10,
                DateTime        = DateTime.Now,
                TransactionCost = 5000
            };

            int transactId = transService.AddNewTransaction(args);

            transactionTableRepository.Received(1).Add(Arg.Is <TransactionStoryEntity>(
                                                           u => u.SellerId == args.sellerId &&
                                                           u.CustomerId == args.customerId &&
                                                           u.ShareId == args.shareId &&
                                                           u.AmountOfShares == args.AmountOfShares &&
                                                           u.DateTime == args.DateTime &&
                                                           u.TransactionCost == args.TransactionCost));
            transactionTableRepository.Received(1).SaveChanges();
        }
 public void AddShareInPortfolio(TransactionStoryInfo args)
 {
     try
     {
         this.transaction.AddShareInPortfolio(args);
     }
     catch (ArgumentException ex)
     {
         Logger.Log.Error(ex.Message);
         throw ex;
     }
 }
        public void StartTrading()
        {
            Random random   = new Random();
            var    seller   = usersService.GetSeller(random.Next(1, userRepo.Count()));
            var    customer = usersService.GetCustomer(random.Next(1, userRepo.Count()), seller.Id);

            if (seller == null || customer == null) //тут проблема что исключение обрабатывается в прокси, а сам прокси в таком случае кидает null, знаю что костыль
            {
                return;
            }

            var     sellerPortfolioForTrade = seller.UsersShares.ToList()[random.Next(0, seller.UsersShares.Count())];
            var     amountSharesForTrade    = random.Next(1, sellerPortfolioForTrade.Amount / 5);
            var     shareForTrade           = sellerPortfolioForTrade.Share;
            decimal CostOfTransaction       = amountSharesForTrade * shareForTrade.Price;

            usersService.ChangeUserBalance(seller.Id, CostOfTransaction);
            usersService.ChangeUserBalance(customer.Id, CostOfTransaction * -1);

            PortfolioEntity customerPortfolio;

            if ((customerPortfolio = customer.UsersShares.Where(us => us.ShareId == shareForTrade.Id).FirstOrDefault()) == null)
            {
                PortfolioInfo customerPortfolioToAdd = new PortfolioInfo()
                {
                    UserId  = customer.Id,
                    ShareId = shareForTrade.Id,
                    Amount  = amountSharesForTrade
                };
                portfolioService.AddNewUsersShares(customerPortfolioToAdd);
            }
            else
            {
                portfolioService.ChangeAmountOfShares(customerPortfolio, amountSharesForTrade);
            }
            portfolioService.ChangeAmountOfShares(sellerPortfolioForTrade, amountSharesForTrade * -1);

            TransactionStoryInfo transactionOperation = new TransactionStoryInfo()
            {
                customerId      = customer.Id,
                sellerId        = seller.Id,
                shareId         = shareForTrade.Id,
                Share           = shareForTrade,
                AmountOfShares  = amountSharesForTrade,
                DateTime        = DateTime.Now,
                TransactionCost = CostOfTransaction
            };

            transaction.AddNewTransaction(transactionOperation);
        }
Esempio n. 4
0
        public int AddNewTransaction(TransactionStoryInfo args)
        {
            var TransToAdd = new TransactionStoryEntity()
            {
                AmountOfShares  = args.AmountOfShares,
                CustomerId      = args.customerId,
                SellerId        = args.sellerId,
                ShareId         = args.shareId,
                DateTime        = args.DateTime,
                TransactionCost = args.TransactionCost,
                Share           = args.Share
            };

            repo.Add(TransToAdd);

            repo.SaveChanges();

            return(TransToAdd.Id);
        }
        public void AddShareInPortfolio(TransactionStoryInfo args)
        {
            var customer = usersService.GetUserById(args.customerId);
            var seller   = usersService.GetUserById(args.sellerId);

            if (seller == null || customer == null) //тут залогировано все в прокси, но сами прокси возращают null
            {
                throw new ArgumentException("ОШИБКА ТРАНЗАКЦИИ: Неверный клиенты");
            }

            if (seller.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault() == null)
            {
                throw new ArgumentException($"ОШИБКА ТРАНЗАКЦИИ: Акция с id {args.shareId} не существует");
            }

            var customerPortfolio = customer.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault();

            try
            {
                portfolio.ChangeAmountOfShares(seller.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault(), args.AmountOfShares * -1);
            }
            catch (ArgumentException ex) { throw ex; }

            if (customerPortfolio == null)
            {
                portfolio.AddNewUsersShares(new PortfolioInfo()
                {
                    UserId = args.customerId, ShareId = args.shareId, Amount = args.AmountOfShares
                });
            }
            else
            {
                portfolio.ChangeAmountOfShares(customerPortfolio, args.AmountOfShares);
            }

            usersService.ChangeUserBalance(args.customerId, args.TransactionCost * -1); // в данной программе нет ограничения на минусовой баланс
            usersService.ChangeUserBalance(args.sellerId, args.TransactionCost);
        }
 public int AddNewTransaction(TransactionStoryInfo args)
 {
     return(this.transaction.AddNewTransaction(args));
 }