public ActionResult GenerateStockReportsModal() { GenerateStockReportsInput model = new GenerateStockReportsInput(); model.StartDate = DateTime.Now.AddDays(-1); model.EndDate = model.StartDate.AddMonths(2); model.Lookback = 5; return(PartialView("Modals/_GenerateStockReportsModal", model)); }
public async Task GenerateReports(GenerateStockReportsInput input) { try { //this._sqlExecuter.Execute("DELETE FROM [GuerillaTrader].[dbo].[StockReports]"); List <Stock> stocks = new List <Stock>(); using (var unitOfWork = this.UnitOfWorkManager.Begin()) { stocks = this._repository.GetAllIncluding(x => x.StockReports.Select(y => y.StockBars)).ToList(); unitOfWork.Complete(); } int pageSize = 50; int pageCount = (int)Math.Ceiling(((Double)stocks.Count / (Double)pageSize)); for (int i = 0; i < pageCount; i++) { this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Page {i + 1} of {pageCount}...")); using (var unitOfWork = this.UnitOfWorkManager.Begin()) { List <StockDto> dtos = (await Task.WhenAll(stocks.Skip(i * pageSize).Take(pageSize).Select(x => ReportWrapper(x, input.StartDate, input.Period, input.Lookback)).ToArray())).ToList(); foreach (StockDto dto in dtos) { dto.SetStats(input.Period); Save(dto); } unitOfWork.Complete(); } this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Page {i + 1} of {pageCount} finished.")); } } catch (Exception ex) { this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Exception: {ex.Message} {Environment.NewLine} Stacktrace: {ex.StackTrace}")); } }