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
{
///
/// S73.MonitoraggioStorici idSezione = 116
///
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
avvio") { HeaderFontSize = 7, DeltaYContent = -0.5F });
tabella.Columns.Add(new ColumnPDF("DataInterruzione", 65, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "sDataInterruzione", "Data
interruzione") { HeaderFontSize = 7, FontSize = 7 });
tabella.Columns.Add(new ColumnPDF("RisorseAssociate", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RisorseAssociate", "Risorse
associate (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
tabella.Columns.Add(new ColumnPDF("ApportiIniziali", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ApportiIniziali", "Apporti
iniziali (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
tabella.Columns.Add(new ColumnPDF("MovimentiSuccessivi", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "MovimentiSuccessivi", "Movimenti
successivi (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
tabella.Columns.Add(new ColumnPDF("ControvaloreFinale", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreFinale", "Controvalore
finale (€)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6 });
tabella.Columns.Add(new ColumnPDF("RendimentoRealizzato", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RendimentoRealizzato", "Rendimento
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
{
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);
}
///
/// Recupera i dati necessari alla Section restituendo un DataTable.
///
///
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;
}
///
/// Recupera i dati necessari alla Section restituendo un DataSet.
///
///
protected sealed override DataSet GetDataSet()
{
return null;
}
protected virtual bool ultimi3()
{
// TO DO
return GetOption().Valore == "3";
}
}
}