using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportWriter.Business.CHART_PDF; using Consulenza.ReportCommon; using Consulenza.ReportWriter.Business.Entity; using System.Collections.Generic; using System.Linq; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// S27.RiservaPortafoglioModelloVSAttuale idSezione = 70 /// public class S27 : Entity.Section { public S27(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S27", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { var dati = GetDataSet(); #region Testo Introduttivo AddElement(new SpacePDF(20)); if (getTesto1().Length > 0) { AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(15)); } #endregion #region Label var tabellaCtv = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["patrimonio"]) { Style = Style.ConsulenzaUnica, Header = false, Footer = false, AlternateRow = false, RowHeight = 28, ShowSeparationLines = false, WhiteSpacesHorizontalSeparator = true, HideLastSeparationLine = true }; tabellaCtv.Columns.Add(new ColumnPDF("ControvaloreattualeString", 130, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo, "ControvaloreattualeString", "") { FontSize = 7, DeltaYContent = -1 }); tabellaCtv.Columns.Add(new ColumnPDF("Controvaloreattuale", 130, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "Controvaloreattuale", "") { HeaderFontSize = 7, FontBold = false, PaddingRight = 10, DeltaYContent = -1 }); tabellaCtv.Columns.Add(new ColumnPDF("AderenzaportafogliomodelloString", 130, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo, "AderenzaportafogliomodelloString", "") { FontSize = 7, PaddingLeft = 5, DeltaYContent = -1 }); tabellaCtv.Columns.Add(new ColumnPDF("Aderenzaportafogliomodello", 130, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "Aderenzaportafogliomodello", "") { HeaderFontSize = 7, FontBold = false, DeltaYContent = -1 }); //FormattedTextAreaPDF captionCtvAttuale = new FormattedTextAreaPDF("Controvalore attuale (€)", EnvironmentFacade.RendererFacade.XLeftLimit, 130) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false }; //AddElement(captionCtvAttuale); //FormattedTextAreaPDF controvalore = new FormattedTextAreaPDF(dati.Tables["patrimonio"].Rows[0]["ControvaloreAttuale"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 150) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = false }; //AddElement(controvalore); //FormattedTextAreaPDF captionAderenzaModello = new FormattedTextAreaPDF("Aderenza al portafoglio modello (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 280, 140) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, TextVerticalAlign = ceTe.DynamicPDF.VAlign.Top, AutoIncrementYWritable = false }; //AddElement(captionAderenzaModello); //FormattedTextAreaPDF aderenza = new FormattedTextAreaPDF(dati.Tables["patrimonio"].Rows[0]["AderenzaPortafoglioModello"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 480) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = true }; //AddElement(aderenza); //AddElement(new SpacePDF(13)); //FormattedTextAreaPDF captionVarAttuale = new FormattedTextAreaPDF("VaR attuale (%)", EnvironmentFacade.RendererFacade.XLeftLimit, 130) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false }; //AddElement(captionVarAttuale); //FormattedTextAreaPDF varAttuale = new FormattedTextAreaPDF(dati.Tables["patrimonio"].Rows[0]["VarAttuale"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 150) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = false }; //AddElement(varAttuale); //FormattedTextAreaPDF captionVarModello = new FormattedTextAreaPDF("VaR portafoglio modello (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 280, 140) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false }; //AddElement(captionVarModello); //FormattedTextAreaPDF varModello = new FormattedTextAreaPDF(dati.Tables["patrimonio"].Rows[0]["VarPortafoglioModello"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 480) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = true }; //AddElement(varModello); #endregion AddElement(tabellaCtv); AddElement(new SpacePDF(20)); #region Portafoglio string simbolo = isControvalore() ? "(€)" : "(%)"; //AddElement(new FormattedTextAreaPDF(!isAssetClass() ? "Macro asset class" : "Asset class", EnvironmentFacade.RendererFacade.XLeftLimit, 140) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize = 7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, AutoIncrementYWritable = false, BackGroundMarginLeft = 5 }); //AddElement(new FormattedTextAreaPDF("Portafoglio modello " + simbolo, EnvironmentFacade.RendererFacade.XLeftLimit + 145, 190) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize = 7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, AutoIncrementYWritable = false, BackGroundMarginLeft = 5 }); //AddElement(new FormattedTextAreaPDF("Portafoglio attuale " + simbolo, EnvironmentFacade.RendererFacade.XLeftLimit + 340, 190) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize =7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, BackGroundMarginLeft = 5 }); //340 = + 145 + 195 DataTable dtOrdinamento = dati.Tables["portafoglio"].AsEnumerable().OrderBy(l => l.Field("Ordinamento")).CopyToDataTable(); var tabellaAsset = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtOrdinamento) { Style = Style.ConsulenzaUnica, Header = true, Footer = false, AlternateRow = false, RowHeight = 28, ShowSeparationLines = false, ShowBorderHeader = true }; tabellaAsset.Columns.Add(new ColumnPDF("descrizione", 150, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", !isAssetClass() ? "Macro asset class" : "Asset class") { HeaderFontSize = 7 }); tabellaAsset.Columns.Add(new ColumnPDF("portafogliomodello", 185, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Objectpdf, "PercentualeControvaloreModello", "Portafoglio modello " + simbolo) { HeaderPaddingRight = 80, PaddingRight = 20, HeaderFontSize = 7, DeltaYContent = 2, FontSize = 7 }); tabellaAsset.Columns.Add(new ColumnPDF("portafoglioattuale", 185, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "PercentualeControvaloreAttuale", "Portafoglio attuale " + simbolo) { HeaderFontSize = 7, HeaderPaddingLeft = 10, PaddingLeft = 3.5f, DeltaYContent = 2, FontSize = 7 }); int o = 0; var list = new List(); list.Add(Convert.ToDouble(dati.Tables["portafoglio"].AsEnumerable().Max(x => x["PercentualeControvaloreModello"]))); list.Add(Convert.ToDouble(dati.Tables["portafoglio"].AsEnumerable().Max(x => x["PercentualeControvaloreAttuale"]))); var max = (float)Helper.Round(list.Max()); //float larghezzaSpazioTestoPercentuale = 0; //float larghezzaBarra = 0; //float deltaXBarra = 0; //var width = 0; foreach (DataRow row in dtOrdinamento.Rows) { var colore = new ColorPDF(Convert.ToInt32(row["Red"]), Convert.ToInt32(row["Green"]), Convert.ToInt32(row["Blue"])); #region barra colonna PortafoglioModello int columnWidth = tabellaAsset.Columns[1].Width; string text = isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreModello"].ToString()) : Helper.FormatDecimal(row["PercentualeControvaloreModello"].ToString(), 2); int textWidth = GetNumericStringWidth(text); float barWidth = Helper.GetWidthProportional((float)Convert.ToDouble(row["PercentualeControvaloreModello"]), max, columnWidth); float additionalWhiteSpace = barWidth == 0 ? 0 : 4; tabellaAsset.Cells[1, o].ValueObjectList = new List(); tabellaAsset.Cells[1, o].ValueObjectList.Add(new FormattedTextAreaPDF(text, 0, textWidth) { DeltaY = 4, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left, DeltaX = (barWidth + additionalWhiteSpace) * -1, FontSize = 7 }); if (barWidth != 0) { tabellaAsset.Cells[1, o].ValueObjectList.Add(new RectanglePDF(12, barWidth, colore) { DeltaY = 4 }); } #endregion #region barra colonna PortafoglioAttuale columnWidth = tabellaAsset.Columns[2].Width; text = isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreAttuale"].ToString()) : Helper.FormatDecimal(row["PercentualeControvaloreAttuale"].ToString(), 2); textWidth = GetNumericStringWidth(text); barWidth = Helper.GetWidthProportional((float)Convert.ToDouble(row["PercentualeControvaloreAttuale"]), max, columnWidth); additionalWhiteSpace = barWidth == 0 ? 0 : 4; tabellaAsset.Cells[2, o].ValueObjectList = new List(); if (barWidth != 0) { tabellaAsset.Cells[2, o].ValueObjectList.Add(new RectanglePDF(12, barWidth, colore) { DeltaY = 4 }); } tabellaAsset.Cells[2, o].ValueObjectList.Add(new FormattedTextAreaPDF(text, 0, textWidth) { DeltaY = 4, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right, DeltaX = barWidth + additionalWhiteSpace, FontSize = 7 }); #endregion o++; } #endregion #region Nota string nota1 = getNota1(); string nota2 = getNota2(); if (nota1 != "") { tabellaAsset.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota1, new[] { "" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify } ); //captionAderenzaModello.Text += note; //captionCtvAttuale.Text += nota1.Contains("Grado") ? note : ""; //note += "*"; } if (nota2 != "") { tabellaAsset.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota2, new[] { "" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify } ); //varAttuale.Text += note; //note += "*"; } #endregion AddElement(tabellaAsset); } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected sealed override DataTable GetDataTable() { return null; } protected override DataSet GetDataSet() { #region Estrazione Chiave PB + Servizi var _pianificazioneOrizzontale = datiSeiUnico.all().pianificazioneUnit.pianificazioneOrizzontale.FirstOrDefault(l => l.portafoglioModello.area.Equals("Ris")); var patrimoniocasa = isAssetClass() ? datiSeiUnico.all().patrimonioUnit.patrimonioCasa.assetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).ToList() : datiSeiUnico.all().patrimonioUnit.patrimonioCasa.macroAssetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).ToList(); var totaleControvaloreAttuale = patrimoniocasa.FirstOrDefault().distribuzione.totaleCtv; var aderenzaPortafogliomodello = _pianificazioneOrizzontale.aderenza.valoreAderenza; //datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(l => l.portafoglioModello.area.Equals("Ris")).aderenza.portafoglioConsiderato; var displayInfoM = datiSeiUnico.displayInfos().macroAssetDisplayInfos; var displayInfoA = datiSeiUnico.displayInfos().assetDisplayInfos; var varAttuale = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.Where(l => l.area.Equals("Ris")).FirstOrDefault().progetti.FirstOrDefault().progettoVarInfos != null ? datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.Where(l => l.area.Equals("Ris")).FirstOrDefault().progetti.FirstOrDefault().progettoVarInfos.varDecodificato : "-"; var distribuzionePtf = !isAssetClass() ? _pianificazioneOrizzontale.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 1).ToList() : _pianificazioneOrizzontale.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 2).ToList(); #endregion #region Definizione Dataset var ds = new DataSet(); ds.Tables.Add(new DataTable("patrimonio")); ds.Tables.Add(new DataTable("portafoglio")); #endregion #region Patrimonio ds.Tables["patrimonio"].Columns.Add("ControvaloreattualeString", typeof(string)); ds.Tables["patrimonio"].Columns.Add("Controvaloreattuale", typeof(string)); ds.Tables["patrimonio"].Columns.Add("AderenzaportafogliomodelloString", typeof(string)); ds.Tables["patrimonio"].Columns.Add("Aderenzaportafogliomodello", typeof(string)); ds.Tables["patrimonio"].Rows.Add( "Controvalore attuale (€)" + (getNota1().Length > 0 && getNota1().Contains("Grado") ? "*" : ""), Helper.FormatCurrency(totaleControvaloreAttuale.ToString()), "Aderenza al portafoglio modello (%)" + (getNota1().Length > 0 && getNota1().Contains("aderenza") ? "*" : ""), Helper.FormatDecimal(aderenzaPortafogliomodello.ToString(), 2)); //if (getNota2().Length > 0) //commentato perchè non c'erano ticket a riguardo e impediva la visualizzazione da ppt ds.Tables["patrimonio"].Rows.Add( "VaR attuale (%)" + (getNota2().Length > 0 ? "*" : ""), varAttuale, "VaR portafoglio modello (%)", _pianificazioneOrizzontale.varPianificatoDec); #endregion #region Portafoglio ds.Tables["portafoglio"].Columns.Add(new DataColumn("Codice", typeof(string))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("Red", typeof(int))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("Green", typeof(int))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("Blue", typeof(int))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("PercentualeControvaloreModello", typeof(decimal))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("PercentualeControvaloreAttuale", typeof(decimal))); ds.Tables["portafoglio"].Columns.Add(new DataColumn("Ordinamento", typeof(int))); #region portafoglio modello if (isAssetClass()) { foreach (var valore in from c in displayInfoA join l in distribuzionePtf on c.key equals l.asset.asset //orderby c.value.order select new { l.asset.asset, l.asset.descrizione, new ColorPDF(c.value.fill).Red, new ColorPDF(c.value.fill).Green, new ColorPDF(c.value.fill).Blue, l.percentuale, c.value.order }) { ds.Tables["portafoglio"].Rows.Add( valore.asset, valore.descrizione, valore.Red, valore.Green, valore.Blue, isControvalore() ? (Convert.ToDecimal(valore.percentuale) * totaleControvaloreAttuale) : Convert.ToDecimal(valore.percentuale * 100), 0,//portafoglio proposto che viene caricato successivamente valore.order ); } } else { foreach (var valore in from c in displayInfoM join l in distribuzionePtf on c.key equals l.asset.asset //orderby c.value.order select new { l.asset.asset, l.asset.descrizione, new ColorPDF(c.value.fill).Red, new ColorPDF(c.value.fill).Green, new ColorPDF(c.value.fill).Blue, l.percentuale, c.value.order }) { ds.Tables["portafoglio"].Rows.Add( valore.asset, valore.descrizione, valore.Red, valore.Green, valore.Blue, isControvalore() ? (Convert.ToDecimal(valore.percentuale) * totaleControvaloreAttuale) : Convert.ToDecimal(valore.percentuale * 100), 0,//portafoglio attuale che viene caricato successivamente valore.order ); } } #endregion #region portafoglioattuale if (isAssetClass()) { foreach (var valore in from c in displayInfoA join l in patrimoniocasa[0].distribuzione.elencoSlice on c.key equals l.codice where l.sliceRappresentabile == true //orderby c.value.order select new { l.codice, l.descrizione, new ColorPDF(c.value.fill).Red, new ColorPDF(c.value.fill).Green, new ColorPDF(c.value.fill).Blue, l.pesoCC, l.ctvCC, c.value.order }) { if (ds.Tables["portafoglio"].AsEnumerable().FirstOrDefault(l => l.Field("Codice") == valore.codice) != null) { ds.Tables["portafoglio"].Select(string.Format("[Codice] = '{0}'", valore.codice)) .ToList() .ForEach(r => { r["PercentualeControvaloreAttuale"] = isControvalore() ? Convert.ToDecimal(valore.ctvCC) : Convert.ToDecimal(valore.pesoCC * 100); }); } else { ds.Tables["portafoglio"].Rows.Add( valore.codice, valore.descrizione, valore.Red, valore.Green, valore.Blue, 0,//portafoglio modello per un item che non è presente isControvalore() ? valore.ctvCC : valore.pesoCC * 100, valore.order ); } } } else { foreach (var valore in from c in displayInfoM join l in patrimoniocasa[0].distribuzione.elencoSlice on c.key equals l.codice where l.sliceRappresentabile == true //orderby c.value.order select new { l.codice, l.descrizione, new ColorPDF(c.value.fill).Red, new ColorPDF(c.value.fill).Green, new ColorPDF(c.value.fill).Blue, l.pesoCC, l.ctvCC, c.value.order }) { if (ds.Tables["portafoglio"].AsEnumerable().FirstOrDefault(l => l.Field("Codice") == valore.codice) != null) { ds.Tables["portafoglio"].Select(string.Format("[Codice] = '{0}'", valore.codice)) .ToList() .ForEach(r => { r["PercentualeControvaloreAttuale"] = isControvalore() ? Convert.ToDecimal(valore.ctvCC) : Convert.ToDecimal(valore.pesoCC * 100); }); } else { ds.Tables["portafoglio"].Rows.Add( valore.codice, valore.descrizione, valore.Red, valore.Green, valore.Blue, 0,//portafoglio modello per un item che non è presente isControvalore() ? valore.ctvCC : valore.pesoCC * 100, valore.order ); } } } #endregion ds.Tables["portafoglio"].AsEnumerable().OrderBy(r => r.Field("Ordinamento")); #endregion return ds; } public virtual bool isAssetClass() { return GetOption().Valore; } public virtual bool isControvalore() { return !GetOption().Valore; } public virtual string getTesto1() { var asset = ""; var controvalore = ""; asset = !isAssetClass() ? "macro asset class" : "asset class"; controvalore = isControvalore() ? "di controvalore" : "percetuali"; var testo = "In questa scheda è riportato il confronto, sulla base delle principali " + asset + " "; testo += "finanziarie, tra il patrimonio destinato all'area Riserva e il relativo portafoglio modello, "; testo += "con evidenza dell'esposizione, in termini " + controvalore + ", a ciascuna " + asset + ", e "; testo += "con indicazione del grado di Aderenza."; return Helper.ReplaceVariables(testo, EnvironmentFacade.ReportEnvironment); } public virtual string getNota1() { // Nota Portafoglio ConsigliatoFF var aderenza = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(l => l.portafoglioModello.area.Equals("Ris")).aderenza.portafoglioConsiderato; var gradoCoperturaVar = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.FirstOrDefault(o => o.area.Equals("Ris")).progetti.FirstOrDefault().progettoVarInfos.stat.copertura; var distribuzione = isAssetClass() ? datiSeiUnico.patrimonioUnit().patrimonioCasa.assetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).FirstOrDefault() != null ? datiSeiUnico.patrimonioUnit().patrimonioCasa.assetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).FirstOrDefault().distribuzione : null : datiSeiUnico.patrimonioUnit().patrimonioCasa.macroAssetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).FirstOrDefault() != null ? datiSeiUnico.patrimonioUnit().patrimonioCasa.macroAssetClass.distribuzioneAree.Where(o => o.area.Equals("Ris")).FirstOrDefault().distribuzione : null; var gradoCoperturaAllocation = distribuzione != null ? distribuzione.coverageCC * 100 : 0; var prodottinonrapp = distribuzione != null ? distribuzione.totaleNonRappr : 0; string nota = ""; if (gradoCoperturaAllocation < 100) { string var = isAssetClass() ? "asset" : "macro asset"; nota += string.Format("Grado di copertura (%) della rappresentazione grafica per " + var + " allocation pari a {0}", Helper.FormatDecimal(gradoCoperturaAllocation.ToString(), 2)) + (prodottinonrapp > 0 ? string.Format(": non sono considerati i prodotti non rappresentabili ({0}).", Helper.FormatDecimal(prodottinonrapp.ToString(), 2)) : ". "); } if (aderenza != 0 && aderenza != 100) nota += string.Format(" Portafoglio considerato nel calcolo dell'aderenza (%): {0}.", Helper.FormatDecimal(aderenza.ToString(), 2)); return nota; } public virtual string getNota2() { var gradoCoperturaVar = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.aree.FirstOrDefault(o => o.area.Equals("Ris")).progetti.FirstOrDefault().progettoVarInfos.stat.copertura; string nota = ""; if (gradoCoperturaVar < 100) { nota = string.Format("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}.", Helper.FormatDecimal(gradoCoperturaVar.ToString(), 2)); } return nota; } //public virtual string getNota3() //{ // var patrimonioCasa = datiSeiUnico.patrimonioUnit().patrimonioCasa; // var pianificazione = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; // var aderenza = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.Where(l => l.portafoglioModello.area.Equals("Ris")).FirstOrDefault().aderenza.valoreAderenza; // string nota = ""; // string nota1 = ""; // string nota2 = ""; // if (!isAssetClass()) // { // if ( patrimonioCasa.macroAssetClass.distribuzione.coverageCC != 100) // { // nota += string.Format("Grado di copertura (%) della rappresentazione grafica per macro asset allocation pari a {0}",Helper.FormatDecimal(patrimonioCasa.macroAssetClass.distribuzione.coverageCC.ToString(), 2)); // nota1 += patrimonioCasa.macroAssetClass.distribuzione.totaleNonRappr > 0 ? string.Format(": non sono considerati i prodotti non rappresentabili ({0} €)",Helper.FormatCurrency(patrimonioCasa.macroAssetClass.distribuzione.totaleNonRappr.ToString())) : ""; // } // } // else // { // if ( patrimonioCasa.assetClass.distribuzione.coverageCC != 100) // { // nota += string.Format("Grado di copertura (%) della rappresentazione grafica per asset allocation pari a {0}", Helper.FormatDecimal(patrimonioCasa.assetClass.distribuzione.coverageCC.ToString(), 2)); // nota1 += patrimonioCasa.assetClass.distribuzione.totaleNonRappr > 0 ? string.Format(": non sono considerati i prodotti non rappresentabili ({0} €).",Helper.FormatCurrency(patrimonioCasa.assetClass.distribuzione.totaleNonRappr.ToString())) : "."; // } // } // if (aderenza > 0) // { // nota2 += "Portafoglio considerato nel calcolo dell'aderenza (%): {0}."; // nota2 = string.Format(nota2, Helper.FormatCurrency(aderenza.ToString())); // } // return nota + nota1 + nota2; //} //public virtual string getNota2() //{ // // Nota Grado Copertura // var gradoCopertura = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos.stat.copertura; // string nota = ""; // if (gradoCopertura < 100) // { // if (getNota1().Length > 0 && getNota3().Length > 0) // nota += "(**) Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}."; // else // nota += "Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}."; // nota = string.Format(nota, Helper.FormatDecimal(gradoCopertura.ToString(), 2)); // } // return nota; //} //public virtual string getNota1() //{ // // Nota Portafoglio Consigliato // var patrimonioCasa = datiSeiUnico.patrimonioUnit().patrimonioCasa; // var pianificazione = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; // string nota = ""; // string nota1 = ""; // if (!isAssetClass()) // { // if (patrimonioCasa.macroAssetClass.distribuzione.coverageCC < 100) // { // nota += "Grado di copertura (%) della rappresentazione grafica per macro asset allocation pari a {0}: "; // nota1 += "non sono considerati i prodotti non rappresentabili ({0} €)."; // nota = string.Format(nota, Helper.FormatDecimal(patrimonioCasa.macroAssetClass.distribuzione.coverageCC.ToString(), 2)); // nota1 = string.Format(nota1, Helper.FormatCurrency(patrimonioCasa.macroAssetClass.distribuzione.totaleNonRappr.ToString())); // } // } // else // { // if (patrimonioCasa.assetClass.distribuzione.coverageCC < 100) // { // nota += "Grado di copertura (%) della rappresentazione grafica per asset allocation pari a {0}: "; // nota1 += "non sono considerati i prodotti non rappresentabili ({0} €)."; // nota = string.Format(nota, Helper.FormatDecimal(patrimonioCasa.macroAssetClass.distribuzione.coverageCC.ToString(), 2)); // nota1 = string.Format(nota1, Helper.FormatCurrency(patrimonioCasa.macroAssetClass.distribuzione.totaleNonRappr.ToString())); // } // } // return nota + nota1; //} //public virtual string getNoteCompleto(bool nota3) //{ // string nota = ""; // if (getNota3().Length > 0) // nota = getNota3() + (getNota2().Length > 0 ? "
" : ""); // else // nota = getNota1() + (getNota2().Length > 0 ? "
" : ""); // if (getNota2().Length > 0) // nota += getNota2(); // return nota; //} private int GetNumericStringWidth(string number) { int width = 0; foreach (char s in number) { if (s == '.' || s == ',') { width += 1; } else if (s == '%') { width += 8; } else { width += 5; } } return width; } } }