fix: détecter ligne d'en-têtes dynamiquement (row 1 vide sur OUTILLAGE etc, row 2 = vrais headers)

This commit is contained in:
2026-06-09 14:50:23 +02:00
parent 8ede847ba0
commit 415b7db643
+11 -4
View File
@@ -32,7 +32,7 @@ export function extractSpecificFields(headers: string[], row: string[]): Record<
return result
}
export function parseTabRows(tab: string, headers: string[], rows: string[][]): PendingProduct[] {
export function parseTabRows(tab: string, headers: string[], rows: string[][], dataStartRow = 2): PendingProduct[] {
const idx = {
id: findColIndex(headers, 'ID'),
sku: findColIndex(headers, 'UGS'),
@@ -60,7 +60,7 @@ export function parseTabRows(tab: string, headers: string[], rows: string[][]):
if (id !== '' || publie !== '1') return null
return {
tab,
rowNumber: rowIdx + 2,
rowNumber: dataStartRow + rowIdx,
sku: get(row, idx.sku),
title: get(row, idx.nom),
priceMarket: get(row, idx.prixMarche).replace(',', '.'),
@@ -106,8 +106,15 @@ export async function fetchPendingProducts(
const data = await res.json()
const rows = (data.values ?? []) as string[][]
if (rows.length < 2) continue
const [headers, ...dataRows] = rows
const pending = parseTabRows(tab, headers, dataRows).filter(
// La ligne d'en-têtes est la première ligne qui contient "ID" en col A
// (certains onglets ont une ligne de section en row 1, les vrais en-têtes sont en row 2)
const headerRowIdx = rows.findIndex(r => (r[0] ?? '').trim() === 'ID')
if (headerRowIdx === -1) continue // pas un onglet produit
const headers = rows[headerRowIdx]
const dataRows = rows.slice(headerRowIdx + 1)
// Ignorer les onglets sans colonne "Publié" (COLLECTIONS, LIVRAISONS, etc.)
if (findColIndex(headers, 'Publié') === -1) continue
const pending = parseTabRows(tab, headers, dataRows, headerRowIdx + 2).filter(
p => !alreadyCreatedRows.has(`${p.tab}:${p.rowNumber}`),
)
all.push(...pending)