using System; using System.Collections.Generic; using System.Linq; using Consulenza.ExternalServices; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.Entity; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using Consulenza.ReportCommon; namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Diagnosi { /// /// Patrimonio Immobiliare Stima delle imposte (id 43) Terreni /// public class S11 : Entity.Section { public S11(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S11", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } /// /// Scheda11. Patrimonio immobiliare –Stima delle imposte dei Terreni /// protected override sealed void Draw() { var dati = GetDataSet(); if (dati == null || dati.Tables["Dati"].Rows.Count == 0) return; var testi = GetText(); var icona = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.20F, "StimaValore.png") { AutoIncrementYWritable = false }; var titolo = new FormattedTextAreaPDF(testi.Rows[0]["testo1"].ToString(), 82, 600) { FontSize = 10, FontColor = ColorPDF.Immobiliare_Grigio_TestoStandard, DeltaY = 5 }; #region Oggetti da ripetere al salto pagina della tabella var listaOggettiDaRipetere = new List { new SpacePDF(40), icona, titolo, new SpacePDF(20) }; AddElement(new RepeaterPDF(listaOggettiDaRipetere)); #endregion #region Tabella var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["Dati"]) { Style = Style.Immobiliare, RowsPadding = 3, Footer = true, HeaderHeight = 130, MinimumRowHeight = 12, AdditionalSpaceBelow = 80 //Spazio aggiuntivo per le avvertenze }; #region definizione larghezza colonne const int larghezzaTabella = 755; // massima larghezza tabella const int larghezzaSuperficieStimata = 25; const int larghezzaRedditoAgrario = 40; const int larghezzaRedditoDominicale = 40; const int larghezzaValoreStimato = 60; const int larghezzaCliente = 50; const int larghezzaTotaleImposte = 50; //La colonna descrizione è l'unica variabile. const int larghezzaDescrizione = larghezzaTabella - larghezzaSuperficieStimata - larghezzaRedditoAgrario - larghezzaRedditoDominicale - larghezzaValoreStimato - (larghezzaCliente * 2) - (larghezzaTotaleImposte * 2); #endregion #region colonne tabella.Columns.Add(new ColumnPDF("descrizione", larghezzaDescrizione, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderFontBold = true, PaddingRight = 3 }); tabella.Columns.Add(new ColumnPDF("superficiestimata", larghezzaSuperficieStimata, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "SuperficieStimataStringa", "Superficie stimata (ha)") { HeaderTextVerticalDirection = true }); tabella.Columns.Add(new ColumnPDF("redditoagrario", larghezzaRedditoAgrario, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "RedditoAgrarioStringa", "Reddito agrario") { HeaderTextVerticalDirection = true }); tabella.Columns.Add(new ColumnPDF("redditodominicale", larghezzaRedditoDominicale, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "RedditoDominicaleStringa", "Reddito dominicale") { HeaderTextVerticalDirection = true }); tabella.FooterColumns.Add(new ColumnPDF("descrizione", tabella.Columns.Sum(p => p.Width), HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo)); tabella.FooterCells[0, 0].Value = "Totale (€)"; tabella.Columns.Add(new ColumnPDF("valorestima", larghezzaValoreStimato, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "ValoreStimaStringa", "Valore stimato (€)") { HeaderTextVerticalDirection = true, PaddingRight = 3 }); tabella.FooterColumns.Add(new ColumnPDF("valorestima", larghezzaValoreStimato, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { PaddingRight = 3 }); var totaleValoreStimato = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(ValoreStimaTotale)", string.Empty)); tabella.FooterCells[1, 0].Value = totaleValoreStimato.Equals(0) ? "-" : Helper.FormatCurrency(totaleValoreStimato.ToString()); #region ProQuota Cliente tabella.Columns.Add(new ColumnPDF("proquotaMin", larghezzaCliente, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "ImposteProQuotaMinStringa", "min") { HeaderGroupText = new List { dati.Tables["Dati"].Rows[0]["nominativo"].ToString(), "Imposte pro quota (€)" }, HeaderGroupBorderLine = false, HeaderGroupWidth = larghezzaCliente * 2, HeaderGroupTextDeltaX = -10, HeaderGroupTextDeltaY = -15, HeaderGroupTextVerticalDirection = true, HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderBackgroundColor = ColorPDF.Immobiliare_Marrone, HeaderFontColor = ColorPDF.Bianco, HeaderFontBold = true, BackgroundColor = ColorPDF.Immobiliare_Marrone, FontColor = ColorPDF.Bianco, FontBold = true }); tabella.FooterColumns.Add(new ColumnPDF("proquotaMinTotale", larghezzaCliente, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { BackgroundColor = ColorPDF.Immobiliare_Marrone, FontColor = ColorPDF.Bianco, FontBold = true }); var totaleProQuotaMin = Convert.ToDecimal(dati.Tables["Dati"].Compute("Sum(ImposteProQuotaMin)", string.Empty)); tabella.FooterCells[2, 0].Value = totaleProQuotaMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleProQuotaMin.ToString()); tabella.Columns.Add(new ColumnPDF("proquotaMax", larghezzaCliente, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "ImposteProQuotaMaxStringa", "max") { HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderBackgroundColor = ColorPDF.Immobiliare_Marrone, HeaderFontColor = ColorPDF.Bianco, HeaderFontBold = true, BackgroundColor = ColorPDF.Immobiliare_Marrone, FontColor = ColorPDF.Bianco, FontBold = true }); tabella.FooterColumns.Add(new ColumnPDF("proquotaMaxTotale", larghezzaCliente, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { BackgroundColor = ColorPDF.Immobiliare_Marrone, FontColor = ColorPDF.Bianco, FontBold = true }); var totaleProQuotaMax = Convert.ToDecimal(dati.Tables["Dati"].Compute("Sum(ImposteProQuotaMax)", string.Empty)); tabella.FooterCells[3, 0].Value = totaleProQuotaMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleProQuotaMax.ToString()); #endregion #region Totale imposte tabella.Columns.Add(new ColumnPDF("ImposteMin", larghezzaTotaleImposte, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TotaleImposteMinStringa", "min") { HeaderGroupText = new List { "Totale imposte (€)", "(IMU)" }, HeaderGroupBorderLine = false, HeaderGroupWidth = larghezzaTotaleImposte * 2, HeaderGroupTextDeltaX = -10, HeaderGroupTextDeltaY = -15, HeaderGroupTextVerticalDirection = true, HeaderVerticalAlignment = VerticalAlignmentType.Basso }); tabella.Columns.Add(new ColumnPDF("ImposteMax", larghezzaTotaleImposte, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TotaleImposteMaxStringa", "max") { HeaderVerticalAlignment = VerticalAlignmentType.Basso }); tabella.FooterColumns.Add(new ColumnPDF("ImposteMinTotale", larghezzaTotaleImposte, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); var totaleImposteMin = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TotaleImposteMin)", string.Empty)); tabella.FooterCells[4, 0].Value = totaleImposteMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleImposteMin.ToString()); tabella.FooterColumns.Add(new ColumnPDF("ImposteMaxTotale", larghezzaTotaleImposte, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); var totaleImposteMax = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TotaleImposteMax)", string.Empty)); tabella.FooterCells[5, 0].Value = totaleImposteMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleImposteMax.ToString()); #endregion #endregion #region note della tabella // Nota immagine (Avvertenze) tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, testi.Rows[0]["testo2"].ToString()) { FontBold = true, FontSize = 7, DeltaY = 3, Image = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.1F, "warning.png") }); #endregion #region avvertenze var testoInizialeAvvertenze = new FormattedTextAreaPDF(testi.Rows[0]["testo3"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 20, 800) { FontSize = 7 }; var elencoAvvertenze = new List { testi.Rows[0]["testo4"].ToString(), testi.Rows[0]["testo5"].ToString(), testi.Rows[0]["testo6"].ToString(), testi.Rows[0]["testo7"].ToString(), testi.Rows[0]["testo8"].ToString() }; var elenco = new UnorderedListPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 10, elencoAvvertenze, BulletType.Trattino) { Width = 800, Margin = 2, FontSize = 7 }; var testoFinaleAvvertenze = new FormattedTextAreaPDF(Helper.ReplaceVariables(testi.Rows[0]["testo9"].ToString(), EnvironmentFacade.ReportEnvironment), EnvironmentFacade.RendererFacade.XLeftLimit + 20, 800) { FontSize = 7 }; #endregion #endregion AddElement(new SpacePDF(40)); AddElement(icona); AddElement(titolo); AddElement(new SpacePDF(20)); AddElement(tabella); // Avvertenze AddElement(new SpacePDF(5)); AddElement(testoInizialeAvvertenze); AddElement(elenco); AddElement(testoFinaleAvvertenze); } /// /// 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 dei parametri var parametri = new List { new Parametro { Direction = ParameterDirection.Input, DbType = DbType.Int64, ParameterName = "ChiaveClientePB", Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave } }; #endregion var dsOriginal = EnvironmentFacade.ReportEnvironment.Immobiliare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Immobiliare_S9_StimaImposte", parametri) : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_Immobiliare_S9_StimaImposte", parametri); if (dsOriginal.Tables[2].Rows.Count == 0) return null; var dt1 = dsOriginal.Tables[2].Copy(); dt1.TableName = "Dati"; #region Chiamata Prometeia (FiscalitaImmobili) var dtInput = dsOriginal.Tables[0].AsEnumerable().Where(o => o.Field("tipoCatasto").ToString().Equals("T")).ToArray(); var listaFiscalitaImmobili = new Prometeia().GetFiscalitaImmobili(dtInput); #endregion // Colonne aggiuntive per formattazione in stringa dt1.Columns.Add("Indice", typeof(int)); dt1.Columns.Add("SuperficieStimataStringa", typeof(string)); dt1.Columns.Add("RedditoAgrarioStringa", typeof(string)); dt1.Columns.Add("RedditoDominicaleStringa", typeof(string)); dt1.Columns.Add("ValoreStimaStringa", typeof(string)); //IMU dt1.Columns.Add("ImuValoreMinimo", typeof(decimal)); dt1.Columns.Add("ImuValoreMassimo", typeof(decimal)); //ProQuota Cliente dt1.Columns.Add("ImposteProQuotaMin", typeof(decimal)); dt1.Columns.Add("ImposteProQuotaMax", typeof(decimal)); dt1.Columns.Add("ImposteProQuotaMinStringa", typeof(string)); dt1.Columns.Add("ImposteProQuotaMaxStringa", typeof(string)); //Totale imposte dt1.Columns.Add("TotaleImposteMin", typeof(decimal)); dt1.Columns.Add("TotaleImposteMax", typeof(decimal)); dt1.Columns.Add("TotaleImposteMinStringa", typeof(string)); dt1.Columns.Add("TotaleImposteMaxStringa", typeof(string)); //Colonna di formattazione dt1.Columns.Add("ReplaceIfZero", typeof(string)); var indice = 0; foreach (DataRow item in dt1.Rows) { item["Indice"] = indice; item["SuperficieStimataStringa"] = Convert.ToDecimal(item["SuperficieStimata"]) == 0 ? "n.d." : Helper.FormatDecimal(item["SuperficieStimata"].ToString(), 3); item["RedditoAgrarioStringa"] = item["RedditoAgrario"] == DBNull.Value ? "-" : Helper.FormatCurrency(item["RedditoAgrario"].ToString()); item["RedditoDominicaleStringa"] = item["RedditoDominicale"] == DBNull.Value ? "-" : Helper.FormatCurrency(item["RedditoDominicale"].ToString()); item["ValoreStimaStringa"] = item["ValoreStimaTotale"] == DBNull.Value ? "-" : Helper.FormatCurrency(item["ValoreStimaTotale"].ToString()); var riferimentoImmobileFiscalita = listaFiscalitaImmobili.FirstOrDefault( o => o.ChiaveImmobile.Equals(item["IdImmobileCatasto"].ToString())); //IMU item["ImuValoreMinimo"] = riferimentoImmobileFiscalita.ImuValoreMinimo.HasValue ? riferimentoImmobileFiscalita.ImuValoreMinimo.Value : 0; item["ImuValoreMassimo"] = riferimentoImmobileFiscalita.ImuValoreMassimo.HasValue ? riferimentoImmobileFiscalita.ImuValoreMassimo.Value : 0; //ProQuota Cliente var percentualeAliquotaImu = Convert.ToDecimal(item["PercAliquotaImu"]); var proquotaMin = (percentualeAliquotaImu * Convert.ToDecimal(item["ImuValoreMinimo"])); var proquotaMax = (percentualeAliquotaImu * Convert.ToDecimal(item["ImuValoreMassimo"])); item["ImposteProQuotaMin"] = proquotaMin; item["ImposteProQuotaMax"] = proquotaMax; item["ImposteProQuotaMinStringa"] = Helper.FormatCurrency(proquotaMin.ToString()); item["ImposteProQuotaMaxStringa"] = Helper.FormatCurrency(proquotaMax.ToString()); //Totale imposte item["TotaleImposteMin"] = Convert.ToDecimal(item["ImuValoreMinimo"]); item["TotaleImposteMinStringa"] = Helper.FormatCurrency(item["TotaleImposteMin"].ToString()); item["TotaleImposteMax"] = Convert.ToDecimal(item["ImuValoreMassimo"]); item["TotaleImposteMaxStringa"] = Helper.FormatCurrency(item["TotaleImposteMax"].ToString()); item["ReplaceIfZero"] = "-"; indice++; } // Dataset di ritorno var dsResult = new DataSet(); dsResult.Tables.Add(dt1.Copy()); return dsResult; } } }