using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportCommon; using Consulenza.DataServices.fideuram.data.service; using System.Linq; using System.Collections.Generic; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// S25.PianificazionePiramideBisogni idSezione = 68 /// public class S25 : Entity.Section { public S25(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S25", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } /// /// /// protected override sealed void Draw() { var dati = GetDataSet(); #region Tabella delle Aree di Bisogno AddElement(new SpacePDF(20)); var tabellaAree = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["area"], dati.Tables["areafooter"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = false, RowsPadding = 10, HeaderHeight = 30, HeaderMargin = 5F, FooterYOffset = 5F }; tabellaAree.Columns.Add(new ColumnPDF("Area2", 180, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Area", "Area di bisogno") { HeaderFontSize = 7, ScaleColumnTypeImage = 0.6F }); tabellaAree.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, DeltaYContent = 5, HeaderPaddingRight = 5, FontSize = 7 }); tabellaAree.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7, DeltaYContent = 5, FontSize = 7, PaddingRight = 3, HeaderPaddingLeft = 20 }); tabellaAree.Columns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvalorePianificato", "Controvalore
pianificato (€)") { HeaderFontSize = 7, HeaderPaddingRight = 7, PaddingRight = 4, DeltaYContent = 5, FontSize = 7 }); tabellaAree.Columns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvaloreModello", "Controvalore
modello (€)") { HeaderFontSize = 7, PaddingRight = 3, HeaderPaddingRight = 7, DeltaYContent = 5, FontSize = 7 }); tabellaAree.Columns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Differenza", "Differenza (€)") { HeaderFontSize = 7, HeaderPaddingRight = 2, DeltaYContent = 5, FontSize = 7, PaddingRight = 4 }); tabellaAree.FooterColumns.Add(new ColumnPDF("Area", 180, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo) { FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { PaddingRight = 3, FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { PaddingRight = 3, FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { PaddingRight = 3, FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { FontSize = 7 }); int i = 0; foreach (DataRow r in dati.Tables["area"].Rows) { tabellaAree.Cells[2, i].Value = Helper.FormatCurrency(r["ControvaloreAttuale"].ToString()); tabellaAree.Cells[3, i].Value = Helper.FormatCurrency(r["ControvalorePianificato"].ToString()); tabellaAree.Cells[4, i].Value = Helper.FormatCurrency(r["ControvaloreModello"].ToString()); tabellaAree.Cells[5, i].Value = Helper.FormatCurrency(r["Differenza"].ToString()); tabellaAree.Cells[1, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[2, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[3, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[4, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[5, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[0, i].ValueObjectList.Add(new ImagePDF(0, 1, dati.Tables["area"].Rows[i].ItemArray[0].ToString()) { DeltaX = 3, DeltaY = 0, Scale = 0.66f, Height = 27, Width = 145 }); var textArea = new FormattedTextAreaPDF(dati.Tables["area"].Rows[i].ItemArray[1].ToString(), 0) { DeltaY = 8f, FontSize = 8f }; var labelSize = Helper.GetNumericStringWidth(textArea.Text); float addition = 0; switch (textArea.Text) { case "Investimento": case "Previdenza": addition = 3; break; case "Riserva": addition = 2; break; case "Liquidità": addition = 1; break; case "Extra Rendimento": addition = 6; break; } textArea.DeltaX = 76 + addition - labelSize; textArea.Text = Helper.FirstCharToUpper(textArea.Text); tabellaAree.Cells[0, i].ValueObjectList.Add(textArea); i++; } #region Nota Copertura Aree if (getNota1().Length > 0) tabellaAree.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNota1(), new[] { "VaR" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella) { FontSize = 6, DeltaY = 5, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); #endregion // Testo introduttivo AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(7)); AddElement(tabellaAree); #endregion #region Tabella dei Progetti di Investimento // Nel caso in cui sia presente un unico progetto di investimento con "controvalore attuale" e "controvalore modello" uguale a zero non mostro la tabella anche se richiesta. //if (!mostraTabellaProgettiInvestimento() && (dati.Tables[2].Rows.Count == 1 && (sommaControvaloreAttuale + sommaControvaloreModello) == 0)) // return; TablePDF tabellaProgettiInvestimento = null; if (mostraTabellaProgettiInvestimento()) { AddElement(new SpacePDF(getNota1().Length > 0 ? 25 : 20)); AddElement(new FormattedTextAreaPDF(getTesto2(), EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(7)); tabellaProgettiInvestimento = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["investimento"], dati.Tables["investimentofooter"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = false, HeaderHeight = 30, FooterYOffset = 5F, HeaderMargin = 5F }; tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("Progetto", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Progetto", "Progetto di investimento") { HeaderFontSize = 7, FontSize = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("Durata", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DurataResidua", "Durata
residua") { HeaderFontSize = 7, HeaderPaddingLeft = 7, PaddingLeft = 7, FontSize = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 5 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderPaddingLeft = 20, HeaderFontSize = 7, FontSize = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvalorePianificato", "Controvalore
pianificato (€)") { HeaderPaddingRight = 7, HeaderFontSize = 7, FontSize = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ControvaloreModello", "Controvalore
modello (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DifferenzaString", "Differenza (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 2, PaddingRight = 4 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("Progetto", 110, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("Durata", 70, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); int a = 0; foreach (DataRow r in dati.Tables["investimento"].Rows) { tabellaProgettiInvestimento.Cells[3, a].Value = Helper.FormatCurrency(r["ControvaloreAttuale"].ToString()); tabellaProgettiInvestimento.Cells[4, a].Value = Helper.FormatCurrency(r["ControvalorePianificato"].ToString()); tabellaProgettiInvestimento.Cells[5, a].Value = Helper.FormatCurrency(r["ControvaloreModello"].ToString()); //tabellaProgettiInvestimento.Cells[6, a].Value = Helper.FormatCurrency(r[""].ToString()); tabellaProgettiInvestimento.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiInvestimento.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiInvestimento.Cells[4, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiInvestimento.Cells[5, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiInvestimento.Cells[6, a].HorizontalAlignment = HorizontalAlignmentType.Destra; a++; } // Nota su grado di copertura dei progetti d'investimento #region Nota Copertura Progetti Investimento if (getNota2().Length > 0) tabellaProgettiInvestimento.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNota2(), new[] { "VaR" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, DeltaY = 5 }); #endregion AddElement(tabellaProgettiInvestimento); } #endregion #region Tabella dei Progetti di Previdenza // Nel caso in cui sia l'area "previdenza essenziale" sia l'area "previdenza secondaria" abbiano un "controvalore attuale" e un "controvalore modello" uguale a zero non mostro la tabella anche se richiesta. //if (!mostraTabellaProgettiPrevidenza() && (sommaControvaloreAttuale + sommaControvaloreModello) == 0) // return; if (dati.Tables["previdenza"].Rows.Count <= 0) return; if (mostraTabellaProgettiPrevidenza()) { if (dati.Tables["investimento"].Rows.Count + // progetto rows 1 + // progetto headerv 1 + // progetto footer (getNota1().Length > 0 ? 1 : 0) + // nota1 (getNota2().Length > 0 ? 1 : 0) + // nota2 (getNota3().Length > 0 ? 1 : 0) + // nota3 dati.Tables["areafooter"].Rows.Count // progetto footers > 9 && dati.Tables["previdenza"].Rows.Count > 0) { AddElement(new ImagePDF(435, 0.15F, "changepage.png") { AutoIncrementYWritable = false, Y = EnvironmentFacade.RendererFacade.YLowerLimit - 5 }); AddElement(new FormattedTextAreaPDF("continua alla pagina successiva", 450, 200) { FontSize = 6, AutoIncrementYWritable = false, Y = EnvironmentFacade.RendererFacade.YLowerLimit - 5, AbsolutePosition = true }); AddElement(new PagePDF(PagePDF.PagePDFType.Generic)); AddElement(new SpacePDF(2)); AddElement(new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.15F, "changepage.png") { Y = EnvironmentFacade.RendererFacade.YUpperLimit + 2, AutoIncrementYWritable = false }); AddElement(new FormattedTextAreaPDF("continua dalla pagina precedente", EnvironmentFacade.RendererFacade.XLeftLimit + 15, 200) { Y = EnvironmentFacade.RendererFacade.YUpperLimit + 2, FontSize = 6, AutoIncrementYWritable = true, AbsolutePosition = true }); AddElement(new SpacePDF(15)); } else { AddElement(new SpacePDF(getNota2().Length > 0 ? 25 : 20)); } // Testo introduttivo AddElement(new FormattedTextAreaPDF(getTesto3(), EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(7)); var tabellaProgettiPrevidenza = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["previdenza"], dati.Tables["previdenzaFooter"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = false, HeaderHeight = 30, FooterYOffset = 5F, HeaderMargin = 5F }; tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("Progetto", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Progetto", "Previdenza") { HeaderFontSize = 7, FontSize = 7 }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("Durata", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DurataResidua", "") { HeaderPaddingLeft = 7, PaddingLeft = 7, HeaderFontSize = 7 }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, FontSize = 7 }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 20 }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvalorePianificato", "Controvalore
pianificato (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 7, }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreModello", "Controvalore
modello (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 7, }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DifferenzaString", "Differenza (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 2, PaddingRight = 4 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("Progetto", 110, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("Durata", 70, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("ControvalorePianificato", 75, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("ControvaloreModello", 70, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("Differenza", 70, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7 }); int b = 0; foreach (DataRow r in dati.Tables["previdenza"].Rows) { tabellaProgettiPrevidenza.Cells[3, b].Value = Helper.FormatCurrency(r["ControvaloreAttuale"].ToString()); tabellaProgettiPrevidenza.Cells[4, b].Value = Helper.FormatCurrency(r["ControvalorePianificato"].ToString()); tabellaProgettiPrevidenza.Cells[5, b].Value = Helper.FormatCurrency(r["ControvaloreModello"].ToString()); tabellaProgettiPrevidenza.Cells[1, b].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiPrevidenza.Cells[2, b].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiPrevidenza.Cells[3, b].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiPrevidenza.Cells[4, b].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiPrevidenza.Cells[5, b].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaProgettiPrevidenza.Cells[6, b].HorizontalAlignment = HorizontalAlignmentType.Destra; b++; } #region Nota Copertura Progetti Investimento (Aree Previdenza) if (getNota3().Length > 0) tabellaProgettiPrevidenza.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNota3(), new[] { "VaR" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, DeltaY = 5 }); #endregion AddElement(tabellaProgettiPrevidenza); } #endregion } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected sealed override DataTable GetDataTable() { return null; } protected override DataSet GetDataSet() { #region Definizione Tabelle var ds = new DataSet(); ds.Tables.Add(new DataTable("area")); ds.Tables.Add(new DataTable("areafooter")); ds.Tables.Add(new DataTable("investimento")); ds.Tables.Add(new DataTable("investimentofooter")); ds.Tables.Add(new DataTable("previdenza")); ds.Tables.Add(new DataTable("previdenzafooter")); #endregion #region Estrazione Chiave + Servizi var pianificazione = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale; var patrimonioCasa = pianificazione.risorseFinanziarieBF; var piramideModello = datiSeiUnico.all().piramideModelloUnit.piramideModello.areaModello.Where(o => o.visible == true).OrderBy(o => o.ordinamento); var prodottiPatrimonioAltro = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; #endregion #region Aree ds.Tables["area"].Columns.Add(new DataColumn("Area", typeof(string))); ds.Tables["area"].Columns.Add(new DataColumn("Description", typeof(string))); ds.Tables["area"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["area"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("ControvalorePianificato", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("ControvaloreModello", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("Differenza", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("DifferenzaString", typeof(string))); foreach (var item in piramideModello) { var areaInPianificazione = pianificazione.aree.FirstOrDefault(o => o.area.Equals(item.area)); var controvaloreModello = Math.Round((item.progettiPiramideModello.ToList().Sum(o => o.percentualeProgetto) / 100) * patrimonioCasa, 2); var differenza = areaInPianificazione.ctvPianificatoArea - controvaloreModello; //ControvalorePianificato - ControvaloreModello ds.Tables["area"].Rows.Add( string.Format("{0}.png", new AreaBisogno(item.area).NomePerImmagine), //Area item.descrizioneArea, areaInPianificazione.varInfos.varDecodificato, //VaR areaInPianificazione.ctvArea.ToString(), //ControvaloreAttuale areaInPianificazione.ctvPianificatoArea.ToString(), //ControvalorePianificato controvaloreModello.ToString(), //ControvaloreModello differenza.ToString(), //Differenza string.Format("{0}{1}", differenza > 0 ? "+" : string.Empty, Helper.FormatCurrency(differenza.ToString())) //DifferenzaString ); } #endregion #region Footer della tabella Aree var listaProdotti = new List>(); { if (datiSeiUnico.CASA_OC != 0) listaProdotti.Add(new KeyValuePair("Operazioni in corso", datiSeiUnico.CASA_OC.ToString())); if (datiSeiUnico.CASA_CCN != 0) listaProdotti.Add(new KeyValuePair("Conto corrente", datiSeiUnico.CASA_CCN.ToString())); if (datiSeiUnico.CASA_GPELIGO != 0) listaProdotti.Add(new KeyValuePair("Liquidità negativa GP Eligo ", datiSeiUnico.CASA_GPELIGO.ToString())); // 20181010 AC if (datiSeiUnico.CASA_TUOFOGLIO != 0) listaProdotti.Add(new KeyValuePair("Liquidità negativa Il Mio Foglio ", datiSeiUnico.CASA_TUOFOGLIO.ToString())); //--20181010 AC } ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna1", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna2", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna3", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna4", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna5", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("Colonna6", typeof(string))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("Colonna7", typeof(string))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["areafooter"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["areafooter"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); if (listaProdotti.Count > 0) { //pianificazioneUnit().pianificazioneVerticale().totPatrimonioPianificato ds.Tables["areafooter"].Rows.Add( "Totale risorse allocate", pianificazione.varRisorseAllocateInfos.varDecodificato, Helper.FormatCurrency(datiSeiUnico.CASA_SUBTOTALE.ToString()), Helper.FormatCurrency(pianificazione.totRisorseFinanziarePianificato.ToString()), Helper.FormatCurrency(pianificazione.risorseFinanziarieBF.ToString()), Helper.FormatCurrency(Convert.ToDecimal(ds.Tables["area"].Compute("Sum(Differenza)", string.Empty)).ToString()), "", "0,00", true, true ); foreach (var item in listaProdotti) { ds.Tables["areafooter"].Rows.Add( item.Key, //Colonna1 altro "n.c.", //Colonna2 var Helper.FormatCurrency(item.Value), Helper.FormatCurrency(item.Value), "n.c.", "n.c.", "n.c.", "n.c.", false, false ); } } ds.Tables["areafooter"].Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), pianificazione.varInfos.varDecodificato, Helper.FormatCurrency(datiSeiUnico.CASA_TOTALE.ToString()), Helper.FormatCurrency(pianificazione.totPatrimonioPianificato.ToString()), Helper.FormatCurrency(pianificazione.patrimonioTotaleRFA.ToString()), Helper.FormatCurrency(Convert.ToDecimal(ds.Tables["area"].Compute("Sum(Differenza)", string.Empty)).ToString()), "", "0,00", true, true ); #endregion #region Progetti Investimento // bool visualizzaInvestimento = false; //var areaInvestimentoInPianificazione = pianificazione.aree.FirstOrDefault(o => o.area.Equals("Inv")); //if (areaInvestimentoInPianificazione != null) //{ // if (areaInvestimentoInPianificazione.progetti.AsEnumerable().Sum(x => x.ctvProgetto) != 0 || // areaInvestimentoInPianificazione.progetti.Sum(x => x.ctvPianificato) != 0 || // areaInvestimentoInPianificazione.progetti.Sum(x => x.progettoModello.percentualeProgetto / 100 * patrimonioCasa) != 0) // visualizzaInvestimento = true; //} if (mostraTabellaProgettiInvestimento()) { ds.Tables["investimento"].Columns.Add(new DataColumn("Progetto", typeof(string))); ds.Tables["investimento"].Columns.Add(new DataColumn("DurataResidua", typeof(string))); ds.Tables["investimento"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["investimento"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("ControvalorePianificato", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("ControvaloreModello", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("Differenza", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("DifferenzaString", typeof(string))); ds.Tables["investimento"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); foreach (var item in pianificazione.aree.FirstOrDefault(o => o.area.Equals("Inv")).progetti.OrderByDescending(x => x.ctvProgetto)) { var controvaloreModello = Math.Round((item.progettoModello.percentualeProgetto / 100) * patrimonioCasa, 2); var differenza = item.ctvPianificato - controvaloreModello; // var itemmonitoraggio = datiSeiUnico.monitoraggioUnit().monitoraggio.Where(o => o.area.Equals("Inv")).ToList(); //i => i.chiaveProgetto = item.progettoModello.chiaveProgettoMod)); //var mon = itemmonitoraggio.FirstOrDefault(o=>o.progetti.FirstOrDefault(p=>p.chiaveProgetto==item.progettoModello.chiaveProgettoMod) != null)?itemmonitoraggio.FirstOrDefault(o=>o.progetti.FirstOrDefault(p=>p.chiaveProgetto==item.progettoModello.chiaveProgettoMod).posizioniMonitorate.; ds.Tables["investimento"].Rows.Add( item.progettoModello.nomeProgetto, //Progetto item.durataResidua == null ? "-" : item.durataResidua, // item.progettoModello.durata, //DurataResidua data avvio monitoraggio + anni orizzonte temporale selezionato in piramide modello) - data oggi item.progettoVarInfos.varDecodificato, // VaR item.ctvProgetto.ToString(), // ControvaloreAttuale item.ctvPianificato.ToString(), // ControvalorePianificato controvaloreModello.ToString(), // ControvaloreModello differenza.ToString(), // Differenza string.Format("{0}{1}", differenza > 0 ? "+" : string.Empty, Helper.FormatCurrency(differenza.ToString())), //DifferenzaString true); } //tmp //ds.Tables["investimento"].Rows.RemoveAt(0); //ds.Tables["investimento"].Rows.RemoveAt(0); //ds.Tables["investimento"].Rows.Add("Test", "test", "0", 0m, 0m, 0m, 0m, "0", true); #endregion #region Footer della tabella Progetti Investimento var areaInvestimentoInPianificazione = pianificazione.aree.FirstOrDefault(o => o.area.Equals("Inv")); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna1", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna2", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna3", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna4", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna5", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna6", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("Colonna7", typeof(string))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["investimentofooter"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); string asterisco = ""; asterisco = (getNota1().Length > 0 ? "*" : ""); var col1 = Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreAttuale)", string.Empty)).ToString(); var col2 = Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvalorePianificato)", string.Empty)).ToString(); var col3 = Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreModello)", string.Empty)).ToString(); var col4 = Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(Differenza)", string.Empty)).ToString(); ds.Tables["investimentofooter"].Rows.Add( "Totale Investimento", "", areaInvestimentoInPianificazione.varInfos.varDecodificato,// + asterisco + (getNota2().Length > 0 ? "*" : ""), Helper.FormatCurrency(col1),// Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreAttuale)", string.Empty)).ToString(), Helper.FormatCurrency(col2), Helper.FormatCurrency(col3), Helper.FormatCurrency(col4), "", true, //FontBold true //BackgroundGray ); } #endregion #region Progetti Previdenza var areaPrevidenzaInPianificazione = pianificazione.aree.FirstOrDefault(o => o.area.Equals("Pre")); bool visualizzaPrevidenza = false; if (areaPrevidenzaInPianificazione != null) { if (areaPrevidenzaInPianificazione.progetti.AsEnumerable().Sum(x => x.ctvProgetto) != 0 || areaPrevidenzaInPianificazione.progetti.Sum(x => x.ctvPianificato) != 0 || areaPrevidenzaInPianificazione.progetti.Sum(x => x.progettoModello.percentualeProgetto / 100 * patrimonioCasa) != 0) visualizzaPrevidenza = true; } ds.Tables["previdenza"].Columns.Add(new DataColumn("Progetto", typeof(string))); ds.Tables["previdenza"].Columns.Add(new DataColumn("DurataResidua", typeof(string))); ds.Tables["previdenza"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["previdenza"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("ControvalorePianificato", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("ControvaloreModello", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("Differenza", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("DifferenzaString", typeof(string))); ds.Tables["previdenza"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); if (visualizzaPrevidenza) { foreach (var item in pianificazione.aree.FirstOrDefault(o => o.area.Equals("Pre")).progetti) { var controvaloreModello = Math.Round((item.progettoModello.percentualeProgetto / 100) * patrimonioCasa, 2); var differenza = item.ctvPianificato - controvaloreModello; ds.Tables["previdenza"].Rows.Add( item.progettoModello.nomeProgetto, //Progetto "", item.progettoVarInfos.varDecodificato, // VaR item.ctvProgetto.ToString(), // ControvaloreAttuale item.ctvPianificato.ToString(), // ControvalorePianificato controvaloreModello.ToString(), // ControvaloreModello differenza.ToString(), // Differenza string.Format("{0}{1}", differenza > 0 ? "+" : string.Empty, Helper.FormatCurrency(differenza.ToString())), //DifferenzaString true ); } #endregion #region Footer della tabella Progetti Previdenza ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna1", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna2", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna3", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna4", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna5", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna6", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("Colonna7", typeof(string))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["previdenzafooter"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); var col1p = Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(ControvaloreAttuale)", string.Empty)).ToString(); var col2p = Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(ControvalorePianificato)", string.Empty)).ToString(); var col3p = Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(ControvaloreModello)", string.Empty)).ToString(); var col4p = Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(Differenza)", string.Empty)).ToString(); ds.Tables["previdenzafooter"].Rows.Add( "Totale Previdenza", "", areaPrevidenzaInPianificazione.varInfos.varDecodificato,// + asterisco + (getNota3().Length > 0 ? "*" : ""), Helper.FormatCurrency(col1p), Helper.FormatCurrency(col2p), Helper.FormatCurrency(col3p), Helper.FormatCurrency(col4p), "", true, //FontBold true //BackgroundGray ); } #endregion return ds; } public virtual bool mostraTabellaProgettiInvestimento() { var pianificazioneVerticale = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale; var Inv = pianificazioneVerticale.aree.FirstOrDefault(o => o.area.Equals("Inv")); if (Inv != null) { if (Inv.progetti.AsEnumerable().Sum(x => x.ctvProgetto) != 0 || Inv.progetti.Sum(x => x.ctvPianificato) != 0 || Inv.progetti.Sum(x => x.progettoModello.percentualeProgetto / 100 * pianificazioneVerticale.risorseFinanziarieBF) != 0) return GetOption().Valore; } return false; } public virtual bool mostraTabellaProgettiPrevidenza() { return GetOption().Valore; } public virtual string getTesto1() { string nota = "Nella tabella sottostante sono riportate, per ogni area di bisogno, l'allocazione corrente e quella ottimale delle risorse finanziarie che lei detiene presso $/Banca/$. Inoltre viene mostrato il controvalore pianificato su ogni area di bisogno e il relativo scostamento rispetto all'allocazione modello."; return Helper.ReplaceVariables(nota, EnvironmentFacade.ReportEnvironment); } public virtual string getTesto2() { string nota = "Nella tabella sottostante sono riportate l'allocazione corrente e quella ottimale delle risorse finanziarie, che lei detiene presso $/Banca/$, destinate ai singoli progetti di investimento. Inoltre viene mostrato il controvalore pianificato su ogni progetto di investimento e il relativo scostamento rispetto all'allocazione modello."; return Helper.ReplaceVariables(nota, EnvironmentFacade.ReportEnvironment); } public virtual string getTesto3() { string nota = "Nella tabella sottostante sono riportate l'allocazione corrente e quella ottimale delle risorse finanziarie, che lei detiene presso $/Banca/$, destinate alle aree \"Previdenza Essenziale\" e \"Previdenza Secondaria\". Inoltre viene mostrato il controvalore pianificato su ognuna delle due aree, e il relativo scostamento rispetto all'allocazione modello."; return Helper.ReplaceVariables(nota, EnvironmentFacade.ReportEnvironment); } public virtual string getNota1() { var pianificazione = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale; var gradoCoperturaAree = Math.Round(pianificazione.varInfos.stat.copertura, 2); string nota = ""; if (gradoCoperturaAree < 100) { nota += "Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}."; } return string.Format(nota, Helper.FormatDecimal(gradoCoperturaAree.ToString(), 2)); } public virtual string getNota2() { var pianificazione = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale; var gradoCoperturaAreaInvestimento = pianificazione.aree.FirstOrDefault(o => o.area.Equals("Inv")).varInfos.stat.copertura; string nota = ""; if (gradoCoperturaAreaInvestimento < 100 && gradoCoperturaAreaInvestimento != Convert.ToDecimal("0,00")) { nota += "Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}."; } return string.Format(nota, Helper.FormatDecimal(gradoCoperturaAreaInvestimento.ToString(), 2)); } public virtual string getNota3() { var pianificazione = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale; var gradoCoperturaAreaPrevidenza = pianificazione.aree.FirstOrDefault(o => o.area.Equals("Pre")).varInfos.stat.copertura; string nota = ""; if (gradoCoperturaAreaPrevidenza < 100 && gradoCoperturaAreaPrevidenza != Convert.ToDecimal("0,00")) { nota += "Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}."; } return string.Format(nota, Helper.FormatDecimal(gradoCoperturaAreaPrevidenza.ToString(), 2)); } } }