337 lines
17 KiB
C#
337 lines
17 KiB
C#
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.Finalita
|
||
{
|
||
/// <summary>
|
||
/// Patrimonio Immobiliare Stima delle imposte (id 149) Terreni
|
||
/// </summary>
|
||
public class S10 : Entity.Section
|
||
{
|
||
public S10(EnvironmentFacade environmentFacade, int idSection)
|
||
: base(environmentFacade, idSection)
|
||
{
|
||
try
|
||
{
|
||
Draw();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
SectionLogger.Write("S10", 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.FinalitaImmobiliare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_FinalitaImmobiliare_S8_StimaImposte", parametri)
|
||
: DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_FinalitaImmobiliare_S8_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;
|
||
}
|
||
}
|
||
}
|