mirror of
https://github.com/christianvidalwolf-prog/Craze-Data-check.git
synced 2026-08-03 18:15:23 +02:00
restore cosmetic cpnp merge logic
This commit is contained in:
+54
-10
@@ -337,6 +337,37 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const resolvedCols = resolveColumnIndices(extendedHeaders);
|
const resolvedCols = resolveColumnIndices(extendedHeaders);
|
||||||
|
const editableColumns = new Set([
|
||||||
|
resolvedCols.CLASSIFICATION,
|
||||||
|
resolvedCols.LONG_DE,
|
||||||
|
resolvedCols.LONG_EN,
|
||||||
|
resolvedCols.SHORT_DE,
|
||||||
|
resolvedCols.SHORT_EN,
|
||||||
|
resolvedCols.DETAILS_DE,
|
||||||
|
resolvedCols.DETAILS_EN,
|
||||||
|
resolvedCols.INNER_L,
|
||||||
|
resolvedCols.INNER_W,
|
||||||
|
resolvedCols.INNER_H,
|
||||||
|
resolvedCols.OUTER_L,
|
||||||
|
resolvedCols.OUTER_W,
|
||||||
|
resolvedCols.OUTER_H,
|
||||||
|
resolvedCols.UNITS_OUTER,
|
||||||
|
resolvedCols.MOQ,
|
||||||
|
resolvedCols.VERIFIED_DIMS,
|
||||||
|
resolvedCols.VALIDATED_CHECK,
|
||||||
|
resolvedCols.VALIDATED_NOTE,
|
||||||
|
resolvedCols.PRODUCT_TYPE,
|
||||||
|
resolvedCols.ITEM_TO_LOGISTIC,
|
||||||
|
resolvedCols.CPNP_NO
|
||||||
|
]);
|
||||||
|
|
||||||
|
headers.forEach((h: any, i: number) => {
|
||||||
|
const headerText = String(h || '').toLowerCase();
|
||||||
|
if (headerText.includes('srp') || headerText.includes('uvp') || headerText.includes('40') || headerText.includes('price')) {
|
||||||
|
editableColumns.add(i);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const articleNoIdx = resolvedCols.ARTICLE_NO;
|
const articleNoIdx = resolvedCols.ARTICLE_NO;
|
||||||
const processedRows = rows.map(row => {
|
const processedRows = rows.map(row => {
|
||||||
const articleNo = String(row[articleNoIdx]);
|
const articleNo = String(row[articleNoIdx]);
|
||||||
@@ -351,17 +382,20 @@ export default function App() {
|
|||||||
finalRow.push(null);
|
finalRow.push(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge logic:
|
const syncedHasInternalCols = Boolean(
|
||||||
// - Use the Dropbox row as the base for master data and prices.
|
synced?.data && (
|
||||||
// - Restore internal control columns from history when available.
|
synced.data.length > 100 ||
|
||||||
// This is critical because some synced rows still have empty internal
|
Object.values(COLUMNS).some(idx =>
|
||||||
// slots even when the change history already contains the corrected value.
|
idx >= 100 &&
|
||||||
const mergedInternalSource = hist || synced?.data;
|
synced.data?.[idx] !== undefined &&
|
||||||
|
synced.data?.[idx] !== null &&
|
||||||
|
synced.data?.[idx] !== ''
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const sourceForInternal = syncedHasInternalCols ? synced!.data : (hist || synced?.data);
|
||||||
|
|
||||||
if (mergedInternalSource) {
|
if (sourceForInternal) {
|
||||||
// 1. Restore internal control columns (indices >= 100)
|
|
||||||
// These are the "TYPE", "Item to Logistic", "Checking", etc.
|
|
||||||
// We use hardcoded indices from COLUMNS to keep them stable.
|
|
||||||
Object.values(COLUMNS).forEach(idx => {
|
Object.values(COLUMNS).forEach(idx => {
|
||||||
if (idx < 100) return;
|
if (idx < 100) return;
|
||||||
|
|
||||||
@@ -379,6 +413,16 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// When a row is still in an edited/pending state, restore editable business fields too.
|
||||||
|
// This includes historical CPNP edits that were persisted directly in products.
|
||||||
|
if (synced?.status === 'pending' || synced?.status === 'edited') {
|
||||||
|
editableColumns.forEach(idx => {
|
||||||
|
if (idx < 100 && sourceForInternal[idx] !== undefined && sourceForInternal[idx] !== null) {
|
||||||
|
finalRow[idx] = sourceForInternal[idx];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Update row status in UI if it's not the default 'excel'
|
// Update row status in UI if it's not the default 'excel'
|
||||||
if (synced?.status && synced.status !== 'excel') {
|
if (synced?.status && synced.status !== 'excel') {
|
||||||
setRowStatuses(prev => ({ ...prev, [articleNo]: synced.status! }));
|
setRowStatuses(prev => ({ ...prev, [articleNo]: synced.status! }));
|
||||||
|
|||||||
Reference in New Issue
Block a user