private static void ProcessOrders(DataTable data) { bool cancelBuilding = false; StyleConfigData config = configs[ReportType.Cut]; ActiveOrderWindow activeOrderWindow = new ActiveOrderWindow(); List <string> currentNames = new List <string>(); List <OrderData> ordersToLog = new List <OrderData>(); mainWindow.Hide(); Messenger.Show(data.Rows.Count + " entries found"); //NOTE(adam): convert rows to data entries before loop to allow lookahead List <OrderData> orders = new List <OrderData>(); foreach (DataRow row in data.Rows) { orders.Add(new OrderData(row)); } for (int i = 0; i != orders.Count; ++i) { OrderData order = orders[i]; string trimmedCode = config.TryTrimStyleCode(order.itemCode); //NOTE(adam): if not in config, continue; else, store the trimmed code if (trimmedCode.Length == 0) { order.comment += "Not in config"; ordersToLog.Add(order); continue; } else { order.itemCode = trimmedCode; } string orderPath = config.filePaths.ConstructNetworkOrderFilePath(order); string newMadePath = config.filePaths.ConstructSaveFilePath(order); if (config.IsIgnoredStyle(order)) { order.comment += "Ignored style"; ordersToLog.Add(order); continue; } //NOTE(adam): if built, continue if (File.Exists(orderPath) || File.Exists(newMadePath)) { order.comment += "Already made"; ordersToLog.Add(order); continue; } if (cancelBuilding) { order.comment += "Cancelled building"; ordersToLog.Add(order); continue; } //NOTE(adam): build point String templatePath = config.filePaths.ConstructTemplateFilePath(order); if (!File.Exists(templatePath)) { ErrorHandler.HandleError(ErrorType.Alert, "Template not found:\n" + templatePath); order.comment += "Template not found"; ordersToLog.Add(order); } else { currentNames.Add(order.name); if (config.IsNameStyle(order.itemCode)) { //NOTE(adam): if following is name style and same order/voucher, skip processing current list if ((i + 1 != orders.Count) && (config.TryTrimStyleCode(orders[i + 1].itemCode).Length > 0) && (config.IsNameStyle(orders[i + 1].itemCode)) && (order.orderNumber == orders[i + 1].orderNumber) && (order.voucherNumber == orders[i + 1].voucherNumber)) { order.comment += "Name style"; ordersToLog.Add(order); continue; } } order.nameList = currentNames; BuildOrder(templatePath, order); activeOrderWindow.SetInfoDisplay(order); activeOrderWindow.ShowDialog(); if (activeOrderWindow.selection == WindowSelection.NEXT) { if (corel.Documents.Count > 0 && corel.ActiveDocument.Dirty) { ShapeRange shapes = corel.ActiveDocument.ActivePage.FindShapes(null, cdrShapeType.cdrTextShape); shapes.ConvertToCurves(); if (config.IsNameStyle(order.itemCode)) { string namesDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Name Styles\" + order.cutHouse + "\\"; Directory.CreateDirectory(namesDir); corel.ActiveDocument.SaveAs(namesDir + order.orderNumber + order.voucherNumber.ToString("D3") + ".cdr"); } else { Directory.CreateDirectory(config.filePaths.ConstructSaveFolderPath(order)); corel.ActiveDocument.SaveAs(newMadePath); if (config.GetExportType(order.itemCode) != ExportType.None) { ExportOrder(order, config); } } } order.comment += "Completed"; ordersToLog.Add(order); } else if (activeOrderWindow.selection == WindowSelection.REJECT) { order.comment += "Manually rejected"; ordersToLog.Add(order); } else if (activeOrderWindow.selection == WindowSelection.CANCEL) { cancelBuilding = true; order.comment += "Cancelled building"; ordersToLog.Add(order); } while (corel.Documents.Count > 0) { corel.ActiveDocument.Close(); } System.Threading.Thread.Sleep(50); //NOTE(adamf): delay prevents error on closing templates currentNames.Clear(); } } CsvWriter.WriteReport(ordersToLog, "LetteringLog-" + DateTime.Now.ToString("yyyyMMdd_HHmm")); Messenger.Show("Done!"); mainWindow.Show(); }