From efca6d9a6762bf9d803f0126753db98632bb6567 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 22 Dec 2022 10:11:34 +0100 Subject: [PATCH] EgwCApp COnv: modifica x caso nome sheet = data (non fisso) --- EgwCApp/EgwCApp.Core/ConfigFile.cs | 5 ++++ EgwCApp/EgwCApp.ExcImport/ImportProc.cs | 24 +++++++++---------- EgwCApp/EgwCApp.ExcImport/testConf.json | 5 ++-- EgwCApp/EgwCApp.ExcImport/testConfExcel.json | 9 ++++--- EgwCApp/EgwCApp.Testing/Program.cs | 11 ++++++++- EgwCApp/EgwCApp.Testing/Tools/ExcImport.exe | Bin 2114100 -> 2114100 bytes IOB-WIN-NEXT/Tools/ExcImport.exe | Bin 2114100 -> 2114100 bytes IOB-WIN-NEXT/Tools/RefExcConv.json | 1 + 8 files changed, 36 insertions(+), 19 deletions(-) diff --git a/EgwCApp/EgwCApp.Core/ConfigFile.cs b/EgwCApp/EgwCApp.Core/ConfigFile.cs index a3125084..9114467c 100644 --- a/EgwCApp/EgwCApp.Core/ConfigFile.cs +++ b/EgwCApp/EgwCApp.Core/ConfigFile.cs @@ -27,6 +27,11 @@ /// public string FileOutPath { get; set; } = ""; + /// + /// IdxODL da registrare + /// + public int IdxODL { get; set; } = 0; + /// /// Parametri per processing file string --> int /// diff --git a/EgwCApp/EgwCApp.ExcImport/ImportProc.cs b/EgwCApp/EgwCApp.ExcImport/ImportProc.cs index b4f92459..0daebe4a 100644 --- a/EgwCApp/EgwCApp.ExcImport/ImportProc.cs +++ b/EgwCApp/EgwCApp.ExcImport/ImportProc.cs @@ -148,7 +148,7 @@ namespace EgwCApp.ExcImport } // sposto file string fName = Path.GetFileName(taskConfig.FileInPath); - File.Move(taskConfig.FileInPath, Path.Combine(taskConfig.ArchiveDir, fName)); + File.Move(taskConfig.FileInPath, Path.Combine(taskConfig.ArchiveDir, fName), true); } } } @@ -236,31 +236,29 @@ namespace EgwCApp.ExcImport // cerco lo sheet corretto se > 1 if (dtSet.Tables.Count > 1) { + bool found = false; for (int i = 0; i < dtSet.Tables.Count; i++) { + if (nomeFile.Contains(dtSet.Tables[i].TableName)) + { + idxTab = i; + found = true; + break; + } // controllo parametro opzionale... - if (taskConfig != null && !string.IsNullOrEmpty(taskConfig.TargetName)) + if (!found && taskConfig != null && !string.IsNullOrEmpty(taskConfig.TargetName)) { if (dtSet.Tables[i].TableName == taskConfig.TargetName) { idxTab = i; - } - } - else - { - if (nomeFile.Contains(dtSet.Tables[i].TableName)) - { - idxTab = i; + break; } } } } var tabella = dtSet.Tables[idxTab]; int numRighe = tabella.Rows.Count; - int idxODL = 0; - DateTime dataDoc = DateTime.Today; - DateTime.TryParse(nomeFile, out dataDoc); - + int idxODL = taskConfig != null ? taskConfig.IdxODL : 0; for (int i = 0; i < numRighe; i++) { if (taskConfig != null && taskConfig.ProcessParamInt != null && taskConfig.ProcessParamInt.Count > 5) diff --git a/EgwCApp/EgwCApp.ExcImport/testConf.json b/EgwCApp/EgwCApp.ExcImport/testConf.json index e110ade0..a62fe2c3 100644 --- a/EgwCApp/EgwCApp.ExcImport/testConf.json +++ b/EgwCApp/EgwCApp.ExcImport/testConf.json @@ -1,8 +1,9 @@ { - "ArchiveDir": "C:\\temp\\import\\archive\\", - "ConvertDir": "C:\\temp\\import\\convert\\", + "ArchiveDir": "C:\\temp\\import\\archive", + "ConvertDir": "C:\\temp\\import\\convert", "FileInPath": "C:\\temp\\import\\01.12.xlsx", "FileOutPath": "01.12.json", + "IdxODL": 987654321, "ProcessParamInt": { "Product": 3, "Variety": 9, diff --git a/EgwCApp/EgwCApp.ExcImport/testConfExcel.json b/EgwCApp/EgwCApp.ExcImport/testConfExcel.json index 21ca7e7d..a62fe2c3 100644 --- a/EgwCApp/EgwCApp.ExcImport/testConfExcel.json +++ b/EgwCApp/EgwCApp.ExcImport/testConfExcel.json @@ -1,9 +1,9 @@ { "ArchiveDir": "C:\\temp\\import\\archive", - "ConvertDir": "C:\\temp\\import\\converted", + "ConvertDir": "C:\\temp\\import\\convert", "FileInPath": "C:\\temp\\import\\01.12.xlsx", - "FileOutPath": "C:\\temp\\import\\01.12.json", - "ProcessParamStr": {}, + "FileOutPath": "01.12.json", + "IdxODL": 987654321, "ProcessParamInt": { "Product": 3, "Variety": 9, @@ -16,6 +16,9 @@ "PackPed": 18, "PesoPack": 20 }, + "ProcessParamStr": {}, + "RedisDB": 0, + "RedisOut": "", "Return": "File", "TargetName": "DB Loco", "Type": "Excel" diff --git a/EgwCApp/EgwCApp.Testing/Program.cs b/EgwCApp/EgwCApp.Testing/Program.cs index 519ac50f..29779573 100644 --- a/EgwCApp/EgwCApp.Testing/Program.cs +++ b/EgwCApp/EgwCApp.Testing/Program.cs @@ -28,13 +28,22 @@ string rawData = ""; //}; +// svuoto eventuali conf vecchi +var listaConf = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.json"); +if (listaConf != null && listaConf.Count() > 0) +{ + foreach (var file2del in listaConf) + { + File.Delete(file2del); + } +} // cerco file xlsx e ciclo... var listaFiles = Directory.GetFiles(@"C:\temp\import\", "*.xlsx"); if (listaFiles != null && listaFiles.Count() > 0) { + FileProcMan fpm = new FileProcMan("Tools", "ExcImport.exe"); foreach (var item in listaFiles) { - FileProcMan fpm = new FileProcMan("Tools", "ExcImport.exe"); TimeSpan timeElaps = fpm.doProcess(item); statsColl.Add($"Ext prog executed for {item}", timeElaps); diff --git a/EgwCApp/EgwCApp.Testing/Tools/ExcImport.exe b/EgwCApp/EgwCApp.Testing/Tools/ExcImport.exe index 6ad3a0bfcc6873c067f11cd50f1524768e83f4a3..b5f962e4d68eeee9ed749ba9e7639baed8ccde6e 100644 GIT binary patch delta 5890 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 E1)7c6L;wH) delta 5659 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 E1)7c6L;wH) delta 5659 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 tUbJj<*|J-=Eo}XVczw&ZIg4+ZJy