using System; using System.Data; using SteamWare; using Microsoft.Reporting.WinForms; /// /// Classe che restituisce uno stream ed i dati accessori per reinviare un report in pdf /// public class reportExporter { /// /// mimeType del report /// public string mimeType; /// /// encoding dei dati /// public string encoding; /// /// nome estensione /// public string fileNameExtension; /// /// steam di bytes del report /// public byte[] renderedBytes; /// /// metodo protected /// public reportExporter() { } /// /// carica i dati richiesti dal report dalla StoredProcedure (filtrando quindi...) /// /// report ammessi: RichiestaIntervento /// num int mtz /// tabella dati private DataTable caricaDati(reportRichiesto tipoReport, string idxObj) { DataTable tab = new DataTable(); switch (tipoReport) { case reportRichiesto.ElencoMacchine: tab = (DataTable)TA_app.obj.taElencoImpMacch.GetData(); break; case reportRichiesto.RichiestaIntervento: tab = (DataTable)TA_app.obj.taInterventiMtz.getByIdx(Convert.ToInt32(idxObj)); break; default: break; } return tab; } /// /// carica i dati richiesti dal report dalla StoredProcedure (filtrando quindi...) /// /// report ammessi: ElencoMacchine /// tabella dati private DataTable caricaDati(reportRichiesto tipoReport) { DataTable tab = new DataTable(); switch (tipoReport) { case reportRichiesto.ElencoMacchine: tab = (DataTable)TA_app.obj.taElencoImpMacch.GetData(); break; default: break; } return tab; } /// /// carica i dati richiesti dal report dalla StoredProcedure (filtrando quindi...) /// /// report ammessi: ElencoInterventi / MTBF_MTTR /// oggetto che contiene data inizio e data fine dell'analisi richiesta per il report /// username (per caricare i suoi filtraggi... /// se si devono includere SOLO i dati di macchina ferma /// se si deve includere anche nel report le fermate di mtz preventiva /// tabella dati private DataTable caricaDati(reportRichiesto tipoReport, intervalloDate periodoAnalizzato, string username, bool soloMacchinaFerma, bool includiMtzPrev) { DataTable tab = new DataTable(); switch (tipoReport) { case reportRichiesto.ElencoInterventi: // controllo: se include mtz prev e non solo ferma if (!soloMacchinaFerma && includiMtzPrev) { // ...uso metodo std tab = (DataTable)TA_app.obj.taElencoIntFilt.getByIntervDateUsernameFilt(periodoAnalizzato.inizio, periodoAnalizzato.fine, username); } else { // altrimenti stored compelta (e + lenta) tab = (DataTable)TA_app.obj.taElencoIntFilt.getByIntervDateUsernameFilt_fermaPrev(periodoAnalizzato.inizio, periodoAnalizzato.fine, username, soloMacchinaFerma, includiMtzPrev); } break; case reportRichiesto.MTBF_MTTR: // controllo: se include mtz prev e non solo ferma if (!soloMacchinaFerma && includiMtzPrev) { // ...uso metodo std tab = (DataTable)TA_app.obj.taElenco_MTBF_MTTR.GetData(periodoAnalizzato.inizio, periodoAnalizzato.fine, username); } else { // altrimenti stored compelta (e + lenta) tab = (DataTable)TA_app.obj.taElenco_MTBF_MTTR.getByFermaPrev(periodoAnalizzato.inizio, periodoAnalizzato.fine, username, soloMacchinaFerma, includiMtzPrev); } break; default: break; } return tab; } /// /// renderizza il report in pdf /// /// report ammessi: ElencoMacchine /// public void popolaPdfStream(reportRichiesto tipoReport) { LocalReport report = new LocalReport(); report.EnableExternalImages = true; devInfoParam deviceInfo = new devInfoParam("PDF", "21cm", "29.7cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); switch (tipoReport) { case reportRichiesto.ElencoMacchine: report.ReportPath = string.Format(@".\{0}\{1}\MacchineReparti.rdlc", memLayer.ML.CRS("ReportBasePath"), user_std.UtSn.lingua); report.DataSources.Add(new ReportDataSource("WebGim", caricaDati(tipoReport))); deviceInfo = new devInfoParam("PDF", "21cm", "29.7cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); break; default: break; } createPdfStream(report, deviceInfo.xmlParam); } /// /// renderizza il report in pdf /// /// report ammessi: RichiestaIntervento /// idx della richiesta (numIntMtz) /// public void popolaPdfStream(reportRichiesto tipoReport, string parametro) { LocalReport report = new LocalReport(); report.EnableExternalImages = true; devInfoParam deviceInfo = new devInfoParam("PDF", "21cm", "29.7cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); switch (tipoReport) { case reportRichiesto.RichiestaIntervento: report.ReportPath = string.Format(@".\{0}\{1}\RichiestaIntervento.rdlc", memLayer.ML.CRS("ReportBasePath"), user_std.UtSn.lingua); report.DataSources.Add(new ReportDataSource("WebGim", caricaDati(tipoReport, parametro))); // OCCHIO!!! va messa sorgente dati CORRETTA deviceInfo = new devInfoParam("PDF", "29.7cm", "21cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); break; default: break; } createPdfStream(report, deviceInfo.xmlParam); } /// /// renderizza il report in pdf /// /// report ammessi: ElencoInterventi / MTBF_MTTR /// oggetto che contiene data inizio e data fine dell'analisi richiesta per il report /// username (per caricare i suoi filtraggi... /// se si devono includere SOLO i dati di macchina ferma /// se si deve includere anche nel report le fermate di mtz preventiva public void popolaPdfStream(reportRichiesto tipoReport, intervalloDate periodoAnalizzato, string username, bool soloMacchinaFerma, bool includiMtzPrev) { LocalReport report = new LocalReport(); report.EnableExternalImages = true; devInfoParam deviceInfo = new devInfoParam("PDF", "21cm", "29.7cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); switch (tipoReport) { case reportRichiesto.ElencoInterventi: report.ReportPath = string.Format(@".\{0}\{1}\ReportInterventi.rdlc", memLayer.ML.CRS("ReportBasePath"), user_std.UtSn.lingua); report.DataSources.Add(new ReportDataSource("WebGim", caricaDati(tipoReport, periodoAnalizzato, username, soloMacchinaFerma, includiMtzPrev))); deviceInfo = new devInfoParam("PDF", "29.7cm", "21cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); break; case reportRichiesto.MTBF_MTTR: report.ReportPath = string.Format(@".\{0}\{1}\Report_MTBF_MTTR.rdlc", memLayer.ML.CRS("ReportBasePath"), user_std.UtSn.lingua); report.DataSources.Add(new ReportDataSource("WebGim", caricaDati(tipoReport, periodoAnalizzato, username, soloMacchinaFerma, includiMtzPrev))); deviceInfo = new devInfoParam("PDF", "29.7cm", "21cm", "0.2cm", "0.2cm", "0.2cm", "0.2cm"); // calcolo le ore totali equivalenti... ReportParameter[] OreTotali = { new ReportParameter("OreTotali", WebGimUtils.obj.oreEquivalenti(periodoAnalizzato).ToString()) }; report.SetParameters(OreTotali); break; default: break; } createPdfStream(report, deviceInfo.xmlParam); } /// /// crea il vero e proprio stream pdf /// /// /// private void createPdfStream(LocalReport report, string deviceInfo) { // export in PDF string reportType = "PDF"; Warning[] warnings; string[] streams; renderedBytes = report.Render( reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings); } }