337 lines
17 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// Patrimonio Immobiliare Stima delle imposte (id 43) Terreni
/// </summary>
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);
}
}
/// <summary>
/// Scheda11. Patrimonio immobiliare Stima delle imposte dei Terreni
/// </summary>
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<ObjectPDF> { 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<string> { 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<string> { "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<string> {
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);
}
/// <summary>
/// Recupera i dati necessari alla Section restituendo un DataTable.
/// </summary>
/// <returns></returns>
protected sealed override DataTable GetDataTable()
{
return null;
}
/// <summary>
/// Recupera i dati necessari alla Section restituendo un DataSet.
/// </summary>
/// <returns></returns>
protected sealed override DataSet GetDataSet()
{
#region Definizione dei parametri
var parametri = new List<Parametro>
{
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<string>("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;
}
}
}