Пример #1
0
        public AddBillPayResult AddBillPay(AddBillPayRequest model, long memberId)
        {
            var payeeId = _dbContext.Payees
                          .Where(p => p.Guid == model.PayeeGuid)
                          .Select(p => p.Id)
                          .SingleOrDefault();

            if (payeeId == 0)
            {
                return(new AddBillPayResult(AddBillPayResultType.PayeeNotFound, null));
            }

            var billPay = new BillPay
            {
                Amount          = model.Amount.GetValueOrDefault(),
                Frequency       = model.Frequency,
                IsRecurring     = model.IsRecurring,
                MemberId        = memberId,
                NextPaymentDate = model.FirstPaymentDate,
                PayeeId         = payeeId,
            };

            _dbContext.Add(billPay);
            _dbContext.SaveChanges();

            return(new AddBillPayResult(AddBillPayResultType.Successful, billPay));
        }
Пример #2
0
        private void PostPendingTrades(SansCreditUnionDbContext dbContext)
        {
            var pendingTrade = dbContext.BrokerageTrades
                               .Where(t => t.PostedDateTime == null)
                               .Include(t => t.BrokerageAccount)
                               .ToList();

            foreach (var trade in pendingTrade)
            {
                var account = dbContext.Accounts
                              .Where(e => e.Id == trade.AccountId)
                              .Single();

                if (trade.BrokerageTradeType == BrokerageTradeTypes.Buy)
                {
                    account.Balance -= trade.Price * trade.Quantity;
                }
                else // Must be a sell
                {
                    account.Balance += trade.Price * trade.Quantity;
                }

                trade.PostedDateTime = DateTime.UtcNow;

                dbContext.SaveChanges();
            }
        }
Пример #3
0
        private static void AddRandomStockPriceHistory(SansCreditUnionDbContext context)
        {
            List <long> stockIdsInDb = context.BrokerageStocks
                                       .Select(a => a.Id)
                                       .ToList();

            List <BrokerageStock> stocks = BrokerageStocks.All;

            var random = new Random();

            foreach (var stock in stocks)
            {
                var within10Percent   = Convert.ToInt32(stock.PreviousDayClose * 0.1m);
                var stockPriceHistory = new BrokerageStockPriceHistory
                {
                    Price     = stock.PreviousDayClose * random.Next(within10Percent * -1, within10Percent),
                    StockId   = stock.Id,
                    Timestamp = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, random.Next(8, 17), random.Next(0, 59), random.Next(0, 59))
                };

                context.BrokerageStockPriceHistory.Add(stockPriceHistory);
            }

            context.SaveChanges();
        }
Пример #4
0
        public TransferFundsResult TransferFunds(TransferFundsRequest model)
        {
            var receivingAccountId = _dbContext.Accounts
                                     .Where(a => a.Member.User.Email == model.ReceiverEmail)
                                     .Select(a => a.Id)
                                     .SingleOrDefault();

            if (receivingAccountId == 0)
            {
                return(TransferFundsResult.ReceiverEmailNotFound);
            }

            var senderAccountId = _dbContext.Accounts
                                  .Where(a => a.Member.User.Id == model.SenderUserId)
                                  .Select(a => a.Id)
                                  .Single();

            var transaction = new Transaction
            {
                Amount             = model.Amount,
                Description        = model.Description,
                ReceivingAccountId = receivingAccountId,
                SendingAccountId   = senderAccountId,
            };

            _dbContext.Transactions.Add(transaction);
            _dbContext.SaveChanges();

            return(TransferFundsResult.Successful);
        }
