public StockValuePoco GetStockValuePerYear(Guid companyId) { var _context = new MarketAnalyzerDBContext(); var stockValue = (from k in _context.ExtractedKeyRatios where k.CompanyId == companyId join income in _context.ExtractedIncomeStatements on new { k.CompanyId, k.Year } equals new { income.CompanyId, income.Year } select new StockValueComponents { Year = k.Year, MarketCap = k.MarketCapitalization, SharesBasic = income.SharesBasic } ).OrderBy(x => x.Year).ToList(); var stockValuesPerCompany = new StockValuePoco(); stockValuesPerCompany.Components = stockValue; stockValuesPerCompany.CompanyId = companyId; return(stockValuesPerCompany); }
public List <StuffForGraph> GetGraphTotalsPerCompany(List <UserTransaction> userTransactions, Company company, StockValuePoco stockValuePoco) { var stuffForGraphList = new List <StuffForGraph>(); var firstYear = 2009; var lastYear = DateTime.Now.Year; var priceHistory = new List <StockPriceHistoryForCompany>(); var yearsList = new List <int>(); foreach (var transaction in userTransactions) { if (stockValuePoco.Components.Where(x => x.Year == transaction.DateOfMovement.Year).SingleOrDefault() != null) { var stuffForGraph = new StuffForGraph(); decimal?valueOfShare = 0; var stockValueInfo = stockValuePoco.Components.Where(x => x.Year == transaction.DateOfMovement.Year).SingleOrDefault(); valueOfShare = stockValueInfo.MarketCap / stockValueInfo.SharesBasic; var numberOfShares = transaction.NumberOfShares; var numberOfSharesWithdrawn = transaction.NumberOfSharesWithdrawn; var invested = (decimal)transaction.NumberOfShares * transaction.ValueOfShares; var withdrawn = (decimal)transaction.NumberOfSharesWithdrawn * transaction.ValueOfSharesWithdrawn; stuffForGraph.Year = transaction.DateOfMovement.Year; stuffForGraph.CompanyId = transaction.CompanyId; stuffForGraph.NumberStocksInvested = transaction.NumberOfShares; stuffForGraph.NumberStocksWithdrawn = transaction.NumberOfSharesWithdrawn; stuffForGraph.StocksInvested = invested; stuffForGraph.StocksWithdrawn = withdrawn; stuffForGraph.CurrentValue = valueOfShare * (decimal)numberOfShares; stuffForGraph.CurrentValueWithdrawn = valueOfShare * (decimal)numberOfSharesWithdrawn; stuffForGraph.StockPrice = company.StockPrice; stuffForGraphList.Add(stuffForGraph); } else { var stuffForGraph = new StuffForGraph(); decimal?valueOfShare = company.StockPrice; var numberOfShares = transaction.NumberOfShares; var numberOfSharesWithdrawn = transaction.NumberOfSharesWithdrawn; var invested = (decimal)transaction.NumberOfShares * transaction.ValueOfShares; var withdrawn = (decimal)transaction.NumberOfSharesWithdrawn * transaction.ValueOfSharesWithdrawn; stuffForGraph.Year = transaction.DateOfMovement.Year; stuffForGraph.CompanyId = transaction.CompanyId; stuffForGraph.NumberStocksInvested = transaction.NumberOfShares; stuffForGraph.NumberStocksWithdrawn = transaction.NumberOfSharesWithdrawn; stuffForGraph.StocksInvested = invested; stuffForGraph.StocksWithdrawn = withdrawn; stuffForGraph.CurrentValue = valueOfShare * (decimal)numberOfShares; stuffForGraph.CurrentValueWithdrawn = valueOfShare * (decimal)numberOfSharesWithdrawn; stuffForGraph.StockPrice = company.StockPrice; stuffForGraphList.Add(stuffForGraph); } } for (var i = 0; i <= (lastYear - firstYear); i++) { yearsList.Add(firstYear + i); } var stuffForGraphHistory = new StuffForGraph(); foreach (var item in yearsList) { if (stockValuePoco.Components.Where(x => x.Year == item).SingleOrDefault() != null) { var stockValueInfo = stockValuePoco.Components.Where(x => x.Year == item).SingleOrDefault(); var valueOfShare = stockValueInfo.MarketCap / stockValueInfo.SharesBasic; var history = new StockPriceHistoryForCompany(); history.Year = item; history.CompanyId = company.Id; history.StockValue = valueOfShare; var withdrawnThatYear = userTransactions.Where(x => x.DateOfMovement.Year == item).Where(x => x.NumberOfSharesWithdrawn != 0).ToList(); var yearsBefore = new List <StuffForGraph>(); if (withdrawnThatYear.Count != 0) { yearsBefore = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year <= item).ToList(); } else { yearsBefore = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year < item).ToList(); } double?numberOfShares = 0; foreach (var data in yearsBefore) { var result = data.NumberStocksInvested - data.NumberStocksWithdrawn; numberOfShares += result; } history.NumberStocks = numberOfShares; priceHistory.Add(history); } else { var valueOfShare = company.StockPrice; var history = new StockPriceHistoryForCompany(); history.Year = item; history.CompanyId = company.Id; history.StockValue = valueOfShare; var yearsBefore = stuffForGraphList.OrderBy(x => x.Year).Where(x => x.Year <= item).ToList(); double?numberOfShares = 0; foreach (var data in yearsBefore) { var result = data.NumberStocksInvested - data.NumberStocksWithdrawn; numberOfShares += result; } history.NumberStocks = numberOfShares; priceHistory.Add(history); } } stuffForGraphHistory.CompanyId = company.Id; stuffForGraphHistory.StockPriceHistory = priceHistory; stuffForGraphList.Add(stuffForGraphHistory); var orderedList = stuffForGraphList.OrderBy(x => x.Year).ToList(); return(orderedList); }