Пример #1
0
        /// <summary>
        /// Create the Job Ticket for the Batch / Run
        /// </summary>
        /// <param name="batch">Batch number for process</param>
        /// <param name="run">Run number for process</param>
        public static void CreateJobTicket(string batch, string run)
        {
            totalruntime = new Stopwatch();
            totalruntime.Start();
            totalOutputFileCount = 0;
            ErrorMessages        = new List <string>();
            int mailScheduleID;

            // Init AppStats info
            stats = new AppStats(DbAccess.GetConnectionString(), "AppStats");
            if (string.IsNullOrEmpty(refID))
            {
                refID = string.Format("{0:yyyyMMddHHmmssff}", DateTime.Now);
            }
            recordID = 0;
            appName  = System.IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath);

            // Record Statistics in AppStats Table
            stats.SetDefaults = true;
            stats.SetField("RefID", refID);
            stats.SetField("AppName", (string.IsNullOrEmpty(appName) ? "ReportsApplication1" : appName));
            stats.SetField("AppSection", "CreateJobTicket");
            stats.SetField("Batch", batch);
            stats.SetField("Run", run);
            stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
            int?ret = stats.InsertRecord();

            if (ret == null)
            {
                string s = string.Format("Error Inserting AppStats record: {0}", stats.Message);
                Log.Error(s);
                TotalErrorCount++;
                ErrorMessages.Add(s);
            }
            else
            {
                recordID = (int)ret;
            }

            // If already canceled
            if ((WT != null) && (WT.CancellationPending))
            {
                Log.Error("CreateJobTicket already canceled");
                TotalErrorCount++;
                stats.SetField("Status", (TotalErrorCount == 0) ? "OK" : "ERRORS");
                stats.SetField("ErrorCount", TotalErrorCount);
                stats.SetField("ErrorMessages", "CreateJobTicket already canceled");
                stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
                if (!stats.UpdateRecord())
                {
                    Log.Error(string.Format("Error Updating AppStats record: {0}", stats.Message));
                }
                return;
            }

            Log.Info(string.Format("CreateJobTicket for Batch {0}, Run {1}", batch, run));

            string strPDFName = "PODFO-" + batch + run;
            var    log        = new clsLog();

            log.mstrLogFileLocation = batch + run + ".txt";

            // Build document folder name for job ticket template
            string strRootFolder = string.Empty;

            strRootFolder  = System.IO.Directory.GetCurrentDirectory().ToLower();
            strRootFolder += "\\documents\\";
            log.WriteToLogfile("Job ticket template location = " + strRootFolder);

            string                   strJob = "PODFO";
            int                      intRun = Convert.ToInt16(run);
            SqlConnection            conn   = DbAccess.GetConnection();
            StreamReader             srReader;
            string                   strFile;
            StreamWriter             swWriter;
            string                   strJobTicketName = "";
            FileInfo                 fileinfo         = new FileInfo(strPDFName);
            Dictionary <string, int> itemCodeDic      = new Dictionary <string, int>();
            string                   itemCode         = string.Empty;
            int                      packets          = 0;
            int                      images           = 0;

            try
            {
                //Get record count and image count
                var DA = new clsGetBatchSort();


                //update this query
                SqlDataAdapter adapter = new SqlDataAdapter(DA.dsBatch_Sort(batch, run));
                DataSet        ds      = new DataSet();
                adapter.Fill(ds);
                packets = ds.Tables[0].Rows.Count;

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    images += Convert.ToInt32(dr["PageCount"]);
                }

                // Get Must Mail Date
                SqlDataAdapter adapter2 = new SqlDataAdapter(DA.dsGet_MailDate(batch, run));
                DataSet        ds2      = new DataSet();
                adapter2.Fill(ds2);
                DateTime dtMustMailDate = Convert.ToDateTime(ds2.Tables[0].Rows[0][0].ToString());
                string   Postage        = string.Empty;
                if (intRun == 1)
                {
                    Postage = ds2.Tables[0].Rows[0]["Postage"].ToString();
                }

                //open the job ticket template, read in the entire file, close the template
                srReader = File.OpenText(strRootFolder + "PODFOJOBTICKET.rtf");
                strFile  = srReader.ReadToEnd();
                srReader.Close();


                strJobTicketName = strOutputFolder + fileinfo.Name + ".rtf";

                swWriter = File.CreateText(strJobTicketName);

                //replace the variable data in the job ticket

                if (intRun == 1)
                {
                    strFile = strFile.Replace("$RANGE$", "1 to 5");
                    if (packets >= 200)
                    {
                        itemCode = Conf.GetString("10_Envelope_IND", "1102000");
                        strFile  = strFile.Replace("NVLP", string.Concat("#10 PODFO Window Envelope IND ", itemCode));
                        strFile  = strFile.Replace("$ENVELOPE2$", "#10 PODFO Window Envelope IND");
                    }
                    else
                    {
                        itemCode = Conf.GetString("10_Envelope_ND", "1103000");
                        strFile  = strFile.Replace("NVLP", string.Concat("#10 PODFO Window Envelope NI", itemCode));
                        strFile  = strFile.Replace("$ENVELOPE2$", "#10 PODFO Window Envelope NI");
                    }
                }
                else if (intRun == 2)
                {
                    strFile = strFile.Replace("$RANGE$", "6 to 75");
                    if (packets >= 200)
                    {
                        itemCode = Conf.GetString("9x12_Envelope_IND", "1191000");
                        strFile  = strFile.Replace("NVLP", string.Concat("PODFO #9 X 12 Window IND", itemCode));
                        strFile  = strFile.Replace("$ENVELOPE2$", "PODFO #9 X 12 Window IND");
                    }
                    else
                    {
                        itemCode = Conf.GetString("9x12_Envelope_ND", "1193000");
                        strFile  = strFile.Replace("NVLP", string.Concat("PODFO #9 X 12 Window NI", itemCode));
                        strFile  = strFile.Replace("$ENVELOPE2$", "PODFO #9 X 12 Window NI");
                    }
                }

                itemCodeDic.Add(itemCode, packets);
                itemCodeDic.Add(Conf.GetString("PaperItemCode", "2085011"), images / 2);
                mailScheduleID = InsertIntoPrintMailScan(strJob + batch.ToString() + "-R0" + intRun.ToString(), packets, batch, run, dtMustMailDate, Postage);
                strFile        = strFile.Replace("NPACKS", packets.ToString());
                strFile        = strFile.Replace("$PACKETS$", packets.ToString());
                strFile        = strFile.Replace("$IMAGECOUNT$", images.ToString());
                strFile        = strFile.Replace("PKTS", packets.ToString());

                //add up records for other thing

                strFile = strFile.Replace("$RUN$", "0" + intRun.ToString());
                strFile = strFile.Replace("$BATCH$", batch);
                strFile = strFile.Replace("$FULLJOBTYPE$", strJob + " POD LETTERS");
                strFile = strFile.Replace("$MAILDATE$", dtMustMailDate.ToString("MM/dd/yyyy"));
                strFile = strFile.Replace("$PDFNAME$", strPDFName + ".pdf");
                strFile = strFile.Replace("StockBarcode", itemCode);
                // Write Job Ticket File
                swWriter.WriteLine(strFile);
                swWriter.Flush();
                swWriter.Close();
                totalOutputFileCount++;



                ConvertJobTicketToPdf(strJobTicketName, string.Concat(strJob, batch.ToString(), "-R0" + intRun.ToString(), "-", packets.ToString(), ";", mailScheduleID), itemCode);
                foreach (string itemKey in itemCodeDic.Keys)
                {
                    InsertItemUsageIntoSage_Inventory(strJob, itemCodeDic[itemKey], batch, run, itemKey);
                }
            }
            catch (Exception ex)
            {
                string s = string.Format("Error in Batch: {0}, Run: {1} for clsJobTicket: {2}", batch, run, ex.Message);
                clsEmail.EmailMessage(string.Format("Error from PODFO Batch {0} run {1} {2}",
                                                    batch, run, (UseTestDB) ? " TESTING" : ""), s);
                Log.Error(s);
                ErrorMessages.Add(s);
                TotalErrorCount++;

                // Format and log inner exception if any
                string inner = string.Empty;
                if (ex.InnerException != null)
                {
                    inner = string.Format("InnerEx.Message: {0}", ex.InnerException.Message);
                    Log.Error(inner);
                }
            }
            finally
            {
                totalruntime.Stop();

                string s = string.Format("clsJobTicket: {0} Job Tickets, for {1} records, and {2} pages, RunTime: {3} ",
                                         totalOutputFileCount, packets, images, totalruntime.Elapsed.ToString(@"hh\:mm\:ss\.f"));
                Log.Info(s);


                // Limit Error messages string for DB
                string errorMessages = string.Empty;
                if (ErrorMessages.Count > 0)
                {
                    errorMessages = ErrorMessages.Aggregate((a, b) => a + ", " + b);
                    if (errorMessages.Length > 1023)
                    {
                        errorMessages = errorMessages.Substring(0, 1023);
                    }
                }

                // Record Statistics in AppStats Table
                Process procObj = Process.GetCurrentProcess();
                stats.SetField("Status", (TotalErrorCount == 0) ? "OK" : "ERRORS");
                stats.SetField("ErrorCount", TotalErrorCount);
                stats.SetField("ErrorMessages", errorMessages);
                stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
                stats.SetField("AppNotes", s);
                stats.SetField("MaxMemUsedMB", (int)(procObj.PeakVirtualMemorySize64 / 1048576L));
                stats.SetField("ExpectedCountOut", 1);
                stats.SetField("InputCount1", packets);
                stats.SetField("InputCount2", images);
                stats.SetField("OutputCount1", totalOutputFileCount);
                //stats.SetField("OutputCount2", PDFOuptutFileCount);
                //stats.SetField("InputTimeSecs1", loadtime.Elapsed.TotalSeconds);
                stats.SetField("ProcessTimeSecs1", totalruntime.Elapsed.TotalSeconds);
                //stats.SetField("OutputTimeSecs1", PDFtime.Elapsed.TotalSeconds);
                stats.SetField("TotalRunTimeSecs", totalruntime.Elapsed.TotalSeconds);
                //stats.SetField("AppCount3", mailDatFileCount);
                bool rcstats = stats.UpdateRecord();
                if (!rcstats)
                {
                    Log.Error(string.Format("Error Updating AppStats record: {0}", stats.Message));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Merge the individual PDFs
        /// </summary>
        /// <param name="batch">Batch number for this process</param>
        /// <param name="run">Run number for this process</param>
        public static void MergePDFs(string batch, string run)
        {
            int intcount    = 0;
            int intEnd      = 0;
            int intStart    = 1;
            int introwcount = 0;
            int RecsDone    = 0;
            //DateTime lastRPMTime = new DateTime();
            int RPMCount            = 0;
            int filesCountThisMerge = 0;

            int intDBpagecount  = 0;
            int intPDFpagecount = 0;

            totalruntime = new Stopwatch();
            totalruntime.Start();
            int fileNotFoundCount = 0;
            int RecordsOuput      = 0;

            loadtime      = new Stopwatch();
            mergetime     = new Stopwatch();
            PDFtime       = new Stopwatch();
            ErrorMessages = new List <string>();


            // Init AppStats info
            stats = new AppStats(DbAccess.GetConnectionString(), "AppStats");
            if (string.IsNullOrEmpty(refID))
            {
                refID = string.Format("{0:yyyyMMddHHmmssff}", DateTime.Now);
            }
            recordID = 0;
            appName  = System.IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath);


            // Record Statistics in AppStats Table
            stats.SetDefaults = true;
            stats.SetField("RefID", refID);
            stats.SetField("AppName", (string.IsNullOrEmpty(appName) ? "ReportsApplication1" : appName));
            stats.SetField("AppSection", "MergePDFs");
            stats.SetField("Batch", batch);
            stats.SetField("Run", run);
            stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
            stats.SetField("AppCount3", FilesPerMerge);
            int?ret = stats.InsertRecord();

            if (ret == null)
            {
                string s = string.Format("Error Inserting AppStats record: {0}", stats.Message);
                Log.Error(s);
                TotalErrorCount++;
                ErrorMessages.Add(s);
            }
            else
            {
                recordID = (int)ret;
            }



            if ((WT != null) && (WT.CancellationPending))
            {
                Log.Error("MergePDFs already canceled");
                TotalErrorCount++;
                stats.SetField("Status", (TotalErrorCount == 0) ? "OK" : "ERRORS");
                stats.SetField("ErrorCount", TotalErrorCount);
                stats.SetField("ErrorMessages", "RunAutomated already canceled");
                stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
                if (!stats.UpdateRecord())
                {
                    Log.Error(string.Format("Error Updating AppStats record: {0}", stats.Message));
                }
                return;
            }

            if (WT != null)
            {
                WT.ReportProgress(-2, String.Format("Merge PDFs"));
                WT.ReportProgress(-3, string.Format("R/M: {0:#.##}", 0.0));
            }


            try
            {
                Log.Info(string.Format("MergePDFs starting for Batch: {0}, Run: {1}, FilesPerMerge: {2}",
                                       batch, run, FilesPerMerge));

                var log = new clsLog();
                log.mstrLogFileLocation = batch + run + ".txt";

                loadtime.Start();
                var            DA      = new clsGetBatchSort();
                SqlDataAdapter adapter = new SqlDataAdapter(DA.dsBatch_Sort(batch, run));
                DataSet        ds      = new DataSet();
                adapter.Fill(ds);

                introwcount = ds.Tables[0].Rows.Count;
                loadtime.Stop();


                //int LetterTypeID = 0;
                if (WT != null)
                {
                    WT.ReportProgress(0, string.Format("Collecting page count"));
                }

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    intDBpagecount += Convert.ToInt32(dr["PageCount"]);
                }


                ceTe.DynamicPDF.Document.AddLicense(ceTeLicense);
                //Dim intRecordCount As Integer = 1
                //Dim rootValue As String
                string mergePath = strMergeFilePath + "\\" + batch + run;

                if (!Directory.Exists(mergePath))
                {
                    DirectoryInfo di = Directory.CreateDirectory(mergePath);
                }



                string[] fileEntries = Directory.GetFiles(strFilePath + "\\" + batch + run);
                string   fmt         = "00000000";
                //string filename = Path.Combine("C:\\PDF\\", "report" + PreSortID.ToString(fmt) + ".pdf");
                //string filename = Path.Combine(mstrFilePath + "\\" + batch + run + "\\" + PreSortID.ToString(fmt) + ".pdf");
                string filename;

                ceTe.DynamicPDF.Merger.MergeDocument myTempDoc = new ceTe.DynamicPDF.Merger.MergeDocument();
                string missingfiles = "";

                mergetime.Start();
                if (introwcount != 0)                      //make sure files where imported
                {
                    if (fileEntries.Length == introwcount) //make sure file count matches pdf count
                    {
                        for (int i = 1; i < fileEntries.Length + 1; i++)
                        {
                            filename = strFilePath + "\\" + batch + run + "\\" + i.ToString(fmt) + ".PDF";

                            if (fileEntries[i - 1].ToString().Equals(filename))
                            {
                                intcount += 1;
                                intEnd   += 1;

                                // Merge file
                                myTempDoc.Append(filename);
                                filesCountThisMerge++;

                                //shut pdf every "n" files to avoid errors
                                //if ((myTempDoc.Pages.Count >= PagesPerMerge))
                                if (filesCountThisMerge >= FilesPerMerge)
                                {
                                    PDFtime.Start();
                                    log.WriteToLogfile("about to combine myTempDoc " + myTempDoc.Pages.Count + " Pages");
                                    myTempDoc.CompressionLevel = 0;
                                    myTempDoc.PdfVersion       = ceTe.DynamicPDF.PdfVersion.v1_3;
                                    intPDFpagecount           += myTempDoc.Pages.Count;
                                    //creates pdf
                                    log.WriteToLogfile("myTempDoc.Draw(" + mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf)");
                                    myTempDoc.Draw(mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf");
                                    myTempDoc = null;
                                    GC.Collect();
                                    intStart  = intEnd + 1;
                                    intcount  = 0;
                                    myTempDoc = new ceTe.DynamicPDF.Merger.MergeDocument();

                                    log.WriteToLogfile("Finished Drawing");
                                    Log.Info("myTempDoc.Draw(" + mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf)");
                                    RecordsOuput++;
                                    PDFtime.Stop();
                                    filesCountThisMerge = 0;
                                }
                            }
                            else
                            {
                                missingfiles = missingfiles + ", " + i;
                                log.WriteToLogfile("missing file: " + i.ToString());
                                // MessageBox.Show("missing file: " + i.ToString());
                                fileNotFoundCount++;
                            }

                            RecsDone++;
                            RPMCount++;

                            // Report Background worker thread status
                            if (WT != null)
                            {
                                // Check if cancel pending, set canceled flag
                                if (WT.CancellationPending)
                                {
                                    BGWCanceled = true;
                                    break;
                                }

                                // Report Progress % and count of recs processed
                                int pcrecsdone = (RecsDone * 100) / (introwcount);
                                if (intcount % 20 == 0)
                                {
                                    WT.ReportProgress(pcrecsdone, string.Format("Recs Done {0} of {1}", RecsDone, introwcount));

                                    // Report records per minute
                                    //var rpm = RPMCount / (DateTime.Now - lastRPMTime).TotalMinutes;
                                    //BGW.ReportProgress(-3, string.Format("R/M: {0:#.##}", rpm));
                                    //lastRPMTime = DateTime.Now;
                                    //RPMCount = 0;
                                }
                            }
                        }

                        // If merge in progress, write out last merge file
                        //if ((myTempDoc.Pages.Count != PagesPerMerge))
                        if (filesCountThisMerge != FilesPerMerge)
                        {
                            PDFtime.Start();
                            log.WriteToLogfile("about to combine myTempDoc " + myTempDoc.Pages.Count + " Pages");
                            log.WriteToLogfile("myTempDoc.Draw(" + mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf)");
                            myTempDoc.CompressionLevel = 0;
                            myTempDoc.PdfVersion       = ceTe.DynamicPDF.PdfVersion.v1_3;
                            intPDFpagecount           += myTempDoc.Pages.Count;
                            //creates pdf
                            myTempDoc.Draw(mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf");
                            myTempDoc = null;
                            GC.Collect();
                            log.WriteToLogfile("Finished Drawing");
                            Log.Info("myTempDoc.Draw(" + mergePath + "\\PODFO " + batch + run + " " + intStart + "-" + intEnd + ".Pdf)");
                            RecordsOuput++;
                            PDFtime.Stop();
                            filesCountThisMerge = 0;
                        }

                        if (WT != null)
                        {
                            WT.ReportProgress(100, string.Format("Recs Done {0} of {1}", intEnd, introwcount));
                        }
                    }
                    else
                    {
                        //email
                        string s = string.Format("clsMerge.MergePDFs: Missing file fileEntries.Length = {0} and introwcount = {1}",
                                                 fileEntries.Length, introwcount);
                        Log.Info(s);
                        log.WriteToLogfile("Missing file fileEntries.Length = " + fileEntries.Length + " and introwcount = " + introwcount);
                        // MessageBox.Show("Missing file fileEntries.Length = " + fileEntries.Length + " and introwcount = " + introwcount);

                        if (WT != null)
                        {
                            WT.ReportProgress(100, string.Format("Record counts don't match: Files: {0},  DB Rows: {1}",
                                                                 fileEntries.Length, introwcount));
                        }
                    }
                }
                else
                {
                    Log.Info("MergePDFs: No files to process");
                }
            }
            catch (Exception ex)
            {
                TotalErrorCount++;
                var log = new clsLog();
                log.mstrLogFileLocation = batch + run + ".txt";
                log.WriteToLogfile("clsMerge.MergePDFs " + ex.Message + " Stack trace " + ex.StackTrace + " Inner ex " + ex.InnerException);
                clsEmail.EmailMessage(string.Format("PODFO error {0}", (UseTestDB) ? " TESTING" : ""),
                                      "Error merging pdfs. Message: " + ex.Message + " The pdf count was " + intEnd);
                //  MessageBox.Show("Error merging pdfs. Message: " + ex.Message + " The pdf count was " + intEnd);

                string s = string.Format("clsMerge.MergePDFs Exception: {0}", ex.Message);
                Log.Error(s);
                ErrorMessages.Add(s);
                s = string.Format("clsMerge.MergePDFs Exception Inner: {0}", ex.InnerException);
                Log.Error(s);
                s = string.Format("clsMerge.MergePDFs Exception Stack: {0}", ex.StackTrace);
                Log.Error(s);
            }
            finally
            {
                totalruntime.Stop();
                mergetime.Stop();
                string s = string.Format("clsMerge.MergePDFs: Rowount: {0}, DBPageCount: {1}, Time: {2}",
                                         introwcount, intDBpagecount, totalruntime.Elapsed.ToString(@"hh\:mm\:ss\.f"));
                Log.Info(s);

                // Limit Error messages string for DB
                string errorMessages = string.Empty;
                if (ErrorMessages.Count > 0)
                {
                    errorMessages = ErrorMessages.Aggregate((a, b) => a + ", " + b);
                    if (errorMessages.Length > 1023)
                    {
                        errorMessages = errorMessages.Substring(0, 1023);
                    }
                }

                // Record Statistics in AppStats Table
                Process procObj = Process.GetCurrentProcess();
                stats.SetField("Status", (TotalErrorCount == 0) ? "OK" : "ERRORS");
                stats.SetField("ErrorCount", TotalErrorCount);
                stats.SetField("ErrorMessages", errorMessages);
                stats.SetField("TestProd", (UseTestDB) ? "TEST" : "PROD");
                stats.SetField("AppNotes", s);
                stats.SetField("MaxMemUsedMB", (int)(procObj.PeakVirtualMemorySize64 / 1048576L));
                //stats.SetField("ExpectedCountOut", RecordsCount);
                stats.SetField("InputCount1", RecsDone);
                stats.SetField("OutputCount1", RecordsOuput);
                stats.SetField("OutputCount2", intDBpagecount);
                stats.SetField("InputTimeSecs1", loadtime.Elapsed.TotalSeconds);
                stats.SetField("ProcessTimeSecs1", mergetime.Elapsed.TotalSeconds);
                stats.SetField("OutputTimeSecs1", PDFtime.Elapsed.TotalSeconds);
                stats.SetField("TotalRunTimeSecs", totalruntime.Elapsed.TotalSeconds);
                stats.SetField("AppCount2", fileNotFoundCount);
                bool rcstats = stats.UpdateRecord();
                if (!rcstats)
                {
                    Log.Error(string.Format("Error Updating AppStats record: {0}", stats.Message));
                }
            }
        }