using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WebSupergoo.ABCpdf8; namespace AffectedApplicationDocumentScanner { public partial class AppNumberForm : Form { public string IDNumber { get; set; } public AppNumberForm() { InitializeComponent(); } private void appNumbertextBox_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter && !string.IsNullOrEmpty(appNumbertextBox.Text)) { searchingLabel.Visible = true; var appNumber = appNumbertextBox.Text; var svc = new AffectedApplicationService.AffectedApplicationServiceClient(); var applicationResult = svc.GetApplication(appNumber, IDNumber); searchingLabel.Visible = false; if (applicationResult.IsError) { MessageBox.Show("ERROR: " + applicationResult.Error); } else if (!applicationResult.IsFound) { MessageBox.Show("Application number NOT FOUND in the affected application list"); } else if (applicationResult.ScanningComplete) { MessageBox.Show("This application has already been flagged as scanned"); } else { #region Calculate folder var directoryLocation = ConfigurationManager.AppSettings["FileLocation"].ToString(); var baseNumber = applicationResult.ApplicationRequestDetailID; #region 10000 if (baseNumber > 90000) { directoryLocation += @"90000\"; baseNumber -= 90000; } else if (baseNumber > 80000) { directoryLocation += @"80000\"; baseNumber -= 80000; } else if (baseNumber > 70000) { directoryLocation += @"70000\"; baseNumber -= 70000; } else if (baseNumber > 60000) { directoryLocation += @"60000\"; baseNumber -= 60000; } else if (baseNumber > 50000) { directoryLocation += @"50000\"; baseNumber -= 50000; } else if (baseNumber > 40000) { directoryLocation += @"40000\"; baseNumber -= 40000; } else if (baseNumber > 30000) { directoryLocation += @"30000\"; baseNumber -= 30000; } else if (baseNumber > 20000) { directoryLocation += @"20000\"; baseNumber -= 20000; } else if (baseNumber > 10000) { directoryLocation += @"10000\"; baseNumber -= 10000; } else { directoryLocation += @"00000\"; } #endregion #region 1000 if (baseNumber > 9000) { directoryLocation += @"9000\"; baseNumber -= 9000; } else if (baseNumber > 8000) { directoryLocation += @"8000\"; baseNumber -= 8000; } else if (baseNumber > 7000) { directoryLocation += @"7000\"; baseNumber -= 7000; } else if (baseNumber > 6000) { directoryLocation += @"6000\"; baseNumber -= 6000; } else if (baseNumber > 5000) { directoryLocation += @"5000\"; baseNumber -= 5000; } else if (baseNumber > 4000) { directoryLocation += @"4000\"; baseNumber -= 4000; } else if (baseNumber > 3000) { directoryLocation += @"3000\"; baseNumber -= 3000; } else if (baseNumber > 2000) { directoryLocation += @"2000\"; baseNumber -= 2000; } else if (baseNumber > 1000) { directoryLocation += @"1000\"; baseNumber -= 1000; } else { directoryLocation += @"0000\"; } #endregion #region 100 if (baseNumber > 900) { directoryLocation += @"900\"; baseNumber -= 900; } else if (baseNumber > 800) { directoryLocation += @"800\"; baseNumber -= 800; } else if (baseNumber > 700) { directoryLocation += @"700\"; baseNumber -= 700; } else if (baseNumber > 600) { directoryLocation += @"600\"; baseNumber -= 600; } else if (baseNumber > 500) { directoryLocation += @"500\"; baseNumber -= 500; } else if (baseNumber > 400) { directoryLocation += @"400\"; baseNumber -= 400; } else if (baseNumber > 300) { directoryLocation += @"300\"; baseNumber -= 300; } else if (baseNumber > 200) { directoryLocation += @"200\"; baseNumber -= 200; } else if (baseNumber > 100) { directoryLocation += @"100\"; baseNumber -= 100; } else { directoryLocation += @"000\"; } #endregion directoryLocation += applicationResult.ApplicationNumber + @"\"; #endregion if (System.IO.Directory.Exists(directoryLocation)) { var result = MessageBox.Show("The app folder EXISTS ALREADY. All files will be REPLACED.", "Confirm file REPLACE", MessageBoxButtons.OKCancel); if (result != DialogResult.OK) { appNumbertextBox.Text = ""; return; } } else { System.IO.Directory.CreateDirectory(directoryLocation); } XSettings.InstallLicense(ConfigurationManager.AppSettings["WebsupergooPdfKey"]); var documentCount = applicationResult.RequiredDocuments.Length; var currentDocument = 1; var successCount = 0; var cancelledScanning = false; foreach (var requiredFile in applicationResult.RequiredDocuments) { if (cancelledScanning) { break; } var fileName = requiredFile + ".tiff"; string filePath; var scanDocument = new ScanDocumentForm(); scanDocument.Text = applicationResult.ApplicationNumber; scanDocument.documentLabel.Text = "Scanning document " + currentDocument + " of " + documentCount + "\r\n\r\n" + requiredFile; scanDocument.FormClosed += (s, fcargs) => { if (!scanDocument.ClosedFromButton) { #region cancel scanning directoryLocation = directoryLocation.Substring(0, directoryLocation.Length - 1); System.IO.Directory.Delete(directoryLocation, true); appNumbertextBox.Text = ""; cancelledScanning = true; #endregion } }; scanDocument.OnButtonSelected += (s, args) => { switch (args.ButtonSelected) { case "ScanManually": case "ScanFeeder": case "ScanNormal": #region handle scanning var scanForm = new ScanForm(); scanForm.documentScanner1.FileAcquired += (localDirectory, uniqueFileName, fileBytes, callbackData) => { fileName = requiredFile + ".tiff"; byte[] tiffBytes = HexStringToByteArray(fileBytes); byte[] pdfBytes; #region pdf conversion using (var doc = new WebSupergoo.ABCpdf8.Doc()) { var theImg = new WebSupergoo.ABCpdf8.XImage(); theImg.SetData(tiffBytes); for (int i = 1; i <= theImg.FrameCount; i++) { theImg.Frame = i; doc.Page = doc.AddPage(); doc.AddImageObject(theImg, false); } theImg.Clear(); pdfBytes = doc.GetData(); fileName = fileName.ToLower().Replace("tiff", "pdf"); doc.Clear(); doc.Dispose(); } #endregion filePath = directoryLocation + fileName; if (fileName.Contains("pdf")) { System.IO.File.WriteAllBytes(filePath, pdfBytes); } else { System.IO.File.WriteAllBytes(filePath, tiffBytes); } scanForm.Close(); successCount++; }; scanForm.documentScanner1.ScanDocument(requiredFile); if (args.ButtonSelected == "ScanNormal") { scanForm.documentScanner1.picboxScan.Enabled = true; scanForm.documentScanner1.picboxScan_Click(null, null); } else if (args.ButtonSelected == "ScanFeeder") { scanForm.documentScanner1.chkADF.Checked = true; scanForm.documentScanner1.picboxScan.Enabled = true; scanForm.documentScanner1.picboxScan_Click(null, null); } scanForm.ShowDialog(); #endregion break; case "FlagAsNoDocumentFound": #region Write Not found file to drive fileName = requiredFile + ".NOTFOUND.txt"; filePath = directoryLocation + fileName; byte[] notFoundBytes = Encoding.ASCII.GetBytes("File not found"); System.IO.File.WriteAllBytes(filePath, notFoundBytes); successCount++; #endregion break; case "CancelScanning": default: #region cancel scanning directoryLocation = directoryLocation.Substring(0, directoryLocation.Length - 1); System.IO.Directory.Delete(directoryLocation, true); appNumbertextBox.Text = ""; cancelledScanning = true; #endregion break; } }; scanDocument.ShowDialog(); currentDocument++; } if (successCount == documentCount) { svc.FlagScanningComplete(applicationResult.ApplicationRequestDetailID, IDNumber); MessageBox.Show(this, "Scanning done for " + applicationResult.ApplicationNumber + ".", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); appNumbertextBox.Text = ""; } else { MessageBox.Show(this, "Not all documents have been scanned. Please RESCAN.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } public static byte[] HexStringToByteArray(string s) { byte[] buffer = new byte[s.Length / 2]; for (int i = 0; i < buffer.Length; i++) { buffer[i] = (byte)Int32.Parse(s.Substring(2 * i, 2), System.Globalization.NumberStyles.HexNumber); } return buffer; } } }