using System;
using System.Linq;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using ceTe.DynamicPDF;
using System.Data;
using Consulenza.ReportCommon;
using System.Collections.Generic;
using Consulenza.ExternalServices;
using Consulenza.ReportWriter.Manager.Integration;
namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Diagnosi
{
///
/// Scheda di stima parametrica del valore (id 39)
///
public class S7 : Entity.Section
{
private bool _assenzaTipologiaDiritto;
private bool _assenzaQuotaDiritto;
public S7(EnvironmentFacade environmentFacade, int idSection)
: base(environmentFacade, idSection)
{
try
{
Draw();
}
catch (Exception ex)
{
SectionLogger.Write("S7", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
}
}
public S7(EnvironmentFacade environmentFacade, int idSection, IntegrationLayout integrationlayout)
: base(environmentFacade, idSection)
{
try
{
IntegrationLayout = integrationlayout;
Draw();
}
catch (Exception ex)
{
SectionLogger.Write("S7", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
}
}
///
/// Scheda7. Scheda di stima parametrica del valore (Dettaglio dei dati sintetici, localizzazione geografica e stima del valore delle abitazioni selezionate) --> DUPLICATO PER OGNI IMMOBILE
///
protected override sealed void Draw()
{
var dati = GetDataSet();
var testi = GetText();
if (dati == null) return;
var integrationlayout = ((DuplicazioneIdImmobileCatasto)IntegrationLayout);
const string nd = "n.d.";
#region SottoTitolo
//sottoTitolo = provincia - indirizzo
var comune = dati.Tables["DatiCatastali"].Select("Descrizione='Comune'").FirstOrDefault()["Valore"];
var indirizzo = dati.Tables["DatiCatastali"].Select("Descrizione='Indirizzo'").FirstOrDefault()["Valore"];
var formattazione = "{0}";
if (!string.IsNullOrEmpty(indirizzo.ToString()))
formattazione = "{0} - {1}";
var sottoTitolo = string.Format(formattazione, comune, indirizzo);
AddElement(new FormattedTextAreaPDF(sottoTitolo, EnvironmentFacade.RendererFacade.XLeftLimit + 30, 600) { FontSize = 14 });
#endregion
#region Dati sintetici
AddElement(new ResetterYPDF());
AddElement(new SpacePDF(50));
var icona = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.20F, "DatiSintetici.png") { AutoIncrementYWritable = false };
var titolo = new FormattedTextAreaPDF("Dati sintetici", 82) { FontSize = 10, DeltaY = 3, FontColor = ColorPDF.Immobiliare_Grigio_TitoloPiccolo };
#region Tabella
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 30, dati.Tables["DatiCatastali"])
{
Style = Style.Immobiliare,
Footer = false,
RowsPadding = 0,
ShowBorderLastLine = true,
HeaderHeight = 15
};
tabella.Columns.Add(new ColumnPDF("descrizione", 100, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "descrizione", "Dati catastali"));
tabella.Columns.Add(new ColumnPDF("valore", 160, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "valore", ""));
if (_assenzaTipologiaDiritto)
{
tabella.Cells[1, 9].Value = nd;
tabella.Cells[1, 9].FontColor = new ColorPDF(255, 0, 0); // ROSSO
}
if (_assenzaQuotaDiritto)
{
tabella.Cells[1, 10].Value = nd;
tabella.Cells[1, 10].FontColor = new ColorPDF(255, 0, 0); // ROSSO
}
#endregion
AddElement(icona);
AddElement(titolo);
AddElement(new SpacePDF(20));
AddElement(tabella);
#endregion
#region Localizzazione geografica
var xLocalizzazioneGeografica = EnvironmentFacade.RendererFacade.XLeftLimit + 300;
AddElement(new ResetterYPDF());
AddElement(new SpacePDF(50));
icona = new ImagePDF(xLocalizzazioneGeografica, 0.20F, "LocGeografica.png") { AutoIncrementYWritable = false };
titolo = new FormattedTextAreaPDF("Localizzazione geografica", xLocalizzazioneGeografica + 30) { FontSize = 10, DeltaY = 3, FontColor = ColorPDF.Immobiliare_Grigio_TitoloPiccolo };
AddElement(icona);
AddElement(titolo);
AddElement(new SpacePDF(30));
ImagePDF cartina1 = null;
ImagePDF cartina2 = null;
try
{
cartina1 = new ImagePDF(xLocalizzazioneGeografica + 30, new Prometeia().GetImageFromValidator(
integrationlayout.IdImmobileCatasto,
EnvironmentFacade.ReportEnvironment.Cliente.Tipo == ClienteType.Fisico ? EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale : EnvironmentFacade.ReportEnvironment.Cliente.PartitaIva,
EnvironmentFacade.ReportEnvironment.PrivateBanker.Codice, 1), 130, 205, 120) { AutoIncrementYWritable = false };
}
catch (Exception ex)
{
var cartinar = new RectanglePDF(xLocalizzazioneGeografica + 30, 120, 130, 205, ColorPDF.Bianco) { AutoIncrementYWritable = false };
AddElement(cartinar);
}
try{
cartina2 = new ImagePDF(xLocalizzazioneGeografica + 30 + 210, new Prometeia().GetImageFromValidator(
integrationlayout.IdImmobileCatasto,
EnvironmentFacade.ReportEnvironment.Cliente.Tipo == ClienteType.Fisico ? EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale : EnvironmentFacade.ReportEnvironment.Cliente.PartitaIva,
EnvironmentFacade.ReportEnvironment.PrivateBanker.Codice, 2), 130, 205, 120) { AutoIncrementYWritable = true };
//AddElement(cartina1);
//AddElement(cartina2);
}
catch (Exception ex)
{
// var cartinar = new RectanglePDF(xLocalizzazioneGeografica + 30, 120, 130, 205, ColorPDF.Bianco) { AutoIncrementYWritable = false };
var cartinar2 = new RectanglePDF(xLocalizzazioneGeografica + 30 + 210, 120, 130, 205, ColorPDF.Bianco) { AutoIncrementYWritable = true };
AddElement(cartinar2);
//throw new Exception(ex.Message);
}
#endregion
//---------------------------------//
finally
{
if(cartina1 != null)
AddElement(cartina1);
if (cartina2 != null)
AddElement(cartina2);
if (!(dati.Tables["Tipologia"].Rows.Count <= 0 || dati.Tables["StimaValore"].Rows.Count <= 0))
{
#region Linea orizzontale
var lineaOrizzonataleSeparazione = new LinePDF(EnvironmentFacade.RendererFacade.XLeftLimit, EnvironmentFacade.RendererFacade.XRightLimit, 1F, ColorPDF.Immobiliare_Grigio_TitoloPiccolo);
AddElement(new SpacePDF(10));
AddElement(lineaOrizzonataleSeparazione);
#endregion
//---------------------------------//
#region Stima del valore
AddElement(new SpacePDF(10));
icona = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.20F, "StimaValore.png") { AutoIncrementYWritable = false };
titolo = new FormattedTextAreaPDF("Stima del valore", 82) { FontSize = 10, DeltaY = 3, FontColor = ColorPDF.Immobiliare_Grigio_TitoloGrande, AutoIncrementYWritable = false };
AddElement(icona);
AddElement(titolo);
AddElement(new SpacePDF(9));
#region Tabella Tipologia
tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 30, dati.Tables["Tipologia"])
{
Style = Style.Immobiliare,
Footer = false,
ShowBorderLastLine = true,
RowsPadding = 6,
HeaderMargin = 3
};
tabella.Columns.Add(new ColumnPDF("descrizione", 150, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "descrizione", "Tipologia"));
tabella.Columns.Add(new ColumnPDF("valoreMinimo", 55, HorizontalAlignmentType.Destra, false, false, 8, ColumnType.Intero, "valoreMinimo", "Min")
{
HeaderGroupText = new List { string.Format("{0}Valori €/mq", string.Concat(Enumerable.Repeat(" ", 5))) },
HeaderGroupWidth = 110,
HeaderGroupTextDeltaX = 30,
HeaderGroupTextDeltaY = -15,
HeaderVerticalAlignment = VerticalAlignmentType.Basso
});
tabella.Columns.Add(new ColumnPDF("valoreMassimo", 55, HorizontalAlignmentType.Destra, false, false, 8, ColumnType.Intero, "valoreMassimo", "Max") { HeaderVerticalAlignment = VerticalAlignmentType.Basso });
AddElement(new SpacePDF(15));
AddElement(tabella);
#endregion
#region Tabella Stima del valore
tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit + 30, dati.Tables["StimaValore"])
{
Style = Style.Immobiliare,
Footer = false,
ShowBorderLastLine = true,
PageBreak = false,
RowsPadding = 6,
HeaderMargin = 3
};
tabella.Columns.Add(new ColumnPDF("descrizione", 185, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "descrizione", "Stima del valore"));
tabella.Columns.Add(new ColumnPDF("valore", 75, HorizontalAlignmentType.Destra, false, false, 8, ColumnType.Decimale, "valore", "") { FontColor = ColorPDF.Nero, FontBold = true, BackgroundColor = new ColorPDF(237, 237, 234) }); // BackgroundColor = Grigio
// Ultima cella marrone con testo bianco.
tabella.Cells[1, 2] = new Cell { FontBold = true, BackgroundColor = ColorPDF.Immobiliare_Marrone, FontColor = ColorPDF.Bianco }; // marrone
if (dati.Tables["Tipologia"].Rows.Count == 3)
AddElement(new SpacePDF(5));
else
{
if (dati.Tables["Tipologia"].Rows.Count == 2)
AddElement(new SpacePDF(20));
else
AddElement(new SpacePDF(38));
}
AddElement(tabella);
#endregion
#region Matrice
AddElement(new ResetterYPDF(305));
//Recupero il passo e superficieStimata
var superficieStimata = Convert.ToInt32(dati.Tables["StimaValore"].Select("Indice=1").FirstOrDefault()["Valore"]);
var passo = (from r in dati.Tables["Passo"].AsEnumerable()
where superficieStimata >= r.Field("damq") && superficieStimata <= r.Field("amq")
select r.Field("passo"));
//Recupero il limite minimo e massimo della superficieStimata
var limiteMinimoSuperficieStimata = Helper.RoundDown(superficieStimata);
if (limiteMinimoSuperficieStimata.Equals(superficieStimata))
limiteMinimoSuperficieStimata -= passo.First();
var limiteMassimoSuperficieStimata = Helper.RoundUp(superficieStimata);
var valoriMq = new List();
var valoriEuro = new List();
//Recupero i 4 valori inferiori alla superficieStimata
for (var i = 3; i >= 0; i--)
valoriMq.Add(limiteMinimoSuperficieStimata - (passo.First() * i));
valoriMq.Add(superficieStimata);
//Recupero i 4 valori superiori alla superficieStimata
for (var i = 0; i < 4; i++)
valoriMq.Add(limiteMassimoSuperficieStimata + (passo.First() * i));
#region Rettangolo orizzontale
AddElement(new RectanglePDF(440, 20, 350, new ColorPDF(226, 226, 221)) { AutoIncrementYWritable = false }); // Rettangolo grigio
AddElement(new FormattedTextAreaPDF("€/mq", 615, 50) { FontBold = true, AutoIncrementYWritable = true, FixedHeight = 20 });
AddElement(new LinePDF(440, 790) { Width = 0.5F }); //Linea verticale
#endregion
#region Tabella
#region Recupero i valori di € al mq minimi e massimi della categoria dell'immobile e delle categorie similari.
//Recupero i valori di € al mq minimi e massimi della categoria dell'immobile e delle categorie similari.
//#1 dalle categorie similari
foreach (DataRow row in dati.Tables["Tipologia"].Rows)
{
valoriEuro.Add(Convert.ToDecimal(row["ValoreMinimo"]));
valoriEuro.Add(Convert.ToDecimal(row["ValoreMassimo"]));
}
//#2 dell'immobile
valoriEuro.Add(Convert.ToDecimal(dati.Tables["StimaValore"].Select("Indice=2").FirstOrDefault()["Valore"]));
//Distinct e ordinamento.
valoriEuro = valoriEuro.Distinct().OrderBy(x => x).ToList();
#endregion
#region Tabella (matrice)
#region Recupero Dati
var datiTabellaMatrice = new DataTable();
//Definisco le colonne
for (int i = 0; i < valoriEuro.Count; i++)
datiTabellaMatrice.Columns.Add(string.Format("{0}", valoriEuro[i]), typeof(Int32));
//Popolo i dati per la matrice
var valori = new List