using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using Consulenza.ReportWriter.Business.Entity; using System.Data; using Consulenza.ReportCommon; using Consulenza.ReportWriter.Manager.Integration; using System.Collections.Generic; using System.Linq; using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// ///S31.PatrimonioAltriIstitutiDettaglioProdotti idSezione = 74 /// public class S31 : Entity.Section { //FINIRE IL DRAW: FOOTER DI ENTRAMBI E CONTROLLARE IL RAGGRUPPAMENTO PER CATEGORIE public string NomeIntermediario { get; set; } bool notaproxy; private List _elencocategorie = new List(); public S31(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S31", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } //protected override sealed void OLD_Draw() //{ // var dati = GetDataSet(); // TablePDF tabellaCategorie = null; // #region Raggruppamento per Categoria // if (raggruppamentoCategoria()) // { // AddElement(new PagePDF(PagePDF.PagePDFType.Generic) { ID="pagina1"}); // var intestazione = new SectionHeadingPDF( // getTitolo(), // EnvironmentFacade.RendererFacade.XLeftLimit, // EnvironmentFacade.RendererFacade.YUpperLimit, // EnvironmentFacade.ReportEnvironment.FontFamily); // AddElement(intestazione.ToElement()); // AddElement(new SpacePDF(20)); // AddElement(new FormattedTextAreaPDF(getTestoIntro(), EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 }); // AddElement(new SpacePDF(15)); // DataView view = new DataView(dati.Tables["categorie"].AsEnumerable().OrderBy(o => o.Field("Ordinamento")).CopyToDataTable()); // DataTable dtCategoria = view.ToTable(true, "Categoria"); // DataTable dtFinale = new DataTable(); // dtFinale.Columns.Add("Categoria", typeof(string)); // dtFinale.Columns.Add("Intermediario", typeof(string)); // dtFinale.Columns.Add("ChiaveProdotto", typeof(string)); // dtFinale.Columns.Add("NomeProdotto", typeof(string)); // dtFinale.Columns.Add("Controvalore", typeof(string)); // dtFinale.Columns.Add("Versatonetto", typeof(string)); // dtFinale.Columns.Add("Utileperdita", typeof(string)); // dtFinale.Columns.Add("Rischiocredito", typeof(string)); // dtFinale.Columns.Add("VaR", typeof(string)); // foreach (DataRow it in dati.Tables["categorie"].Rows) // { // dtFinale.Rows.Add(it["Categoria"].ToString(), it["Intermediario"].ToString(), it["ChiaveProdotto"].ToString(), it["NomeProdotto"].ToString(), it["Controvalore"].ToString(), it["Versatonetto"].ToString(), it["Utileperdita"].ToString(), it["Rischiocredito"].ToString(), it["VaR"].ToString()); // } // for (int i = 0; i < dtCategoria.Rows.Count; i++) // { // var categoria = dtFinale.Select("Categoria ='" + dtCategoria.Rows[i]["Categoria"].ToString() + "'").CopyToDataTable();// : dati.Tables[0].Select("Categoria ='" + p["Categoria"].ToString() + "' AND Intermediario='" + p["Intermediario"].ToString() + "'").CopyToDataTable(); // var footer = dati.Tables["categorieFooter"].AsEnumerable().Where(o => o.Field("Categoria").Contains(dtCategoria.Rows[i]["Categoria"].ToString())).CopyToDataTable(); // bool notaproxyCat = categoria.AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0"); // decimal copertura = Convert.ToDecimal(footer.Rows[0]["Copertura"]); // bool notaGrado = getNota1(copertura).Length > 0; // string testoNotaGrado = getNota1(copertura); // bool presenzaAsterischiProxy = categoria.AsEnumerable().Any(o => o.Field("VaR").ToString().Contains(notaGrado ? "**" : "*")); // string testoNotaProxy = notaproxyCat ? getNotaProxyVar() : ""; // bool tuttivarnc = categoria.AsEnumerable().All(o => o.Field("VaR").ToString() == "n.c." || o.Field("VaR").ToString() == "0,00" || o.Field("Categoria").ToString().ToLower().Contains("conti")); // tabellaCategorie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, categoria, footer) // { // Style = Style.ConsulenzaUnica, // Footer = true, // AlternateRow = false, // ShowBorderLastLine = false, // HeaderHeight = 22, // //MinimumRowHeight = 27, // //RowHeight = 27, // HeaderFontSize = 7, // ID=dtCategoria.Rows[i]["Categoria"].ToString(), // TitleRow = true, // TitleRowText = dtCategoria.Rows[i]["Categoria"].ToString(), // TitleRowBorder = BorderTitleRowType.Nessuno, // TitleRowSpace = 15, // //, // PageBreak=true // }; // tabellaCategorie.Columns.Add(new ColumnPDF("Intermediario", 105, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Intermediario", "Intermediario") { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("NomeProdotto", 120, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Descrizione") { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Controvaloreattuale", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore
attuale (€)") { PaddingRight = 3, HeaderPaddingLeft = 5, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Versatonetto", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Versatonetto", "Versato
netto (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Utileperdita", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Utileperdita", "Utile/
Perdita (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Rischiocredito", "Rischio
Credito") { HeaderFontSize = 7, HeaderPaddingLeft = 4, FontSize = 7, PaddingLeft = 4}); // tabellaCategorie.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderPaddingLeft = 4, PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 }); // int a = 0; // foreach (var item in categoria.Rows) // { // tabellaCategorie.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // tabellaCategorie.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // tabellaCategorie.Cells[4, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // tabellaCategorie.Cells[5, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // tabellaCategorie.Cells[6, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // a++; // } // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Totale", 225, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Controvaloreattuale", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Versatonetto", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Utileperdita", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7}); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("VaRfooter", 40, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { PaddingRight = 2, HeaderFontSize = 7, FontSize = 7 }); // AddElement(tabellaCategorie); // if (notaGrado) // { // AddElement(new SpacePDF(10)); // AddElement(new FormattedTextAreaPDF("(*) " +testoNotaGrado, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); // } // if (notaproxyCat && !tuttivarnc && presenzaAsterischiProxy) // { // AddElement(new SpacePDF(7)); // string ast = notaGrado ? "(**) " : "(*) "; // AddElement(new FormattedTextAreaPDF(ast + testoNotaProxy, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); // } // AddElement(new SpacePDF(8)); // } // } // #endregion // #region stampa per intermediari // else // { // for (int i = 0; i < dati.Tables["Intermediari"].Rows.Count; i++) // { // NomeIntermediario = "«" + dati.Tables["Intermediari"].Rows[i]["NomeIntermediario"].ToString()+"»"; // AddElement(new PagePDF(PagePDF.PagePDFType.Generic)); // var intestazione = new SectionHeadingPDF( // string.Format(getTitolo(), NomeIntermediario), // EnvironmentFacade.RendererFacade.XLeftLimit, // EnvironmentFacade.RendererFacade.YUpperLimit, // EnvironmentFacade.ReportEnvironment.FontFamily); // AddElement(intestazione.ToElement()); // AddElement(new SpacePDF(20)); // AddElement(new FormattedTextAreaPDF(getTestoIntro(), EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 }); // //DataView view = new DataView(dati.Tables["categorie" + i]); // DataView view = new DataView(dati.Tables["categorie" + i].AsEnumerable().OrderBy(o => o.Field("Ordinamento")).CopyToDataTable()); // DataView view2 = new DataView(dati.Tables["footer" + i]); // DataTable dtCategoria = view.ToTable(true, "Categoria"); // DataTable dtCategoriaFooter = view2.ToTable(true, "Copertura", "CategoriaString"); // DataTable dtFinale = new DataTable(); // dtFinale.Columns.Add("Categoria", typeof(string)); // // dtFinale.Columns.Add("Intermediario", typeof(string)); // dtFinale.Columns.Add("ChiaveProdotto", typeof(string)); // dtFinale.Columns.Add("NomeProdotto", typeof(string)); // dtFinale.Columns.Add("Controvalore", typeof(string)); // dtFinale.Columns.Add("Versatonetto", typeof(string)); // dtFinale.Columns.Add("Utileperdita", typeof(string)); // dtFinale.Columns.Add("Rischiocredito", typeof(string)); // dtFinale.Columns.Add("VaR", typeof(string)); // foreach (DataRow it in dati.Tables["categorie"+i].Rows) // { // dtFinale.Rows.Add(it["Categoria"].ToString(),it["ChiaveProdotto"].ToString(), it["NomeProdotto"].ToString(), it["Controvalore"].ToString(), it["Versatonetto"].ToString(), it["Utileperdita"].ToString(), it["Rischiocredito"].ToString(), it["VaR"].ToString()); // } // for (int b = 0; b < dtCategoria.Rows.Count; b++) // { // //for (int c = 0; c < dtCategoriaFooter.Rows.Count; c++) // { // var categoria = dtFinale.Select("Categoria ='" + dtCategoria.Rows[b]["Categoria"].ToString() + "'").CopyToDataTable();// : dati.Tables[0].Select("Categoria ='" + p["Categoria"].ToString() + "' AND Intermediario='" + p["Intermediario"].ToString() + "'").CopyToDataTable(); // var footer = dati.Tables["footer" + i].AsEnumerable().Where(o => o.Field("Categoria").Contains(dtCategoria.Rows[b]["Categoria"].ToString())).CopyToDataTable(); // var coperturaNota = dtCategoriaFooter.AsEnumerable().FirstOrDefault(o => o.Field("CategoriaString").Contains(dtCategoria.Rows[b]["Categoria"].ToString())); // bool notaproxyCat = categoria.AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0"); // bool tuttivarnc = categoria.AsEnumerable().All(o => o.Field("VaR").ToString() == "n.c." || o.Field("VaR").ToString() == "0,00" || o.Field("Categoria").ToString().ToLower().Contains("conti")); // string testoNotaProxy = notaproxyCat ? getNotaProxyVar() : ""; // decimal copertura = Convert.ToDecimal(footer.Rows[0]["Copertura"]); // bool notaGrado = getNota1(copertura).Length > 0; // string testoNotaGrado = notaGrado ? getNota1(copertura) : ""; // bool presenzaAsterischiProxy = categoria.AsEnumerable().Any(o => o.Field("VaR").ToString().Contains(notaGrado ? "**" : "*")); // AddElement(new SpacePDF(b > 0 ? 10 : 1)); // //AddElement(new FormattedTextAreaPDF(dtCategoria.Rows[i]["Categoria"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 9, FontBold = true }); // //AddElement(new SpacePDF(10)); // tabellaCategorie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, categoria, footer) // { // Style = Style.ConsulenzaUnica, // Footer = true, // AlternateRow = false, // ShowBorderLastLine = false, // HeaderHeight = 22, // //MinimumRowHeight = 27, // RowHeight = 17, // HeaderFontSize = 7, // TitleRow = true, // TitleRowText = dtCategoria.Rows[b]["Categoria"].ToString(), // TitleRowBorder = BorderTitleRowType.Nessuno, // TitleRowSpace = 14 // }; // tabellaCategorie.Columns.Add(new ColumnPDF("NomeProdotto", 200, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Descrizione") { HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Controvaloreattuale", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore
attuale (€)") { PaddingRight = 3, HeaderPaddingLeft = 5, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Versatonetto", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Versatonetto", "Versato
netto (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Utileperdita", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Utileperdita", "Utile/
Perdita (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.Columns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Rischiocredito", "Rischio
Credito") { HeaderFontSize = 7, HeaderPaddingLeft = 4, FontSize = 7, PaddingLeft = 4 }); // tabellaCategorie.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderPaddingLeft = 4, PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 }); // int a = 0; // foreach (var item in categoria.Rows) // { // tabellaCategorie.Cells[1, a].HorizontalAlignment = // tabellaCategorie.Cells[2, a].HorizontalAlignment = // tabellaCategorie.Cells[3, a].HorizontalAlignment = // tabellaCategorie.Cells[4, a].HorizontalAlignment = // tabellaCategorie.Cells[5, a].HorizontalAlignment = HorizontalAlignmentType.Destra; // a++; // } // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Totale", 200, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Controvaloreattuale", 75, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Versatonetto", 75, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Utileperdita", 70, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); // tabellaCategorie.FooterColumns.Add(new ColumnPDF("VaRfooter", 40, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); // float y = tabellaCategorie.Y; // AddElement(tabellaCategorie); // if (notaGrado) // { // AddElement(new SpacePDF(10)); // AddElement(new FormattedTextAreaPDF("(*) " + testoNotaGrado, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); // } // if (notaproxyCat && !tuttivarnc && presenzaAsterischiProxy) // { // AddElement(new SpacePDF(7)); // string ast = notaGrado ? "(**) " : "(*) "; // AddElement(new FormattedTextAreaPDF(ast + testoNotaProxy, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); // } // AddElement(new SpacePDF(8)); // } // } // } // } // #endregion //} protected override sealed void Draw() { var dati = GetDataSet(); TablePDF tabellaCategorie = null; // Modifiche 20190628 per Evolutiva string sVerticalText; if (EnvironmentFacade.ReportEnvironment.ReportType.Equals(ReportType.Unica_Nucleo)) { sVerticalText = ""; } else { sVerticalText = "Le eventuali informazioni riguardanti investimenti da lei detenuti presso altri intermediari vengono elaborate secondo le indicazioni da lei "; if (EnvironmentFacade.ReportEnvironment.PrivateBanker.CodiceRete.Equals("F")) { sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Fideuram non garantisce la completezza e la veridicità. "; sVerticalText = sVerticalText + "La preghiamo di comunicare a Fideuram ogni successiva variazione a tali informazioni, al fine di consentire a Fideuram la correzione e l’aggiornamento dei dati contenuti "; sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Fideuram con finalità meramente informative e secondo le indicazioni da lei fornite, "; sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale."; } else { sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Sanpaolo Invest SIM non garantisce la completezza e la veridicità. "; sVerticalText = sVerticalText + "La preghiamo di comunicare a Sanpaolo Invest SIM ogni successiva variazione a tali informazioni, al fine di consentire a Sanpaolo Invest SIM la correzione e l’aggiornamento dei dati contenuti "; sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Sanpaolo Invest SIM con finalità meramente informative e secondo le indicazioni da lei fornite, "; sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale."; } } FormattedTextAreaPDF testoPaginaVerticale = null; testoPaginaVerticale = new FormattedTextAreaPDF(sVerticalText, EnvironmentFacade.RendererFacade.XLeftLimit - 35, 620) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 5, TextVerticalDirection = true, Y = 745 }; // Fine Modifiche #region Raggruppamento per Categoria if (raggruppamentoCategoria()) { AddElement(new PagePDF(PagePDF.PagePDFType.Generic) { ID = "pagina1" }); var intestazione = new SectionHeadingPDF( getTitolo(), EnvironmentFacade.RendererFacade.XLeftLimit, EnvironmentFacade.RendererFacade.YUpperLimit, EnvironmentFacade.ReportEnvironment.FontFamily); AddElement(intestazione.ToElement()); // Modifiche 20190628 per Evolutiva //AddElement(new SpacePDF(20)); // Fine Modifiche AddElement(new FormattedTextAreaPDF(getTestoIntro(), EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 }); AddElement(new SpacePDF(15)); DataView view = new DataView(dati.Tables["categorie"].AsEnumerable().OrderBy(o => o.Field("Ordinamento")).CopyToDataTable()); DataTable dtCategoria = view.ToTable(true, "Categoria"); DataTable dtFinale = new DataTable(); dtFinale.Columns.Add("Categoria", typeof(string)); dtFinale.Columns.Add("Intermediario", typeof(string)); dtFinale.Columns.Add("ChiaveProdotto", typeof(string)); dtFinale.Columns.Add("NomeProdotto", typeof(string)); dtFinale.Columns.Add("Controvalore", typeof(string)); dtFinale.Columns.Add("Versatonetto", typeof(string)); dtFinale.Columns.Add("Utileperdita", typeof(string)); dtFinale.Columns.Add("Rischiocredito", typeof(string)); dtFinale.Columns.Add("VaR", typeof(string)); foreach (DataRow it in dati.Tables["categorie"].Rows) { dtFinale.Rows.Add(it["Categoria"].ToString(), it["Intermediario"].ToString(), it["ChiaveProdotto"].ToString(), it["NomeProdotto"].ToString(), it["Controvalore"].ToString(), it["Versatonetto"].ToString(), it["Utileperdita"].ToString(), it["Rischiocredito"].ToString(), it["VaR"].ToString()); } for (int i = 0; i < dtCategoria.Rows.Count; i++) { var categoria = dtFinale.Select("Categoria ='" + dtCategoria.Rows[i]["Categoria"].ToString() + "'").CopyToDataTable();// : dati.Tables[0].Select("Categoria ='" + p["Categoria"].ToString() + "' AND Intermediario='" + p["Intermediario"].ToString() + "'").CopyToDataTable(); var footer = dati.Tables["categorieFooter"].AsEnumerable().Where(o => o.Field("Categoria").Contains(dtCategoria.Rows[i]["Categoria"].ToString())).CopyToDataTable(); bool notaproxyCat = categoria.AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0"); decimal copertura = Convert.ToDecimal(footer.Rows[0]["Copertura"]); bool notaGrado = getNota1(copertura).Length > 0; string testoNotaGrado = getNota1(copertura); bool presenzaAsterischiProxy = categoria.AsEnumerable().Any(o => o.Field("VaR").ToString().Contains(notaGrado ? "**" : "*")); string testoNotaProxy = notaproxyCat ? getNotaProxyVar() : ""; bool tuttivarnc = categoria.AsEnumerable().All(o => o.Field("VaR").ToString() == "n.c." || o.Field("VaR").ToString() == "0,00" || o.Field("Categoria").ToString().ToLower().Contains("conti")); tabellaCategorie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, categoria, footer) { Style = Style.ConsulenzaUnica, Footer = true, AlternateRow = false, ShowBorderLastLine = false, HeaderHeight = 22, //MinimumRowHeight = 27, //RowHeight = 27, HeaderFontSize = 7, ID = dtCategoria.Rows[i]["Categoria"].ToString(), TitleRow = true, TitleRowText = dtCategoria.Rows[i]["Categoria"].ToString(), TitleRowBorder = BorderTitleRowType.Nessuno, TitleRowSpace = 15, //, PageBreak = true }; tabellaCategorie.Columns.Add(new ColumnPDF("Intermediario", 105, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Intermediario", "Intermediario") { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("NomeProdotto", 120, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Descrizione") { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Controvaloreattuale", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore
attuale (€)") { PaddingRight = 3, HeaderPaddingLeft = 5, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Versatonetto", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Versatonetto", "Versato
netto (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Utileperdita", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Utileperdita", "Utile/
Perdita (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Rischiocredito", "Rischio
Credito") { HeaderFontSize = 7, HeaderPaddingLeft = 4, FontSize = 7, PaddingLeft = 4 }); tabellaCategorie.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderPaddingLeft = 4, PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 }); int a = 0; foreach (var item in categoria.Rows) { tabellaCategorie.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[4, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[5, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[6, a].HorizontalAlignment = HorizontalAlignmentType.Destra; a++; } tabellaCategorie.FooterColumns.Add(new ColumnPDF("Totale", 225, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Controvaloreattuale", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Versatonetto", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Utileperdita", 65, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 3, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("VaRfooter", 40, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { PaddingRight = 2, HeaderFontSize = 7, FontSize = 7 }); AddElement(tabellaCategorie); if (notaGrado) { AddElement(new SpacePDF(10)); AddElement(new FormattedTextAreaPDF("(*) " + testoNotaGrado, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } if (notaproxyCat && !tuttivarnc && presenzaAsterischiProxy) { AddElement(new SpacePDF(7)); string ast = notaGrado ? "(**) " : "(*) "; AddElement(new FormattedTextAreaPDF(ast + testoNotaProxy, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } AddElement(new SpacePDF(8)); } } #endregion #region stampa per intermediari else { for (int i = 0; i < dati.Tables["Intermediari"].Rows.Count; i++) { NomeIntermediario = "«" + dati.Tables["Intermediari"].Rows[i]["NomeIntermediario"].ToString() + "»"; AddElement(new PagePDF(PagePDF.PagePDFType.Generic)); var intestazione = new SectionHeadingPDF( string.Format(getTitolo(), NomeIntermediario), EnvironmentFacade.RendererFacade.XLeftLimit, EnvironmentFacade.RendererFacade.YUpperLimit, EnvironmentFacade.ReportEnvironment.FontFamily); AddElement(intestazione.ToElement()); // Modifiche 20190628 per Evolutiva //AddElement(new SpacePDF(20)); // Fine Modifiche AddElement(new FormattedTextAreaPDF(getTestoIntro(), EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 }); //DataView view = new DataView(dati.Tables["categorie" + i]); DataView view = new DataView(dati.Tables["categorie" + i].AsEnumerable().OrderBy(o => o.Field("Ordinamento")).CopyToDataTable()); DataView view2 = new DataView(dati.Tables["footer" + i]); DataTable dtCategoria = view.ToTable(true, "Categoria"); DataTable dtCategoriaFooter = view2.ToTable(true, "Copertura", "CategoriaString"); DataTable dtFinale = new DataTable(); dtFinale.Columns.Add("Categoria", typeof(string)); // dtFinale.Columns.Add("Intermediario", typeof(string)); dtFinale.Columns.Add("ChiaveProdotto", typeof(string)); dtFinale.Columns.Add("NomeProdotto", typeof(string)); dtFinale.Columns.Add("Controvalore", typeof(string)); dtFinale.Columns.Add("Versatonetto", typeof(string)); dtFinale.Columns.Add("Utileperdita", typeof(string)); dtFinale.Columns.Add("Rischiocredito", typeof(string)); dtFinale.Columns.Add("VaR", typeof(string)); foreach (DataRow it in dati.Tables["categorie" + i].Rows) { dtFinale.Rows.Add(it["Categoria"].ToString(), it["ChiaveProdotto"].ToString(), it["NomeProdotto"].ToString(), it["Controvalore"].ToString(), it["Versatonetto"].ToString(), it["Utileperdita"].ToString(), it["Rischiocredito"].ToString(), it["VaR"].ToString()); } for (int b = 0; b < dtCategoria.Rows.Count; b++) { //for (int c = 0; c < dtCategoriaFooter.Rows.Count; c++) { var categoria = dtFinale.Select("Categoria ='" + dtCategoria.Rows[b]["Categoria"].ToString() + "'").CopyToDataTable();// : dati.Tables[0].Select("Categoria ='" + p["Categoria"].ToString() + "' AND Intermediario='" + p["Intermediario"].ToString() + "'").CopyToDataTable(); var footer = dati.Tables["footer" + i].AsEnumerable().Where(o => o.Field("Categoria").Contains(dtCategoria.Rows[b]["Categoria"].ToString())).CopyToDataTable(); var coperturaNota = dtCategoriaFooter.AsEnumerable().FirstOrDefault(o => o.Field("CategoriaString").Contains(dtCategoria.Rows[b]["Categoria"].ToString())); bool notaproxyCat = categoria.AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0"); bool tuttivarnc = categoria.AsEnumerable().All(o => o.Field("VaR").ToString() == "n.c." || o.Field("VaR").ToString() == "0,00" || o.Field("Categoria").ToString().ToLower().Contains("conti")); string testoNotaProxy = notaproxyCat ? getNotaProxyVar() : ""; decimal copertura = Convert.ToDecimal(footer.Rows[0]["Copertura"]); bool notaGrado = getNota1(copertura).Length > 0; string testoNotaGrado = notaGrado ? getNota1(copertura) : ""; bool presenzaAsterischiProxy = categoria.AsEnumerable().Any(o => o.Field("VaR").ToString().Contains(notaGrado ? "**" : "*")); AddElement(new SpacePDF(b > 0 ? 10 : 1)); //AddElement(new FormattedTextAreaPDF(dtCategoria.Rows[i]["Categoria"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 9, FontBold = true }); //AddElement(new SpacePDF(10)); tabellaCategorie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, categoria, footer) { Style = Style.ConsulenzaUnica, Footer = true, AlternateRow = false, ShowBorderLastLine = false, HeaderHeight = 22, //MinimumRowHeight = 27, RowHeight = 17, HeaderFontSize = 7, TitleRow = true, TitleRowText = dtCategoria.Rows[b]["Categoria"].ToString(), TitleRowBorder = BorderTitleRowType.Nessuno, TitleRowSpace = 14 }; tabellaCategorie.Columns.Add(new ColumnPDF("NomeProdotto", 200, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "NomeProdotto", "Descrizione") { HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Controvaloreattuale", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore
attuale (€)") { PaddingRight = 3, HeaderPaddingLeft = 5, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Versatonetto", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Versatonetto", "Versato
netto (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Utileperdita", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Utileperdita", "Utile/
Perdita (€)") { PaddingRight = 3, HeaderPaddingLeft = 7, HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Rischiocredito", "Rischio
Credito") { HeaderFontSize = 7, HeaderPaddingLeft = 4, FontSize = 7, PaddingLeft = 4 }); tabellaCategorie.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderPaddingLeft = 4, PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 }); int a = 0; foreach (var item in categoria.Rows) { tabellaCategorie.Cells[1, a].HorizontalAlignment = tabellaCategorie.Cells[2, a].HorizontalAlignment = tabellaCategorie.Cells[3, a].HorizontalAlignment = tabellaCategorie.Cells[4, a].HorizontalAlignment = tabellaCategorie.Cells[5, a].HorizontalAlignment = HorizontalAlignmentType.Destra; a++; } tabellaCategorie.FooterColumns.Add(new ColumnPDF("Totale", 200, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Controvaloreattuale", 75, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Versatonetto", 75, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Utileperdita", 70, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 3 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Rischiocredito", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("VaRfooter", 40, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); float y = tabellaCategorie.Y; AddElement(tabellaCategorie); if (notaGrado) { AddElement(new SpacePDF(10)); AddElement(new FormattedTextAreaPDF("(*) " + testoNotaGrado, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } if (notaproxyCat && !tuttivarnc && presenzaAsterischiProxy) { AddElement(new SpacePDF(7)); string ast = notaGrado ? "(**) " : "(*) "; AddElement(new FormattedTextAreaPDF(ast + testoNotaProxy, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } AddElement(new SpacePDF(8)); } } } } #endregion // Modifiche 20190628 per Evolutiva var listaOggettiDaRipetere = new List { testoPaginaVerticale }; //AddElement(listaOggettiDaRipetere); AddElement(new RepeaterPDF(listaOggettiDaRipetere)); // Fine Modifiche } /// /// 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() { var ds = new DataSet(); var intermediari = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.intermediari; var prometeiaInfosCategoria = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.prometeiaInfosCategoria; var distribuzione = datiSeiUnico.patrimonioUnit().patrimonioTerzi.categoria.distribuzione; var categoriaDisplayInfos = datiSeiUnico.displayInfos().categoriaDisplayInfos; var dettaglioProdotti = datiSeiUnico.patrimonioUnit().patrimonioTerzi.dettaglioProdotti.dettaglioProdotti; #region categoria if (raggruppamentoCategoria()) { #region colonne tabelle ds.Tables.Add(new DataTable("categorie")); ds.Tables.Add(new DataTable("categorieFooter")); ds.Tables["categorie"].Columns.Add(new DataColumn("Categoria", typeof(string))); ds.Tables["categorie"].Columns.Add(new DataColumn("Intermediario", typeof(string))); ds.Tables["categorie"].Columns.Add(new DataColumn("NomeProdotto", typeof(string))); ds.Tables["categorie"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables["categorie"].Columns.Add(new DataColumn("Versatonetto", typeof(decimal))); ds.Tables["categorie"].Columns.Add(new DataColumn("Utileperdita", typeof(decimal))); ds.Tables["categorie"].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables["categorie"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["categorie"].Columns.Add(new DataColumn("Ordinamento", typeof(int))); ds.Tables["categorie"].Columns.Add(new DataColumn("ChiaveProdotto", typeof(string))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Categoria", typeof(string))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Versatonetto", typeof(decimal))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Utileperdita", typeof(decimal))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("VaRfooter", typeof(string))); ds.Tables["categorieFooter"].Columns.Add(new DataColumn("Copertura", typeof(decimal))); #endregion foreach (var categoria in prometeiaInfosCategoria) { foreach (var posizione in dettaglioProdotti) { if (posizione.prodotto.alberatura.livello2.Equals(categoria.key)) { if (!_elencocategorie.Contains(posizione.prodotto.alberatura.livello2)) _elencocategorie.Add(posizione.prodotto.alberatura.livello2); var order = categoriaDisplayInfos.FirstOrDefault(o => o.key.Equals(categoria.key.ToUpper().Replace(" ", ""))); var coperturaProdotto = posizione.prodotto; bool notavargrado = posizione.prodotto.alberatura.livello2.ToLower().Contains("conti") ? false : getNota1(categoria.value.stat.copertura).Length > 0; DataRow dr = ds.Tables["categorie"].NewRow(); var categoriaLivello = posizione.prodotto.alberatura.livello2; dr["Categoria"] = categoriaLivello; dr["Intermediario"] = posizione.nomeIntermediario; dr["NomeProdotto"] = posizione.prodotto.nomeProdotto; dr["Controvalore"] = posizione.ctv; dr["Versatonetto"] = posizione.versamentoNetto; dr["Utileperdita"] = posizione.utilePerdita; dr["Rischiocredito"] = (categoriaLivello.ToLower().Contains("conti") && posizione.ctv < 0) ? "n.c." : posizione.prodotto.rischioCreditoDecodificato; dr["VaR"] = (categoriaLivello.ToLower().Contains("conti") && posizione.ctv < 0) ? "n.c." : (posizione.prodotto.chiaveProdotto == 0 && notavargrado && posizione.prodotto.varDecodificato.ToLower() != "n.c." ? posizione.prodotto.varDecodificato + "**" : posizione.prodotto.chiaveProdotto == 0 && !notavargrado && posizione.prodotto.varDecodificato.ToLower() != "n.c." && !posizione.prodotto.alberatura.livello2.ToLower().Contains("conti") ? posizione.prodotto.varDecodificato + "*" : posizione.prodotto.varDecodificato); dr["Ordinamento"] = order.value.order; dr["ChiaveProdotto"] = posizione.prodotto.chiaveProdotto; ds.Tables["categorie"].Rows.Add(dr); if ((posizione.prodotto.varDecodificato.Replace(".", ",").Equals("0,00") && categoriaLivello.ToLower().Contains("conti")) && posizione.ctv > 0) dr["VaR"] = "0,00"; } else { } } } ds.Tables["categorie"].AsEnumerable().OrderByDescending(o => o.Field("Controvalore")).CopyToDataTable(); foreach (string cat in _elencocategorie) { var prometeiaInfo = (from o in prometeiaInfosCategoria where o.key == cat select o.value).FirstOrDefault(); ds.Tables["categorieFooter"].Rows.Add(string.Format("Totale {0}",cat), Convert.ToDecimal(ds.Tables["categorie"].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Controvalore)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["categorie"].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Versatonetto)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables["categorie"].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Utileperdita)", string.Empty)).ToString(), "", prometeiaInfo.varDecodificato + (getNota1(prometeiaInfo.stat.copertura).Length > 0 ? "*" : ""), prometeiaInfo.stat.copertura // distribuzione.elencoSlice.Where(o => o.descrizione.Equals(cat)).FirstOrDefault().prometeiaInfo.varDecodificato + (getNota1(cat).Length > 0 && ds.Tables["categorie"].AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0") ? "*" : "") ); } } #endregion #region intermediari else { if (intermediari != null) { ds.Tables.Add(new DataTable("Intermediari")); ds.Tables["Intermediari"].Columns.Add(new DataColumn("NomeIntermediario", typeof(string))); ds.Tables["Intermediari"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); //per ordinamento: quale scheda di intermediario stampare prima //ds.Tables["Intermediari"].Columns.Add(new DataColumn("NotaProxy", typeof(bool))); int i = 0; foreach (var item in from o in intermediari orderby o.ctvIntermediario descending select o) //pagina si ripete per ogni intermediario della lista { var categoriePrometeia = item.prometeiaInfosCategoria; var listaprodotti = dettaglioProdotti.Where(o => o.nomeIntermediario.Equals(item.nomeIntermediario)); ds.Tables["Intermediari"].Rows.Add(item.nomeIntermediario, item.ctvIntermediario); string categorie = "categorie" + i; string footer = "footer" + i; ds.Tables.Add(new DataTable(categorie)); ds.Tables.Add(new DataTable(footer)); string categoriacurr = ""; if (listaprodotti.Count() > 0) { ds.Tables[categorie].Columns.Add(new DataColumn("Categoria", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("Intermediario", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("NomeProdotto", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables[categorie].Columns.Add(new DataColumn("Versatonetto", typeof(decimal))); ds.Tables[categorie].Columns.Add(new DataColumn("Utileperdita", typeof(decimal))); ds.Tables[categorie].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("ChiaveProdotto", typeof(string))); ds.Tables[categorie].Columns.Add(new DataColumn("Ordinamento", typeof(int))); ds.Tables[footer].Columns.Add(new DataColumn("Categoria", typeof(string))); ds.Tables[footer].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables[footer].Columns.Add(new DataColumn("Versatonetto", typeof(decimal))); ds.Tables[footer].Columns.Add(new DataColumn("Utileperdita", typeof(decimal))); ds.Tables[footer].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables[footer].Columns.Add(new DataColumn("VaRfooter", typeof(string))); ds.Tables[footer].Columns.Add(new DataColumn("Copertura", typeof(decimal))); ds.Tables[footer].Columns.Add(new DataColumn("CategoriaString", typeof(string))); foreach (var prodotto in listaprodotti) { var order = categoriaDisplayInfos.FirstOrDefault(o => o.key.Equals(prodotto.prodotto.alberatura.livello2.ToUpper().Replace(" ", ""))); if (!_elencocategorie.Contains(prodotto.prodotto.alberatura.livello2)) _elencocategorie.Add(prodotto.prodotto.alberatura.livello2); categoriacurr = prodotto.prodotto.alberatura.livello2; decimal var = categoriePrometeia.FirstOrDefault(o => o.key.Equals(categoriacurr)).value.stat.copertura; bool notavargrado = prodotto.prodotto.alberatura.livello2.ToLower().Contains("conti") ? false : getNota1(var).Length > 0; var VaR = prodotto.prodotto.alberatura.livello2.ToLower().Contains("conti") && prodotto.ctv < 0 ? "n.c." : ""; ds.Tables[categorie].Rows.Add(prodotto.prodotto.alberatura.livello2, prodotto.nomeIntermediario, prodotto.prodotto.nomeProdotto, prodotto.ctv, prodotto.versamentoNetto, prodotto.utilePerdita, (VaR.Equals("") ? prodotto.prodotto.rischioCreditoDecodificato : VaR), VaR.Equals("") ? (prodotto.prodotto.chiaveProdotto == 0 && notavargrado && prodotto.prodotto.varDecodificato.ToLower() != "n.c." && !prodotto.prodotto.varDecodificato.Replace(".", ",").Equals("0,00") ? prodotto.prodotto.varDecodificato + "**" : prodotto.prodotto.chiaveProdotto == 0 && !notavargrado && prodotto.prodotto.varDecodificato.ToLower() != "n.c." && !prodotto.prodotto.varDecodificato.Replace(".", ",").Equals("0,00") && !prodotto.prodotto.alberatura.livello2.ToLower().Contains("conti") ? prodotto.prodotto.varDecodificato + "*" : prodotto.prodotto.varDecodificato) : VaR, prodotto.prodotto.chiaveProdotto, order.value.order ); } ds.Tables[categorie].AsEnumerable().OrderByDescending(o => o.Field("Controvalore")).CopyToDataTable(); foreach (string cat in _elencocategorie) { if (ds.Tables[categorie].AsEnumerable().FirstOrDefault(o => o.Field("Categoria") == cat) != null) { var prometeiaCategoria = categoriePrometeia.FirstOrDefault(o => o.key.Equals(cat)).value; ds.Tables[footer].Rows.Add(string.Format("Totale {0}", cat), Convert.ToDecimal(ds.Tables[categorie].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Controvalore)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables[categorie].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Versatonetto)", string.Empty)).ToString(), Convert.ToDecimal(ds.Tables[categorie].AsEnumerable().Where(o => o.Field("Categoria") == cat).CopyToDataTable().Compute("Sum(Utileperdita)", string.Empty)).ToString(), "", prometeiaCategoria.varDecodificato + ((getNota1(prometeiaCategoria.stat.copertura).Length > 0) ? "*" : ""),//Helper.FormatDecimal(patrimonioTerzi.categoria.distribuzione.elencoSlice.Where(o => o.descrizione.ToLower().Equals(cat.ToLower())).FirstOrDefault().prometeiaInfo.varDecodificato.ToString(), 2) + (getNota1(cat).Length > 0 /*&& ds.Tables[categorie].AsEnumerable().Any(o => o.Field("ChiaveProdotto").ToString() == "0")*/ ? "*" : "") prometeiaCategoria.stat.copertura, cat ); } } } i++; } ds.Tables["Intermediari"].AsEnumerable().OrderByDescending(o => o.Field("Controvalore")).CopyToDataTable(); } } #endregion return ds; } public virtual bool raggruppamentoCategoria() { return GetOption().Valore.Equals("S"); } public virtual string getTitolo() { return raggruppamentoCategoria() ? "Patrimonio altri Istituti: dettaglio prodotti" : "Patrimonio altri Istituti: {0}"; } public virtual string getTestoIntro() { string testo = ""; testo = !raggruppamentoCategoria() ? "In questa scheda sono riportati i prodotti che lei detiene presso " + NomeIntermediario + ", raggruppati secondo le categorie di appartenenza, con indicazione del relativo intermediario." : "In questa scheda sono riportati i prodotti che lei detiene presso altri Istituti, raggruppati secondo la categoria di appartenenza, con indicazione del relativo intermediario."; return testo; } public virtual string getNota1(string categoria) { string nota = ""; return ""; var gradoCopertura = datiSeiUnico.patrimonioUnit().patrimonioTerzi.categoria.distribuzione.elencoSlice.Where(o => o.descrizione.Equals(categoria)).FirstOrDefault().prometeiaInfo.stat.copertura; if (gradoCopertura < 100 && gradoCopertura > 0) { try { nota = string.Format("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", gradoCopertura == 0 ? gradoCopertura.ToString() : Helper.FormatCurrency(gradoCopertura.ToString())); } catch { nota = ""; } } return nota; } public virtual string getNota1(decimal copertura) { string nota = ""; if (copertura > 0 && copertura < 100) { try { nota = string.Format("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", copertura == 0 ? copertura.ToString() : Helper.FormatCurrency(copertura.ToString())); } catch { nota = ""; } } return nota; } public virtual string getNotaProxyVar() { return "Non è stato possibile calcolare il rischio dei prodotti contrassegnati sulla base delle loro specifiche caratteristiche. Il VaR indicato è calcolato in modo approssimato utilizzando gli indici di mercato associati all'asset allocation da lei fornita."; } } }