using System;
using System.Collections.Generic;
using System.Linq;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportWriter.Business.Entity;
using Consulenza.ReportCommon;
namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.MappaturaPreliminare
{
///
/// Mappatura strategica degli immobili (id 135)
/// La scheda è costituita da due tabelle, nelle quali sono riportati gli immobili del cliente.
/// Nella prima sono elencate le abitazioni per le quali non si è scelto di stampare la “Scheda di dettaglio dell’abitazione” e le abitazioni censite manualmente su Sei.
/// Qualora il PB abbia scelto di stampare la “Scheda di dettaglio dell’abitazione” per tutte le abitazioni del cliente e non siano state censite manualmente abitazioni su Sei, la tabella in questione non sarà rappresentata.
///
public class S8 : Entity.Section
{
public S8(EnvironmentFacade environmentFacade, int idSection)
: base(environmentFacade, idSection)
{
try
{
Draw();
}
catch (Exception ex)
{
SectionLogger.Write("S8", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
}
}
protected override sealed void Draw()
{
var dati = GetDataSet();
if (dati.Tables[0].Rows.Count == 0) return;
var testi = GetText();
var titolo = new FormattedTextAreaPDF(testi.Rows[0]["testo1"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit, 600) { FontSize = 10, FontColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
AddElement(new SpacePDF(40));
AddElement(titolo);
#region Oggetti da ripetere al salto pagina della tabella
var listaOggettiDaRipetere = new List { new SpacePDF(40), titolo, new SpacePDF(20) };
AddElement(new RepeaterPDF(listaOggettiDaRipetere));
#endregion
AddElement(new SpacePDF(20));
#region ABITAZIONI
//escludo idimmobili stampati nella S7 se presenti, altrimenti prendo tutti quelli del dataset e li divido tra abitazioni e altri
DataTable dtab = new DataTable();
DataTable dtal = new DataTable();
//escludo idimmobili richiesti e tutti gli immobili che non siano Abitazioni
//var queryAbitazioni = from x in dati.Tables[0].AsEnumerable()
// where (!EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.IdImmobileCatasto.Any(b => x.Field("idImmobileCatasto").Contains(b))) && x.Field("tipologia").Trim() == "Abitazioni"
// select x;
//var queryAltri = from x in dati.Tables[0].AsEnumerable()
// where (!EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.IdImmobileCatasto.Any(b => x.Field("idImmobileCatasto").Contains(b))) && x.Field("tipologia").Trim() != "Abitazioni"
// select x;
var queryAbitazioni = from x in dati.Tables[0].AsEnumerable()
where (!EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.IdImmobileCatasto.Any(b => x.Field("idImmobileCatasto").Contains(b))) && x.Field("TipoImmobile").Trim() == "F"
select x;
var queryAltri = from x in dati.Tables[0].AsEnumerable()
where (!EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.IdImmobileCatasto.Any(b => x.Field("idImmobileCatasto").Contains(b))) && x.Field("TipoImmobile").Trim() == "T"
select x;
if (queryAbitazioni.Count() > 0)
{
var dtAbitazioni = new DataTable();
dtab = queryAbitazioni.CopyToDataTable();
dtAbitazioni.Columns.Add(new DataColumn("Fabricati", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Superficie", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Usoabitativo", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Usostrumentale", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Usoinvestimento", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Libero", typeof(string)));
dtAbitazioni.Columns.Add(new DataColumn("Affittato", typeof(string)));
foreach (DataRow ro in dtab.Rows)
{
dtAbitazioni.Rows.Add(ro["descrizione"].ToString(), Convert.ToInt32(ro["Superficie"]) == 0 ? "n.d." : Helper.FormatInteger(ro["Superficie"].ToString()) + " mq", "", "", "", "", "");
}
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtAbitazioni)
{
Style = Style.Immobiliare,
Footer = false,
ShowBorderLastLine = true,
ShowSeparationLines = false,
RowHeight = 15
};
tabella.Columns.Add(new ColumnPDF("Fabricati", 305, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "Fabricati", "Fabricati") {HeaderBackgroundColor=ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 8 });
tabella.Columns.Add(new ColumnPDF("superficie", 105, HorizontalAlignmentType.Centrato, false, false, 8, ColumnType.Testo, "Superficie", "Superficie stimata") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 8 });
tabella.Columns.Add(new ColumnPDF("usoabitativo", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usoabitativo", "Uso abitativo")
{
HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella,
HeaderFontSize = 7,
HeaderGroupText = new List { string.Format("{0}Finalità", string.Concat(Enumerable.Repeat(" ", 27))) },
HeaderGroupWidth = 210,
HeaderGroupTextDeltaX = 13,
HeaderGroupTextDeltaY = -15,
HeaderVerticalAlignment = VerticalAlignmentType.Basso
});
tabella.Columns.Add(new ColumnPDF("strumentale", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usostrumentale", "Strumentale") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 7, HeaderVerticalAlignment = VerticalAlignmentType.Basso }); //Separatore
tabella.Columns.Add(new ColumnPDF("investimento", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usoinvestimento", "Investimento") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 7, HeaderVerticalAlignment = VerticalAlignmentType.Basso });
tabella.Columns.Add(new ColumnPDF("libero", 50, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Libero", "Libero")
{
HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella,
HeaderFontSize = 7,
HeaderGroupText = new List { string.Format("{0}Stato*", string.Concat(Enumerable.Repeat(" ", 10))) },
HeaderGroupWidth = 100,
HeaderGroupTextDeltaX = 13,
HeaderGroupTextDeltaY = -15,
HeaderVerticalAlignment = VerticalAlignmentType.Basso
}
);
tabella.Columns.Add(new ColumnPDF("affittato", 50, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Affittato", "Affittato") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderFontSize = 7 });
int i = 0;
foreach (DataRow r in dtAbitazioni.Rows)
{
tabella.Cells[2, i].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabella.Cells[3, i].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabella.Cells[4, i].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabella.Cells[5, i].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabella.Cells[6, i].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
i++;
}
AddElement(tabella);
}
#endregion
#region ALTRI FABBRICATI E TERRENI
if(dtab.Rows.Count > 0)
AddElement(new SpacePDF(15));
if (queryAltri.Count() > 0)
{
var dtAltri = new DataTable();
dtal = queryAltri.OrderBy(o => o.Field("TipoImmobile")).CopyToDataTable();
dtAltri.Columns.Add(new DataColumn("Terreni", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Superficie", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Usoabitativo", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Usostrumentale", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Usoinvestimento", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Libero", typeof(string)));
dtAltri.Columns.Add(new DataColumn("Affittato", typeof(string)));
foreach (DataRow ro in dtal.Rows)
{
dtAltri.Rows.Add(ro["descrizione"].ToString(), Convert.ToDecimal(ro["Superficie"]) == 0 ? "n.d." : (ro["TipoImmobile"].ToString() == "T" ? Helper.FormatDecimal(ro["Superficie"].ToString(),3) + " ha" : Helper.FormatInteger(ro["Superficie"].ToString()) + " mq"), "", "", "", "", "");
}
var tabellaAltri = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtAltri)
{
Style = Style.Immobiliare,
Footer = false,
ShowBorderLastLine = true,
ShowSeparationLines = false,
RowHeight = 15
};
tabellaAltri.Columns.Add(new ColumnPDF("altri2", 305, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "Terreni", "Terreni") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 8 });
tabellaAltri.Columns.Add(new ColumnPDF("superficie2", 105, HorizontalAlignmentType.Centrato, false, false, 8, ColumnType.Testo, "Superficie", "Superficie stimata") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 8 });
tabellaAltri.Columns.Add(new ColumnPDF("usoabitativo2", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usoabitativo", "Uso abitativo")
{
HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella,
HeaderFontSize = 7,
HeaderGroupText = new List { string.Format("{0}Finalità", string.Concat(Enumerable.Repeat(" ", 27))) },
HeaderGroupWidth = 210,
HeaderGroupTextDeltaX = 13,
HeaderGroupTextDeltaY = -15,
HeaderVerticalAlignment = VerticalAlignmentType.Basso
});
tabellaAltri.Columns.Add(new ColumnPDF("strumentale2", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usostrumentale", "Strumentale") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 7, HeaderVerticalAlignment = VerticalAlignmentType.Basso }); //Separatore
tabellaAltri.Columns.Add(new ColumnPDF("investimento2", 70, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Usoinvestimento", "Investimento") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderFontSize = 7, HeaderVerticalAlignment = VerticalAlignmentType.Basso });
tabellaAltri.Columns.Add(new ColumnPDF("libero2", 50, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Libero", "Libero")
{
HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella,
HeaderFontSize = 7,
HeaderGroupText = new List { string.Format("{0}Stato*", string.Concat(Enumerable.Repeat(" ", 10))) },
HeaderGroupWidth = 100,
HeaderGroupTextDeltaX = 13,
HeaderGroupTextDeltaY = -15,
HeaderVerticalAlignment = VerticalAlignmentType.Basso
}
);
tabellaAltri.Columns.Add(new ColumnPDF("affittato2", 50, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Objectpdf, "Affittato", "Affittato") { HeaderBackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderFontSize = 7 });
int e = 0;
foreach (DataRow r in dtAltri.Rows)
{
tabellaAltri.Cells[2, e].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabellaAltri.Cells[3, e].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabellaAltri.Cells[4, e].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabellaAltri.Cells[5, e].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
tabellaAltri.Cells[6, e].ValueObject = new RectanglePDF(11, 11, ColorPDF.Bianco) { DeltaY = 3, BorderWidth = 1, BorderColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
e++;
}
// AddElement(new SpacePDF(7));
AddElement(tabellaAltri);
}
if (dtab.Rows.Count > 0 || dtal.Rows.Count > 0)
{
AddElement(new SpacePDF(5));
AddElement(new FormattedTextAreaPDF("(*) Compilare se la finalità dell'immobile è “Investimento”", EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7 });
}
#endregion
}
///
/// Recupera i dati necessari alla Section restituendo un DataTable.
///
///
protected override DataTable GetDataTable()
{
return null;
}
///
/// Recupera i dati necessari alla Section restituendo un DataSet.
///
///
protected sealed override DataSet GetDataSet()
{
#region Definizione dei parametri
var ds = new DataSet();
var parametri = new List
{
new Parametro
{
Direction = ParameterDirection.Input,
DbType = DbType.Int64,
ParameterName = "ChiaveClientePB",
Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave
}
};
#endregion
ds = EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_MappaturaPreliminare_S8_MappStrategicaImmobili", parametri)
: DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_MappaturaPreliminare_S8_MappStrategicaImmobili", parametri);
#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 indirizzo);
// Box/posti auto (per indirizzo);
// Altre categorie fabbricati (per indirizzo).
// 4. Fabbricati di altri comuni (per indirizzo):
// Abitazioni (per indirizzo);
// Box/posti auto (per indirizzo);
// Altre categorie fabbricati (per indirizzo).
var codiceComuneResidenza = ds.Tables[0].Rows[0]["codComuneResidenza"] != DBNull.Value ? ds.Tables[0].Rows[0]["codComuneResidenza"].ToString() : string.Empty;
DataTable dtOrdinamentoStep1;
DataTable dtOrdinamentoStep2;
if (string.IsNullOrEmpty(codiceComuneResidenza))
{
dtOrdinamentoStep1 = ds.Tables[0].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("Totale"))
.CopyToDataTable();
dtOrdinamentoStep2 = dtOrdinamentoStep1;
}
else
{
dtOrdinamentoStep1 = ds.Tables[0].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("Totale"))
.CopyToDataTable();
}
else
dtOrdinamentoStep2 = dtOrdinamentoStep1;
// 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)
.OrderBy(o => o.Field("indirizzo"))
.ThenByDescending(o => o.Field("controvaloreComune"))
.ThenByDescending(o => o.Field("ordFabbricati"))
.ThenByDescending(o => o.Field("Totale"))
.CopyToDataTable());
}
}
//Rinomino dt di output
dtOrdinamentoStep2.TableName = "Dati";
#endregion
// Dataset di ritorno
var dsResult = new DataSet();
dsResult.Tables.Add(dtOrdinamentoStep2.Copy());
return dsResult;
}
}
}