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; } } }