using System; using System.Collections.Generic; using System.Text; using ceTe.DynamicPDF.Merger; using PDFGenerator.BusinessLayer.DataSection; using PDFGenerator.Presentation.Section.Tables; using PDFGenerator.BusinessLayer; using ceTe.DynamicPDF.PageElements; using System.Data.SqlClient; using System.Data; using ContrattoSei.Utilities; namespace PDFGenerator.Presentation.Section { class S80 : ISezione { string Titolo = " "; private string _testointroduttivo; /// /// Testo che introduce la sezione. /// public string TestoIntroduttivo { get { return _testointroduttivo; } set { _testointroduttivo = value; } } /// /// Setta il titolo. /// /// public void setTitolo(string label) { Titolo = label; } public void writeSezione(DataThread dataThread) { DocumentPDF document = dataThread.DocumentPDF; DatiTabella datitab; DataSetS80 set = (DataSetS80)dataThread.Data.DatiSezione; //setta la datatable che contiene i dati per disegnare la tabella Dati datitab = new DatiTabella(); datitab.table = set.Tables["DatiTabella"]; int nFasi = Convert.ToInt32(datitab.table.Rows[0]["NumeroFasi"]); //il valore è uguale in tutte le righe datitab.table.Columns.Remove("NumeroFasi");// rimuovo la colonna, non va stampata string captionFase1 = datitab.table.Columns["Fase1"].Caption; string captionFase2 = datitab.table.Columns["Fase2"].Caption; string captionFase3 = datitab.table.Columns["Fase3"].Caption; // Aggiungo una pagina se la tabella non entra nella corrente. if (document.checkMargin(datitab.GetRowDim() * datitab.getNumRow())) document.addPage(); document.setSezTitolo(Titolo); document.setChapterHeader(_testointroduttivo); #region Disegno Tabella Dati Tabella tabellaDati = new Tabella(); tabellaDati.X = document.getMargineLeft(); tabellaDati.Y = document.getLastPos(); tabellaDati.Header = true; tabellaDati.SaltoPagina = false; tabellaDati.Datasource = datitab.table; DataRow rowTemplate = tabellaDati.Datasource.Rows[0]; int larghezzaColonnaDescrizione = 512; //è variabile e da calcolare in base allo spazio disponibile int larghezzaColonnaFase1 = 130; int larghezzaColonnaFase2 = 150; int larghezzaColonnaFase3 = 130; int larghezzaUltimaColonna = 0; // Definizione delle colonne foreach (DataColumn column in tabellaDati.Datasource.Columns) { if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase1; larghezzaUltimaColonna = larghezzaColonnaFase1; tabellaDati.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 8, false)); } if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase2; larghezzaUltimaColonna = larghezzaColonnaFase2; tabellaDati.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 8, false)); } if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase3; larghezzaUltimaColonna = larghezzaColonnaFase3; tabellaDati.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 8, false)); } } tabellaDati.Colonne.Insert(0,new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 8, false)); tabellaDati.Draw(datitab, document); #endregion #region Disegno Tabella Totale //setta la datatable che contiene i Dati per disegnare la tabella del Totale datitab = new DatiTabella(); datitab.table = set.Tables["DatiTotale"]; Tabella tabellaTotale = new Tabella(); tabellaTotale.X = document.getMargineLeft(); tabellaTotale.Y = document.getLastPos() + tabellaDati.AltezzaTabella + 30; tabellaTotale.Header = false; tabellaTotale.SaltoPagina = false; tabellaTotale.Datasource = datitab.table; larghezzaColonnaDescrizione = 512; // Definizione delle colonne foreach (DataColumn column in tabellaTotale.Datasource.Columns) { if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase1; tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, true, 8, true)); } if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase2; tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, true, 8, true)); } if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty) { larghezzaColonnaDescrizione -= larghezzaColonnaFase3; tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, true, 8, true)); } } tabellaTotale.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, true, 8, true)); tabellaTotale.Draw(datitab, document); #endregion #region Disegno riquadro su Situazione Corrente e freccia // riquadro intorno la colonna Situazione Corrente float xRiquadro = 528 - larghezzaUltimaColonna + (larghezzaUltimaColonna / 2); ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage(); Rectangle rettangoloSuSituazioneCorrente; rettangoloSuSituazioneCorrente = new Rectangle(xRiquadro, tabellaDati.Y - 10, larghezzaUltimaColonna - 35, tabellaDati.AltezzaTabella + tabellaTotale.AltezzaTabella); rettangoloSuSituazioneCorrente.CornerRadius = 5; page.Elements.Add(rettangoloSuSituazioneCorrente); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream(UtilityManager.getAppSetting("FrecciaS80")); switch (nFasi) { case 2: // Una freccia tra "attivazione monitoraggio" e "situazione corrente" o tra "Precedente invio report" e "situazione corrente" page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, tabellaDati.Y - 10, 0.57F)); break; case 3: // Una freccia tra "attivazione monitoraggio" e "precedente invio report" e tra "precedente invio report" e "situazione corrente" page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 245, tabellaDati.Y - 10, 0.57F)); page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, tabellaDati.Y - 10, 0.57F)); break; default: break; } #endregion // imposto l'ultima posizione scrivibile. //V era 50 in caso di sforamento mettere a 0 document.setLastPos(tabellaDati.AltezzaTabella + tabellaTotale.AltezzaTabella); } } }