349 lines
16 KiB
C#
349 lines
16 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Consulenza.ReportWriter.Business;
|
|
using Consulenza.ReportWriter.Business.OBJ_PDF;
|
|
using System.Data;
|
|
using Consulenza.ReportCommon;
|
|
using System.Collections.Generic;
|
|
using Consulenza.ReportWriter.Business.Entity;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.MappaturaPreliminare
|
|
{
|
|
/// <summary>
|
|
/// Dettaglio terreni (id 133)
|
|
/// </summary>
|
|
public class S4 : Entity.Section
|
|
{
|
|
public S4(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S4", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Scheda6. Dettaglio terreni (elenco dei terreni e dei principali dati catastali, quote e valore stimato del cliente e dei cointestatari)
|
|
/// </summary>
|
|
protected override sealed void Draw()
|
|
{
|
|
var dati = GetDataSet();
|
|
|
|
if (dati == null || dati.Tables[0].Rows.Count == 0) return;
|
|
|
|
var testi = GetText();
|
|
|
|
// Immobili con anomalie catastali
|
|
var immobiliConAnomalieCatastali = dati.Tables["Dati"].AsEnumerable().Where(r => r.Field<bool>("AnomaliaCatastale"));
|
|
|
|
// Immobili non a catasto
|
|
var immobiliNonACatasto = dati.Tables["Dati"].AsEnumerable().Where(r => r.Field<bool>("Catasto") == false);
|
|
|
|
#region Recupero il numero massimo di colonne di tipo immagine da aggiungere
|
|
|
|
var numeroColonneImmagine = 0;
|
|
|
|
var listaCompletaIndici = new List<Int32>();
|
|
listaCompletaIndici.AddRange(immobiliConAnomalieCatastali.Select(o => o.Field<Int32>("Indice")));
|
|
listaCompletaIndici.AddRange(immobiliNonACatasto.Select(o => o.Field<Int32>("Indice")));
|
|
|
|
if (listaCompletaIndici.Any())
|
|
{
|
|
numeroColonneImmagine = (from indice in listaCompletaIndici
|
|
group indice by indice into grouping
|
|
select new
|
|
{
|
|
Key = grouping.Key,
|
|
Count = grouping.Count()
|
|
}).Max(x => x.Count);
|
|
}
|
|
|
|
#endregion
|
|
|
|
var icona = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.20F, "Terreni.png") { AutoIncrementYWritable = false };
|
|
var titolo = new FormattedTextAreaPDF(testi.Rows[0]["testo1"].ToString(), 82, 600) { FontSize = 10, FontColor = ColorPDF.Immobiliare_Grigio_TestoStandard, DeltaY = 5 };
|
|
|
|
#region Tabella
|
|
|
|
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["Dati"])
|
|
{
|
|
Style = Style.Immobiliare,
|
|
RowsPadding = 3,
|
|
Footer = false,
|
|
HeaderHeight = 130,
|
|
MinimumRowHeight = 12,
|
|
ShowBorderLastLine = true
|
|
};
|
|
|
|
#region definizione larghezza colonne
|
|
|
|
var larghezzaTabella = 755; // massima larghezza tabella
|
|
var larghezzaImmagine = immobiliConAnomalieCatastali.Count() > 0 || immobiliNonACatasto.Count() > 0 ? 17 : 0;
|
|
var larghezzaSuperficieStimata = 30;
|
|
var larghezzaSingoloCliente = 65;
|
|
var larghezzaRedditoAgrario = 50;
|
|
var larghezzaRedditoDominicale = 50;
|
|
|
|
//La colonna descrizione è l'unica variabile.
|
|
var larghezzaDescrizione = larghezzaTabella - larghezzaImmagine - larghezzaSuperficieStimata - larghezzaRedditoAgrario - larghezzaRedditoDominicale - (larghezzaSingoloCliente * dati.Tables[1].Rows.Count);
|
|
|
|
// Colonne di tipo Immagine
|
|
for (int i = 1; i <= numeroColonneImmagine; i++)
|
|
{
|
|
larghezzaDescrizione -= larghezzaImmagine;
|
|
tabella.Columns.Add(new ColumnPDF(string.Format("immagine{0}", i), larghezzaImmagine, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, string.Empty, string.Empty) { ScaleColumnTypeImage = 0.1F });
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region colonne e colonne del footer
|
|
|
|
tabella.Columns.Add(new ColumnPDF("descrizione", larghezzaDescrizione, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderVerticalAlignment = VerticalAlignmentType.Basso, HeaderFontBold = true, PaddingLeft = 5 });
|
|
tabella.Columns.Add(new ColumnPDF("superficiestimata", larghezzaSuperficieStimata, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "SuperficieStimataStringa", "Superficie Stimata (ha)") { HeaderTextVerticalDirection = true, HeaderFontBold = false });
|
|
tabella.Columns.Add(new ColumnPDF("redditoagrario", larghezzaRedditoAgrario, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "RedditoAgrario", "Reddito agrario") { HeaderTextVerticalDirection = true, HeaderFontBold = false });
|
|
tabella.Columns.Add(new ColumnPDF("redditodominicale", larghezzaRedditoDominicale, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "RedditoDominicaleStringa", "Reddito dominicale") { HeaderTextVerticalDirection = true, HeaderFontBold = false });
|
|
|
|
|
|
|
|
var iColonna = 2;
|
|
foreach (DataRow cliente in dati.Tables["Clienti"].Rows)
|
|
{
|
|
var iCliente = Convert.ToInt32(cliente["PosizioneCliente"]);
|
|
var campoStringa = string.Format("Cliente{0}Stringa", iCliente);
|
|
|
|
tabella.Columns.Add(new ColumnPDF(campoStringa, larghezzaSingoloCliente, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, campoStringa, cliente["Cliente"].ToString())
|
|
{
|
|
HeaderVerticalAlignment = VerticalAlignmentType.Basso,
|
|
HeaderTextVerticalDirection = true,
|
|
HeaderBackgroundColor = iColonna == 2 ? ColorPDF.Immobiliare_Marrone : null,
|
|
HeaderFontColor = iColonna == 2 ? ColorPDF.Bianco : null,
|
|
HeaderFontBold = iColonna == 2,
|
|
BackgroundColor = iColonna == 2 ? ColorPDF.Immobiliare_Marrone : null,
|
|
FontColor = iColonna == 2 ? ColorPDF.Bianco : null,
|
|
FontBold = iColonna == 2,
|
|
HeaderPaddingLeft =0// iColonna == 2 ? -5:0
|
|
});
|
|
|
|
|
|
// verifico se il cliente ha solo terreni in usufrutto
|
|
var clienteSoloUsufrutto = dati.Tables["Dati"]
|
|
.AsEnumerable()
|
|
.Select(r => r.Field<decimal>(string.Format("Cliente{0}", iCliente)))
|
|
.Distinct().Sum().Equals(-100);
|
|
|
|
iColonna++;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region immagini e border nelle colonne di tipo immagine
|
|
|
|
// Da specifica le immagini devo essere disegnate sempre nella colonna più vicina possibile al testo (in modo da ottenere allineamento a destra)
|
|
|
|
int indiceColonna = -1;
|
|
|
|
#region Immobili con anomalia catastale
|
|
// colore rosso e immagine per immobili selezionati
|
|
foreach (var item in immobiliConAnomalieCatastali)
|
|
{
|
|
int indiceRiga = Convert.ToInt32(item["indice"]);
|
|
|
|
for (int i = numeroColonneImmagine - 1; i >= 0; i--)
|
|
{
|
|
if (string.IsNullOrEmpty(tabella.Cells[i, indiceRiga].Value))
|
|
{
|
|
indiceColonna = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
////tabella.Row[indiceRiga].Border = true;
|
|
tabella.Row[indiceRiga].ShowBorderInColumnImage = false;
|
|
tabella.Row[indiceRiga].FontColor = new ColorPDF(205, 0, 6); // Rosso
|
|
tabella.Row[indiceRiga].ForceStyleFontColor = true;
|
|
tabella.Cells[indiceColonna, indiceRiga].Value = "warning.png";
|
|
}
|
|
#endregion
|
|
|
|
#region Immobili non a catasto
|
|
// Immagine per immobile non a catasto
|
|
foreach (var item in immobiliNonACatasto)
|
|
{
|
|
int indiceRiga = Convert.ToInt32(item["indice"]);
|
|
|
|
for (int i = numeroColonneImmagine - 1; i >= 0; i--)
|
|
{
|
|
if (string.IsNullOrEmpty(tabella.Cells[i, indiceRiga].Value))
|
|
{
|
|
indiceColonna = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
tabella.Cells[indiceColonna, indiceRiga].Value = "info.png";
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region note della tabella
|
|
|
|
var campiAsterisco = new string[5] { "Cliente1Stringa", "Cliente2Stringa", "Cliente3Stringa", "Cliente4Stringa", "Cliente5Stringa" }; // campi del datasource su cui aggiungere gli asterischi.
|
|
var campiCondizione = new string[5] { "Cliente1StringaAsterischi", "Cliente2StringaAsterischi", "Cliente3StringaAsterischi", "Cliente4StringaAsterischi", "Cliente5StringaAsterischi" };
|
|
//nuda proprietà
|
|
var condizioneNota1 = string.Empty;
|
|
const int condizioneNota1Valore = 1;
|
|
//per area
|
|
var condizioneNota2 = string.Empty;
|
|
const int condizioneNota2Valore = 2;
|
|
//altridiritti
|
|
var condizioneNota3 = string.Empty;
|
|
const int condizioneNota3Valore = 9;
|
|
|
|
for (int j = 0; j < campiCondizione.Length; j++)
|
|
{
|
|
if (j != campiCondizione.Length - 1)
|
|
{
|
|
condizioneNota1 += string.Format("{0}={1} OR ", campiCondizione[j], condizioneNota1Valore);
|
|
condizioneNota2 += string.Format("{0}={1} OR ", campiCondizione[j], condizioneNota2Valore);
|
|
condizioneNota3 += string.Format("{0}={1} OR ", campiCondizione[j], condizioneNota3Valore);
|
|
}
|
|
else
|
|
{
|
|
condizioneNota1 += string.Format("{0}={1}", campiCondizione[j], condizioneNota1Valore);
|
|
condizioneNota2 += string.Format("{0}={1}", campiCondizione[j], condizioneNota2Valore);
|
|
condizioneNota3 += string.Format("{0}={1}", campiCondizione[j], condizioneNota3Valore);
|
|
}
|
|
}
|
|
|
|
// Determino quale nota aggiungere
|
|
var notaNudaProprieta = dati.Tables["Dati"].Select(condizioneNota1).Any();
|
|
|
|
// Nota nuda proprietà
|
|
if (notaNudaProprieta)
|
|
{
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, testi.Rows[0]["testo2"].ToString(), campiAsterisco, condizioneNota1, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella)
|
|
{
|
|
FontSize = 7,
|
|
MappingType = TableNotePDF.TableNoteMappingType.Dinamico,
|
|
MappingKey = "Indice",
|
|
ConditionFields = campiCondizione,
|
|
ConditionValue = condizioneNota1Valore
|
|
});
|
|
}
|
|
|
|
// Nota immagine 1
|
|
if (immobiliConAnomalieCatastali.Any())
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, testi.Rows[0]["testo3"].ToString()) { FontSize = 7, DeltaY = 3, Image = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.1F, "warning.png") });
|
|
|
|
// Nota immagine 2
|
|
if (immobiliNonACatasto.Any())
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, testi.Rows[0]["testo4"].ToString()) { FontSize = 7, DeltaY = 3, Image = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.1F, "info.png") });
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#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
|
|
|
|
AddElement(new SpacePDF(40));
|
|
AddElement(icona);
|
|
AddElement(titolo);
|
|
AddElement(new SpacePDF(20));
|
|
AddElement(tabella);
|
|
}
|
|
|
|
/// <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.MappaturaPreliminare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_MappaturaPreliminare_S4_DettaglioTerreni", parametri)
|
|
: DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_MappaturaPreliminare_S4_DettaglioTerreni", parametri);
|
|
if (dsOriginal.Tables[0].Rows.Count == 0)
|
|
return null;
|
|
|
|
var dt1 = dsOriginal.Tables[0].Copy();
|
|
dt1.TableName = "Dati";
|
|
|
|
// 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("Cliente1Stringa", typeof(string));
|
|
dt1.Columns.Add("Cliente2Stringa", typeof(string));
|
|
dt1.Columns.Add("Cliente3Stringa", typeof(string));
|
|
dt1.Columns.Add("Cliente4Stringa", typeof(string));
|
|
dt1.Columns.Add("Cliente5Stringa", 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"] = Convert.ToInt32(item["RedditoAgrario"]) == 0 ? "n.d." : Helper.FormatInteger(item["RedditoAgrario"].ToString());
|
|
item["RedditoDominicaleStringa"] = item["RedditoDominicale"] == DBNull.Value ? "-" : Helper.FormatCurrency(item["RedditoDominicale"].ToString());
|
|
|
|
for (int i = 1; i <= 5; i++)
|
|
{
|
|
var campo = string.Format("Cliente{0}", i);
|
|
var campoStringa = string.Format("Cliente{0}Stringa", i);
|
|
item[campoStringa] = Helper.Decodifiche.DecodificaQuotaProprieta(Convert.ToDecimal(item[campo]));
|
|
}
|
|
|
|
|
|
indice++;
|
|
}
|
|
|
|
// Clienti
|
|
var dt2 = dsOriginal.Tables[1];
|
|
dt2.TableName = "Clienti";
|
|
|
|
|
|
// Dataset di ritorno
|
|
var dsResult = new DataSet();
|
|
dsResult.Tables.Add(dt1.Copy());
|
|
dsResult.Tables.Add(dt2.Copy());
|
|
|
|
return dsResult;
|
|
}
|
|
}
|
|
}
|