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