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; using Consulenza.ReportWriter.Business.Entity; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// Scheda 10. Nucleo: Patrimonio Fideuram: distribuzione su aree di bisogno. IdSezione 53 /// public class S10 : Entity.Section { public S10(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S10", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } /// /// /// protected override sealed void Draw() { var dati = GetDataSet(); if (dati.Tables["area"].Rows.Count > 0) { #region Inizializzazione nota //Adriano: richiamare la getNota passando le due tabelle string nota = GetNota(dati.Tables["dettaglioNota"], dati.Tables["componentiNucleo"]); //--Adriano //Mette l'asterisco alla riga relativa al Patrimonio, se c'è una nota if (!string.IsNullOrEmpty(nota)) { DataRow dr = dati.Tables["componentiNucleo"].AsEnumerable().Where(x => x.Field("ComponenteNucleo").ToString().Contains("Patrimonio")).FirstOrDefault(); if (dr != null) { dr["ComponenteNucleo"] += "*"; } } #endregion Inizializzazione nota #region Intro string TestoIntro = GetTestoIntro(); if (TestoIntro.Length > 0) { AddElement(new SpacePDF(20)); AddElement(new FormattedTextAreaPDF(TestoIntro, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } #endregion Intro #region Componenti Nucleo #region tabella Componenti Nucleo if (dati.Tables["componentiNucleo"].Rows.Count > 0) { //Adriano 20180111: ordinamento per numero ordine e poi per controvalore decrescente //DataView dv = dati.Tables["componentiNucleo"].DefaultView; //dv.Sort = "ControvaloreAttuale desc"; //DataTable sortedDT = dv.ToTable(); var sortedDT = dati.Tables["componentiNucleo"].AsEnumerable() .OrderBy(r => r.Field("Ordine")) .ThenByDescending(r => r.Field("ControvaloreAttuale")) .CopyToDataTable(); //Adriano 20180111 TablePDF tabellaclientiNucleo = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, sortedDT) { Style = Style.ConsulenzaUnica, Footer = false, AlternateRow = false, ShowBorderLastLine = false, HeaderHeight = 27 }; tabellaclientiNucleo.Columns.Add(new ColumnPDF("ComponenteNucleo", 320, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "ComponenteNucleo", "Componente Nucleo") { HeaderFontSize = 7 }); tabellaclientiNucleo.Columns.Add(new ColumnPDF("ControvaloreAttuale", 106, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7 }); tabellaclientiNucleo.Columns.Add(new ColumnPDF("PercentualeAttuale", 86, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "PercentualeAttuale", "% attuale") { HeaderFontSize = 7 }); AddElement(new SpacePDF(15)); AddElement(tabellaclientiNucleo); } #endregion tabella Componenti Nucleo #endregion Componenti Nucleo #region Sezione Piramide Aree di Bisogno string TestoPiramide = GetTestoPiramide(); if (TestoPiramide.Length > 0) { AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(TestoPiramide, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } //Adriano 20180108: l'asterisco non va messo //Mette l'asterisco alla riga relativa al Patrimonio, se c'è una nota //if (!string.IsNullOrEmpty(nota)) //{ // DataRow dr = dati.Tables["areaFooter"].AsEnumerable().Where(x => x.Field("Area").ToString().Contains("Patrimonio")).FirstOrDefault(); // if (dr != null) // { // dr["Area"] += "*"; // } //} //--Adriano var tabellaAree = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["area"], dati.Tables["areaFooter"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = false, RowsPadding = 10, HeaderHeight = 27, HeaderMargin = 2, //RowHeight = 21.78f, FooterYOffset = 4 }; //tabellaAree.Columns.Add(new ColumnPDF("Area2", 320, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Area", "Area di bisogno") { HeaderFontSize = 7, DeltaYContent = 2, ScaleColumnTypeImage = 0.66f }); //tabellaAree.Columns.Add(new ColumnPDF("ControvaloreAttuale", 106, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7, DeltaYContent = 5, PaddingRight = 4 }); //tabellaAree.Columns.Add(new ColumnPDF("PercentualeAttuale", 86, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "PercentualeAttuale", "% attuale") { HeaderFontSize = 7, DeltaYContent = 5, PaddingRight = 6 }); tabellaAree.Columns.Add(new ColumnPDF("Area2", 320, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Area", "Area di bisogno") { HeaderFontSize = 7, DeltaYContent = 2, ScaleColumnTypeImage = 0.66f }); tabellaAree.Columns.Add(new ColumnPDF("ControvaloreAttuale", 106, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7, DeltaYContent = 5, PaddingRight = 4 }); tabellaAree.Columns.Add(new ColumnPDF("PercentualeAttuale", 86, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "PercentualeAttuale", "% attuale") { HeaderFontSize = 7, DeltaYContent = 5, PaddingRight = 6 }); tabellaAree.FooterColumns.Add(new ColumnPDF("Area", 320, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo)); tabellaAree.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 106, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Decimale) { PaddingRight = 4 }); tabellaAree.FooterColumns.Add(new ColumnPDF("PercentualeAttuale", 86, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { PaddingRight = 2 }); int a = 0; foreach (var item in dati.Tables["area"].Rows) { tabellaAree.Cells[1, a].HorizontalAlignment = HorizontalAlignmentType.Destra; 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); a++; } AddElement(new SpacePDF(15)); AddElement(tabellaAree); #endregion Tabella Aree Bisogno #region Sezione Nota importi negativi if (!string.IsNullOrEmpty(nota)) { AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(string.Format("(*) {0}", nota), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } #endregion #region Sezione Contributo Cliente per Area AddElement(new PagePDF()); string TestoTabella = GetTestoTabella(); if (TestoTabella.Length > 0) { AddElement(new SpacePDF(15)); AddElement(new FormattedTextAreaPDF(TestoTabella, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } #region Tabella Dettaglio Contributo DataTable dt = dati.Tables["dettaglioContributo"]; //dt.DefaultView.Sort = "codArea,Ordine,ControvaloreAttuale"; var newDataTable = dati.Tables["dettaglioContributo"].AsEnumerable() .OrderBy(r => r.Field("OrdineArea")) //Adriano 20180111: ordinamento per OrdineArea, poi per ordine crescente di riga (testata, dettaglio) e poi per controvalore decrescente //.ThenByDescending(r => r.Field("ordine")) .ThenBy(r => r.Field("ordine")) //--Adriano 20180111 .ThenByDescending((r => Math.Abs(Convert.ToDecimal(r.Field("ControvaloreAttuale"))))) .CopyToDataTable(); if (dati.Tables["dettaglioContributo"].Rows.Count > 0) { TablePDF tabelladettaglioContributo = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, newDataTable)// dati.Tables["dettaglioContributo"]) { //Style = Style.ConsulenzaUnica, //Footer = false, //AlternateRow = false, //ShowBorderLastLine = false, //HeaderHeight = 27, Style = Style.ConsulenzaUnica, Footer = true, AlternateRow = false, ShowBorderLastLine = false, HeaderHeight = 30, HeaderMargin = 2 }; tabelladettaglioContributo.Columns.Add(new ColumnPDF("Immagine", 15, HorizontalAlignmentType.Sinistra, false, false, 6, ColumnType.Objectpdf, string.Empty, string.Empty) { HeaderFontSize = 7, PaddingLeft = 2 }); tabelladettaglioContributo.Columns.Add(new ColumnPDF("Area", 305, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "descrizioneArea", "Area di Bisogno") { HeaderFontSize = 7 }); tabelladettaglioContributo.Columns.Add(new ColumnPDF("ControvaloreAttuale", 106, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
Attuale (€)") { HeaderFontSize = 7 }); tabelladettaglioContributo.Columns.Add(new ColumnPDF("PercentualeAttuale", 86, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "PercentualeAttuale", "% Attuale") { HeaderFontSize = 7 }); // var dettaglioContributo = dati.Tables["dettaglioContributo"].AsEnumerable() //.OrderByDescending(r => r.Field("codArea")) //.ThenByDescending(r => r.Field("ordine")) //.ThenByDescending(r => r.Field("ControvaloreAttuale")) //.CopyToDataTable(); var dettaglioContributo = dati.Tables["dettaglioContributo"].AsEnumerable() .OrderBy(r => r.Field("OrdineArea")) //Adriano 20180111: ordinamento per OrdineArea, poi per ordine crescente di riga (testata, dettaglio) e poi per controvalore decrescente //.ThenByDescending(r => r.Field("ordine")) .ThenBy(r => r.Field("ordine")) //--Adriano 20180111 .ThenByDescending((r => Math.Abs(Convert.ToDecimal(r.Field("ControvaloreAttuale"))))) .CopyToDataTable(); for (int h = 0; h < dettaglioContributo.Rows.Count; h++) //dati.Tables["dettaglioContributo"].Rows.Count; h++) { DataRow dettaglio = dettaglioContributo.Rows[h]; if (String.IsNullOrEmpty(dettaglio["componenteNucleo"].ToString()) && !String.IsNullOrEmpty(dettaglio["codArea"].ToString())) { for (int c = 0; c < dettaglio.Table.Columns.Count; c++) { if (Convert.ToBoolean(dettaglio["BackgroundGray"])) tabelladettaglioContributo.Cells[c, h].BackgroundColor = ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella; } string codArea = dettaglio["codArea"].ToString(); tabelladettaglioContributo.Cells[0, h].ColSpan = 2; var listaOggetti = new List { new RectanglePDF(8,8, ColorPDF.GetBy_AreaBisogno(codArea)){DeltaY = 4.8F}, new FormattedTextAreaPDF { Text = codArea.Substring(0,1), FontBold = true, FontColor = ColorPDF.Bianco, DeltaX = codArea.Substring(0,1).Equals("I")?2.3F:2.0F, FontSize= 6, DeltaY = 2.3F }, new FormattedTextAreaPDF { Text = dettaglio["descrizioneArea"].ToString(), FontBold = Convert.ToBoolean(dettaglio["FontBold"]), FontColor = ColorPDF.Nero, DeltaX = 14F, FontSize= 6, DeltaY = 2.2F } }; tabelladettaglioContributo.Cells[0, h].ValueObjectList.AddRange(listaOggetti); tabelladettaglioContributo.Cells[0, h].YContentOffset = 10; } else if (!String.IsNullOrEmpty(dettaglio["componenteNucleo"].ToString())) { //tabelladettaglioContributo.Cells[0, 1].BackgroundColor = ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella; //tabelladettaglioContributo.Cells[h, 1].Value = dettaglio["componenteNucleo"].ToString(); for (int c = 0; c < dettaglio.Table.Columns.Count; c++) { if (Convert.ToBoolean(dettaglio["BackgroundGray"])) tabelladettaglioContributo.Cells[c, h].BackgroundColor = ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella; } } else if (String.IsNullOrEmpty(dettaglio["componenteNucleo"].ToString()) && String.IsNullOrEmpty(dettaglio["codArea"].ToString())) { //tabelladettaglioContributo.Cells[0, 1].BackgroundColor = ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella; //tabelladettaglioContributo.Cells[h, 1].Value = dettaglio["componenteNucleo"].ToString(); for (int c = 0; c < dettaglio.Table.Columns.Count; c++) { if (Convert.ToBoolean(dettaglio["BackgroundGray"])) tabelladettaglioContributo.Cells[c, h].BackgroundColor = ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella; } } } AddElement(new SpacePDF(15)); AddElement(tabelladettaglioContributo); AddElement(new SpacePDF(0)); } #endregion #endregion } } protected sealed override DataTable GetDataTable() { return null; } protected override DataSet GetDataSet() { var ds = new DataSet(); ds.Tables.Add(new DataTable("area")); ds.Tables.Add(new DataTable("areaFooter")); ds.Tables.Add(new DataTable("componentiNucleo")); ds.Tables.Add(new DataTable("dettaglioContributo")); ds.Tables.Add(new DataTable("dettaglioNota")); var pianificazione = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; var listReturn = new List { // Operazioni in corso new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Operazioni in corso" }, ctv = datiSeiUnico.CASA_OC }, // CC Negativi new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Conto corrente" }, ctv = datiSeiUnico.CASA_CCN }, //Eligo Fondi new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa GP Eligo" }, ctv = datiSeiUnico.CASA_GPELIGO } // 20181009 AC // Il Mio Foglio ,new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità sottostante Il Mio Foglio" }, ctv = datiSeiUnico.CASA_TUOFOGLIO } //--20181009 AC }; var listaProdotti = listReturn.FindAll(o => o.ctv != 0); 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("ControvaloreAttuale", typeof(decimal))); ds.Tables["area"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(decimal))); var areeDisplayInfos = datiSeiUnico.displayInfos().areeDisplayInfos; foreach (var area in from o in areeDisplayInfos orderby o.value.order select o.key) { var areaInPianificazione = pianificazione.aree.FirstOrDefault(o => o.area.ToUpper().Equals(area)); if (areaInPianificazione != null && areaInPianificazione.area != "Pro") { ds.Tables["area"].Rows.Add( string.Format("{0}.png", new AreaBisogno(areaInPianificazione.area).NomePerImmagine), areaInPianificazione.descAreaEstesa, areaInPianificazione.ctvArea, //areaInPianificazione.percArea * 100); Helper.FormatDecimal((areaInPianificazione.percArea * 100).ToString(), 2)); } } ds.Tables["areaFooter"].Columns.Add(new DataColumn("Area", typeof(string))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["areaFooter"].Columns.Add(new DataColumn("PercentualeAttuale", 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))); // Totale del Patrimonio if (listaProdotti.Count > 0) { ds.Tables["areaFooter"].Rows.Add( "Totale risorse allocate", datiSeiUnico.CASA_SUBTOTALE.ToString(), Helper.FormatDecimal((pianificazione.percentualeTot * 100).ToString(), 2), "-", true, true ); //Dettaglio del Patrimonio Altro foreach (var item in listaProdotti) { ds.Tables["areaFooter"].Rows.Add( item.prodotto.nomeProdotto, item.ctv, "-", "-", false, false ); } } // Patrimonio Casa ds.Tables["areaFooter"].Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), datiSeiUnico.CASA_TOTALE, listaProdotti.Count > 0 ? "-" : Helper.FormatDecimal((pianificazione.percentualeTot * 100).ToString(), 2), "-", true, true ); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("ComponenteNucleo", typeof(string))); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(string))); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); ds.Tables["componentiNucleo"].Columns.Add(new DataColumn("Ordine", typeof(int))); var dettaglioContributonucleo = datiSeiUnico.nucleiUnit().patrimonioCliente; string[] areaOrder = new string[] { "EXT", "INV", "PRE", "RIS", "LIQ", "" }; //var dettaglioContributoOrderBYArea = from element in dettaglioContributonucleo.aree // orderby element.area ascending // select element; var dettaglioContributoOrderBYArea = dettaglioContributonucleo.aree.OrderBy(x => { return Array.IndexOf(areaOrder, x.area.ToString().ToUpper()); }); #region lista dettagli contributi ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("codArea", typeof(string))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("descrizioneArea", typeof(string))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(string))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("componenteNucleo", typeof(string))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("Ordine", typeof(int))); ds.Tables["dettaglioContributo"].Columns.Add(new DataColumn("OrdineArea", typeof(int))); #endregion lista dettagli contributi #region Definizione tabella Dettaglio Nota ds.Tables["dettaglioNota"].Columns.Add(new DataColumn("Area", typeof(string))); ds.Tables["dettaglioNota"].Columns.Add(new DataColumn("ComponenteNucleo", typeof(string))); ds.Tables["dettaglioNota"].Columns.Add(new DataColumn("DescrizioneRiga", typeof(string))); ds.Tables["dettaglioNota"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal))); ds.Tables["dettaglioNota"].Columns.Add(new DataColumn("PercentualeAttuale", typeof(string))); #endregion decimal totContributoArea = 0; decimal totPercContributoArea = 0; decimal totContributoAreaCorrente = 0; decimal totPercContributoAreaCorrente = 0; decimal totL191 = 0; decimal totL192 = 0; decimal totCC = 0; decimal totOC = 0; string nomeLinea191 = ""; string nomeLinea192 = ""; // 20181009 AC decimal totV301 = 0; string nomeV301 = ""; //--20181009 AC //serve per ordinare la tabella del dettaglio contributo nella parte successiva alle Aree di Bisogno, quindi //dopo la sequenza fissa (EXT, INV, PRE, RIS, LIQ) + Totale Risorse allocate, cioè dalla sesta posizione (ind. 5) int ordineArea = 5; //Adriano 20180112: verificare utilità, probabilmente da eliminare entrambi //int ordinamento = 0; //int ord = 0; //--Adriano 20180112 //Compone la tabella dei contributi per aree di bisogno con le voci relative alle Aree (EXT, INV, PRE, RIS, LIQ) //Adriano 20180124: AGGIUNGERE IL CODICE PER ESCLUDERE ANCHE LE OPERAZIONI IN CORSO !a.area.ToString().ToUpper().Equals("-") foreach (var item in dettaglioContributoOrderBYArea.Where(a => !a.area.ToString().ToUpper().Equals("CC") && !a.area.ToString().ToUpper().Equals("SELF") && !a.area.ToString().ToUpper().Equals("-"))) //foreach (var item in dettaglioContributoOrderBYArea.Where(a => !a.area.ToString().ToUpper().Equals("CC") && !a.area.ToString().ToUpper().Equals("SELF"))) { //foreach (var clienteNucleo in item.clienti.OrderByDescending(x => x.controvalore)) foreach (var clienteNucleo in item.clienti) { var cliente = clienteNucleo.nome + " " + clienteNucleo.cognome; //Adriano, aggiunto per mettere solo le voci positive if (clienteNucleo.controvalore != 0) { //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add(item.area, cliente.ToString(), clienteNucleo.controvalore, // Helper.FormatDecimal((clienteNucleo.percentuale * 100).ToString(), 2), // cliente.ToString(), false, false, ordinamento, Array.IndexOf(areaOrder, item.area.ToString().ToUpper())); ds.Tables["dettaglioContributo"].Rows.Add(item.area, cliente.ToString(), clienteNucleo.controvalore, Helper.FormatDecimal((clienteNucleo.percentuale * 100).ToString(), 2), cliente.ToString(), false, false, 1, Array.IndexOf(areaOrder, item.area.ToString().ToUpper())); //--Adriano 20180111 totContributoAreaCorrente += clienteNucleo.controvalore; totPercContributoAreaCorrente += clienteNucleo.percentuale; //ordinamento++; } } //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add(item.area, item.descArea, totContributoAreaCorrente, // Helper.FormatDecimal((totPercContributoAreaCorrente * 100).ToString(), 2), // "", true, true, ordinamento, Array.IndexOf(areaOrder, item.area.ToString().ToUpper())); ds.Tables["dettaglioContributo"].Rows.Add(item.area, item.descArea, totContributoAreaCorrente, Helper.FormatDecimal((totPercContributoAreaCorrente * 100).ToString(), 2), "", true, true, 0, Array.IndexOf(areaOrder, item.area.ToString().ToUpper())); //--Adriano 20180111 totContributoArea += totContributoAreaCorrente; totPercContributoArea += totPercContributoAreaCorrente; totContributoAreaCorrente = 0; totPercContributoAreaCorrente = 0; //ord = ordinamento; //ordinamento = 0; } //ord++; //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", "Totale Risorse Allocate", totContributoArea, Helper.FormatDecimal((totPercContributoArea * 100).ToString(), 2), "", true, true, ord, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", "Totale Risorse Allocate", totContributoArea, Helper.FormatDecimal((totPercContributoArea * 100).ToString(), 2), "", true, true, 0, ordineArea); //--Adriano 20180111 //Parte della tabella coi valori negativi //ordinamento = dettaglioContributoOrderBYArea.Where(a => a.area.ToString().ToUpper().Equals("CC") || a.area.ToString().ToUpper().Equals("SELF")).Count(); decimal totPatrimonio = totContributoArea; totContributoArea = 0; totPercContributoArea = 0; totContributoAreaCorrente = 0; totPercContributoAreaCorrente = 0; string descrizione = ""; ordineArea++; //Compone la tabella dei contributi per aree di bisogno con le voci relative ad eventuali Conti Correnti negativi e/o Self (GP Eligo Fondi/GP Eligo Titoli) //Adriano 20180124: AGGIUNGERE IL CODICE PER INCLUDERE ANCHE LE OPERAZIONI IN CORSO //foreach (var item in dettaglioContributoOrderBYArea.Where(a => a.area.ToString().ToUpper().Equals("CC") || a.area.ToString().ToUpper().Equals("SELF")).OrderBy(a => a.area)) foreach (var item in dettaglioContributoOrderBYArea.Where(a => a.area.ToString().ToUpper().Equals("CC") || a.area.ToString().ToUpper().Equals("SELF") || a.area.ToString().ToUpper().Equals("-")).OrderBy(a => a.area)) { foreach (var clienteNucleo in item.clienti.OrderByDescending(x => x.controvalore)) { var nomeCliente = clienteNucleo.nome + " " + clienteNucleo.cognome; if (clienteNucleo.controvalore != 0) { //Adriano 20180125: Per includere le operazioni in corso //Operazioni in corso if (item.area.ToString().ToUpper().Equals("-")) { foreach (var pos in clienteNucleo.posizioni) { totOC += pos.dettaglioPortafoglio.ctv; descrizione = string.Format("{0} - {1}", "Operazioni in corso", nomeCliente); //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, ordinamento, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, 1, ordineArea); //--Adriano 20180111 } } //--Adriano 20180125 //CC if (item.area.ToString().ToUpper().Equals("CC")) { //Adriano 20180110: per dettagiare anche le voci sui CC //foreach (var pos in clienteNucleo.posizioni.Where(x => x.prodottoFinanziario.codSottoprodotto.ToString().ToUpper().Equals("SMA"))) foreach (var pos in clienteNucleo.posizioni) { totCC += pos.dettaglioPortafoglio.ctv; descrizione = string.Format("{0} {1} - {2}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment), "C/C", nomeCliente); //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, ordinamento, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, 1, ordineArea); //--Adriano 20180111 } if (Math.Abs(totCC) > 0) { ds.Tables["dettaglioNota"].Rows.Add(item.area.ToString(), nomeCliente, clienteNucleo.nome, totCC, clienteNucleo.percentuale); totCC = 0; } //--Adriano 20180110: per dettagiare anche le voci sui CC //PRIMA DI DETTAGLIARE ANCHE I CC: //descrizione = string.Format("{0} {1} - {2}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment), "C/C", nomeCliente); //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, clienteNucleo.controvalore, "-", "", true, false, ordinamento, ordineArea++); //ds.Tables["dettaglioNota"].Rows.Add(item.area.ToString(), nomeCliente, clienteNucleo.nome, clienteNucleo.controvalore, clienteNucleo.percentuale); } //SELF if (item.area.ToString().ToUpper().Equals("SELF")) { //CICLA SUI GP ELIGO FONDI foreach (var pos in clienteNucleo.posizioni.Where(x => x.prodottoFinanziario.codSottoprodotto.ToString().ToUpper().Equals("L191"))) { totL191 += pos.dettaglioPortafoglio.ctv; nomeLinea191 = pos.prodottoFinanziario.nomeLinea; descrizione = string.Format("Liquidità {0} - {1}", pos.prodottoFinanziario.nomeLinea, nomeCliente); //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, ordinamento, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, 1, ordineArea); //--Adriano 20180111 } if (Math.Abs(totL191) > 0) { ds.Tables["dettaglioNota"].Rows.Add(item.area.ToString(), nomeCliente, nomeLinea191, totL191, clienteNucleo.percentuale); totL191 = 0; } //CICLA SUI GP ELIGO TITOLI foreach (var pos in clienteNucleo.posizioni.Where(x => x.prodottoFinanziario.codSottoprodotto.ToString().ToUpper().Equals("L192"))) { totL192 += pos.dettaglioPortafoglio.ctv; nomeLinea192 = pos.prodottoFinanziario.nomeLinea; descrizione = string.Format("Liquidità {0} - {1}", pos.prodottoFinanziario.nomeLinea, nomeCliente); //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, ordinamento, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, 1, ordineArea); //--Adriano 20180111 } if (Math.Abs(totL192) > 0) { ds.Tables["dettaglioNota"].Rows.Add(item.area.ToString(), nomeCliente, nomeLinea192, totL192, clienteNucleo.percentuale); totL192 = 0; } // 20181009 AC // CICLA SU IL MIO FOGLIO foreach (var pos in clienteNucleo.posizioni.Where(x => x.prodottoFinanziario.codSottoprodotto.ToString().ToUpper().Equals("V301"))) { totV301 += pos.dettaglioPortafoglio.ctv; nomeV301 = pos.prodottoFinanziario.nomeLinea; descrizione = string.Format("Liquidità {0} - {1}", pos.prodottoFinanziario.nomeLinea, nomeCliente); //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, ordinamento, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", descrizione, pos.dettaglioPortafoglio.ctv, "-", "", true, false, 1, ordineArea); //--Adriano 20180111 } if (Math.Abs(totV301) > 0) { ds.Tables["dettaglioNota"].Rows.Add(item.area.ToString(), nomeCliente, nomeV301, totV301, clienteNucleo.percentuale); totV301 = 0; } //--20181009 AC } totContributoAreaCorrente += clienteNucleo.controvalore; totPercContributoAreaCorrente += clienteNucleo.percentuale; //ordinamento--; } } ordineArea++; } //Adriano 20180111: metto come campo ordine 1 nelle righe di dettaglio e 0 in quelle di testata //ds.Tables["dettaglioContributo"].Rows.Add("", string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), totPatrimonio + totContributoAreaCorrente, "-", "", true, true, ordinamento--, ordineArea); ds.Tables["dettaglioContributo"].Rows.Add("", string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), totPatrimonio + totContributoAreaCorrente, "-", "", true, true, 0, ordineArea); //--Adriano 20180111 var listaComponentiNucleo = datiSeiUnico.nucleiUnit().anagrafica.listaClientiNucleo.OrderByDescending(o => o.controvalore); decimal totCtv = 0; decimal totPerc = 0; decimal nettoCtv = 0; //int i; //ordinamento = 0; foreach (var item in listaComponentiNucleo) { //i = 0; nettoCtv = 0; foreach (var area in dettaglioContributoOrderBYArea) { foreach (var cliente in area.clienti) { if (cliente.codiceFiscale.Equals(item.codiceFiscale)) { if (Convert.ToDecimal(cliente.controvalore) < 0) { //Modifica 20180110 //switch (area.area.ToString().ToUpper()) //{ // case "SELF": // //ds.Tables["dettaglioNota"].Rows.Add(area.area.ToString(), item.nome + " " + item.cognome, item.controvalore, item.percentuale); // i++; // //Adriano: inserire nel campo [descrizione] il testo che identifichi il tipo ("GP Eligo Fondi" / "GP Eligo Titoli") // ds.Tables["dettaglioNota"].Rows.Add(area.area.ToString(), item.nome + " " + item.cognome, i == 1 ? "GP Eligo Fondi" : "GP Eligo Titoli", cliente.controvalore, cliente.percentuale); // //--Adriano // break; // case "CC": // //ds.Tables["dettaglioNota"].Rows.Add(area.area.ToString(), item.nome + " " + item.cognome, item.controvalore, item.percentuale); // //Adriano: inserire nel campo [descrizione] il testo // ds.Tables["dettaglioNota"].Rows.Add(area.area.ToString(), item.nome + " " + item.cognome, "Conto Corrente", cliente.controvalore, cliente.percentuale); // //--Adriano // break; //} //Fine Modifica 20180110 nettoCtv += cliente.controvalore; } } } } //Adriano 20180108: se il CTV nella tabella componenti nucleo va decurtato delle voci negative: //Adriano 20180111: imposto la colonna ordinamento con 0 per i componenti del nucleo e 1 per il patrimonio //ds.Tables["componentiNucleo"].Rows.Add(item.nome + " " + item.cognome, item.controvalore + nettoCtv, Helper.FormatDecimal((item.percentuale * 100).ToString(), 2), false, false, ordinamento); ds.Tables["componentiNucleo"].Rows.Add(item.nome + " " + item.cognome, item.controvalore + nettoCtv, Helper.FormatDecimal((item.percentuale * 100).ToString(), 2), false, false, 0); //--Adriano 20180111 totCtv += item.controvalore + nettoCtv; totPerc += item.percentuale; //ordinamento++; //--Adriano } //Adriano 20180111: ricalcolo percentuali decimal perc = 0; foreach (DataRow dr in ds.Tables["componentiNucleo"].Rows) { perc = (Convert.ToDecimal(dr["ControvaloreAttuale"]) * 100 / totCtv); dr["PercentualeAttuale"] = Helper.FormatDecimal(perc.ToString(), 2); } //ds.Tables["componentiNucleo"].Rows.Add(item.nome + " " + item.cognome, item.controvalore + nettoCtv, Helper.FormatDecimal((item.percentuale * 100).ToString(), 2), false, false, ordinamento); //ds.Tables["componentiNucleo"].Rows.Add(string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), totCtv, Helper.FormatDecimal((totPerc * 100).ToString(), 2), true, true, ordinamento); ds.Tables["componentiNucleo"].Rows.Add(string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), totCtv, Helper.FormatDecimal((totPerc * 100).ToString(), 2), true, true, 1); //--Adriano 20180111 return ds; } public virtual string GetNota(DataTable tNota, DataTable tComponenti) { List notaCliente = new List(); string ret = ""; string current = ""; if (tNota.Rows.Count > 0) { var data = tNota.AsEnumerable(); var CCData = data.Where(x => x.Field("Area").ToString().ToUpper().Equals("CC")).ToList(); //Adriano: nelle due seguenti istruzioni, se nella tabella dettaglioNote (-> tNota) nel campo Descrizione ci sono i testi esatti "GP Eligo Fondi" e "GP Eligo Titoli", // si può usare Equals, altrimenti, se c'è un testo che identifica l'uno o l'altro, vanno modificate opportunamente. var EligoFondiData = data.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("GP ELIGO FONDI")).ToList(); var EligoTitoliData = data.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("GP ELIGO TITOLI")).ToList(); // 20181009 AC var TuoFoglioData = data.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("IL MIO FOGLIO")).ToList(); //--20181009 // 20181210 string virgola = ""; //--20181210 foreach (DataRow clientItem in tComponenti.Rows) { var dataCliente = data.Where(d => d.Field("ComponenteNucleo").ToString().Equals(clientItem["ComponenteNucleo"])); if (dataCliente.Count() > 0) { var CCDataCliente = dataCliente.Where(x => x.Field("Area").ToString().ToUpper().Equals("CC")).FirstOrDefault(); //Adriano: nelle due seguenti istruzioni, se nella tabella dettaglioNote (-> tNota) nel campo Descrizione ci sono i testi esatti "GP Eligo Fondi" e "GP Eligo Titoli", // si può usare Equals, altrimenti, se c'è un testo che identifica l'uno o l'altro, vanno modificate opportunamente. var EligoFondiDataCliente = dataCliente.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("GP ELIGO FONDI")).FirstOrDefault(); var EligoTitoliDataCliente = dataCliente.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("GP ELIGO TITOLI")).FirstOrDefault(); // 20181009 AC var TuoFoglioDataCliente = dataCliente.Where(x => x.Field("Area").ToString().ToUpper().Equals("SELF") && x.Field("DescrizioneRiga").ToString().ToUpper().Equals("IL MIO FOGLIO")).FirstOrDefault(); //--20181009 AC current = string.Format("Per il cliente {0}, il controvalore esclude il saldo negativo ", clientItem["ComponenteNucleo"]); if (CCDataCliente != null) { current += string.Format("dei conti correnti ({0}€)", CCDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); virgola = ", "; } // 20181009 AC if (TuoFoglioDataCliente != null) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "IL MIO FOGLIO" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Fondi (-{1}€)", EligoFondiDataCliente.Field("DescrizioneRiga").ToString(), EligoFondiDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante {0} ({1}€)", TuoFoglioDataCliente.Field("DescrizioneRiga").ToString(), TuoFoglioDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); virgola = ", "; //--20181210 } //--20181009 AC if (EligoFondiDataCliente != null) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "GP Eligo Fondi" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la {0} ({1}€)", EligoFondiDataCliente.Field("DescrizioneRiga").ToString(), EligoFondiDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante la {0} ({1}€)", EligoFondiDataCliente.Field("DescrizioneRiga").ToString(), EligoFondiDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); virgola = ", "; //--20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Fondi (-{1}€)", EligoFondiDataCliente.Field("DescrizioneRiga").ToString(), EligoFondiDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); } if (EligoTitoliDataCliente != null) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "GP Eligo Titoli" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la {0} ({1}€)", EligoTitoliDataCliente.Field("DescrizioneRiga").ToString(), EligoTitoliDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante la {0} ({1}€)", EligoTitoliDataCliente.Field("DescrizioneRiga").ToString(), EligoTitoliDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); virgola = ", "; //--20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Titoli (-{1}€)", EligoTitoliDataCliente.Field("DescrizioneRiga").ToString(), EligoTitoliDataCliente.Field("ControvaloreAttuale").ToString("#,##0.00")); } if (!string.IsNullOrEmpty(current)) { clientItem["ComponenteNucleo"] += "*"; notaCliente.Add(current); } } // 20181210 virgola = ""; //--20181210 } // 20181210 virgola = ""; //--20181210 current = string.Format("Per il patrimonio {0} del Nucleo, il controvalore esclude il saldo negativo ", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)); if (CCData.Count > 0) { current += string.Format("dei conti correnti ({0}€)", CCData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); // 20181210 virgola = ", "; //20181210 } // 20181009 AC if (TuoFoglioData.Count > 0) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "Il Mio Foglio" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Fondi (-{1}€)", EligoFondiData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoFondiData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante {0} ({1}€)", TuoFoglioData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), TuoFoglioData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); virgola = ", "; //--20181210 } //--20181009 if (EligoFondiData.Count > 0) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "GP Eligo Fondi" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la {0} ({1}€)", EligoFondiData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoFondiData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante la {0} ({1}€)", EligoFondiData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoFondiData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); virgola = ", "; //--20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Fondi (-{1}€)", EligoFondiData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoFondiData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); } if (EligoTitoliData.Count > 0) { //Adriano: la seguente istruzione prevede che nel campo DescrizioneRiga ci sia il testo esatto "GP Eligo Titoli" // se diversamente, si può usare l'istruzione commentata, in cui il testo è direttamente cablato nella stringa // 20181210 //current += string.Format(", della liquidità sottostante la {0} ({1}€)", EligoTitoliData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoTitoliData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); current += virgola + string.Format("della liquidità sottostante la {0} ({1}€)", EligoTitoliData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoTitoliData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); virgola = ","; //--20181210 //current += string.Format(", della liquidità sottostante la GP Eligo Titoli (-{1}€)", EligoTitoliData.Select(x => x.Field("DescrizioneRiga")).FirstOrDefault().ToString(), EligoTitoliData.Sum(x => x.Field("ControvaloreAttuale")).ToString("#,##0.00")); } if (!string.IsNullOrEmpty(current)) notaCliente.Add(current); } foreach (var s in notaCliente) { ret += string.Format("{0}. ", s); } return ret; } public virtual string GetTestoIntro() { //return datiSeiUnico.FormatBanca("In questa scheda è riportata l'allocazione corrente sulle aree di bisogno delle risorse finanziarie, associate al nucleo, che i componenti detengono presso $/Banca/$."); return datiSeiUnico.FormatBanca("Nella tabella sottostante è mostrato il patrimonio, associato al nucleo, che i componenti detengono presso $/Banca/$."); } public virtual string GetTestoPiramide() { return datiSeiUnico.FormatBanca("Di seguito è riportata l'allocazione corrente sulle aree di bisogno delle risorse finanziarie, associate al nucleo, che i componenti detengono presso $/Banca/$."); } public virtual string GetTestoTabella() { return datiSeiUnico.FormatBanca("Nella tabella sottostante è mostrato il dettaglio della composizione sulle aree di bisogno del patrimonio finanziario del nucleo, in funzione dell'allocazione sulle aree dei componenti."); } } }