Пример #5
0
        public TradeStockResult TradeStock(TradeStockRequest request, long memberId)
        {
            if (request.TradeType != BrokerageTradeTypes.Buy && request.TradeType != BrokerageTradeTypes.Sell)
            {
                return(new TradeStockResult(TradeStockType.InvalidTradeType, null));
            }

            long?brokerageAccountId = _dbContext.BrokerageAccounts
                                      .Where(a => a.Guid == request.BrokerageAccountGuid &&
                                             a.MemberId == memberId)
                                      .Select(a => a.Id)
                                      .SingleOrDefault();

            if (brokerageAccountId == null)
            {
                return(new TradeStockResult(TradeStockType.BrokerageAccountNotFoundForMember, null));
            }

            // This is the account they're drawing from to Buy a stock or depositing into if they're Selling a stock
            long?accountId = _dbContext.Accounts
                             .Where(a => a.Guid == request.AccountGuid &&
                                    a.MemberId == memberId)
                             .Select(a => a.Id)
                             .SingleOrDefault();

            if (accountId == null)
            {
                return(new TradeStockResult(TradeStockType.AccountNotFoundForMember, null));
            }

            var stock = _dbContext.BrokerageStocks
                        .Where(s => s.Id == request.StockId)
                        .SingleOrDefault();

            if (stock == null)
            {
                return(new TradeStockResult(TradeStockType.StockNotFound, null));
            }

            var mostRecentPrice = _dbContext.BrokerageStockPriceHistory
                                  .Where(b => b.StockId == stock.Id)
                                  .OrderByDescending(b => b.Timestamp)
                                  .FirstOrDefault();

            var trade = new BrokerageTrade
            {
                BrokerageAccountId = brokerageAccountId.Value,
                StockId            = stock.Id,
                Price              = mostRecentPrice.Price,
                Quantity           = request.Quantity,
                BrokerageTradeType = request.TradeType
            };

            _dbContext.BrokerageTrades.Add(trade);
            _dbContext.SaveChanges();

            return(new TradeStockResult(TradeStockType.Successful, trade));
        }
Пример #6
0
        private void PostPendingTransactions(SansCreditUnionDbContext dbContext)
        {
            var pendingPayments = dbContext.Transactions
                                  .Where(t => t.PostedDateTime == null)
                                  .Include(t => t.Account)
                                  .ToList();

            foreach (var payment in pendingPayments)
            {
                payment.Account.Balance += payment.Amount;
                payment.PostedDateTime   = DateTime.UtcNow;
                dbContext.SaveChanges();
            }
        }
Пример #7
0
        public Payee AddPayee(AddPayeeRequest model)
        {
            var payee = new Payee
            {
                City    = model.City,
                Name    = model.Name,
                State   = model.State,
                Street1 = model.Street1,
                Street2 = model.Street2,
                Zip4    = model.Zip4,
                Zip5    = model.Zip5
            };

            _dbContext.Payees.Add(payee);
            _dbContext.SaveChanges();

            return(payee);
        }
Пример #8
0
        public UpdateTravelAbroadResult UpdateTravelAbroad(UpdateTravelAbroadRequest model, long memberId)
        {
            var result = new UpdateTravelAbroadResult();

            if (model.EndDate.Value < model.StartDate.Value)
            {
                result.ValidationErrors.Add(new ValidationError(nameof(model.EndDate), "End Date must be after Start Date."));
                return(result);
            }

            Member member = GetByMemberId(memberId);

            member.TravelingAbroadStart = model.StartDate;
            member.TravelingAbroadEnd   = model.EndDate;

            _dbContext.SaveChanges();

            return(result);
        }
Пример #9
0
        public OrderChecksResult OrderChecks(OrderChecksRequest model)
        {
            var accountId = _dbContext.Accounts
                            .Where(a => a.Guid == model.AccountGuid)
                            .Select(a => a.Id)
                            .SingleOrDefault();

            if (accountId == 0)
            {
                return(new OrderChecksResult(OrderChecksResultType.AccountNotFound, null));
            }

            var checkOrder = new CheckOrder
            {
                AccountId = accountId,
            };

            _dbContext.CheckOrders.Add(checkOrder);
            _dbContext.SaveChanges();

            return(new OrderChecksResult(OrderChecksResultType.Successful, checkOrder));
        }