public GeneratedPortfolioDto Calculate(PortfolioDto portfolio) { var availableExternalProjects = GetAvailableExternalProjects(portfolio); var availableInternalProjects = GetAvailableInternalProjects(portfolio); var availableStocks = GetAvailableStocks(portfolio); var info = new GeneratedPortfolioDto(); info.GeneralNPVStocks = availableStocks.Sum(x => x.Marks.Average(m => m.NPV)); info.GeneralNPVInternalProjects = availableInternalProjects.Sum(x => x.Marks.Average(m => m.NPV)); info.GeneralNPVExternalProjects = availableExternalProjects.Sum(x => x.Marks.Average(m => m.NPV)); info.GeneralInvestmentsStocks = availableStocks.Sum(x => x.Investments); info.GeneralInvestmentsInternalProjects = availableInternalProjects.Sum(x => x.Investments); info.GeneralInvestmentsExternalProjects = availableExternalProjects.Sum(x => x.Investments); info.AvgStocksRisk = availableStocks.Count > 0 ? availableStocks.Average(x => x.Marks.Average(m => m.Risk)) : 0; info.AvgInternalProjectsRisk = availableInternalProjects.Count > 0 ? availableInternalProjects.Average(x => x.Marks.Average(m => m.Risk)) : 0; info.AvgExternalProjectsRisk = availableExternalProjects.Count > 0 ? availableExternalProjects.Average(x => x.Marks.Average(m => m.Risk)) : 0; info.AvgStocksPriority = availableStocks.Count > 0 ? availableStocks.Average(x => GetPriority(portfolio, x)) : 0; info.AvgInternalProjectsPriority = availableInternalProjects.Count > 0 ? availableInternalProjects.Average(x => x.Marks.Average(m => m.Risk)) : 0; info.AvgExternalProjectsPriority = availableExternalProjects.Count > 0 ? availableExternalProjects.Average(x => x.Marks.Average(m => m.Risk)) : 0; info.ExternalProjects = availableExternalProjects; info.InternalProjects = availableInternalProjects; info.Stocks = availableStocks; return(info); }
public MemoryStream GeneratePdf(GeneratedPortfolioDto portfolio) { MemoryStream workStream = new MemoryStream(); Document document = new Document(); PdfWriter.GetInstance(document, workStream).CloseStream = false; document.Open(); document.Add(new Paragraph("Report")); document.Add(new Paragraph("-----------------------------------------------------")); var i = 1; if (portfolio.ExternalProjects.Count > 0) { document.Add(new Paragraph("External projects:")); foreach (var p in portfolio.ExternalProjects) { document.Add(new Paragraph($"{i}) Name: {p.Title}, Investments: {p.Investments}")); i++; } document.Add(new Paragraph("-----------------")); document.Add(new Paragraph($"General investments: {portfolio.GeneralInvestmentsExternalProjects}")); document.Add(new Paragraph($"General NPV: {portfolio.GeneralNPVExternalProjects}")); document.Add(new Paragraph($"Average risk: {portfolio.AvgExternalProjectsRisk}")); document.Add(new Paragraph($"Average priority: {portfolio.AvgExternalProjectsPriority}")); } if (portfolio.InternalProjects.Count > 0) { document.Add(new Paragraph("----------------")); i = 1; document.Add(new Paragraph("Internal projects:")); foreach (var p in portfolio.InternalProjects) { document.Add(new Paragraph($"{i}) Name: {p.Title}, Investments: {p.Investments}")); i++; } document.Add(new Paragraph("----------------")); document.Add(new Paragraph($"General investments: {portfolio.GeneralInvestmentsInternalProjects}")); document.Add(new Paragraph($"General NPV: {portfolio.GeneralNPVInternalProjects}")); document.Add(new Paragraph($"Average risk: {portfolio.AvgInternalProjectsRisk}")); document.Add(new Paragraph($"Average priority: {portfolio.AvgInternalProjectsPriority}")); } if (portfolio.ExternalProjects.Count > 0) { document.Add(new Paragraph("----------------")); document.Add(new Paragraph("Stocks:")); i = 1; foreach (var s in portfolio.Stocks) { document.Add(new Paragraph($"{i}) Stock code: {s.Code}, Investments: {s.Investments}")); i++; } document.Add(new Paragraph("----------------")); document.Add(new Paragraph($"General investments: {portfolio.GeneralInvestmentsStocks}")); document.Add(new Paragraph($"General NPV: {portfolio.GeneralNPVStocks}")); document.Add(new Paragraph($"Average risk: {portfolio.AvgStocksRisk}")); document.Add(new Paragraph($"Average priority: {portfolio.AvgStocksPriority}")); } document.Close(); byte[] byteInfo = workStream.ToArray(); workStream.Write(byteInfo, 0, byteInfo.Length); workStream.Position = 0; return(workStream); }