using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportCommon; using System.Linq; using System.Collections.Generic; using Consulenza.ReportWriter.Business.Entity; using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// S65.PropostaProdottiNonRappresentabili idSezione = 108 /// public class S65 : Entity.Section { /// /// /// public S65(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { if (!datiSeiUnico.isVincolo("prodottiCasa_nonrappPro")) Draw(); } catch (Exception ex) { SectionLogger.Write("S65", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { //AddElement(new SpacePDF(15)); var dati = GetDataSet(); bool isAdeguata = (bool)datiSeiUnico.flagAdeguatezzaPro(); AddElement(new PagePDF(PagePDF.PagePDFType.Generic)); var intestazione = new SectionHeadingPDF( (isAdeguata ? "Proposta" : "Operazioni richieste") + ": prodotti non rappresentabili", EnvironmentFacade.RendererFacade.XLeftLimit, EnvironmentFacade.RendererFacade.YUpperLimit, EnvironmentFacade.ReportEnvironment.FontFamily); AddElement(intestazione.ToElement()); if (showAsset() && dati.Tables["prodottoPerAreaAsset"].Rows.Count > 0) { #region Testo Introduttivo Asset var titolo = "Prodotti non rappresentabili per asset class"; AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(titolo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 9, FontBold = true }); AddElement(new SpacePDF(20)); AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(15)); #endregion #region Tabella dei prodotti non rappresentabili - Asset var tabellaAsset = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["prodottoPerAreaAsset"], dati.Tables["nonRappresentabiliAssetFooter"]) { Style = Style.ConsulenzaUnica, Header = true, Footer = true, AlternateRow = false, HeaderHeight = 25, HeaderMargin = 2 }; #region Columns e Footer tabellaAsset.Columns.Add(new ColumnPDF("Immagine", 110 + 15, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Objectpdf, "CodiceContratto", "Codice
contratto") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingLeft = 2 }); //tabellaEsposizione.Columns.Add(new ColumnPDF("DataSottoscrizione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data
sottoscrizione") { BackgroundColor = ColorPDF.Bianco }); //tabellaEsposizione.Columns.Add(new ColumnPDF("CodiceContratto", 110+15, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Codicecontratto", "Codice
contratto") { HeaderFontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaAsset.Columns.Add(new ColumnPDF("Descrizione", 245, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaAsset.Columns.Add(new ColumnPDF("ControvaloreProposto", 90, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Decimale, "ControvaloreProposto", "Controvalore
" + (isAdeguata ? "proposto" : "prospettico") + " (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaAsset.Columns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, PaddingRight = 4, FontSize = 7, BackgroundColor = ColorPDF.Bianco }); tabellaAsset.FooterColumns.Add(new ColumnPDF("Totale", 370, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaAsset.FooterColumns.Add(new ColumnPDF("ControvaloreProposto", 90, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 }); tabellaAsset.FooterColumns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 5 }); //tabellaAsset.Columns.Add(new ColumnPDF("Immagine", 15, HorizontalAlignmentType.Sinistra, false, false, 6, ColumnType.Objectpdf, string.Empty, string.Empty) { DeltaYContent = 4, PaddingLeft = 2 }); ////tabellaAsset.Columns.Add(new ColumnPDF("DataSottoscrizione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data
sottoscrizione") { BackgroundColor = ColorPDF.Bianco }); //tabellaAsset.Columns.Add(new ColumnPDF("CodiceContratto", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Codicecontratto", "Codice contratto") {HeaderFontSize=7,PaddingRight=4, BackgroundColor = ColorPDF.Bianco }); //tabellaAsset.Columns.Add(new ColumnPDF("Descrizione", 245, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderFontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); //tabellaAsset.Columns.Add(new ColumnPDF("ControvaloreProposto", 90, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Decimale, "ControvaloreProposto", "Controvalore
proposto (€)") { HeaderFontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); //tabellaAsset.Columns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); //tabellaAsset.FooterColumns.Add(new ColumnPDF("Totale", 375, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo)); //tabellaAsset.FooterColumns.Add(new ColumnPDF("ControvaloreProposto", 90, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { PaddingLeft = 2, PaddingRight = 5 }); //tabellaAsset.FooterColumns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { PaddingRight = 4 }); #endregion #region Cells int i = 0; foreach (DataRow rw in dati.Tables["prodottoPerAreaAsset"].Rows) { var isTotal = Convert.ToBoolean(rw["IsTotal"]); var isSubTotal = Convert.ToBoolean(rw["IsSubTotal"]); if (isTotal || isSubTotal) { if (isTotal) { // Sfondo grigio per la riga identificata con isTotal [quella di intestazione di area] for (int c = 0; c < tabellaAsset.Columns.Count; c++) { tabellaAsset.Cells[c, i].BackgroundColor = isSubTotal ? ColorPDF.Bianco : ColorPDF.Standard_Grigio_SfondoColonnaTabella; tabellaAsset.Cells[c, i].FontBold = true; tabellaAsset.Cells[c, i].FontColor = ColorPDF.Nero; } // Simboli dell'area di bisogno var listaOggetti = new List { new RectanglePDF(8, 8, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())), new FormattedTextAreaPDF { Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione, FontBold = true, FontColor = ColorPDF.Bianco, DeltaX = 2, FontSize = 7, }, new FormattedTextAreaPDF { Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Nome, FontBold = true, FontColor = ColorPDF.Nero, DeltaX = 12F, FontSize = 7 } }; //Quadrato colorato indicatore Area tabellaAsset.Cells[0, i].ValueObjectList.AddRange(listaOggetti); } if (isSubTotal) { var stringa = rw["CodiceContratto"].ToString(); tabellaAsset.Cells[0, i].ValueObject = new FormattedTextAreaPDF { Text = stringa, FontBold = true, FontColor = ColorPDF.Nero, DeltaX = 2F, FontSize = 7, Width = 130 }; } } else { var stringa = rw["CodiceContratto"].ToString(); tabellaAsset.Cells[0, i].ValueObject = new FormattedTextAreaPDF { Text = stringa, FontBold = false, FontColor = ColorPDF.Nero, DeltaX = 2F, FontSize = 7, Width = 130, DeltaY = 1 }; } tabellaAsset.Cells[2, i].HorizontalAlignment = tabellaAsset.Cells[3, i].HorizontalAlignment = HorizontalAlignmentType.Destra; i++; } //{ // var isTotal = Convert.ToBoolean(rw["IsTotal"]); // var isSubTotal = Convert.ToBoolean(rw["IsSubTotal"]); // if (isTotal) // { // // Sfondo grigio per la riga identificata con isTotal [quella di intestazione di area] // for (int c = 0; c < tabellaAsset.Columns.Count; c++) // tabellaAsset.Cells[c, i].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella; // // Simboli dell'area di bisogno // var listaOggetti = new List // { // new RectanglePDF(10, 10, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())), // new FormattedTextAreaPDF // { // Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione, // FontBold = true, // FontSize=7, // FontColor = ColorPDF.Bianco, // DeltaX = 2 // } // }; // //Quadrato colorato indicatore Area // tabellaAsset.Cells[0, i].ValueObjectList.AddRange(listaOggetti); // } // tabellaAsset.Cells[3, i].HorizontalAlignment = // tabellaAsset.Cells[4, i].HorizontalAlignment = HorizontalAlignmentType.Destra; // i++; //} #endregion AddElement(tabellaAsset); #endregion AddElement(new SpacePDF(20)); } if (showValutaria() && dati.Tables["prodottoPerAreaEsposizione"].Rows.Count > 0) { #region Testo Introduttivo Valutaria var titolo = "Prodotti non rappresentabili per esposizione valutaria"; AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(titolo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 9, FontBold = true }); AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(getTesto2(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize=7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify}); AddElement(new SpacePDF(15)); #endregion #region Tabella dei prodotti non rappresentabili - Esposizione Valutaria var tabellaEsposizione = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["prodottoPerAreaEsposizione"], dati.Tables["nonRappresentabiliEsposizioneFooter"]) { Style = Style.ConsulenzaUnica, Header = true, Footer = true, AlternateRow = false, HeaderHeight = 25, HeaderMargin = 2 }; #region Columns e Footer tabellaEsposizione.Columns.Add(new ColumnPDF("Immagine", 110 + 15, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Objectpdf, "CodiceContratto", "Codice contratto") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingLeft = 2 }); //tabellaEsposizione.Columns.Add(new ColumnPDF("DataSottoscrizione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data
sottoscrizione") { BackgroundColor = ColorPDF.Bianco }); //tabellaEsposizione.Columns.Add(new ColumnPDF("CodiceContratto", 110+15, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Codicecontratto", "Codice
contratto") { HeaderFontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaEsposizione.Columns.Add(new ColumnPDF("Descrizione", 230, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaEsposizione.Columns.Add(new ColumnPDF("ControvaloreProposto", 105, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Decimale, "ControvaloreProposto", "Controvalore
" + (isAdeguata ? "proposto" : "prospettico") + " (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4, BackgroundColor = ColorPDF.Bianco }); tabellaEsposizione.Columns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, PaddingRight = 4, FontSize = 7, BackgroundColor = ColorPDF.Bianco }); tabellaEsposizione.FooterColumns.Add(new ColumnPDF("Totale", 355, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7 }); tabellaEsposizione.FooterColumns.Add(new ColumnPDF("ControvaloreProposto", 105, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 }); tabellaEsposizione.FooterColumns.Add(new ColumnPDF("VaR", 60, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Testo) { HeaderFontSize = 7, FontSize = 7, PaddingRight = 5}); #endregion #region Cells int i = 0; foreach (DataRow rw in dati.Tables["prodottoPerAreaEsposizione"].Rows) { var isTotal = Convert.ToBoolean(rw["IsTotal"]); var isSubTotal = Convert.ToBoolean(rw["IsSubTotal"]); if (isTotal || isSubTotal) { // Sfondo grigio per la riga identificata con isTotal [quella di intestazione di area] if (isTotal) { for (int c = 0; c < tabellaEsposizione.Columns.Count; c++) { tabellaEsposizione.Cells[c, i].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella; tabellaEsposizione.Cells[c, i].FontBold = true; tabellaEsposizione.Cells[c, i].FontColor = ColorPDF.Nero; } var listaOggetti = new List { new RectanglePDF(8, 8, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())), new FormattedTextAreaPDF { Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione, FontBold = true, FontColor = ColorPDF.Bianco, DeltaX = 2, FontSize = 7, }, new FormattedTextAreaPDF { Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Nome, FontBold = true, FontColor = ColorPDF.Nero, DeltaX = 12F, FontSize = 7 } }; //Quadrato colorato indicatore Area tabellaEsposizione.Cells[0, i].ValueObjectList.AddRange(listaOggetti); } if (isSubTotal) { for (int c = 0; c < tabellaEsposizione.Columns.Count; c++) { tabellaEsposizione.Cells[c, i].FontBold = true; tabellaEsposizione.Cells[c, i].FontColor = ColorPDF.Nero; } var stringa = rw["CodiceContratto"].ToString(); tabellaEsposizione.Cells[0, i].ValueObject = new FormattedTextAreaPDF { Text = stringa, FontBold = true, FontColor = ColorPDF.Nero, DeltaX = 2F, FontSize = 7, Width = 130 }; } } else { var stringa = rw["CodiceContratto"].ToString(); tabellaEsposizione.Cells[0, i].ValueObject = new FormattedTextAreaPDF { Text = stringa, FontBold = false, FontColor = ColorPDF.Nero, DeltaX = 2F, FontSize = 7, Width = 130, DeltaY = 1 }; } tabellaEsposizione.Cells[2, i].HorizontalAlignment = tabellaEsposizione.Cells[3, i].HorizontalAlignment = HorizontalAlignmentType.Destra; i++; } #endregion AddElement(tabellaEsposizione); #endregion } } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected override DataTable GetDataTable() { return null; } /// /// Recupera i dati necessari alla Section restituendo un DataSet. /// /// protected override DataSet GetDataSet() { #region Definizione Dataset const string stringReplaceIfZero = " "; var ds = new DataSet(); #endregion #region Estrazione ChiavePB + Servizi var chiaveClientePb = EnvironmentFacade.ReportEnvironment.Cliente.Chiave; var dataPiramideModello = datiSeiUnico.piramideModelloUnit().piramideModello.areaModello; var dettaglioProdotti = datiSeiUnico.propostaUnit().dettaglioProdotti; var dataProdottiNonRappresentabili_Asset = datiSeiUnico.propostaUnit().assetClass.distribuzionePerProdotti.listaProdotti.Where(o => o.rappresentabile == false); var dataProdottiNonRappresentabili_Esposizioni = datiSeiUnico.propostaUnit().esposizioneValutaria.distribuzionePerProdotti.listaProdotti.Where(o => o.rappresentabile == false); #endregion #region Asset - Prodotti non Rappresentabili ds.Tables.Add(new DataTable("nonRappresentabiliAsset")); ds.Tables["nonRappresentabiliAsset"].ExtendedProperties.Add("IndiceTabella", 1); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("DataSottoscrizione", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("CodiceContratto", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("ControvaloreProposto", typeof(decimal))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("IsTotal", typeof(bool))); ds.Tables["nonRappresentabiliAsset"].Columns.Add(new DataColumn("IsSubTotal", typeof(bool))); foreach (var prodotto in dataProdottiNonRappresentabili_Asset) { var itemPosizione = dettaglioProdotti.dettaglioProdotti.FirstOrDefault(o => o.chiaveAggregazione.Equals(prodotto.chiaveAggregazione)); var itemPiramideModello = dataPiramideModello.FirstOrDefault(o => o.area.ToLower().Trim().Equals(itemPosizione.area.ToLower().Trim())); if (itemPosizione.ctvPro != 0) { var rowProdotto = ds.Tables["nonRappresentabiliAsset"].NewRow(); rowProdotto["CodiceAreaBisogno"] = itemPosizione.area; rowProdotto["DescrizioneAreaBisogno"] = itemPosizione.descAreaEstesa; rowProdotto["OrdinamentoAreaBisogno"] = itemPiramideModello.ordinamento; rowProdotto["DescrizioneProgetto"] = itemPosizione.nomeProgetto; rowProdotto["DataSottoscrizione"] = itemPosizione.dtSottoscrizione.ToShortDateString(); rowProdotto["CodiceContratto"] = itemPosizione.codContratto; rowProdotto["Descrizione"] = itemPosizione.prodotto.nomeProdotto; rowProdotto["ControvaloreProposto"] = itemPosizione.ctvPro; rowProdotto["VaR"] = itemPosizione.prodotto.varProDec; rowProdotto["FontBold"] = false; rowProdotto["ReplaceIfZero"] = false; rowProdotto["CanLastRow"] = true; rowProdotto["IsTotal"] = false; rowProdotto["IsSubTotal"] = false; ds.Tables["nonRappresentabiliAsset"].Rows.Add(rowProdotto); } } #endregion #region Esposizione valutaria - Prodotti non rappresentabili ds.Tables.Add(new DataTable("nonRappresentabiliEsposizione")); ds.Tables["nonRappresentabiliEsposizione"].ExtendedProperties.Add("IndiceTabella", 3); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("DataSottoscrizione", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("CodiceContratto", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("ControvaloreProposto", typeof(decimal))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("IsTotal", typeof(bool))); ds.Tables["nonRappresentabiliEsposizione"].Columns.Add(new DataColumn("IsSubTotal", typeof(bool))); foreach (var prodotto in dataProdottiNonRappresentabili_Esposizioni) { var itemPosizione = dettaglioProdotti.dettaglioProdotti.FirstOrDefault(o => o.chiaveAggregazione.Equals(prodotto.chiaveAggregazione)); var itemPiramideModello = dataPiramideModello.FirstOrDefault(o => o.area.ToLower().Trim().Equals(itemPosizione.area.ToLower().Trim())); if (itemPosizione.ctvPro != 0) { var rowProdotto = ds.Tables["nonRappresentabiliEsposizione"].NewRow(); rowProdotto["CodiceAreaBisogno"] = itemPosizione.area; rowProdotto["DescrizioneAreaBisogno"] = itemPosizione.descAreaEstesa; rowProdotto["OrdinamentoAreaBisogno"] = itemPiramideModello.ordinamento; rowProdotto["DescrizioneProgetto"] = itemPosizione.nomeProgetto; rowProdotto["DataSottoscrizione"] = itemPosizione.dtSottoscrizione.ToShortDateString(); rowProdotto["CodiceContratto"] = itemPosizione.codContratto; rowProdotto["Descrizione"] = itemPosizione.prodotto.nomeProdotto; rowProdotto["ControvaloreProposto"] = itemPosizione.ctvPro; rowProdotto["VaR"] = itemPosizione.prodotto.varProDec; rowProdotto["FontBold"] = false; rowProdotto["ReplaceIfZero"] = false; rowProdotto["CanLastRow"] = true; rowProdotto["IsTotal"] = false; rowProdotto["IsSubTotal"] = false; ds.Tables["nonRappresentabiliEsposizione"].Rows.Add(rowProdotto); } } #endregion #region Raggruppamento per area di bisogno - Asset ds.Tables.Add(new DataTable("prodottoPerAreaAsset")); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("DataSottoscrizione", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("CodiceContratto", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("ControvaloreProposto", typeof(decimal))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("IsTotal", typeof(bool))); ds.Tables["prodottoPerAreaAsset"].Columns.Add(new DataColumn("IsSubTotal", typeof(bool))); #region Prodotti raggruppati per area - Asset var viewAree = new DataView(ds.Tables["nonRappresentabiliAsset"]/*.AsEnumerable().Where(o => o.Field("ControvaloreProposto") != 0).CopyToDataTable()*/) { Sort = "OrdinamentoAreaBisogno" }; var dtAree = viewAree.ToTable(true, "CodiceAreaBisogno", "DescrizioneAreaBisogno", "OrdinamentoAreaBisogno"); var area = string.Empty; var progetto = string.Empty; #region Prodotti foreach (DataRow rowAreaProgetto in dtAree.Rows) { area = rowAreaProgetto["CodiceAreaBisogno"].ToString(); if (new AreaBisogno(area).Visibile) { //Progetti var viewProgetti = new DataView(ds.Tables["nonRappresentabiliAsset"].Select("CodiceAreaBisogno='" + area + "'").OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable()); var dtProgetti = viewProgetti.ToTable(true, "DescrizioneProgetto"); var bIntestazioneArea = true; // la riga di intestazione dell'area va stampata una sola volta. var bItestazioneProgetto = area == "Inv" || area == "Pre"; // la riga di intestazione del progetto va stampata solo per area Inv e Pre. DataRow rowProdottiPerArea; foreach (DataRow itemProgetto in dtProgetti.Rows) { progetto = itemProgetto["DescrizioneProgetto"].ToString(); // Subset di prodotti filtrati per Area/Progetto var dtArea = ds.Tables["nonRappresentabiliAsset"].Select("CodiceAreaBisogno='" + area + "'").OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable(); var dtAreaProgetto = ds.Tables["nonRappresentabiliAsset"].Select("CodiceAreaBisogno='" + area + "' AND " + string.Format("DescrizioneProgetto ='{0}'", itemProgetto["DescrizioneProgetto"].ToString().Replace("'", "''"))).OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable(); if (bIntestazioneArea) { #region riga con background grigio di intestazione per ogni area rowProdottiPerArea = ds.Tables["prodottoPerAreaAsset"].NewRow(); rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"]; rowProdottiPerArea["CodiceContratto"] = rowAreaProgetto["DescrizioneAreaBisogno"]; //FARE // Totali per area rowProdottiPerArea["ControvaloreProposto"] = dtArea.AsEnumerable().Sum(p => p.Field("ControvaloreProposto")); rowProdottiPerArea["FontBold"] = true; rowProdottiPerArea["ReplaceIfZero"] = stringReplaceIfZero; rowProdottiPerArea["CanLastRow"] = false; rowProdottiPerArea["IsTotal"] = true; rowProdottiPerArea["IsSubTotal"] = false; ds.Tables["prodottoPerAreaAsset"].Rows.Add(rowProdottiPerArea); bIntestazioneArea = false; #endregion } if (bItestazioneProgetto) { #region Riga con background grigio di intestazione per ogni Progetto rowProdottiPerArea = ds.Tables["prodottoPerAreaAsset"].NewRow(); rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"]; rowProdottiPerArea["CodiceContratto"] = progetto; // Totali per area rowProdottiPerArea["ControvaloreProposto"] = dtArea.AsEnumerable().Sum(p => p.Field("ControvaloreProposto")); rowProdottiPerArea["FontBold"] = true; rowProdottiPerArea["ReplaceIfZero"] = stringReplaceIfZero; rowProdottiPerArea["CanLastRow"] = false; rowProdottiPerArea["IsTotal"] = false; rowProdottiPerArea["IsSubTotal"] = true; ds.Tables["prodottoPerAreaAsset"].Rows.Add(rowProdottiPerArea); #endregion } // I prodotti della dtProdotti vengono mergiati sulla dtProdottiPerArea ds.Tables["prodottoPerAreaAsset"].Merge(dtAreaProgetto); } } #endregion #endregion } #endregion #region Raggruppamento per area di bisogno - Esposizioni ds.Tables.Add(new DataTable("prodottoPerAreaEsposizione")); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("DataSottoscrizione", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("CodiceContratto", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("ControvaloreProposto", typeof(decimal))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("CanLastRow", typeof(bool))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("IsTotal", typeof(bool))); ds.Tables["prodottoPerAreaEsposizione"].Columns.Add(new DataColumn("IsSubTotal", typeof(bool))); #region Prodotti raggruppati per area - Asset viewAree = new DataView(ds.Tables["nonRappresentabiliEsposizione"]/*.AsEnumerable().Where(o => o.Field("ControvaloreProposto") != 0).CopyToDataTable()*/) { Sort = "OrdinamentoAreaBisogno" }; dtAree = viewAree.ToTable(true, "CodiceAreaBisogno", "DescrizioneAreaBisogno", "OrdinamentoAreaBisogno"); area = string.Empty; progetto = string.Empty; #region Prodotti foreach (DataRow rowAreaProgetto in dtAree.Rows) { area = rowAreaProgetto["CodiceAreaBisogno"].ToString(); if (new AreaBisogno(area).Visibile) { //Progetti var viewProgetti = new DataView(ds.Tables["nonRappresentabiliEsposizione"].Select("CodiceAreaBisogno='" + area + "'").OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable()); var dtProgetti = viewProgetti.ToTable(true, "DescrizioneProgetto"); var bIntestazioneArea = true; // la riga di intestazione dell'area va stampata una sola volta. var bItestazioneProgetto = area == "Inv" || area == "Pre"; // la riga di intestazione del progetto va stampata solo per area Inv e Pre. DataRow rowProdottiPerArea; foreach (DataRow itemProgetto in dtProgetti.Rows) { progetto = itemProgetto["DescrizioneProgetto"].ToString(); // Subset di prodotti filtrati per Area/Progetto var dtArea = ds.Tables["nonRappresentabiliEsposizione"].Select("CodiceAreaBisogno='" + area + "'").OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable(); var dtAreaProgetto = ds.Tables["nonRappresentabiliEsposizione"].Select("CodiceAreaBisogno='" + area + "' AND "+ string.Format("DescrizioneProgetto ='{0}'", itemProgetto["DescrizioneProgetto"].ToString().Replace("'", "''"))).OrderByDescending(o => o.Field("ControvaloreProposto")).CopyToDataTable(); if (bIntestazioneArea) { #region riga con background grigio di intestazione per ogni area rowProdottiPerArea = ds.Tables["prodottoPerAreaEsposizione"].NewRow(); rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"]; rowProdottiPerArea["CodiceContratto"] = rowAreaProgetto["DescrizioneAreaBisogno"]; //FARE // Totali per area rowProdottiPerArea["ControvaloreProposto"] = dtArea.AsEnumerable().Sum(p => p.Field("ControvaloreProposto")); rowProdottiPerArea["FontBold"] = true; rowProdottiPerArea["ReplaceIfZero"] = stringReplaceIfZero; rowProdottiPerArea["CanLastRow"] = false; rowProdottiPerArea["IsTotal"] = true; rowProdottiPerArea["IsSubTotal"] = false; ds.Tables["prodottoPerAreaEsposizione"].Rows.Add(rowProdottiPerArea); bIntestazioneArea = false; #endregion } if (bItestazioneProgetto) { #region Riga con background grigio di intestazione per ogni Progetto rowProdottiPerArea = ds.Tables["prodottoPerAreaEsposizione"].NewRow(); rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"]; rowProdottiPerArea["CodiceContratto"] = progetto; // Totali per area rowProdottiPerArea["ControvaloreProposto"] = dtArea.AsEnumerable().Sum(p => p.Field("ControvaloreProposto")); rowProdottiPerArea["FontBold"] = true; rowProdottiPerArea["ReplaceIfZero"] = stringReplaceIfZero; rowProdottiPerArea["CanLastRow"] = false; rowProdottiPerArea["IsTotal"] = false; rowProdottiPerArea["IsSubTotal"] = true; ds.Tables["prodottoPerAreaEsposizione"].Rows.Add(rowProdottiPerArea); #endregion } // I prodotti della dtProdotti vengono mergiati sulla dtProdottiPerArea ds.Tables["prodottoPerAreaEsposizione"].Merge(dtAreaProgetto); } } #endregion #endregion } #endregion #region Asset - Prodotti non Rappresentabili Footer ds.Tables.Add(new DataTable("nonRappresentabiliAssetFooter")); ds.Tables.Add(new DataTable("nonRappresentabiliEsposizioneFooter")); ds.Tables["nonRappresentabiliAssetFooter"].Columns.Add(new DataColumn("Totale", typeof(string))); ds.Tables["nonRappresentabiliAssetFooter"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables["nonRappresentabiliAssetFooter"].Columns.Add(new DataColumn("Var", typeof(string))); ds.Tables["nonRappresentabiliAssetFooter"].Rows.Add( "Totale prodotti non rappresentabili", ds.Tables["prodottoPerAreaAsset"].Select("IsTotal<>'true' AND IsSubTotal<>'true'").AsEnumerable().Sum(x => x.Field("ControvaloreProposto")), ""); #endregion #region Valutaria - Prodotti non Rappresentabili Footer ds.Tables["nonRappresentabiliEsposizioneFooter"].Columns.Add(new DataColumn("Totale", typeof(string))); ds.Tables["nonRappresentabiliEsposizioneFooter"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables["nonRappresentabiliEsposizioneFooter"].Columns.Add(new DataColumn("Var", typeof(string))); ds.Tables["nonRappresentabiliEsposizioneFooter"].Rows.Add("Totale prodotti non rappresentabili", ds.Tables["prodottoPerAreaEsposizione"].Select("IsTotal<>'true' AND IsSubTotal<>'true'").AsEnumerable().Sum(x => x.Field("ControvaloreProposto")), ""); #endregion return ds; } public virtual string getTesto1() { string testo = string.Empty; bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro(); string adeguataStr = isAdeguata ? "della presente proposta" : "delle operazioni da lei richieste al suo private banker"; testo += "Nella tabella sottostante sono riportati i prodotti che, sulla base " + adeguataStr +", "; testo += "concorrono alla determinazione del suo patrimonio, ma che non è stato possibile rappresentare in termini di "; testo += "asset allocation. "; return testo; } public virtual string getTesto2() { string testo = string.Empty; bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro(); string adeguataStr = isAdeguata ? "sulla base della presente proposta" : "delle operazioni da lei richieste al suo private banker"; testo += "Nella tabella sottostante sono riportati i prodotti che, sulla base " + adeguataStr + ", "; testo += "concorrono alla determinazione del suo patrimonio, ma che non è stato possibile rappresentare in termini di "; testo += "esposizione valutaria. "; return testo; } public virtual bool showAsset() { return datiSeiUnico.isVincolo("v65000_1") ? false : GetOption().Valore; } public virtual bool showValutaria() { return datiSeiUnico.isVincolo("v65000_2") ? false : GetOption().Valore; } } }