using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportCommon; using System.Collections.Generic; using System.Linq; using Consulenza.ReportWriter.Business.CHART_PDF; using Consulenza.ReportWriter.Business.Entity; using Consulenza.DataServices.fideuram.data.service; namespace Consulenza.ReportWriter.Manager.Section.Unica { /// /// S45.RischioCreditoVSConcentrazionePatrimonioFideuram idSezione = 88 /// public class S45 : Entity.Section { public S45(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S45", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { var dati = GetDataSet(); var series = new List(); if (presenzaTabellaClassificazione()) { #region Tabella delle categorie #region Testo introduttivo AddElement(new SpacePDF(20)); AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(15)); #endregion #region Tabella DataTable dt = new DataTable(); dt = dati.Tables["categoriaRischioCredito"].AsEnumerable().OrderByDescending(r => r.Field("Ordinamento")).CopyToDataTable(); var tabellaCategorie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dt, dati.Tables["categoriaRischioCreditoFooter"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = true, MinimumRowHeight = 20 }; tabellaCategorie.IndexesOfSeparatorsToIgnore.Add(3); #region Columns e FooterColumns //tabellaCategorie.Columns.Add(new ColumnPDF("Oggetto", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Oggetto", string.Empty) { DeltaYContent = 5 }); tabellaCategorie.Columns.Add(new ColumnPDF("Categoria", 165, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "DescrizioneCategoria", "Categoria") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 2 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Colonna1", tabellaCategorie.Columns.Sum(o => o.Width), HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo) { FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("Controvalore", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore
attuale(€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 2, HeaderPaddingLeft = 12 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Colonna2", 90, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale) { FontSize = 7, PaddingRight = 1 }); tabellaCategorie.Columns.Add(new ColumnPDF("RischioCredito", 90, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "RischioCredito", "Rischio Credito") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 4, PaddingRight = 5 }); tabellaCategorie.FooterColumns.Add(new ColumnPDF("Colonna3", 90, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo) { FontSize = 7 }); tabellaCategorie.Columns.Add(new ColumnPDF("PesoObject", 175, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Peso", "") { DeltaYContent = 5, PaddingLeft = 10, HeaderBackgroundColor = ColorPDF.Bianco }); int a = 0; foreach (var item in dati.Tables["categoriaRischioCredito"].Rows) { tabellaCategorie.Cells[1, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra; tabellaCategorie.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra; a++; } #endregion #region Cells int i = 0; var list = new List(); list.Add(Convert.ToDouble(tabellaCategorie.DataSource.AsEnumerable().Max(x => x["Peso"]))); var valoreMassimo = (float)Helper.Round(list.Max()); float larghezzaBarra = 0; float larghezzaSpazioTestoPercentuale = 0; float larghezzaMinimaSpazioTestoPercentuale = 35; float deltaXBarra = 0; foreach (DataRow row in tabellaCategorie.DataSource.Rows) { var colore = new ColorPDF(row["CodiceHex"].ToString()); // Pallino //tabellaCategorie.Cells[0, i].ValueObject = new CirclePDF(13, 13, colore); tabellaCategorie.Cells[0, i].ValueObjectList = new List() { new CirclePDF(11, 11, colore){ DeltaY = 5}, new FormattedTextAreaPDF(row["DescrizioneCategoria"].ToString(), 0) { DeltaY = 3, DeltaX = 15, FontSize = 7 } }; #region barra colonna Peso larghezzaBarra = Helper.GetWidthProportional((float)Convert.ToDecimal(row["Peso"]), valoreMassimo, tabellaCategorie.Columns[3].Width - 50); larghezzaSpazioTestoPercentuale = tabellaCategorie.Columns[3].Width - larghezzaBarra; deltaXBarra = larghezzaBarra + 10; if (larghezzaSpazioTestoPercentuale < 35) { deltaXBarra = (tabellaCategorie.Columns[3].Width - 35); larghezzaSpazioTestoPercentuale = 35; } if (Convert.ToDecimal(row["Peso"]) != 0) { tabellaCategorie.Cells[3, i].ValueObjectList = new List() { new RectanglePDF(12, larghezzaBarra, colore), new FormattedTextAreaPDF(Helper.FormatPercentage(Convert.ToDecimal(row["Peso"]), 2), 0, larghezzaSpazioTestoPercentuale) { DeltaY = 1, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left, DeltaX = deltaXBarra, FontSize = 7 } }; } else { tabellaCategorie.Cells[3, i].ValueObjectList = new List() { //new FormattedTextAreaPDF(Helper.FormatPercentage(Convert.ToDecimal(row["Peso"]), 2), deltaXBarra) //{ // DeltaY = 2, // TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left, // DeltaX = 0, // FontSize = 7 //}, new RectanglePDF(13, 3 , ColorPDF.Bianco){DeltaY = 3} }; } #endregion i++; } #endregion AddElement(tabellaCategorie); #endregion AddElement(new SpacePDF(10)); #endregion } if (presenzaGraficoTabellaEmittenti() && dati.Tables["emittente"].Rows.Count > 0) { #region Grafico Rischio credito vs Concentrazione #region Testo introduttivo if (presenzaTabellaClassificazione()) AddElement(new SpacePDF(10)); else AddElement(new SpacePDF(20)); AddElement(new FormattedTextAreaPDF(getTesto2(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); AddElement(new SpacePDF(7)); #endregion #region Etichetta Rischio Credito AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 70) { FontBold = true, FontSize = 7 }); AddElement(new SpacePDF(7)); #endregion var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 100, 1F) { Height = 160, Width = 310, BackImage = "ChartGradient_RischioCreditoConcentrazionesmallscritte2.png", MarginAxisY = 0, ShowLineAxisY = true, ShowLabelAxisY = true, LabelFormatAxisY = FormatType.Intero, IntervalNumberAxisY = 10, StartFromZeroAxisY = true, MaximumValueAxisY = 10, // valore fisso LabelFormatAxisX = FormatType.Intero, ShowLineAxisX = true, ShowLabelAxisX = true, StartFromZeroAxisX = true, IntervalNumberAxisX = 10, MaximumValueAxisX = 100 }; var d = dati.Tables["emittente"].AsEnumerable().OrderByDescending(o => o.Field("IdEmittente")).CopyToDataTable(); // creo le Serie foreach (DataRow item in d.Rows) { int i = 0; string rischio; string[] rischioCredito = item["RischioCredito"].ToString().Split('-'); foreach (var r in rischioCredito) { //if (r.Contains("n.c.")) // rischio = "0"; //else rischio = r; i++; series.Add( new Serie { Name = item["IdEmittente"].ToString() + "." + i, Type = Dundas.Charting.WebControl.SeriesChartType.Point, MarkerImage = string.Format("Pallino{0}c.png", item["IdEmittente"].ToString()), Points = new List() { new Point { Values = new ValuesPointXY(Convert.ToDouble(item["Concentrazione"]), Convert.ToDouble(rischio)), ShowLabelAxisY = false, ShowLabelAxisX = false, Visible = false }} }); graficoCombination.Markers.Add( new Marker() { Height = 16, Width = 16, Scale = 1, Image = string.Format("Pallino{0}.png", item["IdEmittente"].ToString()), X = (float)Convert.ToDouble(item["Concentrazione"]), Y = (float)Convert.ToDouble(rischio), }); } } // aggiungo le Serie al grafico graficoCombination.SeriesCollection = series; AddElement(graficoCombination); //AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 370) { Y = 400, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true }); //AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 235) { Y = 490, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true }); //AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { Y = 570, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true }); #region Etichetta Concentrazione AddElement(new SpacePDF(20)); AddElement(new FormattedTextAreaPDF("Concentrazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 236) { FontBold = true, FontSize = 7 }); #endregion #endregion #region Tabella emittenti #region Tabella AddElement(new SpacePDF(20)); var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["emittente"]) { Style = Style.ConsulenzaUnica, AlternateRow = false, ShowSeparationLines = true, RowHeight = 18, Footer = false, HeaderHeight = 25 }; tabella.Columns.Add(new ColumnPDF("ImmagineEmittente", 25, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Immagine, "ImmagineEmittente", string.Empty) { DeltaYContent = 3, ScaleColumnTypeImage = 0.55F }); tabella.Columns.Add(new ColumnPDF("DescrizioneEmittente", 140, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DescrizioneEmittente", "Emittente") { HeaderFontSize = 7, FontSize = 7}); tabella.Columns.Add(new ColumnPDF("ControvaloreObbligazionario", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreObbligazionario", "Controvalore
obbligazionario (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 12 }); tabella.Columns.Add(new ColumnPDF("ControvaloreAzionario", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAzionario", "Controvalore
azionario (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 24 }); tabella.Columns.Add(new ColumnPDF("Concentrazione", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Concentrazione", "Concentrazione (%)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 8 }); tabella.Columns.Add(new ColumnPDF("RischioCredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio
Credito") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 20 }); tabella.Columns.Add(new ColumnPDF("Rating", 45, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "Rating", "Rating") { HeaderFontSize = 7, FontSize = 7}); int j = 0; foreach (var item in dati.Tables["emittente"].Rows) { tabella.Cells[2, j].HorizontalAlignment = HorizontalAlignmentType.Destra; tabella.Cells[3, j].HorizontalAlignment = HorizontalAlignmentType.Destra; tabella.Cells[4, j].HorizontalAlignment = HorizontalAlignmentType.Destra; tabella.Cells[5, j].HorizontalAlignment = HorizontalAlignmentType.Destra; tabella.Cells[6, j].HorizontalAlignment = HorizontalAlignmentType.Centrato; j++; } AddElement(tabella); #endregion #endregion } } /// /// 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() { #region Definizione dataset var ds = new DataSet(); ds.Tables.Add(new DataTable("categoriaRischioCredito")); ds.Tables.Add(new DataTable("categoriaRischioCreditoFooter")); ds.Tables.Add(new DataTable("emittente")); #endregion #region Estrazione Unit var rischioCreditoConcentrazione = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione; var categorie = rischioCreditoConcentrazione.patrimonioBancaFideuram.elencoSlice.ToList().FindAll(o => o.sliceRappresentabile == true); var rischioCredito = datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.bancaFideuram.rischioCreditoDecodificato;//datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos.rischioCreditoDecodificato; var listPosizioni = new List(); foreach (var item in datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione .patrimonioBancaFideuram.elencoSlice.ToList() .FindAll(o => o.sliceRappresentabile == false)) { listPosizioni.Add(new rsPosizioneLight { ctvPosizione = item.ctvCC, rappresentabile = false }); } var prodottiNonCoperti = listPosizioni; //***************************** var displayInfo = datiSeiUnico.displayInfos().coperturaRischioCreditoInfos.ToList(); #endregion #region Categoria rischio credito ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("CodiceCategoria", typeof(string))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("DescrizioneCategoria", typeof(string))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("Controvalore", typeof(decimal))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("RischioCredito", typeof(string))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("Peso", typeof(decimal))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("CodiceHex", typeof(string))); ds.Tables["categoriaRischioCredito"].Columns.Add(new DataColumn("Ordinamento", typeof(Int32))); foreach (var categoria in categorie) { // tmp //categoria.ctvCC = 0; //categoria.pesoCC = 0; var mapDisplayInfo = displayInfo.FirstOrDefault(o => o.key.Equals(categoria.codice)).value; ds.Tables["categoriaRischioCredito"].Rows.Add( categoria.codice, //CodiceCategoria categoria.descrizione, //DescrizioneCategoria categoria.ctvCC, //Controvalore categoria.ctvCC == 0 ? "-" : categoria.codice.ToLower().Equals("sogg") ? ((rischioCredito.ToUpper().Contains("CLASSE") ? Helper.CapitalizeWords(rischioCredito) : Convert.ToDouble(categoria.ctvCC) == 0 ? "-" : rischioCredito)) : Convert.ToDouble(categoria.ctvCC) == 0 ? "-": "n.a.", //RischioCredito //TO DO categoria.pesoCC != 0 ? categoria.pesoCC * 100 : 0.00001m, //Peso mapDisplayInfo.fill, //CodiceHex mapDisplayInfo.order //Ordinamento ); } #endregion #region Footer Categoria rischio credito ds.Tables["categoriaRischioCreditoFooter"].Columns.Add(new DataColumn("Colonna1", typeof(string))); ds.Tables["categoriaRischioCreditoFooter"].Columns.Add(new DataColumn("Colonna2", typeof(decimal))); ds.Tables["categoriaRischioCreditoFooter"].Columns.Add(new DataColumn("Colonna3", typeof(string))); ds.Tables["categoriaRischioCreditoFooter"].Columns.Add(new DataColumn("FontBold", typeof(bool))); ds.Tables["categoriaRischioCreditoFooter"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool))); if (prodottiNonCoperti.Any() & rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleNonRappr != 0) { ds.Tables["categoriaRischioCreditoFooter"].Rows.Add( "Patrimonio rappresentabile", rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleRapprCC,//rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleRapprCC, (rischioCredito.ToUpper().Contains("CLASSE") ? Helper.CapitalizeWords(rischioCredito) : rischioCredito), true, true ); ds.Tables["categoriaRischioCreditoFooter"].Rows.Add( "Patrimonio non rappresentabile", rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleNonRappr,//prodottiNonCoperti.Sum(o => o.ctvPosizione), "n.c.", false, false ); ds.Tables["categoriaRischioCreditoFooter"].Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleCtv,//datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.sommaCtvAree, (rischioCredito.ToUpper().Contains("CLASSE") ? Helper.CapitalizeWords(rischioCredito) : rischioCredito), true, true ); } else { ds.Tables["categoriaRischioCreditoFooter"].Rows.Add( string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), rischioCreditoConcentrazione.patrimonioBancaFideuram.totaleCtv,//datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.sommaCtvAree, (rischioCredito.ToUpper().Contains("CLASSE") ? Helper.CapitalizeWords(rischioCredito) : rischioCredito), true, true ); } #endregion #region Rischio credito - concentrazione per emittente ds.Tables["emittente"].Columns.Add(new DataColumn("IdEmittente", typeof(int))); ds.Tables["emittente"].Columns.Add(new DataColumn("ImmagineEmittente", typeof(string))); ds.Tables["emittente"].Columns.Add(new DataColumn("DescrizioneEmittente", typeof(string))); ds.Tables["emittente"].Columns.Add(new DataColumn("ControvaloreObbligazionario", typeof(decimal))); ds.Tables["emittente"].Columns.Add(new DataColumn("ControvaloreAzionario", typeof(decimal))); ds.Tables["emittente"].Columns.Add(new DataColumn("Concentrazione", typeof(decimal))); ds.Tables["emittente"].Columns.Add(new DataColumn("RischioCredito", typeof(string))); ds.Tables["emittente"].Columns.Add(new DataColumn("RischioCreditoString", typeof(string))); ds.Tables["emittente"].Columns.Add(new DataColumn("Rating", typeof(string))); var emittenti = rischioCreditoConcentrazione.elencoEmittentiBancaFideuram.ToList().OrderByDescending(o => o.concentrazione).Take(5); var i = 0; foreach (var emittente in emittenti) { i++; if (emittente.rischioCredito == "n.c." || emittente.rischioCredito == "n.a.") { emittente.rischioCreditoValue = 0; emittente.listaRischioCredito[0] = 0; } ds.Tables["emittente"].Rows.Add( i, //IdEmittente string.Format("Pallino{0}.png", i), //ImmaginePatrimonio emittente.emittente, //DescrizioneEmittente emittente.ctvObbligazionario, //ControvaloreObbligazionario emittente.ctvAzionario, //ControvaloreAzionario emittente.concentrazione * 100, //Concentrazione emittente.listaRischioCredito != null ? String.Join("-", emittente.listaRischioCredito) : "0", //emittente.rischioCreditoValue, //RischioCredito emittente.rischioCredito,//RischioCreditoString emittente.rating //Rating ); } #endregion return ds; } public virtual bool presenzaTabellaClassificazione() { return GetOption().Valore; } public virtual bool presenzaGraficoTabellaEmittenti() { return GetOption().Valore; } public virtual string getTesto1() { return Helper.ReplaceVariables(GetText().Rows[0]["testo2"].ToString(), EnvironmentFacade.ReportEnvironment); } public virtual string getTesto2() { return Helper.ReplaceVariables(GetText().Rows[0]["testo1"].ToString(), EnvironmentFacade.ReportEnvironment); } } }