using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportCommon; using System.Linq; using Consulenza.DataServices.fideuram.data.service; using System.Collections.Generic; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// Scheda 9. Patrimonio Fideuram: piramide dei bisogni. IdSezione 52 /// public class S9 : Entity.Section { public S9(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S9", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { var dati = GetDataSet(); var campiAsterisco = new[] { "VaR" }; // campi del datasource su cui aggiungere gli asterischi di rimando alla note. #region Tabella delle Aree di Bisogno 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, //ShowBorderLastLine = true, //YOffset = -10 }; tabellaAree.Columns.Add(new ColumnPDF("Area2", 180, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Area", "Area di bisogno") { ScaleColumnTypeImage = 0.5F, HeaderFontSize = 7 }); tabellaAree.Columns.Add(new ColumnPDF("VaR", 45, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") {PaddingRight=1, DeltaYContent = 5, HeaderPaddingRight = 4, HeaderFontSize = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaAree.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { PaddingRight = 1, DeltaYContent = 5, HeaderFontSize = 7, HeaderPaddingLeft = 20 }); tabellaAree.Columns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeAttuale", "% attuale") { PaddingRight = 1, DeltaYContent = 5, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaAree.Columns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeModello", "% modello") { PaddingRight = 1, DeltaYContent = 5, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaAree.Columns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DifferenzaString", "Differenza (%)") { DeltaYContent = 5, HeaderFontSize = 7, HeaderPaddingRight = 2, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaAree.FooterColumns.Add(new ColumnPDF("Area", 180, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo) { FontSize = 7 }); tabellaAree.FooterColumns.Add(new ColumnPDF("VaR", 45, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { FontSize = 7, PaddingRight=2 }); tabellaAree.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 2 }); tabellaAree.FooterColumns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 2 }); tabellaAree.FooterColumns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 2 }); tabellaAree.FooterColumns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale) { FontSize = 7 }); for (int a = 0; a < dati.Tables["area"].Rows.Count; a++) { tabellaAree.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaAree.Cells[0, a].ValueObjectList.Add(new ImagePDF(0, 1, dati.Tables["area"].Rows[a].ItemArray[0].ToString()) { DeltaX = 3, DeltaY = 0, Scale = 0.66f, Height = 27, Width = 145 }); var textArea = new FormattedTextAreaPDF(dati.Tables["area"].Rows[a].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, a].ValueObjectList.Add(textArea); } // Nota su grado di copertura if (getNota1().Length > 0) tabellaAree.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNota1(), new[] { "VaR" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, DeltaY = 5 }); AddElement(new SpacePDF(20)); 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["investimentoFooter"].Rows.Count > 0) { // Testo introduttivo var sommaControvaloreAttuale = Convert.ToDecimal(dati.Tables["investimentoFooter"].Rows[0]["Colonna4"].ToString()); var sommaControvaloreModello = Convert.ToDecimal(dati.Tables["investimentoFooter"].Rows[0]["Colonna8"].ToString()); if ((sommaControvaloreAttuale + sommaControvaloreModello) != 0) { 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)); var 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 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("Durata", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DurataResidua", "Durata residua") { HeaderPaddingLeft = 7, PaddingLeft = 7, HeaderFontSize = 7 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("VaR", 45, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, HeaderPaddingRight = 4, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") {PaddingRight=2, HeaderFontSize = 7, HeaderPaddingLeft = 20 }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeAttuale", "% attuale") { PaddingRight = 2, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeModello", "% modello") { PaddingRight = 2, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiInvestimento.Columns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DifferenzaString", "Differenza (%)") { HeaderFontSize = 7, HeaderPaddingRight = 2, HorizontalAlignment = HorizontalAlignmentType.Destra }); 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", 45, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight=2 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 2 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 2 }); tabellaProgettiInvestimento.FooterColumns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { FontSize = 7 }); for (int a = 0; a < dati.Tables["investimento"].Rows.Count; a++) { tabellaProgettiInvestimento.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; } // Nota su grado di copertura dei progetti d'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.FullJustify, DeltaY = 5 }); 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() && dati.Tables["previdenza"].Rows.Count > 0) { var sommaControvaloreAttuale = Convert.ToDecimal(dati.Tables["previdenzaFooter"].Rows[0]["Colonna4"].ToString()); var sommaControvaloreModello = Convert.ToDecimal(dati.Tables["previdenzaFooter"].Rows[0]["Colonna8"].ToString()); if ((sommaControvaloreAttuale + sommaControvaloreModello) != 0) { 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(getNota1().Length > 0 ? 25 : 20)); } // Testo introduttivo //var testoTabellaProgettiPrevidenza = Helper.ReplaceVariables(testi.Rows[0]["testo4"].ToString(), EnvironmentFacade.ReportEnvironment); 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 }); 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", 45, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, HeaderPaddingRight = 4, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { PaddingRight = 2, HeaderFontSize = 7, HeaderPaddingLeft = 20 }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeAttuale", "% attuale") { PaddingRight = 2, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeModello", "% modello") { PaddingRight = 2, HeaderFontSize = 7, HeaderPaddingRight = 7, HorizontalAlignment = HorizontalAlignmentType.Destra }); tabellaProgettiPrevidenza.Columns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DifferenzaString", "Differenza (%)") { HeaderFontSize = 7, HeaderPaddingRight = 2, HorizontalAlignment = HorizontalAlignmentType.Destra }); 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", 45, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 85, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { PaddingRight = 2, FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("PercentualeAttuale", 65, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { PaddingRight = 2, FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("PercentualeModello", 65, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { PaddingRight = 2, FontSize = 7 }); tabellaProgettiPrevidenza.FooterColumns.Add(new ColumnPDF("Differenza", 80, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaProgettiPrevidenza.HeaderTextHorizontalAlign = HorizontalAlignmentType.Sinistra; for (int a = 0; a < dati.Tables["previdenza"].Rows.Count; a++) { tabellaProgettiPrevidenza.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; } // Nota su grado di copertura dei progetti di 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 }); AddElement(tabellaProgettiPrevidenza); } } #endregion } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected sealed override DataTable GetDataTable() { return null; } /// /// Recupera i dati necessari alla Section restituendo un DataSet. /// /// protected sealed 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 Servizi var pianificazione = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; var patrimonioCasaTotale = pianificazione.risorseFinanziarieBF; var piramideModello = datiSeiUnico.piramideModelloUnit().piramideModello.areaModello.ToList().OrderBy(o => o.ordinamento).ToList().FindAll(o => o.visible == true); #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("PercentualeAttuale", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("PercentualeModello", 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 differenza = Math.Round(areaInPianificazione.percArea * 100 - item.percentualeArea, 2); ds.Tables["area"].Rows.Add( string.Format("{0}.png", new AreaBisogno(item.area).NomePerImmagine), //Area item.descrizioneArea, areaInPianificazione.varInfos.varDecodificato, //VaR areaInPianificazione.ctvArea, //ControvaloreAttuale areaInPianificazione.percArea * 100, //PercentualeAttuale item.percentualeArea, //PercentualeModello differenza, //Differenza string.Format("{0}{1}", differenza > 0 ? "+" : string.Empty, differenza.ToString()) //DifferenzaString ); } //ds.Tables["area"].Rows.Add( // string.Empty, //Area // null, //VaR // null, //ControvaloreAttuale // null, //PercentualeAttuale // null, //PercentualeModello // null, //Differenza // string.Empty //DifferenzaString // ); #endregion #region Footer della tabella Aree var listReturn = new List(); // Operazioni in corso listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Operazioni in corso" }, ctv = datiSeiUnico.CASA_OC }); // CC Negativi listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Conto corrente" }, ctv = datiSeiUnico.CASA_CCN }); //Eligo listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa GP Eligo" }, ctv = datiSeiUnico.CASA_GPELIGO }); // 20181010 AC // Il Mio Foglio //listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa Il Mio Foglio" }, ctv = datiSeiUnico.CASA_TUOFOGLIO }); listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa Il Mio Foglio" }, ctv = datiSeiUnico.CASA_TUOFOGLIO }); //--20181010 var listaProdotti = listReturn.FindAll(o => o.ctv != 0); 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(decimal))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("Colonna4", typeof(decimal))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("Colonna5", typeof(decimal))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("Colonna6", typeof(decimal))); 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))); // Patrimonio Casa ds.Tables["areaFooter"].Rows.Add( (listaProdotti.Count > 0) ? "Totale risorse allocate" : string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), pianificazione.varRisorseAllocateInfos.varDecodificato, datiSeiUnico.CASA_SUBTOTALE.ToString(), Convert.ToDecimal(ds.Tables["area"].Compute("Sum(PercentualeAttuale)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["area"].Compute("Sum(PercentualeModello)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["area"].Compute("Sum(Differenza)", string.Empty)).ToString(), "", "0,00", true, true ); //Dettaglio del Patrimonio Altro foreach (var item in listaProdotti) { ds.Tables["areaFooter"].Rows.Add( item.prodotto.nomeProdotto, //Colonna1 "n.c.", //Colonna2 item.ctv, //Colonna3 0, //Colonna4 0, //Colonna5 0, //Colonna6 0, //Colonna7 "-", false, false ); } // Totale del Patrimonio if (listaProdotti.Count > 0) { ds.Tables["areaFooter"].Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), pianificazione.varInfos.varDecodificato, //pianificazione.varInfos.varDecodificato, datiSeiUnico.CASA_TOTALE,//patrimonioCasaTotale, 0, 0, 0, 0, "-", 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 * patrimonioCasaTotale) != 0) visualizzaInvestimento = true; } if (visualizzaInvestimento) { 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("ControvaloreModello", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(decimal))); ds.Tables["investimento"].Columns.Add(new DataColumn("PercentualeModello", 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))); // patryk tmp //for (int i = 0; i < 4; i++) //{ foreach (var item in pianificazione.aree.FirstOrDefault(o => o.area.Equals("Inv")).progetti.OrderByDescending(x => x.ctvProgetto)) { var differenza = Math.Round((item.percProgetto * 100) - item.progettoModello.percentualeProgetto, 2); ds.Tables["investimento"].Rows.Add( item.progettoModello.nomeProgetto, //Progetto item.durataResidua == null ? "-" : item.durataResidua, item.progettoVarInfos.varDecodificato, // VaR item.ctvProgetto, // ControvaloreAttuale item.progettoModello.percentualeProgetto * patrimonioCasaTotale, // ControvaloreModello item.percProgetto * 100, // PercentualeAttuale item.progettoModello.percentualeProgetto, // PercentualeModello differenza, // Differenza string.Format("{0}{1}", differenza > 0 ? "+" : string.Empty, differenza.ToString()), //DifferenzaString true); } //} #endregion #region Footer della tabella Progetti Investimento 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(decimal))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("Colonna5", typeof(decimal))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("Colonna6", typeof(decimal))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("Colonna7", typeof(decimal))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("Colonna8", typeof(decimal))); 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))); ds.Tables["investimentoFooter"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); //string asterisco = ""; //asterisco = (getNota1().Length > 0 ? "*" : ""); decimal controvaloreTotale = Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreAttuale)", string.Empty)); ds.Tables["investimentoFooter"].Rows.Add( "Totale Investimento", "", areaInvestimentoInPianificazione.varInfos.varDecodificato,// + asterisco + (getNota2().Length > 0 ? "*" : ""), Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreAttuale)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(PercentualeAttuale)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(PercentualeModello)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(Differenza)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["investimento"].Compute("Sum(ControvaloreModello)", string.Empty)).ToString(), "", //ReplaceIfZero true, //FontBold true, //BackgroundGray false //canlastrow ); } #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 * patrimonioCasaTotale) != 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("ControvaloreModello", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(decimal))); ds.Tables["previdenza"].Columns.Add(new DataColumn("PercentualeModello", 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.OrderBy(o => o.progettoModello.nomeProgetto)) { var differenza = Math.Round((item.percProgetto * 100) - item.progettoModello.percentualeProgetto, 2); ds.Tables["previdenza"].Rows.Add( item.progettoModello.nomeProgetto, //Progetto "", item.progettoVarInfos.varDecodificato, // VaR item.ctvProgetto, // ControvaloreAttuale item.progettoModello.percentualeProgetto * patrimonioCasaTotale, // ControvaloreModello item.percProgetto * 100, // PercentualeAttuale item.progettoModello.percentualeProgetto, // PercentualeModello differenza, // 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(decimal))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("Colonna5", typeof(decimal))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("Colonna6", typeof(decimal))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("Colonna7", typeof(decimal))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("Colonna8", typeof(decimal))); 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))); ds.Tables["previdenzaFooter"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); ds.Tables["previdenzaFooter"].Rows.Add( "Totale Previdenza", "", pianificazione.aree.FirstOrDefault(o => o.area.Equals("Pre")).varInfos.varDecodificato,// + asterisco + (getNota3().Length > 0 ? "*" : ""), Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(ControvaloreAttuale)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(PercentualeAttuale)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(PercentualeModello)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(Differenza)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["previdenza"].Compute("Sum(ControvaloreModello)", string.Empty)).ToString(), "", //ReplaceIfZero true, //FontBold true, //BackgroundGray false ); } #endregion return ds; } public virtual bool mostraTabellaProgettiInvestimento() { return GetOption().Valore; } public virtual bool mostraTabellaProgettiPrevidenza() { return GetOption().Valore; } public virtual string getNota1() { string nota = ""; string token = ""; decimal GC = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos.stat.copertura; if (GC < 100) { nota += token + datiSeiUnico.FormatDecimal("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", GC); } return datiSeiUnico.FormatBanca(nota); } public virtual string getNota2() { string nota = ""; string token = ""; decimal GC = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.FirstOrDefault(o => o.area.Equals("Inv")).varInfos.stat.copertura; if (GC < 100 && GC > 0) { nota += token + datiSeiUnico.FormatDecimal("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", GC); } return datiSeiUnico.FormatBanca(nota); } public virtual string getNota3() { string nota = ""; string token = ""; decimal GC = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.FirstOrDefault(o => o.area.Equals("Pre")).varInfos.stat.copertura; if (GC < 100 && GC > 0) { nota += token + datiSeiUnico.FormatDecimal("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", GC); } return datiSeiUnico.FormatBanca(nota); } public string getTesto1() { string testo = string.Empty; testo = "Nella tabella sottostante sono riportate, per ogni area di bisogno, l'allocazione corrente e quella ottimale "; testo += "delle risorse finanziarie che lei detiene presso $/Banca/$ e il relativo scostamento."; return Helper.ReplaceVariables(testo, EnvironmentFacade.ReportEnvironment); } public string getTesto2() { string testo = string.Empty; testo = "Nella tabella sottostante sono riportate l'allocazione corrente e quella ottimale delle risorse finanziare, "; testo += "che lei detiene presso $/Banca/$, destinate ai singoli progetti di investimento e il relativo scostamento."; return Helper.ReplaceVariables(testo, EnvironmentFacade.ReportEnvironment); } public string getTesto3() { string testo = string.Empty; testo = "Nella tabella sottostante sono riportate l'allocazione corrente e quella ottimale delle risorse finanziare, "; testo += "che lei detiene presso $/Banca/$, destinate alle aree \"Previdenza Essenziale\" e \"Previdenza Secondaria\", insieme al relativo scostamento."; return Helper.ReplaceVariables(testo, EnvironmentFacade.ReportEnvironment); } } }