diff --git a/AppData/DataLayer.cs b/AppData/DataLayer.cs
index 0927d19..7a72a3b 100644
--- a/AppData/DataLayer.cs
+++ b/AppData/DataLayer.cs
@@ -248,10 +248,10 @@ namespace AppData
public bool stampaDoc(string keyParam, string printer, tipoDocumento tipoDoc, string clientIp)
{
bool answ = false;
- // controllo se esista UDC
+ // controllo se esista DOC
if (checkDoc(tipoDoc, keyParam))
{
- answ = reportPrinter.obj.stampaCartellino(tipoDoc, keyParam, printer);
+ answ = reportPrinter.obj.stampaCartellino(tipoDoc, keyParam, printer, true);
if (answ)
{
logger.lg.scriviLog(string.Format(" | {0} | stampato UDC {1} | stampante {2} | tipo {3}", clientIp, keyParam, printer, tipoDoc), tipoLog.INFO);
@@ -282,6 +282,9 @@ namespace AppData
case tipoDocumento.docBinPre:
break;
case tipoDocumento.docBinPost:
+ int.TryParse(keyParam, out intIdx);
+ var tabBinPre = taBN.getByKey(intIdx);
+ answ = tabBinPre.Count > 0;
break;
case tipoDocumento.docCart:
break;
diff --git a/AppData/reportPrinter.cs b/AppData/reportPrinter.cs
index 99d231c..2b8f1ba 100644
--- a/AppData/reportPrinter.cs
+++ b/AppData/reportPrinter.cs
@@ -11,474 +11,482 @@ using System.Text;
namespace AppData
{
- ///
- /// Classe che si occupa di stampare report da reportViewer via printer remota
- ///
- public class reportPrinter
- {
- #region area codice da non modificare
+ ///
+ /// Classe che si occupa di stampare report da reportViewer via printer remota
+ ///
+ public class reportPrinter
+ {
+ #region area codice da non modificare
- private int m_currentPageIndex;
- protected int logLevel = 0;
- protected bool doPdfCopy = false;
- ///
- /// stream del report...
- ///
- private IList m_streams;
- ///
- /// ciclo da fornire al renderizzatore dei report, per salvare 1 immagine da ogni pagina del report
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
- {
- // creo files con nomi univoci...
- string filePathName = string.Format(@"~\temp\{0}_{1:HHmmss}_{1:ffff}.{2}", name, DateTime.Now, fileNameExtension);
- Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(filePathName), FileMode.Create);
- //Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(@"~\temp\" + name + "." + fileNameExtension), FileMode.Create);
- m_streams.Add(stream);
- return stream;
- }
- ///
- /// ciclo da fornire al renderizzatore dei report, per salvare 1 pdf da ogni pagina del report
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private Stream CreateStreamPdf(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
- {
- // creo Directory se non c'è
- SteamWare.fileMover fm = new fileMover(string.Format(@"{0}\{1:yyyy}\{1:MM}\{1:dd}\", memLayer.ML.confReadString("PdfFolder"), DateTime.Now), "");
- fm.checkDir();
- string pdfPathName = string.Format(@"{0}\{1:yyyy}\{1:MM}\{1:dd}\{2}_{1:HHmmss}_{1:ffff}.{3}", memLayer.ML.confReadString("PdfFolder"), DateTime.Now, name, fileNameExtension);
- //Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(@"~\temp\" + name + "." + fileNameExtension), FileMode.Create);
- Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(pdfPathName), FileMode.Create);
- m_streams.Add(stream);
- return stream;
- }
- ///
- /// Handler per PrintPageEvents
- ///
- ///
- ///
- private void PrintPage(object sender, PrintPageEventArgs ev)
- {
- Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
- ev.Graphics.DrawImage(pageImage, ev.PageBounds);
- m_currentPageIndex++;
- ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
- }
- ///
- /// funzione di stampa...
- ///
- private void Print(string printerName)
- {
- //const string printerName = "Microsoft Office Document Image Writer";
- //const string printerName = "Brother HL-2170W series";
- if (m_streams == null || m_streams.Count == 0)
- return;
- PrintDocument printDoc = new PrintDocument();
- printDoc.PrinterSettings.PrinterName = printerName;
- if (!printDoc.PrinterSettings.IsValid)
- {
- logger.lg.scriviLog(String.Format("Impostazioni non valide per la stampante \"{0}\".", printerName), tipoLog.ERROR);
- return;
- }
- printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
- printDoc.Print();
- }
- ///
- /// Export del report come EMF (Enhanced Metafile) file.
- ///
- ///
- private void Export(LocalReport report, string deviceInfo)
- {
- Warning[] warnings;
- m_streams = new List();
- report.Render("Image", deviceInfo, CreateStream, out warnings);
- foreach (Stream stream in m_streams) stream.Position = 0;
- }
- ///
- /// Export del report come PDF file.
- ///
- ///
- private void ExportPDF(LocalReport report, string deviceInfo)
- {
- Warning[] warnings;
- m_streams = new List();
- report.Render("PDF", deviceInfo, CreateStreamPdf, out warnings);
- foreach (Stream stream in m_streams) stream.Position = 0;
- }
- ///
- /// dispone l'applicazione e rilascia le risorse
- ///
- public void Dispose()
- {
- if (m_streams != null)
- {
- foreach (Stream stream in m_streams)
- stream.Close();
- m_streams = null;
- }
- }
-
- #endregion
-
- #region area codice da modificare
-
- ///
- /// carica i dati richiesti dal report dalla StoredProcedure (filtrando quindi...)
- ///
- ///
- /// cod UDC
- /// tabella dati
- private DataTable caricaDati(reportRichiesto tipoReport, string keyParam)
- {
- int intIdx = 0;
- DataTable tab = new DataTable();
- switch (tipoReport)
- {
- case reportRichiesto.cartLabel:
- // int.TryParse(keyParam, out intIdx);
- // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
- break;
- case reportRichiesto.paintLabelPre:
- // int.TryParse(keyParam, out intIdx);
- // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
- break;
- case reportRichiesto.paintLabelPost:
- // int.TryParse(keyParam, out intIdx);
- // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
- break;
- case reportRichiesto.partLabel:
- int.TryParse(keyParam, out intIdx);
- tab = (DataTable)DataLayer.man.taIL.getByKey(intIdx);
- break;
- case reportRichiesto.stackLabel:
- int.TryParse(keyParam, out intIdx);
- tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
- break;
- default:
- break;
- }
- return tab;
- }
- ///
- /// Crea un report locale da file rdlc, carica i dati, esporta report come EMF file e quindi lo invia alla stampante
- ///
- /// report ammessi: ElencoMacchine / RichiestaIntervento
- /// nome completo stampante (rispetto al server)
- /// cod UDC
- /// parametri "device input"
- public void printReport(reportRichiesto tipoReport, string printerName, string keyParam, devInfoParam deviceInfoParam)
- {
- LocalReport report = new LocalReport();
- report.EnableExternalImages = true;
- string deviceInfo = "";
- string repoBasePath = utils.getPath(memLayer.ML.cdv("ReportBasePath"));
- repoBasePath = repoBasePath.Replace("\\site", "");
- switch (tipoReport)
- {
- case reportRichiesto.cartLabel:
- report.ReportPath = string.Format(@"{0}\CartLabel.rdlc", repoBasePath);
- report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocCart"), caricaDati(tipoReport, keyParam)));
- break;
- case reportRichiesto.paintLabelPre:
- report.ReportPath = string.Format(@"{0}\PaintPreLabel.rdlc", repoBasePath);
- report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPaintPre"), caricaDati(tipoReport, keyParam)));
- break;
- case reportRichiesto.paintLabelPost:
- report.ReportPath = string.Format(@"{0}\PaintPreLabel.rdlc", repoBasePath);
- report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPaintPre"), caricaDati(tipoReport, keyParam)));
- break;
- case reportRichiesto.partLabel:
- report.ReportPath = string.Format(@"{0}\PartLabel.rdlc", repoBasePath);
- report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPart"), caricaDati(tipoReport, keyParam)));
- break;
- case reportRichiesto.stackLabel:
- report.ReportPath = string.Format(@"{0}\StackLabel.rdlc", repoBasePath);
- report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocStack"), caricaDati(tipoReport, keyParam)));
- break;
- }
- deviceInfo = deviceInfoParam.xmlParam;
- doEmfPrint(printerName, report, deviceInfo);
- // controllo se devo fare copia PDF... stampiamo ANCHE su pdf su una folder locale
- if (doPdfCopy)
- {
- deviceInfoParam.OutputFormat = "PDF";
- deviceInfo = deviceInfoParam.xmlParam;
- doLocalPdfPrint(report, deviceInfo);
- }
- }
- ///
- /// esegue print vero e proprio
- ///
- ///
- ///
- ///
- private void doEmfPrint(string printerName, LocalReport report, string deviceInfo)
- {
- // export in EMF
- Export(report, deviceInfo);
- m_currentPageIndex = 0;
- // stampo
- Print(printerName);
- // do dispose?
- Dispose();
- }
- ///
- /// effettua stampa in PDF dei vari report in una cartella Anno/Mese/Giorno
- ///
- ///
- ///
- private void doLocalPdfPrint(LocalReport report, string deviceInfo)
- {
- // export in PDF
- ExportPDF(report, deviceInfo);
- m_currentPageIndex = 0;
- // do dispose?
- Dispose();
- }
- ///
- /// effettua la stampa del cartellino indicato
- ///
- ///
- ///
- /// indirizzo di rete completo stampante del tipo \\nomePc\nomeStampante, oppure "" x default
- ///
- public bool stampaCartellino(tipoDocumento documento, string keyParam, string printerName)
- {
- bool answ = false;
- int idxPrintJob = 0;
- DataLayer dtProx = new DataLayer();
- // gestione coda stampa...
-
- // incomincio con gestione della coda di stampa... inserisco in tab la richiesta di stampa...
- if (memLayer.ML.CRB("disable_singleton"))
- {
- dtProx.taPJQ.insertQuery(documento.ToString(), keyParam, printerName);
- }
- else
- {
- DataLayer.man.taPJQ.insertQuery(documento.ToString(), keyParam, printerName);
- }
- // faccio un ciclo while... finchè non sono "in testa" alla coda delle esecuzioni aspetto...
- string nextJob = "ND";
- try
- {
- if (memLayer.ML.CRB("disable_singleton"))
+ private int m_currentPageIndex;
+ protected int logLevel = 0;
+ protected bool doPdfCopy = false;
+ ///
+ /// stream del report...
+ ///
+ private IList m_streams;
+ ///
+ /// ciclo da fornire al renderizzatore dei report, per salvare 1 immagine da ogni pagina del report
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
{
- nextJob = dtProx.taPJQ.getNext()[0].KeyParam;
+ // creo files con nomi univoci...
+ string filePathName = string.Format(@"~\temp\{0}_{1:HHmmss}_{1:ffff}.{2}", name, DateTime.Now, fileNameExtension);
+ Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(filePathName), FileMode.Create);
+ //Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(@"~\temp\" + name + "." + fileNameExtension), FileMode.Create);
+ m_streams.Add(stream);
+ return stream;
}
- else
+ ///
+ /// ciclo da fornire al renderizzatore dei report, per salvare 1 pdf da ogni pagina del report
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private Stream CreateStreamPdf(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
{
- nextJob = DataLayer.man.taPJQ.getNext()[0].KeyParam;
+ // creo Directory se non c'è
+ SteamWare.fileMover fm = new fileMover(string.Format(@"{0}\{1:yyyy}\{1:MM}\{1:dd}\", memLayer.ML.confReadString("PdfFolder"), DateTime.Now), "");
+ fm.checkDir();
+ string pdfPathName = string.Format(@"{0}\{1:yyyy}\{1:MM}\{1:dd}\{2}_{1:HHmmss}_{1:ffff}.{3}", memLayer.ML.confReadString("PdfFolder"), DateTime.Now, name, fileNameExtension);
+ //Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(@"~\temp\" + name + "." + fileNameExtension), FileMode.Create);
+ Stream stream = new FileStream(SteamWare.SteamwareStrings.getFilePath(pdfPathName), FileMode.Create);
+ m_streams.Add(stream);
+ return stream;
}
- }
- catch
- {
- nextJob = "ND";
- }
- // verifico eventuali processi zombie: quelli in stato 0 con LastTry superiore a data attuale meno zombieMsTime
- if (memLayer.ML.CRB("disable_singleton"))
- {
- dtProx.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime")));
- }
- else
- {
- DataLayer.man.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime")));
- }
- // ora inizio a fare le mie stampe...
- Random rand = new Random();
- int msWait = 200;
- while (nextJob != keyParam)
- {
- // indico che ho fatto un tentativo di stampa aggiornando dtLastTry
- if (memLayer.ML.CRB("disable_singleton"))
+ ///
+ /// Handler per PrintPageEvents
+ ///
+ ///
+ ///
+ private void PrintPage(object sender, PrintPageEventArgs ev)
{
- dtProx.taPJQ.updateLastTry(keyParam);
+ Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
+ ev.Graphics.DrawImage(pageImage, ev.PageBounds);
+ m_currentPageIndex++;
+ ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
- else
+ ///
+ /// funzione di stampa...
+ ///
+ private void Print(string printerName)
{
- DataLayer.man.taPJQ.updateLastTry(keyParam);
+ //const string printerName = "Microsoft Office Document Image Writer";
+ //const string printerName = "Brother HL-2170W series";
+ if (m_streams == null || m_streams.Count == 0)
+ return;
+ PrintDocument printDoc = new PrintDocument();
+ printDoc.PrinterSettings.PrinterName = printerName;
+ if (!printDoc.PrinterSettings.IsValid)
+ {
+ logger.lg.scriviLog(String.Format("Impostazioni non valide per la stampante \"{0}\".", printerName), tipoLog.ERROR);
+ return;
+ }
+ printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
+ printDoc.Print();
}
- // aspetto...
- msWait = rand.Next(memLayer.ML.confReadInt("minWait"), memLayer.ML.confReadInt("maxWait"));
- System.Threading.Thread.Sleep(msWait);
- // leggo prox record da coda
- if (memLayer.ML.CRB("disable_singleton"))
+ ///
+ /// Export del report come EMF (Enhanced Metafile) file.
+ ///
+ ///
+ private void Export(LocalReport report, string deviceInfo)
{
- nextJob = dtProx.taPJQ.getNext()[0].KeyParam;
+ Warning[] warnings;
+ m_streams = new List();
+ report.Render("Image", deviceInfo, CreateStream, out warnings);
+ foreach (Stream stream in m_streams) stream.Position = 0;
}
- else
+ ///
+ /// Export del report come PDF file.
+ ///
+ ///
+ private void ExportPDF(LocalReport report, string deviceInfo)
{
- nextJob = DataLayer.man.taPJQ.getNext()[0].KeyParam;
+ Warning[] warnings;
+ m_streams = new List();
+ report.Render("PDF", deviceInfo, CreateStreamPdf, out warnings);
+ foreach (Stream stream in m_streams) stream.Position = 0;
}
- }
- // salvo idx job...
- try
- {
- if (memLayer.ML.CRB("disable_singleton"))
+ ///
+ /// dispone l'applicazione e rilascia le risorse
+ ///
+ public void Dispose()
{
- idxPrintJob = dtProx.taPJQ.getNext()[0].IdxPrintJob;
- }
- else
- {
- idxPrintJob = DataLayer.man.taPJQ.getNext()[0].IdxPrintJob;
- }
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog($"Errore in recupero IdxPrint Job:{exc}", tipoLog.EXCEPTION);
- }
-
- // dimensioni pagina
- string outForm = "";
- string pagWidth = "";
- string pagHeigth = "";
- string margin = "";
- reportRichiesto report = reportRichiesto.stackLabel;
- string tipo = "";
-
- switch (documento)
- {
- case tipoDocumento.docBinPre:
- tipo = "DocPaint";
- report = reportRichiesto.paintLabelPre;
- break;
- case tipoDocumento.docBinPost:
- tipo = "DocPaintPost";
- report = reportRichiesto.paintLabelPost;
- break;
- case tipoDocumento.docCart:
- tipo = "DocCart";
- report = reportRichiesto.cartLabel;
- break;
- case tipoDocumento.docPart:
- tipo = "DocPart";
- report = reportRichiesto.partLabel;
- break;
- case tipoDocumento.docStack:
- tipo = "DocStack";
- report = reportRichiesto.stackLabel;
- break;
- default:
- break;
- }
- // carico di dati con lettura da web.config parametrica
- if (string.IsNullOrEmpty(printerName))
- {
- printerName = memLayer.ML.cdv(string.Format("printer{0}", tipo));
- }
- outForm = "EMF";
- pagWidth = memLayer.ML.cdv(string.Format("PageWidth{0}", tipo));
- pagHeigth = memLayer.ML.cdv(string.Format("PageHeight{0}", tipo));
- margin = memLayer.ML.cdv(string.Format("Margin{0}", tipo));
- // compongo parametri stampa
- devInfoParam deviceInfo = new devInfoParam(outForm, pagHeigth, pagWidth, margin, margin, margin, margin);
- answ = printAndLog(keyParam, printerName, answ, report, deviceInfo);
- if (answ)
- {
- // registro stampato in tabella queue...
- if (memLayer.ML.CRB("disable_singleton"))
- {
- dtProx.taPJQ.updateStato(idxPrintJob, 1);
- }
- else
- {
- DataLayer.man.taPJQ.updateStato(idxPrintJob, 1);
- }
- }
- else
- {
- // registro annullato in tab queue...
- if (memLayer.ML.CRB("disable_singleton"))
- {
- dtProx.taPJQ.updateStato(idxPrintJob, -1);
- }
- else
- {
- DataLayer.man.taPJQ.updateStato(idxPrintJob, -1);
+ if (m_streams != null)
+ {
+ foreach (Stream stream in m_streams)
+ stream.Close();
+ m_streams = null;
+ }
}
- }
- return answ;
- }
- ///
- /// effettua la vera e propria fase di stampa
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private bool printAndLog(string keyParam, string printerName, bool answ, reportRichiesto report, devInfoParam deviceInfo)
- {
- try
- {
- if (logLevel > 5) logger.lg.scriviLog(String.Format("Sto per inviare un report alla stampante {0}", printerName), tipoLog.INFO);
- reportPrinter.obj.printReport(report, printerName, keyParam, deviceInfo);
- if (logLevel > 5) logger.lg.scriviLog(String.Format("inviato comando print alla stampante {0}", printerName), tipoLog.INFO);
- answ = true;
- }
- catch (Exception e)
- {
- logger.lg.scriviLog(String.Format("Errore in fase di creazione e stampa report: stampante {0}, errore riscontrato {1}", printerName, e), tipoLog.EXCEPTION);
- }
- return answ;
- }
- ///
- /// oggetto protected
- ///
- ///
- protected reportPrinter()
- {
- logLevel = memLayer.ML.CRI("_logLevel");
- doPdfCopy = memLayer.ML.CRB("doPdfCopy");
- }
- ///
- /// singleton pubblico
- ///
- public static reportPrinter obj = new reportPrinter();
- ///
- /// effettua pulizia della cartella temp x i files più vecchi di X ore (web.config)
- ///
- public void pulisciDir()
- {
- // num max ore di età x files "vecchi" da tenere in temp area...
- int maxOre = memLayer.ML.CRI("maxAgeTempAreaHours");
- int eliminati = 0;
- // ottengo elenco files *.emf
- fileMover.obj.setDirectory(@"~\temp\");
- FileInfo[] _fis = fileMover.obj.elencoFiles_FI("*.emf");
- bool fatto = false;
- foreach (FileInfo _file in _fis)
- {
- if (_file.CreationTime < DateTime.Now.AddHours(-maxOre)) // elimino files vecchi...
- {
- fatto = fileMover.obj.eliminaFile(_file);
- if (fatto)
- {
- logger.lg.scriviLog(String.Format("Eliminato file {0}", _file.Name), tipoLog.INFO);
- eliminati++;
- }
- }
- }
- // salvo il log degli update
- if (eliminati > 0)
- {
- logger.lg.scriviLog(String.Format("Eliminati {0} files temporanei da area temp", eliminati), tipoLog.INFO);
- }
- }
+ #endregion
- #endregion
- }
+ #region area codice da modificare
+
+ ///
+ /// carica i dati richiesti dal report dalla StoredProcedure (filtrando quindi...)
+ ///
+ ///
+ /// cod UDC
+ /// tabella dati
+ private DataTable caricaDati(reportRichiesto tipoReport, string keyParam)
+ {
+ int intIdx = 0;
+ DataTable tab = new DataTable();
+ switch (tipoReport)
+ {
+ case reportRichiesto.cartLabel:
+ // int.TryParse(keyParam, out intIdx);
+ // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
+ break;
+ case reportRichiesto.paintLabelPre:
+ // int.TryParse(keyParam, out intIdx);
+ // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
+ break;
+ case reportRichiesto.paintLabelPost:
+ // int.TryParse(keyParam, out intIdx);
+ // tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
+ break;
+ case reportRichiesto.partLabel:
+ int.TryParse(keyParam, out intIdx);
+ tab = (DataTable)DataLayer.man.taIL.getByKey(intIdx);
+ break;
+ case reportRichiesto.stackLabel:
+ int.TryParse(keyParam, out intIdx);
+ tab = (DataTable)DataLayer.man.taRepStack.GetData(intIdx);
+ break;
+ default:
+ break;
+ }
+ return tab;
+ }
+ ///
+ /// Crea un report locale da file rdlc, carica i dati, esporta report come EMF file e quindi lo invia alla stampante
+ ///
+ /// report ammessi: ElencoMacchine / RichiestaIntervento
+ /// nome completo stampante (rispetto al server)
+ /// cod UDC
+ /// parametri "device input"
+ public void printReport(reportRichiesto tipoReport, string printerName, string keyParam, devInfoParam deviceInfoParam)
+ {
+ LocalReport report = new LocalReport();
+ report.EnableExternalImages = true;
+ string deviceInfo = "";
+ string repoBasePath = utils.getPath(memLayer.ML.cdv("ReportBasePath"));
+ repoBasePath = repoBasePath.Replace("\\site", "");
+ switch (tipoReport)
+ {
+ case reportRichiesto.cartLabel:
+ report.ReportPath = string.Format(@"{0}\CartLabel.rdlc", repoBasePath);
+ report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocCart"), caricaDati(tipoReport, keyParam)));
+ break;
+ case reportRichiesto.paintLabelPre:
+ report.ReportPath = string.Format(@"{0}\PaintPreLabel.rdlc", repoBasePath);
+ report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPaintPre"), caricaDati(tipoReport, keyParam)));
+ break;
+ case reportRichiesto.paintLabelPost:
+ report.ReportPath = string.Format(@"{0}\PaintPreLabel.rdlc", repoBasePath);
+ report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPaintPre"), caricaDati(tipoReport, keyParam)));
+ break;
+ case reportRichiesto.partLabel:
+ report.ReportPath = string.Format(@"{0}\PartLabel.rdlc", repoBasePath);
+ report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocPart"), caricaDati(tipoReport, keyParam)));
+ break;
+ case reportRichiesto.stackLabel:
+ report.ReportPath = string.Format(@"{0}\StackLabel.rdlc", repoBasePath);
+ report.DataSources.Add(new ReportDataSource(memLayer.ML.cdv("ReportDS_DocStack"), caricaDati(tipoReport, keyParam)));
+ break;
+ }
+ deviceInfo = deviceInfoParam.xmlParam;
+ doEmfPrint(printerName, report, deviceInfo);
+ // controllo se devo fare copia PDF... stampiamo ANCHE su pdf su una folder locale
+ if (doPdfCopy)
+ {
+ deviceInfoParam.OutputFormat = "PDF";
+ deviceInfo = deviceInfoParam.xmlParam;
+ doLocalPdfPrint(report, deviceInfo);
+ }
+ }
+ ///
+ /// esegue print vero e proprio
+ ///
+ ///
+ ///
+ ///
+ private void doEmfPrint(string printerName, LocalReport report, string deviceInfo)
+ {
+ // export in EMF
+ Export(report, deviceInfo);
+ m_currentPageIndex = 0;
+ // stampo
+ Print(printerName);
+ // do dispose?
+ Dispose();
+ }
+ ///
+ /// effettua stampa in PDF dei vari report in una cartella Anno/Mese/Giorno
+ ///
+ ///
+ ///
+ private void doLocalPdfPrint(LocalReport report, string deviceInfo)
+ {
+ // export in PDF
+ ExportPDF(report, deviceInfo);
+ m_currentPageIndex = 0;
+ // do dispose?
+ Dispose();
+ }
+ ///
+ /// effettua la stampa del cartellino indicato
+ ///
+ ///
+ ///
+ /// indirizzo di rete completo stampante del tipo \\nomePc\nomeStampante, oppure "" x default
+ /// true = si limita ad accodare SENZA stampare
+ ///
+ public bool stampaCartellino(tipoDocumento documento, string keyParam, string printerName, bool queueOnly)
+ {
+ bool answ = false;
+ int idxPrintJob = 0;
+ DataLayer dtProx = new DataLayer();
+ // gestione coda stampa...
+
+ // incomincio con gestione della coda di stampa... inserisco in tab la richiesta di stampa...
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ dtProx.taPJQ.insertQuery(documento.ToString(), keyParam, printerName);
+ }
+ else
+ {
+ DataLayer.man.taPJQ.insertQuery(documento.ToString(), keyParam, printerName);
+ }
+ if (queueOnly)
+ {
+ answ = true;
+ }
+ else
+ {
+ // faccio un ciclo while... finchè non sono "in testa" alla coda delle esecuzioni aspetto...
+ string nextJob = "ND";
+ try
+ {
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ nextJob = dtProx.taPJQ.getNext()[0].KeyParam;
+ }
+ else
+ {
+ nextJob = DataLayer.man.taPJQ.getNext()[0].KeyParam;
+ }
+ }
+ catch
+ {
+ nextJob = "ND";
+ }
+ // verifico eventuali processi zombie: quelli in stato 0 con LastTry superiore a data attuale meno zombieMsTime
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ dtProx.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime")));
+ }
+ else
+ {
+ DataLayer.man.taPJQ.chiudiZoombie(DateTime.Now.AddMilliseconds(-memLayer.ML.CRI("zombieMsTime")));
+ }
+ // ora inizio a fare le mie stampe...
+ Random rand = new Random();
+ int msWait = 200;
+ while (nextJob != keyParam)
+ {
+ // indico che ho fatto un tentativo di stampa aggiornando dtLastTry
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ dtProx.taPJQ.updateLastTry(keyParam);
+ }
+ else
+ {
+ DataLayer.man.taPJQ.updateLastTry(keyParam);
+ }
+ // aspetto...
+ msWait = rand.Next(memLayer.ML.confReadInt("minWait"), memLayer.ML.confReadInt("maxWait"));
+ System.Threading.Thread.Sleep(msWait);
+ // leggo prox record da coda
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ nextJob = dtProx.taPJQ.getNext()[0].KeyParam;
+ }
+ else
+ {
+ nextJob = DataLayer.man.taPJQ.getNext()[0].KeyParam;
+ }
+ }
+ // salvo idx job...
+ try
+ {
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ idxPrintJob = dtProx.taPJQ.getNext()[0].IdxPrintJob;
+ }
+ else
+ {
+ idxPrintJob = DataLayer.man.taPJQ.getNext()[0].IdxPrintJob;
+ }
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog($"Errore in recupero IdxPrint Job:{exc}", tipoLog.EXCEPTION);
+ }
+
+ // dimensioni pagina
+ string outForm = "";
+ string pagWidth = "";
+ string pagHeigth = "";
+ string margin = "";
+ reportRichiesto report = reportRichiesto.stackLabel;
+ string tipo = "";
+
+ switch (documento)
+ {
+ case tipoDocumento.docBinPre:
+ tipo = "DocPaint";
+ report = reportRichiesto.paintLabelPre;
+ break;
+ case tipoDocumento.docBinPost:
+ tipo = "DocPaintPost";
+ report = reportRichiesto.paintLabelPost;
+ break;
+ case tipoDocumento.docCart:
+ tipo = "DocCart";
+ report = reportRichiesto.cartLabel;
+ break;
+ case tipoDocumento.docPart:
+ tipo = "DocPart";
+ report = reportRichiesto.partLabel;
+ break;
+ case tipoDocumento.docStack:
+ tipo = "DocStack";
+ report = reportRichiesto.stackLabel;
+ break;
+ default:
+ break;
+ }
+ // carico di dati con lettura da web.config parametrica
+ if (string.IsNullOrEmpty(printerName))
+ {
+ printerName = memLayer.ML.cdv(string.Format("printer{0}", tipo));
+ }
+ outForm = "EMF";
+ pagWidth = memLayer.ML.cdv(string.Format("PageWidth{0}", tipo));
+ pagHeigth = memLayer.ML.cdv(string.Format("PageHeight{0}", tipo));
+ margin = memLayer.ML.cdv(string.Format("Margin{0}", tipo));
+ // compongo parametri stampa
+ devInfoParam deviceInfo = new devInfoParam(outForm, pagHeigth, pagWidth, margin, margin, margin, margin);
+ answ = printAndLog(keyParam, printerName, answ, report, deviceInfo);
+ if (answ)
+ {
+ // registro stampato in tabella queue...
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ dtProx.taPJQ.updateStato(idxPrintJob, 1);
+ }
+ else
+ {
+ DataLayer.man.taPJQ.updateStato(idxPrintJob, 1);
+ }
+ }
+ else
+ {
+ // registro annullato in tab queue...
+ if (memLayer.ML.CRB("disable_singleton"))
+ {
+ dtProx.taPJQ.updateStato(idxPrintJob, -1);
+ }
+ else
+ {
+ DataLayer.man.taPJQ.updateStato(idxPrintJob, -1);
+ }
+
+ }
+ }
+ return answ;
+ }
+ ///
+ /// effettua la vera e propria fase di stampa
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private bool printAndLog(string keyParam, string printerName, bool answ, reportRichiesto report, devInfoParam deviceInfo)
+ {
+ try
+ {
+ if (logLevel > 5) logger.lg.scriviLog(String.Format("Sto per inviare un report alla stampante {0}", printerName), tipoLog.INFO);
+ reportPrinter.obj.printReport(report, printerName, keyParam, deviceInfo);
+ if (logLevel > 5) logger.lg.scriviLog(String.Format("inviato comando print alla stampante {0}", printerName), tipoLog.INFO);
+ answ = true;
+ }
+ catch (Exception e)
+ {
+ logger.lg.scriviLog(String.Format("Errore in fase di creazione e stampa report: stampante {0}, errore riscontrato {1}", printerName, e), tipoLog.EXCEPTION);
+ }
+ return answ;
+ }
+ ///
+ /// oggetto protected
+ ///
+ ///
+ protected reportPrinter()
+ {
+ logLevel = memLayer.ML.CRI("_logLevel");
+ doPdfCopy = memLayer.ML.CRB("doPdfCopy");
+ }
+ ///
+ /// singleton pubblico
+ ///
+ public static reportPrinter obj = new reportPrinter();
+ ///
+ /// effettua pulizia della cartella temp x i files più vecchi di X ore (web.config)
+ ///
+ public void pulisciDir()
+ {
+ // num max ore di età x files "vecchi" da tenere in temp area...
+ int maxOre = memLayer.ML.CRI("maxAgeTempAreaHours");
+ int eliminati = 0;
+ // ottengo elenco files *.emf
+ fileMover.obj.setDirectory(@"~\temp\");
+ FileInfo[] _fis = fileMover.obj.elencoFiles_FI("*.emf");
+ bool fatto = false;
+ foreach (FileInfo _file in _fis)
+ {
+ if (_file.CreationTime < DateTime.Now.AddHours(-maxOre)) // elimino files vecchi...
+ {
+ fatto = fileMover.obj.eliminaFile(_file);
+ if (fatto)
+ {
+ logger.lg.scriviLog(String.Format("Eliminato file {0}", _file.Name), tipoLog.INFO);
+ eliminati++;
+ }
+ }
+ }
+ // salvo il log degli update
+ if (eliminati > 0)
+ {
+ logger.lg.scriviLog(String.Format("Eliminati {0} files temporanei da area temp", eliminati), tipoLog.INFO);
+ }
+ }
+
+ #endregion
+ }
}
diff --git a/NKC_WF/WebUserControls/cmp_barcode.ascx.cs b/NKC_WF/WebUserControls/cmp_barcode.ascx.cs
index 7059774..14b8812 100644
--- a/NKC_WF/WebUserControls/cmp_barcode.ascx.cs
+++ b/NKC_WF/WebUserControls/cmp_barcode.ascx.cs
@@ -12,10 +12,10 @@ namespace NKC_WF.WebUserControls
resetInput();
resetMessage();
}
- //else if (string.IsNullOrEmpty(inputAcquired))
- //{
- // checkRaiseEv();
- //}
+ else if (string.IsNullOrEmpty(inputAcquired))
+ {
+ checkRaiseEv();
+ }
}
///
/// evento modifica testo