示例#1
0
        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);
        }
示例#2
0
        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);
        }