339 lines
16 KiB
C#
339 lines
16 KiB
C#
using System;
|
|
using Consulenza.ReportWriter.Business;
|
|
using Consulenza.ReportWriter.Business.OBJ_PDF;
|
|
using System.Data;
|
|
using Consulenza.ReportCommon;
|
|
using System.Linq;
|
|
using Consulenza.ReportWriter.Business.Entity;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Unica
|
|
{
|
|
public class S73 : Entity.Section
|
|
{
|
|
/// <summary>
|
|
/// S73.MonitoraggioStorici idSezione = 116
|
|
/// </summary>
|
|
public S73(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S73", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
protected override sealed void Draw()
|
|
{
|
|
var dati = GetDataTable();
|
|
|
|
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati)
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
Header = true,
|
|
Footer = true,
|
|
WhiteSpacesHorizontalSeparator = true,
|
|
ShowSeparationLines = false,
|
|
AlternateRow = false,
|
|
HeaderHeight = 30,
|
|
HeaderMargin = 2
|
|
};
|
|
|
|
#region Columns
|
|
|
|
tabella.Columns.Add(new ColumnPDF("Immagine", 15, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, string.Empty, string.Empty) { DeltaYContent = 4, PaddingLeft = 2, HeaderFontSize = 7, FontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("DataAvvio", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "sDataAvvio", "Data<br>avvio") { HeaderFontSize = 7, DeltaYContent = -0.5F });
|
|
tabella.Columns.Add(new ColumnPDF("DataInterruzione", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "sDataInterruzione", "Data<br>interruzione") { HeaderFontSize = 7, FontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("RisorseAssociate", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RisorseAssociate", "Risorse<br>associate (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
|
|
tabella.Columns.Add(new ColumnPDF("ApportiIniziali", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ApportiIniziali", "Apporti<br>iniziali (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
|
|
tabella.Columns.Add(new ColumnPDF("MovimentiSuccessivi", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "MovimentiSuccessivi", "Movimenti<br>successivi (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
|
|
tabella.Columns.Add(new ColumnPDF("ControvaloreFinale", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreFinale", "Controvalore<br>finale (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
|
|
tabella.Columns.Add(new ColumnPDF("RendimentoRealizzato", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RendimentoRealizzato", "Rendimento<br>realizzato (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 2 });
|
|
|
|
int j = 0;
|
|
foreach (DataRow item in dati.Rows)
|
|
{
|
|
tabella.Cells[3, j].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabella.Cells[4, j].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabella.Cells[5, j].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabella.Cells[6, j].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabella.Cells[7, j].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
j++;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region Cells
|
|
|
|
int i = 0;
|
|
foreach (DataRow rw in dati.Rows)
|
|
{
|
|
var isTotal = Convert.ToBoolean(rw["IsTotal"]);
|
|
var isSubTotal = Convert.ToBoolean(rw["isSubTotal"]);
|
|
|
|
if (isTotal || isSubTotal)
|
|
{
|
|
// Sfondo grigio per la riga identificata con isTotal [quella di intestazione di area]
|
|
for (int c = 0; c < tabella.Columns.Count; c++)
|
|
{
|
|
tabella.Cells[c, i].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella;
|
|
}
|
|
if (isTotal)
|
|
{
|
|
string testo = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione;
|
|
float deltaXSwitch;
|
|
switch (testo.ToUpper())
|
|
{
|
|
case "E":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
case "I":
|
|
deltaXSwitch = 2;
|
|
break;
|
|
case "P":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
case "R":
|
|
deltaXSwitch = 1;
|
|
break;
|
|
case "L":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
default:
|
|
deltaXSwitch = 2;
|
|
break;
|
|
}
|
|
// Simboli dell'area di bisogno
|
|
var listaOggetti = new List<ObjectPDF>
|
|
{
|
|
new RectanglePDF(7.5F, 8, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())){DeltaY = 0.75F},
|
|
new FormattedTextAreaPDF
|
|
{
|
|
Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione,
|
|
FontBold = true,
|
|
FontColor = ColorPDF.Bianco,
|
|
FontSize=7,
|
|
DeltaX = deltaXSwitch//2.5F
|
|
}
|
|
};
|
|
|
|
//Quadrato colorato indicatore Area
|
|
tabella.Cells[0, i].ValueObjectList.AddRange(listaOggetti);
|
|
}
|
|
|
|
}
|
|
|
|
if (isSubTotal)
|
|
tabella.Cells[1, i].ColSpan = 2;
|
|
|
|
i++;
|
|
}
|
|
|
|
#endregion
|
|
|
|
AddElement(tabella);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera i dati necessari alla Section restituendo un DataTable.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
protected sealed override DataTable GetDataTable()
|
|
{
|
|
#region DatiseiUnico
|
|
var dataPiramideModello = datiSeiUnico.piramideModelloUnit().piramideModello.areaModello
|
|
.ToList()
|
|
.OrderBy(o => o.ordinamento).ToList();
|
|
var listaAreeMonitorate = datiSeiUnico.monitoraggioUnit().monitoraggio.ToList();
|
|
listaAreeMonitorate.RemoveAll(x => x.progetti == null);
|
|
|
|
#endregion
|
|
|
|
#region Tabella Storico dei progetti
|
|
var dtStorico = new DataTable();
|
|
dtStorico.Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int)));
|
|
dtStorico.Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("DataAvvio", typeof(DateTime)));
|
|
dtStorico.Columns.Add(new DataColumn("sDataAvvio", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("DataInterruzione", typeof(DateTime)));
|
|
dtStorico.Columns.Add(new DataColumn("sDataInterruzione", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("RisorseAssociate", typeof(decimal)));
|
|
dtStorico.Columns.Add(new DataColumn("ApportiIniziali", typeof(decimal)));
|
|
dtStorico.Columns.Add(new DataColumn("MovimentiSuccessivi", typeof(decimal)));
|
|
dtStorico.Columns.Add(new DataColumn("ControvaloreFinale", typeof(decimal)));
|
|
dtStorico.Columns.Add(new DataColumn("RendimentoRealizzato", typeof(decimal)));
|
|
dtStorico.Columns.Add(new DataColumn("FontBold", typeof(bool)));
|
|
dtStorico.Columns.Add(new DataColumn("ReplaceIfZero", typeof(string)));
|
|
dtStorico.Columns.Add(new DataColumn("IsTotal", typeof(bool)));
|
|
dtStorico.Columns.Add(new DataColumn("IsSubTotal", typeof(bool)));
|
|
#endregion
|
|
|
|
#region Estrazione storico
|
|
foreach (var area in listaAreeMonitorate)
|
|
{
|
|
|
|
var areaCommon = new AreaBisogno(area.area);
|
|
|
|
if (areaCommon.Visibile)
|
|
{
|
|
foreach (var progetto in area.progetti)
|
|
{
|
|
if (progetto.storici == null) continue;
|
|
|
|
var storico = ultimi3() ?
|
|
progetto.storici.OrderByDescending(o => o.dtInterruzione).Take(3) :
|
|
progetto.storici.OrderByDescending(o => o.dtInterruzione);
|
|
|
|
foreach (var item in storico)
|
|
{
|
|
if (item != null)
|
|
{
|
|
var itemPiramideModello = dataPiramideModello.FirstOrDefault(o => o.area.ToLower().Trim().Equals(areaCommon.Codice.ToLower().Trim()));
|
|
|
|
var row = dtStorico.NewRow();
|
|
|
|
row["CodiceAreaBisogno"] = areaCommon.Codice;
|
|
row["DescrizioneAreaBisogno"] = areaCommon.Nome;
|
|
row["DescrizioneProgetto"] = progetto.nomeProgetto;
|
|
row["OrdinamentoAreaBisogno"] = itemPiramideModello.ordinamento;
|
|
|
|
row["DataAvvio"] = item.dtAvvio;
|
|
row["sDataAvvio"] = item.dtAvvio.ToShortDateString();
|
|
row["DataInterruzione"] = item.dtInterruzione;
|
|
row["sDataInterruzione"] = item.dtInterruzione.ToShortDateString();
|
|
|
|
row["RisorseAssociate"] = item.risorseAssociate;
|
|
row["ApportiIniziali"] = item.apportiIniziali;
|
|
row["MovimentiSuccessivi"] = item.movimentiSuccessivi;
|
|
row["ControvaloreFinale"] = item.ctvFinale;
|
|
row["RendimentoRealizzato"] = item.rendimentoRealzzato;
|
|
|
|
row["FontBold"] = false;
|
|
row["IsTotal"] = false;
|
|
row["IsSubTotal"] = false;
|
|
|
|
dtStorico.Rows.Add(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Raggruppamento per area / progetto
|
|
|
|
var dtStoricoPerArea = new DataTable();
|
|
dtStoricoPerArea = dtStorico.Clone(); // Clono la struttura
|
|
dtStoricoPerArea.TableName = dtStorico.TableName + "StoricoPerArea";
|
|
|
|
var viewAree = new DataView(dtStorico) { Sort = "OrdinamentoAreaBisogno" };
|
|
var dtAree = viewAree.ToTable(true, "CodiceAreaBisogno", "DescrizioneAreaBisogno", "OrdinamentoAreaBisogno");
|
|
|
|
var sArea = string.Empty;
|
|
var sProgetto = string.Empty;
|
|
|
|
foreach (DataRow rowAreaProgetto in dtAree.Rows)
|
|
{
|
|
sArea = rowAreaProgetto["CodiceAreaBisogno"].ToString();
|
|
|
|
//Progetti
|
|
var viewProgetti = new DataView(dtStorico.Select("CodiceAreaBisogno='" + sArea + "'").CopyToDataTable());
|
|
var dtProgetti = viewProgetti.ToTable(true, "DescrizioneProgetto");
|
|
var bIntestazioneArea = true; // la riga di intestazione dell'area va stampata una sola volta.
|
|
var bItestazioneProgetto = sArea == "Inv" || sArea == "Pre"; // la riga di intestazione del progetto va stampata solo per area Inv e Pre.
|
|
|
|
DataRow rowStoricoPerArea;
|
|
|
|
|
|
foreach (DataRow itemProgetto in dtProgetti.Rows)
|
|
{
|
|
sProgetto = itemProgetto["DescrizioneProgetto"].ToString();
|
|
|
|
// Subset di prodotti filtrati per Area/Progetto
|
|
var dtArea = dtStorico.Select("CodiceAreaBisogno='" + sArea + "'").CopyToDataTable();
|
|
var dtAreaProgetto = dtStorico.Select("CodiceAreaBisogno='" + sArea + "' AND DescrizioneProgetto='" + sProgetto + "'").CopyToDataTable();
|
|
|
|
if (bIntestazioneArea)
|
|
{
|
|
#region riga con background grigio di intestazione per ogni area
|
|
|
|
rowStoricoPerArea = dtStoricoPerArea.NewRow();
|
|
rowStoricoPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"];
|
|
rowStoricoPerArea["sDataAvvio"] = rowAreaProgetto["DescrizioneAreaBisogno"].ToString();
|
|
|
|
rowStoricoPerArea["RisorseAssociate"] = 0;
|
|
rowStoricoPerArea["ApportiIniziali"] = 0;
|
|
rowStoricoPerArea["MovimentiSuccessivi"] = 0;
|
|
rowStoricoPerArea["ControvaloreFinale"] = 0;
|
|
rowStoricoPerArea["RendimentoRealizzato"] = 0;
|
|
|
|
rowStoricoPerArea["FontBold"] = true;
|
|
rowStoricoPerArea["ReplaceIfZero"] = " ";
|
|
rowStoricoPerArea["IsTotal"] = true;
|
|
rowStoricoPerArea["IsSubTotal"] = false;
|
|
dtStoricoPerArea.Rows.Add(rowStoricoPerArea);
|
|
|
|
bIntestazioneArea = false;
|
|
|
|
#endregion
|
|
}
|
|
|
|
if (bItestazioneProgetto)
|
|
{
|
|
#region Riga con background grigio di intestazione per ogni Progetto
|
|
|
|
rowStoricoPerArea = dtStoricoPerArea.NewRow();
|
|
rowStoricoPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"];
|
|
rowStoricoPerArea["sDataAvvio"] = sProgetto;
|
|
|
|
rowStoricoPerArea["RisorseAssociate"] = 0;
|
|
rowStoricoPerArea["ApportiIniziali"] = 0;
|
|
rowStoricoPerArea["MovimentiSuccessivi"] = 0;
|
|
rowStoricoPerArea["ControvaloreFinale"] = 0;
|
|
rowStoricoPerArea["RendimentoRealizzato"] = 0;
|
|
|
|
rowStoricoPerArea["FontBold"] = true;
|
|
rowStoricoPerArea["ReplaceIfZero"] = " ";
|
|
rowStoricoPerArea["IsTotal"] = false;
|
|
rowStoricoPerArea["IsSubTotal"] = true;
|
|
|
|
dtStoricoPerArea.Rows.Add(rowStoricoPerArea);
|
|
|
|
#endregion
|
|
}
|
|
|
|
// Merge
|
|
dtStoricoPerArea.Merge(dtAreaProgetto);
|
|
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
return dtStoricoPerArea;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera i dati necessari alla Section restituendo un DataSet.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
protected sealed override DataSet GetDataSet()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
protected virtual bool ultimi3()
|
|
{
|
|
// TO DO
|
|
return GetOption<Opzione6_1>().Valore == "3";
|
|
}
|
|
}
|
|
}
|