public static bool WPArchivePDFsToColumbus(string folderInput, string folderOutput, string reportDir, string columbusFilePrefix, List <ColumbusIndex> documentsToMerge, List <ColumbusIndex> lstHodingIdx)
        {
            try
            {
                if (!WriteConfirmationFile(lstHodingIdx, reportDir))
                {
                    return(false);
                }

                Log.Info(string.Format("{0} welcome packs are ready to merge.", documentsToMerge.Count()));
                int fileNo = 1;
                while (documentsToMerge.Count != 0)
                {
                    var mergePdfName = Path.Combine(folderOutput, string.Format("{0}_{1}.pdf", columbusFilePrefix, fileNo));
                    if (!MergePdfs(folderInput, mergePdfName, ref documentsToMerge))
                    {
                        return(false);
                    }
                    fileNo++;
                }
                Log.Info(string.Format("{0} merged pdfs are ready to archive ", fileNo));

                //Run Columbus Task
                var lstXml = FileProcessHelper.GetFiles(folderOutput, "*.xml");
                var lstPdf = FileProcessHelper.GetFiles(folderOutput, "*.pdf");
                if (!RunColumbus(lstXml, lstPdf))
                {
                    return(false);
                }
                Log.Info("Archive to Columbus Sucessful");

                //Use Confimation report to Update Recon_TackingNumber table and send email back to SE
                //Delete archived Pdfs


                return(true);
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Failed to merge files in {0} to {1}. ex: {3}", folderInput, folderOutput, ex.Message));
                return(false);
            }
        }
        public static void ZipFolder(string sourceDir, string destDir, string zipFileName, bool addDateStamp, bool deleteAfterZip)
        {
            try
            {
                var zipfile = addDateStamp? Path.Combine(destDir, string.Format("{0}_{1}.zip", zipFileName, DateTime.Today.ToString("yyyyMMdd"))): Path.Combine(destDir, zipFileName + ".zip");

                using (var zip = new Ionic.Zip.ZipFile())
                {
                    zip.UseZip64WhenSaving = Ionic.Zip.Zip64Option.AsNecessary;
                    zip.AddDirectory(sourceDir);
                    zip.Save(zipfile);
                }
                if (deleteAfterZip)
                {
                    FileProcessHelper.DeleteFiles(sourceDir, "*");
                }
            }
            catch (Exception ex)
            {
                Log.Fatal(string.Format("Fail to zip folder {0}. ex:{1}", sourceDir, ex.ToString()));
            }
        }
        public static bool ArchivePDFsToColumbus(string folderInput, string folderOutput, string columbusFilePrefix, List <ColumbusIndex> documentsToMerge)
        {
            try
            {
                //Merge Pdfs and create xml control files
                Log.Info(string.Format("{0} pdfs are ready to merge ", documentsToMerge.Count()));
                int fileNo = 1;
                while (documentsToMerge.Count != 0)
                {
                    var mergePdfName = Path.Combine(folderOutput, string.Format("{0}_{1}.pdf", columbusFilePrefix, fileNo));
                    if (!MergePdfs(folderInput, mergePdfName, ref documentsToMerge))
                    {
                        return(false);
                    }
                    fileNo++;
                }


                //Run Columbus Task
                Log.Info("Merged pdfs and control files are ready to archive");
                var lstXml = FileProcessHelper.GetFiles(folderOutput, "*.xml");
                var lstPdf = FileProcessHelper.GetFiles(folderOutput, "*.pdf");
                if (!RunColumbus(lstXml, lstPdf))
                {
                    return(false);
                }
                Log.Info("Archive to Columbus Successfully");


                return(true);
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Failed to merge files in {0} to {1}. ex: {3}", folderInput, folderOutput, ex.Message));
                return(false);
            }
        }
        public static void CheckDirectoryEmpty(string path)
        {
            bool isSuccess = false;

            try
            {
                int counter1 = FileProcessHelper.GetFolders(path, null).Count();
                int counter2 = FileProcessHelper.GetFiles(path, "*").Count();
                if (counter1 == 0 && counter2 == 0)
                {
                    isSuccess = true;
                }
            }
            catch (Exception ex)
            {
                Log.Error(String.Format("Error in method - {0} Ex: {1}", MethodBase.GetCurrentMethod().Name, ex.Message));
                isSuccess = false;
            }

            if (!isSuccess)
            {
                throw new ProcessingException(string.Format("{0} is not empty", path));
            }
        }
        public static bool WPArchivePDFsToColumbus1(string folderInput, string folderOutput, string reportDir, string columbusFilePrefix, List <ColumbusIndex> lstHodingIdx, List <ColumbusIndex> lstHubnetIdx, ref List <ColumbusIndex> archivedDocs)
        {
            try
            {
                //var idxFiles = FileProcessHelper.GetFiles(folderInput, "*.csv");
                //if (idxFiles.Length != 1)
                //    Log.Fatal("There is no index file or more than 1 index files in " + folderInput);
                //if (idxFiles.Length == 1)
                //{
                //    var indexFile = idxFiles.First();
                //    var csv = new CsvReader(new StringReader(File.ReadAllText(indexFile)));
                //    csv.Configuration.RegisterClassMap<ColumbusHelper.WPColumbusRecordMap>();
                //    csv.Configuration.WillThrowOnMissingField = true;
                //    csv.Configuration.HasHeaderRecord = true;
                //    csv.Configuration.Delimiter = "|";
                //    var records = csv.GetRecords<ColumbusHelper.ColumbusIndex>().ToList();

                ////Enrich pdfs in holding directory
                //var pendingPdfs = FileProcessHelper.GetFiles(folderInput, "*.pdf");
                //var lstHoldingData = new List<WPHoldingData>();

                //foreach (var pdf in pendingPdfs)
                //{
                //    var fileName = new FileInfo(pdf).Name;
                //    var trackingNumber = fileName.Split('_')[1]; //File naming convention: Welcomepack_{Document Number or Tracking number}
                //    var holdingData = new WPHoldingData();
                //    holdingData.fileName = fileName;
                //    holdingData.trackingNumber = trackingNumber;
                //    holdingData.result = "No";
                //    lstHoldingData.Add(holdingData);
                //}


                ////Enrich pdfs in holding directory
                //var pendingPdfs = FileProcessHelper.GetFiles(folderInput, "*.pdf");
                //var lstHoldingData = new List<WPHoldingData>();
                //var documentsToMerge = new List<ColumbusIndex>();
                //foreach (var doc in lstColumbusIdx)
                //{
                //    //var fileName = new FileInfo(pdf).Name;
                //    //var trackingNumber = fileName.Split('_')[1]; //File naming convention: Welcomepack_{Document Number or Tracking number}
                //    var holdingData = new WPHoldingData();
                //    holdingData.fileName = doc.;
                //    holdingData.trackingNumber = trackingNumber;
                //    holdingData.result = "No";
                //    lstHoldingData.Add(holdingData);
                //}

                var documentsToMerge = new List <ColumbusIndex>();
                Parallel.ForEach(lstHodingIdx, (currentDoc) =>
                {
                    foreach (var hubnetData in lstHubnetIdx)
                    {
                        if (hubnetData.DocRefNo == currentDoc.DocRefNo)
                        {
                            currentDoc.IssueDate      = hubnetData.IssueDate;
                            currentDoc.AccountNo      = hubnetData.AccountNo;
                            currentDoc.CustomerNo     = hubnetData.CustomerNo;
                            currentDoc.SalesChannelID = hubnetData.SalesChannelID;
                            currentDoc.FileEnriched   = true;
                            documentsToMerge.Add(currentDoc);
                        }
                    }
                });
                archivedDocs = documentsToMerge;
                if (!WriteConfirmationFile(lstHodingIdx, reportDir))
                {
                    return(false);
                }

                Log.Info(string.Format("{0} welcome packs are ready to merge.", documentsToMerge.Count()));
                int fileNo = 1;
                while (documentsToMerge.Count != 0)
                {
                    var mergePdfName = Path.Combine(folderOutput, string.Format("{0}_{1}.pdf", columbusFilePrefix, fileNo));
                    if (!MergePdfs(folderInput, mergePdfName, ref documentsToMerge))
                    {
                        return(false);
                    }
                    fileNo++;
                }
                Log.Info(string.Format("{0} merged pdfs are ready to archive ", fileNo));

                //Run Columbus Task
                var lstXml = FileProcessHelper.GetFiles(folderOutput, "*.xml");
                var lstPdf = FileProcessHelper.GetFiles(folderOutput, "*.pdf");
                if (!RunColumbus(lstXml, lstPdf))
                {
                    return(false);
                }
                Log.Info("Archive to Columbus Sucessful");

                //Use Confimation report to Update Recon_TackingNumber table and send email back to SE
                //Delete archived Pdfs


                return(true);
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Failed to merge files in {0} to {1}. ex: {3}", folderInput, folderOutput, ex.Message));
                return(false);
            }
        }