[2026-02-13 16:46:55] ===== IMPORT_STOCK START ===== [2026-02-13 16:46:55] ✅ Config files found [2026-02-13 16:46:55] ✅ DB connected [2026-02-13 16:46:55] 📥 File upload detected: StockTicketEasyBuc.xlsx [2026-02-13 16:46:55] 📄 File extension: xlsx [2026-02-13 16:46:55] ✅ File found in mapping: {"receive":"StockTicketEasyBuc.xlsx","final":"StockTicketEasyBuc.csv","mail":"buc@mail"} [2026-02-13 16:46:55] 📁 Target folder: uploads/old/2026-02-13 [2026-02-13 16:46:55] 📖 Parsing Excel file... [2026-02-13 16:46:55] ✅ Excel parsed successfully. Row count: 4986 [2026-02-13 16:46:55] ✅ Header found at line: 1 [2026-02-13 16:46:55] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-13 16:46:55] 🔄 Processing rows... [2026-02-13 16:46:55] ✅ CSV file created: uploads/old/2026-02-13/StockTicketEasyBuc.csv with 4985 products [2026-02-13 16:46:55] 🚀 Creating products via API... [2026-02-13 16:46:55] 🔧 createProductsFromXlsx function called [2026-02-13 16:46:55] 📤 Sending 4985 EANs to API endpoint [2026-02-13 16:47:00] ✅ API response received (HTTP 200): { "status": "success", "successCount": 52, "errorCount": 0, "total": 4985, "erro [2026-02-13 16:47:00] 🏪 Fetching stores for csv_path: StockTicketEasyBuc.csv [2026-02-13 16:47:00] ✅ Found 1 stores [2026-02-13 16:47:00] 📨 Broadcasting CSV to stores... [2026-02-13 16:47:00] 📤 Sending to store: Buc (ID: 1) [2026-02-13 16:47:05] ✅ Broadcast sent to Buc (HTTP 200) [2026-02-13 16:47:05] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-14 07:35:57] ===== IMPORT_STOCK START ===== [2026-02-14 07:35:57] ✅ Config files found [2026-02-14 07:35:57] ✅ DB connected [2026-02-14 07:35:57] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-14 07:35:57] 📄 File extension: xlsx [2026-02-14 07:35:57] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-14 07:35:57] 📁 Target folder: uploads/old/2026-02-14 [2026-02-14 07:35:57] 📁 Created target folder [2026-02-14 07:35:57] 📖 Parsing Excel file... [2026-02-14 07:35:58] ✅ Excel parsed successfully. Row count: 4959 [2026-02-14 07:35:58] ✅ Header found at line: 1 [2026-02-14 07:35:58] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-14 07:35:58] 🔄 Processing rows... [2026-02-14 07:35:58] ✅ CSV file created: uploads/old/2026-02-14/StockTicketEasyMonoprix.csv with 4958 products [2026-02-14 07:35:58] 🚀 Creating products via API... [2026-02-14 07:35:58] 🔧 createProductsFromXlsx function called [2026-02-14 07:35:58] 📤 Sending 4958 EANs to API endpoint [2026-02-14 07:36:02] ✅ API response received (HTTP 200): { "status": "success", "successCount": 3, "errorCount": 0, "total": 4958, "error [2026-02-14 07:36:02] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-14 07:36:02] ✅ Found 5 stores [2026-02-14 07:36:02] 📨 Broadcasting CSV to stores... [2026-02-14 07:36:02] 📤 Sending to store: Clamart (ID: 0176) [2026-02-14 07:36:02] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-14 07:36:02] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-14 07:36:03] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-14 07:36:03] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-14 07:36:03] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-14 07:36:03] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-14 07:36:03] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-14 07:36:03] 📤 Sending to store: Sevres (ID: 0242) [2026-02-14 07:36:03] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-14 07:36:03] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-16 06:26:58] ===== IMPORT_STOCK START ===== [2026-02-16 06:26:58] ✅ Config files found [2026-02-16 06:26:58] ✅ DB connected [2026-02-16 06:26:58] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-16 06:26:58] 📄 File extension: xlsx [2026-02-16 06:26:58] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-16 06:26:58] 📁 Target folder: uploads/old/2026-02-16 [2026-02-16 06:26:58] 📁 Created target folder [2026-02-16 06:26:58] 📖 Parsing Excel file... [2026-02-16 06:26:58] ✅ Excel parsed successfully. Row count: 4957 [2026-02-16 06:26:58] ✅ Header found at line: 1 [2026-02-16 06:26:58] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-16 06:26:58] 🔄 Processing rows... [2026-02-16 06:26:58] ✅ CSV file created: uploads/old/2026-02-16/StockTicketEasyMonoprix.csv with 4956 products [2026-02-16 06:26:58] 🚀 Creating products via API... [2026-02-16 06:26:58] 🔧 createProductsFromXlsx function called [2026-02-16 06:26:58] 📤 Sending 4956 EANs to API endpoint [2026-02-16 06:27:02] ✅ API response received (HTTP 200): { "status": "success", "successCount": 0, "errorCount": 0, "total": 4956, "error [2026-02-16 06:27:02] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-16 06:27:02] ✅ Found 5 stores [2026-02-16 06:27:02] 📨 Broadcasting CSV to stores... [2026-02-16 06:27:02] 📤 Sending to store: Clamart (ID: 0176) [2026-02-16 06:27:03] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-16 06:27:03] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-16 06:27:03] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-16 06:27:03] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-16 06:27:04] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-16 06:27:04] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-16 06:27:04] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-16 06:27:04] 📤 Sending to store: Sevres (ID: 0242) [2026-02-16 06:27:04] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-16 06:27:04] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-16 09:48:57] ===== IMPORT_STOCK START ===== [2026-02-16 09:48:57] ✅ Config files found [2026-02-16 09:48:57] ✅ DB connected [2026-02-16 09:48:57] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-16 09:48:57] 📄 File extension: xlsx [2026-02-16 09:48:57] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-16 09:48:57] 📁 Target folder: uploads/old/2026-02-16 [2026-02-16 09:48:57] 📖 Parsing Excel file... [2026-02-16 09:48:57] ✅ Excel parsed successfully. Row count: 4957 [2026-02-16 09:48:57] ✅ Header found at line: 1 [2026-02-16 09:48:57] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-16 09:48:57] 🔄 Processing rows... [2026-02-16 09:48:57] ✅ CSV file created: uploads/old/2026-02-16/StockTicketEasyMonoprix.csv with 4956 products [2026-02-16 09:48:57] 🚀 Creating products via API... [2026-02-16 09:48:57] 🔧 createProductsFromXlsx function called [2026-02-16 09:48:57] 📤 Sending 4956 EANs to API endpoint [2026-02-16 09:48:59] ===== IMPORT_STOCK START ===== [2026-02-16 09:48:59] ✅ Config files found [2026-02-16 09:48:59] ✅ DB connected [2026-02-16 09:48:59] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-16 09:48:59] 📄 File extension: xlsx [2026-02-16 09:48:59] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-16 09:48:59] 📁 Target folder: uploads/old/2026-02-16 [2026-02-16 09:48:59] 📖 Parsing Excel file... [2026-02-16 09:48:59] ✅ Excel parsed successfully. Row count: 4958 [2026-02-16 09:48:59] ✅ Header found at line: 1 [2026-02-16 09:48:59] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-16 09:48:59] 🔄 Processing rows... [2026-02-16 09:48:59] ✅ CSV file created: uploads/old/2026-02-16/StockTicketEasyMonoprix.csv with 4957 products [2026-02-16 09:48:59] 🚀 Creating products via API... [2026-02-16 09:48:59] 🔧 createProductsFromXlsx function called [2026-02-16 09:48:59] 📤 Sending 4957 EANs to API endpoint [2026-02-16 09:49:02] ✅ API response received (HTTP 200): { "status": "success", "successCount": 0, "errorCount": 0, "total": 4956, "error [2026-02-16 09:49:02] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-16 09:49:02] ✅ Found 25 stores [2026-02-16 09:49:02] 📨 Broadcasting CSV to stores... [2026-02-16 09:49:02] 📤 Sending to store: Aix (ID: 0176) [2026-02-16 09:49:02] ✅ Broadcast sent to Aix (HTTP 200) [2026-02-16 09:49:02] 📤 Sending to store: Aulnay (ID: 0295) [2026-02-16 09:49:02] ✅ Broadcast sent to Aulnay (HTTP 200) [2026-02-16 09:49:02] 📤 Sending to store: Avignon (ID: 0135) [2026-02-16 09:49:03] ✅ Broadcast sent to Avignon (HTTP 200) [2026-02-16 09:49:03] 📤 Sending to store: Belvedere (ID: 0325) [2026-02-16 09:49:03] ✅ Broadcast sent to Belvedere (HTTP 200) [2026-02-16 09:49:03] 📤 Sending to store: Brunoy (ID: 2576) [2026-02-16 09:49:03] ✅ Broadcast sent to Brunoy (HTTP 200) [2026-02-16 09:49:03] 📤 Sending to store: Clamart (ID: 0176) [2026-02-16 09:49:03] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-16 09:49:03] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-16 09:49:04] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Convention (ID: 0324) [2026-02-16 09:49:04] ✅ API response received (HTTP 200): { "status": "success", "successCount": 0, "errorCount": 0, "total": 4957, "error [2026-02-16 09:49:04] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-16 09:49:04] ✅ Found 25 stores [2026-02-16 09:49:04] 📨 Broadcasting CSV to stores... [2026-02-16 09:49:04] 📤 Sending to store: Aix (ID: 0176) [2026-02-16 09:49:04] ✅ Broadcast sent to Convention (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Crimee (ID: 0292) [2026-02-16 09:49:04] ✅ Broadcast sent to Crimee (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Dausmesnil (ID: 0253) [2026-02-16 09:49:04] ✅ Broadcast sent to Aix (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Aulnay (ID: 0295) [2026-02-16 09:49:04] ✅ Broadcast sent to Dausmesnil (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Dimax (ID: 0245) [2026-02-16 09:49:04] ✅ Broadcast sent to Aulnay (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Avignon (ID: 0135) [2026-02-16 09:49:04] ✅ Broadcast sent to Dimax (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Draveil (ID: 2571) [2026-02-16 09:49:04] ✅ Broadcast sent to Avignon (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Belvedere (ID: 0325) [2026-02-16 09:49:04] ✅ Broadcast sent to Draveil (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-16 09:49:04] ✅ Broadcast sent to Belvedere (HTTP 200) [2026-02-16 09:49:04] 📤 Sending to store: Brunoy (ID: 2576) [2026-02-16 09:49:05] ✅ Broadcast sent to Brunoy (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Clamart (ID: 0176) [2026-02-16 09:49:05] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Joinville (ID: 2389) [2026-02-16 09:49:05] ✅ Broadcast sent to Joinville (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Le perreux (ID: 0312) [2026-02-16 09:49:05] ✅ Broadcast sent to Le perreux (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Marseille (ID: 0) [2026-02-16 09:49:05] ✅ Broadcast sent to Marseille (HTTP 400) [2026-02-16 09:49:05] 📤 Sending to store: Montgeron (ID: 0) [2026-02-16 09:49:05] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-16 09:49:05] ✅ Broadcast sent to Montgeron (HTTP 400) [2026-02-16 09:49:05] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-16 09:49:05] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Nimes (ID: 2704) [2026-02-16 09:49:05] ✅ Broadcast sent to Nimes (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Nogent (ID: 0) [2026-02-16 09:49:05] ✅ Broadcast sent to Nogent (HTTP 400) [2026-02-16 09:49:05] 📤 Sending to store: roquette (ID: 1149) [2026-02-16 09:49:05] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Convention (ID: 0324) [2026-02-16 09:49:05] ✅ Broadcast sent to roquette (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Saint Paul (ID: 0294) [2026-02-16 09:49:05] ✅ Broadcast sent to Convention (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Crimee (ID: 0292) [2026-02-16 09:49:05] ✅ Broadcast sent to Saint Paul (HTTP 200) [2026-02-16 09:49:05] 📤 Sending to store: Sete (ID: 2759) [2026-02-16 09:49:06] ✅ Broadcast sent to Sete (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Sevres (ID: 0242) [2026-02-16 09:49:06] ✅ Broadcast sent to Crimee (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Dausmesnil (ID: 0253) [2026-02-16 09:49:06] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Vinci (ID: 0216) [2026-02-16 09:49:06] ✅ Broadcast sent to Dausmesnil (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Dimax (ID: 0245) [2026-02-16 09:49:06] ✅ Broadcast sent to Vinci (HTTP 200) [2026-02-16 09:49:06] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-16 09:49:06] ✅ Broadcast sent to Dimax (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Draveil (ID: 2571) [2026-02-16 09:49:06] ✅ Broadcast sent to Draveil (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-16 09:49:06] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-16 09:49:06] 📤 Sending to store: Joinville (ID: 2389) [2026-02-16 09:49:07] ✅ Broadcast sent to Joinville (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Le perreux (ID: 0312) [2026-02-16 09:49:07] ✅ Broadcast sent to Le perreux (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Marseille (ID: 0) [2026-02-16 09:49:07] ✅ Broadcast sent to Marseille (HTTP 400) [2026-02-16 09:49:07] 📤 Sending to store: Montgeron (ID: 0) [2026-02-16 09:49:07] ✅ Broadcast sent to Montgeron (HTTP 400) [2026-02-16 09:49:07] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-16 09:49:07] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Nimes (ID: 2704) [2026-02-16 09:49:07] ✅ Broadcast sent to Nimes (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Nogent (ID: 0) [2026-02-16 09:49:07] ✅ Broadcast sent to Nogent (HTTP 400) [2026-02-16 09:49:07] 📤 Sending to store: roquette (ID: 1149) [2026-02-16 09:49:07] ✅ Broadcast sent to roquette (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Saint Paul (ID: 0294) [2026-02-16 09:49:07] ✅ Broadcast sent to Saint Paul (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Sete (ID: 2759) [2026-02-16 09:49:07] ✅ Broadcast sent to Sete (HTTP 200) [2026-02-16 09:49:07] 📤 Sending to store: Sevres (ID: 0242) [2026-02-16 09:49:08] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-16 09:49:08] 📤 Sending to store: Vinci (ID: 0216) [2026-02-16 09:49:08] ===== IMPORT_STOCK START ===== [2026-02-16 09:49:08] ✅ Config files found [2026-02-16 09:49:08] ✅ DB connected [2026-02-16 09:49:08] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-16 09:49:08] 📄 File extension: xlsx [2026-02-16 09:49:08] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-16 09:49:08] 📁 Target folder: uploads/old/2026-02-16 [2026-02-16 09:49:08] 📖 Parsing Excel file... [2026-02-16 09:49:08] ✅ Broadcast sent to Vinci (HTTP 200) [2026-02-16 09:49:08] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-16 09:49:08] ✅ Excel parsed successfully. Row count: 4958 [2026-02-16 09:49:08] ✅ Header found at line: 1 [2026-02-16 09:49:08] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-16 09:49:08] 🔄 Processing rows... [2026-02-16 09:49:08] ✅ CSV file created: uploads/old/2026-02-16/StockTicketEasyMonoprix.csv with 4957 products [2026-02-16 09:49:08] 🚀 Creating products via API... [2026-02-16 09:49:08] 🔧 createProductsFromXlsx function called [2026-02-16 09:49:08] 📤 Sending 4957 EANs to API endpoint [2026-02-16 09:49:12] ✅ API response received (HTTP 200): { "status": "success", "successCount": 0, "errorCount": 0, "total": 4957, "error [2026-02-16 09:49:12] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-16 09:49:12] ✅ Found 25 stores [2026-02-16 09:49:12] 📨 Broadcasting CSV to stores... [2026-02-16 09:49:12] 📤 Sending to store: Aix (ID: 0176) [2026-02-16 09:49:13] ✅ Broadcast sent to Aix (HTTP 200) [2026-02-16 09:49:13] 📤 Sending to store: Aulnay (ID: 0295) [2026-02-16 09:49:13] ✅ Broadcast sent to Aulnay (HTTP 200) [2026-02-16 09:49:13] 📤 Sending to store: Avignon (ID: 0135) [2026-02-16 09:49:13] ✅ Broadcast sent to Avignon (HTTP 200) [2026-02-16 09:49:13] 📤 Sending to store: Belvedere (ID: 0325) [2026-02-16 09:49:13] ✅ Broadcast sent to Belvedere (HTTP 200) [2026-02-16 09:49:13] 📤 Sending to store: Brunoy (ID: 2576) [2026-02-16 09:49:13] ✅ Broadcast sent to Brunoy (HTTP 200) [2026-02-16 09:49:13] 📤 Sending to store: Clamart (ID: 0176) [2026-02-16 09:49:14] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-16 09:49:14] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-16 09:49:14] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-16 09:49:14] 📤 Sending to store: Convention (ID: 0324) [2026-02-16 09:49:14] ✅ Broadcast sent to Convention (HTTP 200) [2026-02-16 09:49:14] 📤 Sending to store: Crimee (ID: 0292) [2026-02-16 09:49:14] ✅ Broadcast sent to Crimee (HTTP 200) [2026-02-16 09:49:14] 📤 Sending to store: Dausmesnil (ID: 0253) [2026-02-16 09:49:15] ✅ Broadcast sent to Dausmesnil (HTTP 200) [2026-02-16 09:49:15] 📤 Sending to store: Dimax (ID: 0245) [2026-02-16 09:49:15] ✅ Broadcast sent to Dimax (HTTP 200) [2026-02-16 09:49:15] 📤 Sending to store: Draveil (ID: 2571) [2026-02-16 09:49:15] ✅ Broadcast sent to Draveil (HTTP 200) [2026-02-16 09:49:15] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-16 09:49:15] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-16 09:49:15] 📤 Sending to store: Joinville (ID: 2389) [2026-02-16 09:49:15] ✅ Broadcast sent to Joinville (HTTP 200) [2026-02-16 09:49:15] 📤 Sending to store: Le perreux (ID: 0312) [2026-02-16 09:49:16] ✅ Broadcast sent to Le perreux (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Marseille (ID: 0) [2026-02-16 09:49:16] ✅ Broadcast sent to Marseille (HTTP 400) [2026-02-16 09:49:16] 📤 Sending to store: Montgeron (ID: 0) [2026-02-16 09:49:16] ✅ Broadcast sent to Montgeron (HTTP 400) [2026-02-16 09:49:16] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-16 09:49:16] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Nimes (ID: 2704) [2026-02-16 09:49:16] ✅ Broadcast sent to Nimes (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Nogent (ID: 0) [2026-02-16 09:49:16] ✅ Broadcast sent to Nogent (HTTP 400) [2026-02-16 09:49:16] 📤 Sending to store: roquette (ID: 1149) [2026-02-16 09:49:16] ✅ Broadcast sent to roquette (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Saint Paul (ID: 0294) [2026-02-16 09:49:16] ✅ Broadcast sent to Saint Paul (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Sete (ID: 2759) [2026-02-16 09:49:16] ✅ Broadcast sent to Sete (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Sevres (ID: 0242) [2026-02-16 09:49:16] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-16 09:49:16] 📤 Sending to store: Vinci (ID: 0216) [2026-02-16 09:49:17] ✅ Broadcast sent to Vinci (HTTP 200) [2026-02-16 09:49:17] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-17 06:25:38] ===== IMPORT_STOCK START ===== [2026-02-17 06:25:38] ✅ Config files found [2026-02-17 06:25:38] ✅ DB connected [2026-02-17 06:25:38] 📥 File upload detected: StockTicketEasyMonoprix.xlsx [2026-02-17 06:25:38] 📄 File extension: xlsx [2026-02-17 06:25:38] ✅ File found in mapping: {"receive":"StockTicketEasyMonoprix.xlsx","final":"StockTicketEasyMonoprix.csv","mail":"monop@mail"} [2026-02-17 06:25:38] 📁 Target folder: uploads/old/2026-02-17 [2026-02-17 06:25:38] 📁 Created target folder [2026-02-17 06:25:38] 📖 Parsing Excel file... [2026-02-17 06:25:38] ✅ Excel parsed successfully. Row count: 4957 [2026-02-17 06:25:38] ✅ Header found at line: 1 [2026-02-17 06:25:38] ✅ All critical columns found: EAN, PV, STOCK, CTM [2026-02-17 06:25:38] 🔄 Processing rows... [2026-02-17 06:25:38] ✅ CSV file created: uploads/old/2026-02-17/StockTicketEasyMonoprix.csv with 4956 products [2026-02-17 06:25:38] 🚀 Creating products via API... [2026-02-17 06:25:38] 🔧 createProductsFromXlsx function called [2026-02-17 06:25:38] 📤 Sending 4956 EANs to API endpoint [2026-02-17 06:25:42] ✅ API response received (HTTP 200): { "status": "success", "successCount": 0, "errorCount": 0, "total": 4956, "error [2026-02-17 06:25:42] 🏪 Fetching stores for csv_path: StockTicketEasyMonoprix.csv [2026-02-17 06:25:42] ✅ Found 25 stores [2026-02-17 06:25:42] 📨 Broadcasting CSV to stores... [2026-02-17 06:25:42] 📤 Sending to store: Aix (ID: 0176) [2026-02-17 06:25:43] ✅ Broadcast sent to Aix (HTTP 200) [2026-02-17 06:25:43] 📤 Sending to store: Aulnay (ID: 0295) [2026-02-17 06:25:43] ✅ Broadcast sent to Aulnay (HTTP 200) [2026-02-17 06:25:43] 📤 Sending to store: Avignon (ID: 0135) [2026-02-17 06:25:43] ✅ Broadcast sent to Avignon (HTTP 200) [2026-02-17 06:25:43] 📤 Sending to store: Belvedere (ID: 0325) [2026-02-17 06:25:43] ✅ Broadcast sent to Belvedere (HTTP 200) [2026-02-17 06:25:43] 📤 Sending to store: Brunoy (ID: 2576) [2026-02-17 06:25:44] ✅ Broadcast sent to Brunoy (HTTP 200) [2026-02-17 06:25:44] 📤 Sending to store: Clamart (ID: 0176) [2026-02-17 06:25:44] ✅ Broadcast sent to Clamart (HTTP 200) [2026-02-17 06:25:44] 📤 Sending to store: Clermont_Ferrand (ID: 0176) [2026-02-17 06:25:44] ✅ Broadcast sent to Clermont_Ferrand (HTTP 200) [2026-02-17 06:25:44] 📤 Sending to store: Convention (ID: 0324) [2026-02-17 06:25:44] ✅ Broadcast sent to Convention (HTTP 200) [2026-02-17 06:25:44] 📤 Sending to store: Crimee (ID: 0292) [2026-02-17 06:25:44] ✅ Broadcast sent to Crimee (HTTP 200) [2026-02-17 06:25:44] 📤 Sending to store: Dausmesnil (ID: 0253) [2026-02-17 06:25:45] ✅ Broadcast sent to Dausmesnil (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Dimax (ID: 0245) [2026-02-17 06:25:45] ✅ Broadcast sent to Dimax (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Draveil (ID: 2571) [2026-02-17 06:25:45] ✅ Broadcast sent to Draveil (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Fontenay (ID: 1134) [2026-02-17 06:25:45] ✅ Broadcast sent to Fontenay (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Joinville (ID: 2389) [2026-02-17 06:25:45] ✅ Broadcast sent to Joinville (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Le perreux (ID: 0312) [2026-02-17 06:25:45] ✅ Broadcast sent to Le perreux (HTTP 200) [2026-02-17 06:25:45] 📤 Sending to store: Marseille (ID: 0344) [2026-02-17 06:25:46] ✅ Broadcast sent to Marseille (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Montgeron (ID: 0) [2026-02-17 06:25:46] ✅ Broadcast sent to Montgeron (HTTP 400) [2026-02-17 06:25:46] 📤 Sending to store: Montpellier (ID: 0107) [2026-02-17 06:25:46] ✅ Broadcast sent to Montpellier (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Nimes (ID: 2704) [2026-02-17 06:25:46] ✅ Broadcast sent to Nimes (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Nogent (ID: 0) [2026-02-17 06:25:46] ✅ Broadcast sent to Nogent (HTTP 400) [2026-02-17 06:25:46] 📤 Sending to store: roquette (ID: 1149) [2026-02-17 06:25:46] ✅ Broadcast sent to roquette (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Saint Paul (ID: 0294) [2026-02-17 06:25:46] ✅ Broadcast sent to Saint Paul (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Sete (ID: 2759) [2026-02-17 06:25:46] ✅ Broadcast sent to Sete (HTTP 200) [2026-02-17 06:25:46] 📤 Sending to store: Sevres (ID: 0242) [2026-02-17 06:25:47] ✅ Broadcast sent to Sevres (HTTP 200) [2026-02-17 06:25:47] 📤 Sending to store: Vinci (ID: 0216) [2026-02-17 06:25:47] ✅ Broadcast sent to Vinci (HTTP 200) [2026-02-17 06:25:47] ===== IMPORT_STOCK END (SUCCESS) ===== [2026-02-19 12:13:34] ===== IMPORT_STOCK START ===== [2026-02-19 12:13:34] ✅ Config files found [2026-02-19 12:13:34] ✅ DB connected [2026-02-19 12:13:34] ⚠️ Invalid request - POST with file required