using System; using System.Collections.Generic; using System.Data; using Consulenza.ReportWriter.Business.OBJ_PDF; using ceTe.DynamicPDF; using Consulenza.ReportWriter.Business.CHART_PDF; using Consulenza.ReportWriter.Business; namespace Consulenza.ReportWriter.Manager.Section.Base.Proposta { public class P2 : Entity.Section { public P2(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("P2", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } /// /// Disegna l'oggetto P2 /// protected override sealed void Draw() { //Guida l'aumento di dimensione verticale della sezione delle torte: const int deltaSommaPixelVerticale = 20; var dsP2 = GetDataSet(); var dtTabellaRisorseFinanziarie = dsP2.Tables[0]; var dtTabellaPatrimonio = dsP2.Tables[1]; var dtTabellaNotaPresente = dsP2.Tables[2]; if (dtTabellaRisorseFinanziarie.Rows.Count <= 0) return; var totaleControvaloreAttuale_RisorseFinanziarie = Convert.ToDecimal(dtTabellaRisorseFinanziarie.Compute("Sum(Ctv_Attuale)", string.Empty)); var totaleControvaloreProspettico_RisorseFinanziarie = Convert.ToDecimal(dtTabellaRisorseFinanziarie.Compute("Sum(Ctv_Prospettico)", string.Empty)); var totaleControvaloreAttuale_PatrimonioTotale = dtTabellaPatrimonio.Rows.Count > 0 ? totaleControvaloreAttuale_RisorseFinanziarie + Convert.ToDecimal(dtTabellaPatrimonio.Compute("Sum(Ctv_Attuale)", string.Empty)) : totaleControvaloreAttuale_RisorseFinanziarie; var totaleControvaloreProspettico_PatrimonioTotale = dtTabellaPatrimonio.Rows.Count > 0 ? totaleControvaloreProspettico_RisorseFinanziarie + Convert.ToDecimal(dtTabellaPatrimonio.Compute("Sum(Ctv_Prospettico)", string.Empty)) : totaleControvaloreProspettico_RisorseFinanziarie; bool visualizzareTabellaDelPatrimonioTotale = false; if (dtTabellaPatrimonio.Rows.Count > 0) { if (!Convert.ToDecimal(dtTabellaPatrimonio.Compute("Sum(Ctv_Attuale)", string.Empty)).Equals(0) || !Convert.ToDecimal(dtTabellaPatrimonio.Compute("Sum(Ctv_Prospettico)", string.Empty)).Equals(0)) { visualizzareTabellaDelPatrimonioTotale = true; } } #region Tabella Risorse Finanziarie var tabellaRisorseFinanziarie = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtTabellaRisorseFinanziarie) { ShowBorderFooter = false, ID = "Tabella_P2" }; tabellaRisorseFinanziarie.Columns.Add(new ColumnPDF("ColoriMacroAsset", 23, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, string.Empty, string.Empty) { DeltaYContent = 5 }); tabellaRisorseFinanziarie.Columns.Add(new ColumnPDF("MacroAsset", 140, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "MacroAsset", "Macro asset class")); tabellaRisorseFinanziarie.Columns.Add(new ColumnPDF("Ctv_Attuale", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "Ctv_Attuale", "Controvalore attuale (€)")); tabellaRisorseFinanziarie.Columns.Add(new ColumnPDF("Ctv_Prospettico", 210, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "Ctv_Prospettico", "Controvalore prospettico (€)")); // Aggiungo i colori alla colonna ColoriMacroAsset var indiceRiga = 0; var percentualiControvaloreAttuale = new List(); var percentualiControvaloreProspettico = new List(); var serieCollezione = new List { new Serie {Name = "TortaControvaloreAttuale"}, new Serie {Name = "TortaControvaloreProspettico"} }; foreach (DataRow row in tabellaRisorseFinanziarie.DataSource.Rows) { var color = new ColorPDF(Convert.ToInt32(row["Red"]), Convert.ToInt32(row["Green"]), Convert.ToInt32(row["Blue"])); tabellaRisorseFinanziarie.Cells[0, indiceRiga].ValueObject = new CirclePDF(10, 10, color); indiceRiga++; percentualiControvaloreAttuale.Add(Convert.ToDouble(row["Perc_Attuale"])); percentualiControvaloreProspettico.Add(Convert.ToDouble(row["Perc_Prospettico"])); //Serie Controvalore Attuale serieCollezione[0].Points.Add(new Point { LabelAxisX = row["MacroAsset"].ToString(), Color = color, Value = Convert.ToDouble(row["Perc_Attuale"]), ShowLabelAxisX = false, ShowLabelAxisY = false }); //Serie Controvalore Prospettico serieCollezione[1].Points.Add(new Point { LabelAxisX = row["MacroAsset"].ToString(), Color = color, Value = Convert.ToDouble(row["Perc_Prospettico"]), ShowLabelAxisX = false, ShowLabelAxisY = false }); } // Footer tabellaRisorseFinanziarie.FooterColumns.Add(new ColumnPDF("Totale Risorse Finanziarie", 163, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo)); tabellaRisorseFinanziarie.FooterColumns.Add(new ColumnPDF("Totale Controvalore Attuale", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale)); tabellaRisorseFinanziarie.FooterColumns.Add(new ColumnPDF("Totale Controvalore Prospettico", 210, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale)); tabellaRisorseFinanziarie.FooterCells[0, 0].Value = visualizzareTabellaDelPatrimonioTotale ? "Totale risorse finanziarie" : "Totale patrimonio"; tabellaRisorseFinanziarie.FooterCells[1, 0].Value = totaleControvaloreAttuale_RisorseFinanziarie.ToString(); tabellaRisorseFinanziarie.FooterCells[2, 0].Value = totaleControvaloreProspettico_RisorseFinanziarie.ToString(); #endregion #region Tabella Patrimonio TablePDF tabellaPatrimonio = null; if (visualizzareTabellaDelPatrimonioTotale) { tabellaPatrimonio = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtTabellaPatrimonio); tabellaPatrimonio.Columns.Add(new ColumnPDF("Descrizione", 163, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", string.Empty)); tabellaPatrimonio.Columns.Add(new ColumnPDF("Ctv_Attuale", 150, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "Ctv_Attuale", string.Empty)); tabellaPatrimonio.Columns.Add(new ColumnPDF("Ctv_Prospettico", 210, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "Ctv_Prospettico", string.Empty)); tabellaPatrimonio.Header = false; tabellaPatrimonio.ShowBorderFooter = false; tabellaPatrimonio.ShowBorderHeader = false; #region Nota del patrimonio non rappresentabile var notaPatrimonioNonRappresentabile = new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, "Dettaglio riportato nel capitolo ''Patrimonio non rappresentabile''") { Width = 200, AutoIncrementYWritable = false }; #endregion // Footer tabellaPatrimonio.FooterColumns.Add(new ColumnPDF("Totale Patrimonio", 163, HorizontalAlignmentType.Sinistra, false, true, 8, ColumnType.Testo)); tabellaPatrimonio.FooterColumns.Add(new ColumnPDF("Totale Controvalore Attuale", 150, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale)); tabellaPatrimonio.FooterColumns.Add(new ColumnPDF("Totale Controvalore Prospettico", 210, HorizontalAlignmentType.Destra, false, true, 8, ColumnType.Decimale)); tabellaPatrimonio.FooterCells[0, 0].Value = "Totale patrimonio"; tabellaPatrimonio.FooterCells[1, 0].Value = totaleControvaloreAttuale_PatrimonioTotale.ToString(); tabellaPatrimonio.FooterCells[2, 0].Value = totaleControvaloreProspettico_PatrimonioTotale.ToString(); //Check presenza nota di dettagliamento del Patrimonio Non Rappresentabile: if (Convert.ToInt16(dtTabellaNotaPresente.Rows[0]["NotaPresente"]) > 0) tabellaPatrimonio.Notes.Add(notaPatrimonioNonRappresentabile); } #endregion #region Grafici a Torta #region Cornice Sinistra var bordoSinistro = new RectanglePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 180 - 90, 120 + deltaSommaPixelVerticale, 5, ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella) { AutoIncrementYWritable = false }; var bordoSinistroBianco = new RectanglePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 181 - 90, 118 + deltaSommaPixelVerticale, 5, ColorPDF.Bianco) { AutoIncrementYWritable = false, DeltaY = 1 }; #endregion #region Grafico Controvalore Attuale //var tortaControvaloreAttuale = new PiePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 186 - 30, 1F) //{ // Width = 170, // Height = 170, // SeriesCollection = serieCollezione.FindAll(s => s.Name.Equals("TortaControvaloreAttuale")) //}; var tortaControvaloreAttuale = new PiePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 186 - 80, 1F) { Width = 200, Height = 200, SeriesCollection = serieCollezione.FindAll(s => s.Name.Equals("TortaControvaloreAttuale")), StartAngle = 0, ShowLabelPoints = true, Style3DEnabled = false, AutoIncrementYWritable = true, LabelDecimalDigitsCount = 1, FontLabelSize = 5f, CustomPlottingHeight = 50, CustomPlottingWidth = 50, CustomPlottingX = 25, CustomPlottingY = 7, UseCustomPlotting = true, }; #endregion #region Grafico Controvalore Prospettico //var tortaControvaloreProspettico = new PiePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 356 - 30, 1F) //{ // Width = 170, // Height = 170, // SeriesCollection = serieCollezione.FindAll(s => s.Name.Equals("TortaControvaloreProspettico")) //}; var tortaControvaloreProspettico = new PiePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 356 - 70, 1F) { Width = 200, Height = 200, SeriesCollection = serieCollezione.FindAll(s => s.Name.Equals("TortaControvaloreProspettico")), StartAngle = 0, ShowLabelPoints = true, Style3DEnabled = false, AutoIncrementYWritable = true, LabelDecimalDigitsCount = 1, FontLabelSize = 5f, CustomPlottingHeight = 50, CustomPlottingWidth = 50, CustomPlottingX = 25, CustomPlottingY = 7, UseCustomPlotting = true, }; #endregion #region Cornice Destra var bordoDestro = new RectanglePDF(EnvironmentFacade.RendererFacade.XRightLimit - 5, 120 + deltaSommaPixelVerticale, 5, ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella) { AutoIncrementYWritable = false }; var bordoDestroBianco = new RectanglePDF(EnvironmentFacade.RendererFacade.XRightLimit - 6, 118 + deltaSommaPixelVerticale, 5, ColorPDF.Bianco) { AutoIncrementYWritable = false, DeltaY = 1 }; #endregion #endregion #region Rettangolo chiusura sezione //Disegno un rettangolo in secondo piano che dia l'effetto cornice all'intestazione var rectangleFooterBorder = new RectanglePDF(EnvironmentFacade.RendererFacade.XLeftLimit - 1, 10, 523, ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella) { DeltaY = 11, AutoIncrementYWritable = false }; // rettangolo contenitore grigio var rectangleFooter = new RectanglePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 20, 521, ColorPDF.ConsulenzaBase_Grigio_SfondoColonnaHeaderFooterTabella) { AutoIncrementYWritable = false }; #endregion AddElement(tabellaRisorseFinanziarie); if (visualizzareTabellaDelPatrimonioTotale) { AddElement(tabellaPatrimonio); } AddElement(new SpacePDF(12)); if (serieCollezione.Count > 0) { AddElement(bordoSinistro); AddElement(bordoSinistroBianco); AddElement(tortaControvaloreAttuale); AddElement(tortaControvaloreProspettico); AddElement(bordoDestro); AddElement(bordoDestroBianco); } //AddElement(new SpacePDF(125 + deltaSommaPixelVerticale)); AddElement(new SpacePDF(135 + deltaSommaPixelVerticale)); AddElement(rectangleFooterBorder); AddElement(rectangleFooter); AddElement(new SpacePDF(10)); } /// /// 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 parametri = new List(); #region Definizione dei parametri var parametro = new Parametro { Direction = ParameterDirection.Input, DbType = DbType.Int64, ParameterName = "chiaveClientePB", Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave }; parametri.Add(parametro); parametro = new Parametro { Direction = ParameterDirection.Input, DbType = DbType.Int32, ParameterName = "chiaveProposta", Value = EnvironmentFacade.ReportEnvironment.Proposta.Chiave }; parametri.Add(parametro); #endregion return EnvironmentFacade.ReportEnvironment.Proposta.PropostaCBUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Prop_P2", parametri) : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaBase, "REP_Prop_P2", parametri); } } }