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.CHART_PDF; using Consulenza.ReportWriter.Business.Entity; using Dundas.Charting.WebControl; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// S43.RischioMercatoVSRischioCredito idSezione = 86 /// public class S43 : Entity.Section { //private bool _visualizzaAltriIstituti; private bool _presenzaNotaPatrimonioCasa = false; private bool _presenzaNotaPatrimonioTerzi = false; private bool _presenzaNotaEccessivaAdeguatezza = false; public S43(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S43", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { // if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei var dati = GetDataSet(); var testi = GetText(); var nota = Helper.ReplaceVariables(GetNote(), EnvironmentFacade.ReportEnvironment); var series = new List(); var coloreSerieAreaAdeguata = new ColorPDF(228, 235, 238); var coloreSerieAreaNonAdeguata = new ColorPDF(204, 217, 222); var labelPersonalizzateAsseX = new List(); foreach (DataRow rowX in dati.Tables[1].Rows) { labelPersonalizzateAsseX.Add(new CombinationPDFCustomLabel { Text = string.Empty, Value = Convert.ToDouble(rowX["Valore"]) }); } var labelPersonalizzateAsseY = new List(); foreach (DataRow rowX in dati.Tables[2].Rows) { labelPersonalizzateAsseY.Add(new CombinationPDFCustomLabel { Text = rowX["Testo"].ToString(), Value = Convert.ToDouble(rowX["Valore"]) }); } #region Testo introduttivo AddElement(new SpacePDF(20)); var sTesto = string.Empty; if (visualizzaAltriIstituti()) sTesto = testi.Rows[0]["testo1"].ToString(); else sTesto = testi.Rows[0]["testo2"].ToString(); var testoIntroduttivo = Helper.ReplaceVariables(sTesto, EnvironmentFacade.ReportEnvironment); AddElement(new FormattedTextAreaPDF(testoIntroduttivo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(20)); #endregion // test purposes //dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"] = 8; // x //dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"] = 19; AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 }); AddElement(new SpacePDF(7)); #region Grafico Rischio Mercato - Rischio Credito //var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F) //Adriano 20180124: per correggere la posizione del grafico, segnalato troppo a dx var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 110, 1F) //var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F) //--Adriano { Name = "comb", Height = 200, Width = 300, MinorGridAxisY = false, //Adriano: per eliminare lo sfondo diverso per la non adeguatezza per i nuclei //BackColor = coloreSerieAreaNonAdeguata, //--Adriano BackColor = EnvironmentFacade.ReportEnvironment.ReportId == 6 ? coloreSerieAreaAdeguata: coloreSerieAreaNonAdeguata, //modifiche nucleo contrattualizzato MarginAxisY = 0, ShowLineAxisY = true, ShowLabelAxisY = true, IntervalNumberAxisY = 5, StartFromZeroAxisY = true, //Adriano // imposta il valore massimo per la scala, per i clienti Retail, per i quali il valore massimo è 27, è 30, per i professionali, per i quali il valore può arrivare a 50, è 55 MaximumValueAxisY = Convert.ToInt32(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]) > 27 ? 53 : 30, //--Adriano //originale: //MaximumValueAxisY = 30, // valore fisso // ES START su richiesta del Cliente //IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }, // END CustomLabelAxisY = labelPersonalizzateAsseY, //MaximumValueAxisY = 30, // valore fisso //IndicatorAxisY = (EnvironmentFacade.ReportEnvironment.ReportId != 6)? // new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }: // new CombinationPDFIndicator(), //IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }, //IndicatorAxisY = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }, //CustomLabelAxisY = labelPersonalizzateAsseY, ShowLineAxisX = true, ShowLabelAxisX = true, StartFromZeroAxisX = true, MaximumValueAxisX = 35, // valore fisso IntervalNumberAxisX = 4, CustomLabelAxisX = labelPersonalizzateAsseX, //IndicatorAxisX = (EnvironmentFacade.ReportEnvironment.ReportId != 6) ? // new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 }: // new CombinationPDFIndicator() //IndicatorAxisX = new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 } //IndicatorAxisX = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 } }; //Adriano 20180125 nel caso in cui non si tratti di un nucleo va mostrato l'indicatore if (EnvironmentFacade.ReportEnvironment.ReportId != 6) //Non nuclei { graficoCombination.IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }; graficoCombination.IndicatorAxisX = new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 }; } #region Serie di adeguatezza #region modifiche nucleo contrattualizzato series.Add( new Serie { Name = "AreaDiAdeguatezza", Type = Dundas.Charting.WebControl.SeriesChartType.Area, Color = coloreSerieAreaAdeguata, BorderColor = ColorPDF.Nero, BorderWidth = 1, Points = new List() { new Point { Values = new ValuesPointXY(0, Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"])), ShowLabelAxisY = false, ShowLabelAxisX = false, Color = coloreSerieAreaAdeguata }, new Point { Values = new ValuesPointXY(Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"])), ShowLabelAxisY = false, ShowLabelAxisX = false, Color = coloreSerieAreaAdeguata }, } } ); #endregion var d = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field("NumeroPatrimonio")).CopyToDataTable(); foreach (DataRow item in d.Rows) { //series.Add( // new Serie // { // Name = item["CodicePatrimonio"].ToString(), // Type = Dundas.Charting.WebControl.SeriesChartType.Point, // MarkerImage = string.Format("PallinoColorato{0}c.png", item["NumeroPatrimonio"].ToString()), // MarkerSize = 25, // Points = new List() { // new Point { // Values = new ValuesPointXY(Convert.ToDouble(item["RischioCredito"]), Convert.ToDouble(item["VaR"])), // ShowLabelAxisY = false, // ShowLabelAxisX = false // } // } // } //); if (item["RischioCreditoString"].ToString() != "n.c." && item["VaRString"].ToString() != "n.c.") { #region Patryk #3594 //sotto modifica di Patryk per centrare indicatori del grafico tra le classi.(a,b,c,d) //var classea = Convert.ToDouble(dati.Tables[1].Rows[0]["Valore"]); //float xVal = (float)Convert.ToDouble(item["RischioCredito"]); //if (item["RischioCreditoString"].ToString().ToLower() == "classe a") //{ // xVal = 4.375f; // middle of classe A //} //else if (item["RischioCreditoString"].ToString().ToLower() == "classe b") //{ // xVal = 13.125f; // middle of classe B //} //else if (item["RischioCreditoString"].ToString().ToLower() == "classe c") //{ // xVal = 21.875f; // middle of classe C //} //else if (item["RischioCreditoString"].ToString().ToLower() == "classe d") //{ // xVal = 26.25f; // middle of classe D //} #endregion graficoCombination.Markers.Add(new Marker() { Image = String.Format("PallinoColorato{0}d.png", item["NumeroPatrimonio"].ToString()), Width = 17, Height = 17, Scale = 1, X = Convert.ToDouble(item["RischioCredito"]) >= 35 ? 35 : (float)Convert.ToDouble(item["RischioCredito"]), //Patryk #3594:X = xVal, Y = Convert.ToDouble(item["VaR"]) > 27 ? 30 : (float)Convert.ToDouble(item["VaR"]) }); } } #endregion #region Serie di non adeguatezza // ***************Lo sfondo grigio del grafico è dato dalla proprietà BackColor del CombinationPDF. ************* #endregion #region Serie Patrimoni #endregion // aggiungo le Serie al grafico graficoCombination.SeriesCollection = series; AddElement(graficoCombination); #endregion //Adriano 20180124: per correggere la posizione delle descrizioni asse ascisse (Classe A|Classe B|Classe C|Classe D) if (EnvironmentFacade.ReportEnvironment.ReportId != 6) { //AddElement(new SpacePDF(30)); AddElement(new FormattedTextAreaPDF("Classe A", graficoCombination.X + 20) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 }); AddElement(new FormattedTextAreaPDF("Classe B", graficoCombination.X + 97) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 }); AddElement(new FormattedTextAreaPDF("Classe C", graficoCombination.X + 170) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 }); AddElement(new FormattedTextAreaPDF("Classe D", graficoCombination.X + 247) { FontSize = 7, AutoIncrementYWritable = true, DeltaY = -90 }); AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 420) { FontBold = true, FontSize = 7, DeltaY = -80 }); } else { AddElement(new SpacePDF(35)); AddElement(new FormattedTextAreaPDF("Classe A", graficoCombination.X + 20) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 }); AddElement(new FormattedTextAreaPDF("Classe B", graficoCombination.X + 97) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 }); AddElement(new FormattedTextAreaPDF("Classe C", graficoCombination.X + 170) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 }); AddElement(new FormattedTextAreaPDF("Classe D", graficoCombination.X + 247) { FontSize = 7, AutoIncrementYWritable = true, DeltaY = -32 }); //Adriano 20180124: per correggere la posizione della label Rischio Credito AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 400) { FontBold = true, FontSize = 7, DeltaY = -30 }); //AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 420) { FontBold = true, FontSize = 7, DeltaY = -30 }); //--Adriano 20180124 } //--Adriano 20180124 #region Tabella var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = true, RowHeight = 27, Footer = false, HeaderHeight = 27, YOffset = -20 }; //Adriano 20180125 Se si tratta di nucleo non va mostrata l'adeguatezza if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei { tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 5, ScaleColumnTypeImage = 0.32F }); tabella.Columns.Add(new ColumnPDF("Patrimonio", 175, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, FontSize = 7 }); tabella.Columns.Add(new ColumnPDF("Controvalore", 145, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 30, HeaderFontSize = 7, FontSize = 7 }); tabella.Columns.Add(new ColumnPDF("RischioCredito", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio
credito") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 }); tabella.Columns.Add(new ColumnPDF("Var", 50, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 }); tabella.Columns.Add(new ColumnPDF("GradoCopertura", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di
copertura (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 }); } else { tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 5, ScaleColumnTypeImage = 0.32F }); tabella.Columns.Add(new ColumnPDF("Patrimonio", 140, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, FontSize = 7 }); tabella.Columns.Add(new ColumnPDF("Controvalore", 105, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 }); tabella.Columns.Add(new ColumnPDF("RischioCredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio
credito") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 }); tabella.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 }); tabella.Columns.Add(new ColumnPDF("GradoCopertura", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di
copertura (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 }); tabella.Columns.Add(new ColumnPDF("Adeguatezza", 75, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7, FontSize = 7 }); } // cloning entire datasource (changing Grado di copertura(%) type from decimal to string, so its possible to put there "n.c." DataTable dtCloned = tabella.DataSource.Clone(); dtCloned.Columns[9].DataType = typeof(string); foreach (DataRow row in tabella.DataSource.Rows) { dtCloned.ImportRow(row); } tabella.DataSource = dtCloned; int i = 0; foreach (DataRow r in tabella.DataSource.Rows) { var colorAdeguatezza = Convert.ToBoolean(r["Adeguatezza"]) ? new ColorPDF(0, 176, 70) : new ColorPDF(255, 0, 0); tabella.Cells[6, i].FontColor = colorAdeguatezza; tabella.Cells[2, i].HorizontalAlignment = tabella.Cells[3, i].HorizontalAlignment = tabella.Cells[4, i].HorizontalAlignment = tabella.Cells[5, i].HorizontalAlignment = HorizontalAlignmentType.Destra; tabella.Cells[3, i].Value = r["RischioCreditoString"].ToString().ToLower().Contains("classe") ? Helper.CapitalizeWords(r["RischioCreditoString"].ToString()) : r["RischioCreditoString"].ToString(); //if (r["Patrimonio"].ToString().ToLower().Contains("altri")) //{ // tabella.Cells[6, i].FontColor = ColorPDF.Nero; // tabella.Cells[6, i].Value = "n.a."; //} decimal result = 0; if (Decimal.TryParse(r["GradoCopertura"].ToString(), out result)) { if (result == 0) { tabella.Cells[5, i].Value = "n.c."; } else { tabella.Cells[5, i].Value = result.ToString("N"); } } i++; } //Nota della tabella if (nota.Length > 0) { nota = nota.Replace("(*)", ""); if (_presenzaNotaPatrimonioTerzi && !_presenzaNotaPatrimonioCasa) tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa) tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); else if (!_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa) tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } AddElement(tabella); #endregion if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato) { AddElement(new SpacePDF(10)); string codicemandato = datiSeiUnico.getClienteReport().codiceMandato; AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca("La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» e di «Rischio Credito» prende in considerazione il patrimonio detenuto presso $/Banca/$ da tutti i mandati fiduciari associati al medesimo fiduciante a cui appartiene il mandato <" + codicemandato + ">. Gli indicatori «Rischio Mercato (VaR)» e «Rischio Credito» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + "."), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } if (getNotaCopertura5RMRC().Length > 0) { AddElement(new SpacePDF(10)); AddElement(new FormattedTextAreaPDF(getNotaCopertura5RMRC(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); } //Nota di eccessiva adeguatezza if (_presenzaNotaEccessivaAdeguatezza) { AddElement(new SpacePDF(10)); AddElement(new FormattedTextAreaPDF(getNoteAde(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6 }); //tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNoteAde(), new[] { "Var" }, "CodicePatrimonio IN ('BF','SPI')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 7 }); } var xAreaAdeguatezza = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]); var yAreaAdeguatezza = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]); if (EnvironmentFacade.ReportEnvironment.ReportId != 6) //Non nuclei { // OLD X // NON ADEGUATEZZA EnvironmentFacade.RendererFacade.XLeftLimit + 365 // ADEGUATEZZA EnvironmentFacade.RendererFacade.XLeftLimit + 150 + ((float)xAreaAdeguatezza * graficoCombination.Width / (float)graficoCombination.MaximumValueAxisX) - 68 // OLD Y // NON ADEGUATEZZA { Y = 235, FontSize = 6.5F, AbsolutePosition = true } // ADEGUATEZZA {Y = 427 - ((float)yAreaAdeguatezza * graficoCombination.Height / (float)graficoCombination.MaximumValueAxisY) + 8,FontSize = 6.5F,AbsolutePosition = true} AddElement(new FormattedTextAreaPDF("Area di non adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 325) { Y = 225, FontSize = 6.5F, AbsolutePosition = true }); //AddElement(new FormattedTextAreaPDF("Area adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { Y = 410, FontSize = 6.5F, AbsolutePosition = true }); AddElement(new FormattedTextAreaPDF("Area di adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 110 + ((float)xAreaAdeguatezza * graficoCombination.Width / (float)graficoCombination.MaximumValueAxisX) - 68) { Y = 417 - ((float)yAreaAdeguatezza * graficoCombination.Height / (float)graficoCombination.MaximumValueAxisY) + 8, FontSize = 6.5F, AbsolutePosition = true }); } } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected sealed override DataTable GetDataTable() { return null; } /// /// Recupera i dati necessari alla Section restituendo un DataSet. /// /// protected sealed override DataSet GetDataSet() { var ds = new DataSet(); #region Estrazione ChiavePB + Chiamate Servizio //Adriano #region Cliente/Nucleo professionale bool profiloProfessionale; bool profiloAggressivo; bool profiloProfessionaleAggressivo; Profiler profiler; if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei { DataServices.fideuram.data.service.rsAnagraficaNucleo nucleo = datiSeiUnico.nucleiUnit().anagrafica; profiler = new Profiler(nucleo); } else { DataServices.fideuram.data.service.rsClienteAnagrafica cliente = datiSeiUnico.clienteUnit().anagrafica; profiler = new Profiler(cliente); } profiloProfessionale = profiler.ProfiloProfessionale; profiloAggressivo = profiler.ProfiloAggressivo; profiloProfessionaleAggressivo = profiler.ProfiloProfessionaleAggressivo; #endregion //--Adriano // TO VERIFY //var anagrafica = datiSeiUnico.piramideModelloUnit().questionarioMifid; var rischio = datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito; //Adriano 20180125 Modifica per nuclei: il profilo non è più gestito per i nuclei int profilo; decimal rischioMercatoMassimoProfiloCliente; int rischioCreditoMassimoProfiloCliente; if (EnvironmentFacade.ReportEnvironment.ReportId == 6) { profilo = 5; rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax; rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId); if (profiloProfessionaleAggressivo) rischioMercatoMassimoProfiloCliente = 50; } else { profilo = rischio.profileId; ////Adriano: forzo a 50 il Rischio Mercato Massimo per simulare il caso dei Clienti Pro //// verificare il valore fornito dal WS, che potrebbe essere già corretto //rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax; //if (profiloProfessionaleAggressivo) // rischioMercatoMassimoProfiloCliente = 50; ////--Adriano ////originale rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax; rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId); } //var profilo = rischio.profileId; // END //var rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax; //var rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId); //--Adriano 20180125 var rischioFideuram = rischio.bancaFideuram; var rischioAltriIstituti = rischio.altriIstituti; var rischioComplessivo = rischio.totale; var totCasa = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliFideuram; var totTerzi = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliAltriIstituti; var totalePatrimonioCasa = totCasa.risorseFinanziarie + totCasa.partiteViaggianti; var totalePatrimonioTerzi = totTerzi.risorseFinanziarie; var totalePatrimonioFinanziario = totCasa.risorseFinanziarie + totCasa.partiteViaggianti + totTerzi.risorseFinanziarie; #endregion #region Rischio var dtRischio = new DataTable(); dtRischio.Columns.Add(new DataColumn("Patrimonio", typeof(string))); dtRischio.Columns.Add(new DataColumn("NumeroPatrimonio", typeof(Int32))); dtRischio.Columns.Add(new DataColumn("CodicePatrimonio", typeof(string))); dtRischio.Columns.Add(new DataColumn("ImmaginePatrimonio", typeof(string))); dtRischio.Columns.Add(new DataColumn("Controvalore", typeof(decimal))); dtRischio.Columns.Add(new DataColumn("VaR", typeof(decimal))); dtRischio.Columns.Add(new DataColumn("VaRString", typeof(string))); dtRischio.Columns.Add(new DataColumn("RischioCredito", typeof(decimal))); dtRischio.Columns.Add(new DataColumn("RischioCreditoString", typeof(string))); dtRischio.Columns.Add(new DataColumn("GradoCopertura", typeof(decimal))); dtRischio.Columns.Add(new DataColumn("Adeguatezza", typeof(bool))); dtRischio.Columns.Add(new DataColumn("AdeguatezzaString", typeof(string))); _presenzaNotaEccessivaAdeguatezza = rischio.eccessivamenteAdeguato; #region Casa string banca = Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment); dtRischio.Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio 1, //NumeroPatrimonio banca == "Fideuram" ? "BF" : "SPI", //CodicePatrimonio "PallinoColorato1d.png", //ImmaginePatrimonio totalePatrimonioCasa, //Controvalore rischioFideuram.misure.varp, //VaR rischioFideuram.varDecodificato, //VaRString rischioFideuram.misure.rischioCredito * 100, //RischioCredito rischioFideuram.rischioCreditoDecodificato, //RischioCreditoString Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura rischio.patFideuramAdeguato, //Adeguatezza rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString ); #endregion if (visualizzaAltriIstituti() && totalePatrimonioTerzi > 0) { #region Terzi dtRischio.Rows.Add( "Patrimonio altri Istituti", //Patrimonio 2, //NumeroPatrimonio "PT", //CodicePatrimonio "PallinoColorato2d.png", //ImmaginePatrimonio totalePatrimonioTerzi, //Controvalore rischioAltriIstituti.misure.varp, //VaR rischioAltriIstituti.varDecodificato, //VaRString rischioAltriIstituti.misure.rischioCredito * 100, //RischioCredito rischioAltriIstituti.rischioCreditoDecodificato, //RischioCreditoString Math.Round(rischioAltriIstituti.stat.copertura, 2), //GradoCopertura rischio.patAltriIstitutiAdeguato, //Adeguatezza rischio.patAltriIstitutiAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString ); #endregion #region Complessivo dtRischio.Rows.Add( "Patrimonio finanziario complessivo", //Patrimonio 3, //NumeroPatrimonio "PC", //CodicePatrimonio "PallinoColorato3d.png", //ImmaginePatrimonio totalePatrimonioFinanziario, //Controvalore rischioComplessivo.misure.varp, //VaR rischioComplessivo.varDecodificato, //VaR rischioComplessivo.misure.rischioCredito * 100, //RischioCredito rischioComplessivo.rischioCreditoDecodificato, //RischioCreditoString Math.Round(rischioComplessivo.stat.copertura, 2), //GradoCopertura rischio.patCompletoAdeguato, //Adeguatezza rischio.patCompletoAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString ); #endregion } ds.Tables.Add(dtRischio); #endregion #region Soglie Asse X // I valori non sono quelli reali definiti nel database ma sono riproporzionati in funzione della richiesta del cliente. var dtSoglieX = new DataTable(); dtSoglieX.Columns.Add(new DataColumn("Id", typeof(int))); dtSoglieX.Columns.Add(new DataColumn("Valore", typeof(decimal))); dtSoglieX.Rows.Add(1, 8.77); dtSoglieX.Rows.Add(2, 17.54); dtSoglieX.Rows.Add(3, 26.31); // dtSoglieX.Rows.Add(4, 32);m valore cliente: modificato il 30 maggio perchè ppt è diverso. e quindi mettiamo quello sotto: dtSoglieX.Rows.Add(4, 35.08); ds.Tables.Add(dtSoglieX); #endregion #region Soglie Asse Y var dtSoglieY = new DataTable(); dtSoglieY.Columns.Add(new DataColumn("Valore", typeof(decimal))); dtSoglieY.Columns.Add(new DataColumn("Testo", typeof(string))); //Adriano: dtSoglieY.Rows.Add(2, "2,00"); dtSoglieY.Rows.Add(4.5, "4,50"); dtSoglieY.Rows.Add(9.5, "9,50"); dtSoglieY.Rows.Add(15, "15,00"); if (profiloProfessionaleAggressivo) dtSoglieY.Rows.Add(50, "50,00"); else dtSoglieY.Rows.Add(27, "27,00"); //--Adriano //originale //dtSoglieY.Rows.Add(2, "2,00"); //dtSoglieY.Rows.Add(4.5, "4,50"); //dtSoglieY.Rows.Add(9.5, "9,50"); //dtSoglieY.Rows.Add(15, "15,00"); //dtSoglieY.Rows.Add(27, "27,00"); ds.Tables.Add(dtSoglieY); #endregion #region Cliente var dtCliente = new DataTable(); dtCliente.Columns.Add(new DataColumn("RischioMercatoMassimoProfilo", typeof(decimal))); dtCliente.Columns.Add(new DataColumn("RischioCreditoMassimoProfilo", typeof(decimal))); dtCliente.Rows.Add(rischioMercatoMassimoProfiloCliente, dtSoglieX.AsEnumerable().FirstOrDefault(o => o.Field("Id").Equals(rischioCreditoMassimoProfiloCliente))["Valore"]); ds.Tables.Add(dtCliente); #endregion return ds; } public virtual string getNotaCopertura5RMRC() //40.5 copertura rischio mercato var e rischio credito { string nota = ""; bool gradoCoperturaRM; bool gradoCoperturaRC; try { gradoCoperturaRM = Convert.ToDouble(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ",")) > 0 && Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ",")) < 90; gradoCoperturaRC = Convert.ToDouble(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ",")) > 0 && Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ",")) < 90; string rm = gradoCoperturaRM ? "Rischio Mercato (VaR)" : ""; string rc = gradoCoperturaRM && gradoCoperturaRC ? " e di Rischio Credito" : !gradoCoperturaRM && gradoCoperturaRC ? " Rischio Credito" : ""; if (gradoCoperturaRM || gradoCoperturaRC) { nota += "Il patrimonio che lei detiene presso $/Banca/$ risulta non adeguato al suo profilo finanziario in quanto alcuni prodotti non sono coperti in termini di " + rm + rc + ", determinando un grado di copertura inferiore a 90%: in questo caso, a prescindere dai singoli indicatori di rischio, il patrimonio $/Banca/$ viene considerato sempre come non adeguato."; } } catch { } return datiSeiUnico.FormatBanca(nota); } /// /// Recupera la nota dinamica /// /// /// private string getNoteAde() { return Helper.ReplaceVariables("Il patrimonio che lei detiene presso $/Banca/$ risulta adeguato al suo profilo finanziario. Le segnaliamo, tuttavia, che il livello di Rischio Mercato (VaR) del patrimonio che lei detiene presso $/Banca/$ si posiziona su un valore sensibilmente inferiore rispetto alla soglia minima attribuita al suo profilo finanziario.", base.EnvironmentFacade.ReportEnvironment); } public virtual bool visualizzaAltriIstituti() { return GetOption().Valore; } private string GetNote() { string nota = ""; string token = ""; var pianificazioneVerticale = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale; decimal CCN_CASA = pianificazioneVerticale.contoCorrenteNegativo; //cc negativi del patrimonio casa decimal CCN_TERZI = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.contoCorrentiNegativi; _presenzaNotaPatrimonioTerzi = CCN_TERZI != 0 && visualizzaAltriIstituti(); decimal GPELIGOFONDI_CASA = pianificazioneVerticale.liqEligoFondiNeg; // liquidità sottostante la GP Eligo Fondi del patrimonio casa decimal GPELIGTITOLI_CASA = pianificazioneVerticale.liqEligoTitoliNeg; //liquidità sottostante la GP Eligo Titoli del patrimonio casa // 20181009 AC decimal TUOFOGLIO_CASA = pianificazioneVerticale.liqFogliNeg; //liquidità sottostante Il Mio Foglio del patrimonio casa //--20181009 AC // 20181009 AC _presenzaNotaPatrimonioCasa = CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA!=0; //--20181009 AC decimal GC = 100; decimal OC_CASA = 0;//patrimonioCasa.totaliPatrimonio.partiteViaggianti; //Operazioni in corso del patrimonio casa decimal CC_CASA = 0;// patrimonioCasa.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio casa decimal CC_TERZI = 0;// patrimonioTerzi.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio terzi decimal PNR_CASA = 0; //Patrimonio non rappresentabile per macroassetclass del patrimonio casa decimal PNR_TERZI = 0; if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA!=0) { nota += token + "Il controvalore"; token = " "; if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0|| TUOFOGLIO_CASA!=0) { nota += token + "del patrimonio $/Banca/$ esclude il saldo negativo"; if (CCN_CASA != 0) { nota += token + datiSeiUnico.FormatDecimal("dei conti correnti ({0} €)", CCN_CASA); token = (GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0) ? ", " : ""; } // 20181009 AC if (TUOFOGLIO_CASA != 0) { nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante Il Mio Foglio ({0} €)", TUOFOGLIO_CASA); token = (TUOFOGLIO_CASA != 0) ? ", " : ""; } //--20181009 AC if (GPELIGOFONDI_CASA != 0) { nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Fondi ({0} €)", GPELIGOFONDI_CASA); token = (GPELIGTITOLI_CASA != 0) ? ", " : ""; } if (GPELIGTITOLI_CASA != 0) { nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Titoli ({0} €)", GPELIGTITOLI_CASA); } token = ". "; } } if (CCN_TERZI != 0 && visualizzaAltriIstituti()) { nota += token + datiSeiUnico.FormatDecimal(" Il controvalore del patrimonio altri Istituti esclude il saldo negativo dei conti correnti ({0} €)", CCN_TERZI); } //if (GC < 100) //{ // nota += token + datiSeiUnico.FormatDecimal("Grado di copertura (%) della rappresentazione grafica per macro asset class pari a {0}", GC); // token = ": "; // if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0 || PNR_TERZI != 0 || CC_TERZI != 0) // { // nota += token + "non sono considerati"; // token = " "; // if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0) // { // if (PNR_CASA != 0) // { // nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_CASA); // token = ", "; // } // if (CC_CASA != 0) // { // nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_CASA); // token = ", "; // } // if (OC_CASA != 0) // { // nota += token + datiSeiUnico.FormatDecimal("gli importi relativi alle operazioni in corso ({0} €)", OC_CASA); // token = ", "; // } // token = " "; // nota += token + "del patrimonio $/Banca/$"; // token = ", "; // } // if ((PNR_TERZI != 0 || CC_TERZI != 0) && visualizzaAltriIstituti()) // { // if (PNR_TERZI != 0) // { // nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_TERZI); // token = ", "; // } // if (CC_TERZI != 0) // { // nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_TERZI); // token = ", "; // } // token = " "; // nota += token + "del patrimonio Altri Istituti"; // token = ", "; // } // } //} nota += "."; //nota = !nota.Equals("") ? "(*) " + nota : nota; return datiSeiUnico.FormatBanca(nota); } } }