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 41) Fabbricati /// public class S9 : Entity.Section { public S9(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S9", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } /// /// Scheda9. Patrimonio immobiliare –Stima delle imposte dei Fabbricati /// protected override sealed void Draw() { var dati = GetDataSet(); if (dati == null || dati.Tables["Dati"].Rows.Count == 0) return; var testi = GetText(); // Abitazione principale var abitazionePrincipale = dati.Tables["Dati"].AsEnumerable().Where(r => r.Field("Abitazioneprincipale")); 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 = 90 //Spazio aggiuntivo per le avvertenze }; #region definizione larghezza colonne const int larghezzaTabella = 755; // massima larghezza tabella var larghezzaImmagine = abitazionePrincipale.Any() ? 17 : 0; const int larghezzaRenditaCatastale = 60; const int larghezzaImuTasiTari = 50; const int larghezzaCliente = 45; const int larghezzaTotaleImposte = 50; //La colonna descrizione è l'unica variabile. var larghezzaDescrizione = larghezzaTabella - larghezzaImmagine - larghezzaRenditaCatastale - (larghezzaImuTasiTari * 6) - (larghezzaCliente * 2) - (larghezzaTotaleImposte * 2); #endregion #region colonne // Colonna di tipo Immagine if (abitazionePrincipale.Any()) { tabella.Columns.Add(new ColumnPDF("immagine0", larghezzaImmagine, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, string.Empty, string.Empty) { ScaleColumnTypeImage = 0.1F }); } tabella.Columns.Add(new ColumnPDF("descrizione", larghezzaDescrizione, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderFontBold = true, PaddingLeft = abitazionePrincipale.Any() ? 5 : 0, PaddingRight = 3 }); tabella.Columns.Add(new ColumnPDF("renditacatastale", larghezzaRenditaCatastale, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "RenditaCatastaleStringa", "Rendita catastale") { 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 (€)"; #region IMU tabella.Columns.Add(new ColumnPDF("ImuMin", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "ImuValoreMinimoStringa", "min") { HeaderGroupText = new List { "IMU" }, HeaderGroupBorderLine = false, HeaderGroupWidth = larghezzaImuTasiTari * 2, HeaderGroupTextDeltaX = 0, HeaderGroupTextDeltaY = -15, HeaderGroupTextVerticalDirection = true, HeaderVerticalAlignment = VerticalAlignmentType.Basso }); tabella.Columns.Add(new ColumnPDF("ImuMax", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "ImuValoreMassimoStringa", "max") { HeaderVerticalAlignment = VerticalAlignmentType.Basso }); tabella.FooterColumns.Add(new ColumnPDF("ImuMinTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); var totaleImuMin = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(ImuValoreMinimo)", string.Empty)); tabella.FooterCells[1, 0].Value = totaleImuMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleImuMin.ToString()); tabella.FooterColumns.Add(new ColumnPDF("ImuMaxTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); var totaleImuMax = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(ImuValoreMassimo)", string.Empty)); tabella.FooterCells[2, 0].Value = totaleImuMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleImuMax.ToString()); #endregion #region TASI /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.Columns.Add(new ColumnPDF("TasiMin", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TasiValoreMinimoStringa", "min") //{ // HeaderGroupText = new List { "TASI" }, // HeaderGroupBorderLine = false, // HeaderGroupWidth = larghezzaImuTasiTari * 2, // HeaderGroupTextDeltaX = 0, // HeaderGroupTextDeltaY = -15, // HeaderGroupTextVerticalDirection = true, // HeaderVerticalAlignment = VerticalAlignmentType.Basso //}); //tabella.Columns.Add(new ColumnPDF("TasiMax", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TasiValoreMassimoStringa", "max") //{ // HeaderVerticalAlignment = VerticalAlignmentType.Basso, // PaddingRight = 3, // HeaderPaddingRight = 3 //}); //tabella.FooterColumns.Add(new ColumnPDF("TasiMinTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); //var totaleTasiMin = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TasiValoreMinimo)", string.Empty)); //tabella.FooterCells[3, 0].Value = totaleTasiMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleTasiMin.ToString()); //tabella.FooterColumns.Add(new ColumnPDF("TasiMaxTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { PaddingRight = 3 }); //var totaleTasiMax = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TasiValoreMassimo)", string.Empty)); //tabella.FooterCells[4, 0].Value = totaleTasiMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleTasiMax.ToString()); /******************************************************************************************************************************/ #endregion #region TARI tabella.Columns.Add(new ColumnPDF("TariMin", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TariValoreMinimoStringa", "min") { HeaderGroupText = new List { "TARI" }, HeaderGroupBorderLine = false, HeaderGroupWidth = larghezzaImuTasiTari * 2, HeaderGroupTextDeltaX = -5, HeaderGroupTextDeltaY = -15, HeaderGroupTextVerticalDirection = true, HeaderVerticalAlignment = VerticalAlignmentType.Basso }); tabella.Columns.Add(new ColumnPDF("TariMax", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "TariValoreMassimoStringa", "max") { HeaderVerticalAlignment = VerticalAlignmentType.Basso, PaddingRight = 3, HeaderPaddingRight = 3 }); tabella.FooterColumns.Add(new ColumnPDF("TariMinTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo)); var totaleTariMin = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TariValoreMinimo)", string.Empty)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[5, 0].Value = totaleTariMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleTariMin.ToString()); tabella.FooterCells[3, 0].Value = totaleTariMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleTariMin.ToString()); /******************************************************************************************************************************/ tabella.FooterColumns.Add(new ColumnPDF("TariMaxTotale", larghezzaImuTasiTari, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { PaddingRight = 3 }); var totaleTariMax = Convert.ToDecimal(dati.Tables["Dati"].Compute("SUM(TariValoreMassimo)", string.Empty)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[6, 0].Value = totaleTariMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleTariMax.ToString()); tabella.FooterCells[4, 0].Value = totaleTariMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleTariMax.ToString()); /******************************************************************************************************************************/ #endregion #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 = -15, 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)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[7, 0].Value = totaleProQuotaMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleProQuotaMin.ToString()); tabella.FooterCells[5, 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)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[8, 0].Value = totaleProQuotaMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleProQuotaMax.ToString()); tabella.FooterCells[6, 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 (€)" }, HeaderGroupBorderLine = false, HeaderGroupWidth = larghezzaTotaleImposte * 2, HeaderGroupTextDeltaX = 0, 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)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[9, 0].Value = totaleImposteMin.Equals(0) ? "-" : Helper.FormatCurrency(totaleImposteMin.ToString()); tabella.FooterCells[7, 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)); /**************************** Disabilitato Colonne TASI 08/03/2021 - Pino ****************************************/ //tabella.FooterCells[10, 0].Value = totaleImposteMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleImposteMax.ToString()); tabella.FooterCells[8, 0].Value = totaleImposteMax.Equals(0) ? "-" : Helper.FormatCurrency(totaleImposteMax.ToString()); /******************************************************************************************************************************/ #endregion #endregion #region immagini e border nelle colonne di tipo immagine #region Abitazione principale foreach (var item in abitazionePrincipale) { int indiceRiga = Convert.ToInt32(item["indice"]) - 1; tabella.Cells[0, indiceRiga].Value = "abitazprincipale.png"; } #endregion #endregion #region note della tabella // Nota immagine (Abitazione principale) if (abitazionePrincipale.Any()) 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, "abitazprincipale.png") }); // Nota immagine (Avvertenze) tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, testi.Rows[0]["testo3"].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]["testo4"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 20, 800) { FontSize = 7 }; var elencoAvvertenze = new List { testi.Rows[0]["testo5"].ToString(), testi.Rows[0]["testo6"].ToString(), testi.Rows[0]["testo7"].ToString(), testi.Rows[0]["testo8"].ToString(), testi.Rows[0]["testo9"].ToString(), testi.Rows[0]["testo10"].ToString(), testi.Rows[0]["testo11"].ToString(), /***** FIX Adeguamento nuova IMU 2020 20-05-2020 - Pino ****/ //testi.Rows[0]["testo12"].ToString() /***********************************************************/ }; var elenco = new UnorderedListPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 10, elencoAvvertenze, BulletType.Trattino) { Width = 800, Margin = 2, FontSize = 7 }; /******* FIX Adeguamento nuova IMU 2020 20-05-2020 - Pino **/ var testoFinaleAvvertenze = new FormattedTextAreaPDF(Helper.ReplaceVariables(testi.Rows[0]["testo12"].ToString(), base.EnvironmentFacade.ReportEnvironment), EnvironmentFacade.RendererFacade.XLeftLimit + 20, 800) { FontSize = 7 }; //var testoFinaleAvvertenze = new FormattedTextAreaPDF(Helper.ReplaceVariables(testi.Rows[0]["testo13"].ToString(), base.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[1].Rows.Count == 0) return null; var dt1 = dsOriginal.Tables[1].Copy(); dt1.TableName = "Dati"; #region Chiamata Prometeia (FiscalitaImmobili) var dtInput = dsOriginal.Tables[0].AsEnumerable().Where(o => o.Field("tipoCatasto").ToString().Equals("F")).ToArray(); var listaFiscalitaImmobili = new Prometeia().GetFiscalitaImmobili(dtInput); #endregion #region Join + Chiamata Prometeia (Estrazione TARI) var dtInput2 = new DataTable("dtInput2"); dtInput2.Columns.Add(new DataColumn("chiaveImmobile", typeof(string))); dtInput2.Columns.Add(new DataColumn("codComune", typeof(string))); dtInput2.Columns.Add(new DataColumn("categoriaCatastale", typeof(string))); dtInput2.Columns.Add(new DataColumn("tipoCatasto", typeof(string))); dtInput2.Columns.Add(new DataColumn("superficieTARI", typeof(decimal))); dtInput2.Columns.Add(new DataColumn("pertinenzaUtDomestica", typeof(bool))); dtInput2.Columns.Add(new DataColumn("destinazioneUso", typeof(string))); foreach (var item in from c in dsOriginal.Tables[0].AsEnumerable() join l in dsOriginal.Tables[1].AsEnumerable() on c.Field("chiaveImmobile") equals l.Field("idimmobilecatasto") select new { chiaveImmobile = c.Field("chiaveImmobile"), codComune = c.Field("comune"), categoriaCatastale = c.Field("categoria"), tipoCatasto = c.Field("tipoCatasto"), superficieTARI = l.Field("superficiestimata"), pertinenzaUtDomestica = (c.Field("categoria") == "C/2" || c.Field("categoria") == "C/6" || c.Field("categoria") == "C/7" ) ? true : false, destinazioneUso = c.Field("destinazioneUso").Equals("S") ? "NS" : c.Field("destinazioneUso") } ) { dtInput2.Rows.Add( item.chiaveImmobile, item.codComune, item.categoriaCatastale, item.tipoCatasto, item.superficieTARI, item.pertinenzaUtDomestica, item.destinazioneUso ); } var listaTari = new Prometeia().GetFiscalitaTari(dtInput2.AsEnumerable().ToArray()); #endregion // Colonne aggiuntive per formattazione in stringa dt1.Columns.Add("Indice", typeof(int)); dt1.Columns.Add("RenditaCatastaleStringa", typeof(string)); //IMU dt1.Columns.Add("ImuValoreMinimo", typeof(decimal)); dt1.Columns.Add("ImuValoreMinimoStringa", typeof(string)); dt1.Columns.Add("ImuValoreMassimo", typeof(decimal)); dt1.Columns.Add("ImuValoreMassimoStringa", typeof(string)); //TASI dt1.Columns.Add("TasiValoreMinimo", typeof(decimal)); dt1.Columns.Add("TasiValoreMinimoStringa", typeof(string)); dt1.Columns.Add("TasiValoreMassimo", typeof(decimal)); dt1.Columns.Add("TasiValoreMassimoStringa", typeof(string)); //TARI dt1.Columns.Add("TariValoreMinimo", typeof(decimal)); dt1.Columns.Add("TariValoreMinimoStringa", typeof(string)); dt1.Columns.Add("TariValoreMassimo", typeof(decimal)); dt1.Columns.Add("TariValoreMassimoStringa", typeof(string)); //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["RenditaCatastaleStringa"] = item["RenditaCatastale"] == DBNull.Value ? "-" : Helper.FormatCurrency(item["RenditaCatastale"].ToString()); var riferimentoImmobileFiscalita = listaFiscalitaImmobili.FirstOrDefault( o => o.ChiaveImmobile.Equals(item["IdImmobileCatasto"].ToString())); var riferimentoTariFiscalita = listaTari.FirstOrDefault( o => o.ChiaveImmobile.Equals(item["IdImmobileCatasto"].ToString())); //IMU item["ImuValoreMinimo"] = riferimentoImmobileFiscalita.ImuValoreMinimo.HasValue ? riferimentoImmobileFiscalita.ImuValoreMinimo.Value : 0; item["ImuValoreMinimoStringa"] = Helper.FormatCurrency(Convert.ToDecimal(item["ImuValoreMinimo"]).ToString()); item["ImuValoreMassimo"] = riferimentoImmobileFiscalita.ImuValoreMassimo.HasValue ? riferimentoImmobileFiscalita.ImuValoreMassimo.Value : 0; item["ImuValoreMassimoStringa"] = Helper.FormatCurrency(Convert.ToDecimal(item["ImuValoreMassimo"]).ToString()); //TASI item["TasiValoreMinimo"] = riferimentoImmobileFiscalita.TasiValoreMinimo.HasValue ? riferimentoImmobileFiscalita.TasiValoreMinimo.Value : 0; item["TasiValoreMinimoStringa"] = Helper.FormatCurrency(Convert.ToDecimal(item["TasiValoreMinimo"]).ToString()); item["TasiValoreMassimo"] = riferimentoImmobileFiscalita.TasiValoreMassimo.HasValue ? riferimentoImmobileFiscalita.TasiValoreMassimo.Value : 0; item["TasiValoreMassimoStringa"] = Helper.FormatCurrency(Convert.ToDecimal(item["TasiValoreMassimo"]).ToString()); //TARI item["TariValoreMinimo"] = riferimentoTariFiscalita.TariValoreMinimo.HasValue ? riferimentoTariFiscalita.TariValoreMinimo.Value : 0; item["TariValoreMinimoStringa"] = Helper.FormatCurrency((Convert.ToDecimal(item["TariValoreMinimo"]).ToString())); item["TariValoreMassimo"] = riferimentoTariFiscalita.TariValoreMassimo.HasValue ? riferimentoTariFiscalita.TariValoreMassimo.Value : 0; item["TariValoreMassimoStringa"] = Helper.FormatCurrency((Convert.ToDecimal(item["TariValoreMassimo"]).ToString())); //ProQuota Cliente var percentualeAliquotaImu = Convert.ToDecimal(item["PercAliquotaImu"]); var percentualeAliquotaTasi = Convert.ToDecimal(item["PercAliquotaTasi"]); var proquotaMin = (percentualeAliquotaImu * Convert.ToDecimal(item["ImuValoreMinimo"])) + (percentualeAliquotaTasi * Convert.ToDecimal(item["TasiValoreMinimo"])) + (percentualeAliquotaImu * Convert.ToDecimal(item["TariValoreMinimo"])); var proquotaMax = (percentualeAliquotaImu * Convert.ToDecimal(item["ImuValoreMassimo"])) + (percentualeAliquotaTasi * Convert.ToDecimal(item["TasiValoreMassimo"])) + (percentualeAliquotaImu * Convert.ToDecimal(item["TariValoreMassimo"])); 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"]) + Convert.ToDecimal(item["TasiValoreMinimo"]) + Convert.ToDecimal(item["TariValoreMinimo"]); item["TotaleImposteMinStringa"] = Helper.FormatCurrency(item["TotaleImposteMin"].ToString()); item["TotaleImposteMax"] = Convert.ToDecimal(item["ImuValoreMassimo"]) + Convert.ToDecimal(item["TasiValoreMassimo"]) + Convert.ToDecimal(item["TariValoreMassimo"]); item["TotaleImposteMaxStringa"] = Helper.FormatCurrency(item["TotaleImposteMax"].ToString()); item["ReplaceIfZero"] = "-"; indice++; } #region Ordinamento //L’odinamento dei fabbricati elencati nella tabella è costruito con le seguenti regole: // 1. Immobile di residenza (se indicato) // 2. Pertinenza dell’immobile di residenza (se indicata) // 3. Fabbricati del comune di residenza: //  Abitazioni (per valore decrescente); //  Box/posti auto (per valore decrescente); //  Altre categorie fabbricati (per valore decrescente). // 4. Fabbricati di altri comuni (per valore aggregato complessivo decrescente): //  Abitazioni (per valore decrescente); //  Box/posti auto (per valore decrescente); //  Altre categorie fabbricati (per valore decrescente). var codiceComuneResidenza = dt1.Rows[0]["codComuneResidenza"] != DBNull.Value ? dt1.Rows[0]["codComuneResidenza"].ToString() : string.Empty; DataTable dtOrdinamentoStep1; DataTable dtOrdinamentoStep2; if (string.IsNullOrEmpty(codiceComuneResidenza)) { dtOrdinamentoStep1 = dt1.AsEnumerable() .OrderByDescending(o => o.Field("ordResidenza")) .ThenByDescending(o => o.Field("ordPertinenza")) .ThenByDescending(o => o.Field("ordindirizzo")) .ThenByDescending(o => o.Field("controvaloreComune")) .ThenBy(o => o.Field("indirizzo")) .ThenByDescending(o => o.Field("ordFabbricati")) .ThenByDescending(o => o.Field("ValoreStimaTotale")) .CopyToDataTable(); dtOrdinamentoStep2 = dtOrdinamentoStep1; } else { dtOrdinamentoStep1 = dt1.AsEnumerable().CopyToDataTable(); // prima recupero i CodComune = codiceComuneResidenza // - verifico che siano presenti prima di ordinare if (dtOrdinamentoStep1.AsEnumerable().Any(o => o.Field("CodComune").Equals(codiceComuneResidenza))) { dtOrdinamentoStep2 = dtOrdinamentoStep1.AsEnumerable().Where(o => o.Field("CodComune").Equals(codiceComuneResidenza)) .OrderByDescending(o => o.Field("ordResidenza")) .ThenByDescending(o => o.Field("ordPertinenza")) .ThenByDescending(o => o.Field("ordindirizzo")) .ThenByDescending(o => o.Field("controvaloreComune")) .ThenBy(o => o.Field("indirizzo")) .ThenByDescending(o => o.Field("ordFabbricati")) .ThenByDescending(o => o.Field("ValoreStimaTotale")) .CopyToDataTable(); } else //dtOrdinamentoStep2 = dtOrdinamentoStep1; dtOrdinamentoStep2 = dtOrdinamentoStep1.Clone(); // poi recupero tutti gli altri // - verifico che siano presenti prima di ordinare if (dtOrdinamentoStep1.AsEnumerable().Any(o => o.Field("CodComune") != codiceComuneResidenza)) { dtOrdinamentoStep2.Merge(dtOrdinamentoStep1.AsEnumerable().Where(o => o.Field("CodComune") != codiceComuneResidenza) // .OrderByDescending(o => o.Field("controvaloreComune")) .OrderBy(o => o.Field("indirizzo")) .ThenByDescending(o => o.Field("ordFabbricati")) .ThenByDescending(o => o.Field("ValoreStimaTotale")) .CopyToDataTable()); } } // Riordino l'indice int indiceRiga = 1; foreach (DataRow item in dtOrdinamentoStep2.Rows) { item["Indice"] = indiceRiga; indiceRiga++; } //Rinomino dt di output dtOrdinamentoStep2.TableName = "Dati"; #endregion // Dataset di ritorno var dsResult = new DataSet(); dsResult.Tables.Add(dtOrdinamentoStep2.Copy()); return dsResult; } } }