From b8fdef4e1157836428ce49a9a590e69e91929a80 Mon Sep 17 00:00:00 2001 From: seb Date: Wed, 14 Oct 2026 15:00:31 +0200 Subject: [PATCH] u --- src/automats/manifestDraftAutomat.js | 62 +++++++++++++++----- src/components/manifest/ManifestForm.jsx | 16 +++-- src/components/manifest/ManifestFormLine.jsx | 37 +++++++----- src/components/manifest/ManifestHeader.jsx | 28 --------- src/components/manifest/ManifestLines.jsx | 40 +++---------- 5 files changed, 87 insertions(+), 96 deletions(-) diff --git a/src/automats/manifestDraftAutomat.js b/src/automats/manifestDraftAutomat.js index e877ef5..1be1db6 100644 --- a/src/automats/manifestDraftAutomat.js +++ b/src/automats/manifestDraftAutomat.js @@ -271,6 +271,7 @@ export function getManifestDirtyDetails(current, baseline) { }; const dirtyLineKeys = []; + const dirtyLineFields = {}; const curLines = current.lines || []; const baseLines = baseline.lines || []; @@ -291,27 +292,49 @@ export function getManifestDirtyDetails(current, baseline) { const bl = (cl.key && baseLinesByKey.get(cl.key)) || (cl.id != null && baseLinesByKey.get(`id-${cl.id}`)) || - baseLines[i]; + (baseLinesByKey.size === 0 ? baseLines[i] : null); if (!bl) { - if (cl.sku || cl.name || (cl.amount && cl.amount !== '1') || cl.net || cl.gross) { - dirtyLineKeys.push(key); - fields.lines = true; - } + dirtyLineKeys.push(key); + dirtyLineFields[key] = { __all__: true }; + fields.lines = true; } else { - const lineChanged = - String(cl.sku ?? '').trim() !== String(bl.sku ?? '').trim() || - String(cl.name ?? '').trim() !== String(bl.name ?? '').trim() || - String(cl.amount ?? '').trim() !== String(bl.amount ?? '').trim() || - String(cl.net ?? cl.netprice ?? '').trim() !== String(bl.net ?? bl.netprice ?? '').trim() || - String(cl.gross ?? '').trim() !== String(bl.gross ?? '').trim() || - String(cl.rebate ?? '').trim() !== String(bl.rebate ?? '').trim() || - String(cl.tax ?? cl.taxrate ?? '').trim() !== String(bl.tax ?? bl.taxrate ?? '').trim() || - String(cl.pu ?? '').trim() !== String(bl.pu ?? '').trim() || - String(cl.unit ?? '').trim() !== String(bl.unit ?? '').trim(); + const lineFieldDiffs = {}; + if (String(cl.sku ?? '').trim() !== String(bl.sku ?? '').trim()) { + lineFieldDiffs.sku = true; + } + if (String(cl.name ?? '').trim() !== String(bl.name ?? '').trim()) { + lineFieldDiffs.name = true; + } + if (String(cl.amount ?? cl.count ?? '').trim() !== String(bl.amount ?? bl.count ?? '').trim()) { + lineFieldDiffs.amount = true; + lineFieldDiffs.count = true; + } + if (String(cl.net ?? cl.netprice ?? '').trim() !== String(bl.net ?? bl.netprice ?? '').trim()) { + lineFieldDiffs.net = true; + lineFieldDiffs.netprice = true; + } + if (String(cl.gross ?? '').trim() !== String(bl.gross ?? '').trim()) { + lineFieldDiffs.gross = true; + } + if (String(cl.rebate ?? '').trim() !== String(bl.rebate ?? '').trim()) { + lineFieldDiffs.rebate = true; + } + if (String(cl.tax ?? cl.taxrate ?? '').trim() !== String(bl.tax ?? bl.taxrate ?? '').trim()) { + lineFieldDiffs.tax = true; + lineFieldDiffs.taxrate = true; + } + if (String(cl.pu ?? cl.vpe ?? '').trim() !== String(bl.pu ?? bl.vpe ?? '').trim()) { + lineFieldDiffs.pu = true; + lineFieldDiffs.vpe = true; + } + if (String(cl.unit ?? '').trim() !== String(bl.unit ?? '').trim()) { + lineFieldDiffs.unit = true; + } - if (lineChanged) { + if (Object.keys(lineFieldDiffs).length > 0) { dirtyLineKeys.push(key); + dirtyLineFields[key] = lineFieldDiffs; fields.lines = true; } } @@ -348,6 +371,7 @@ export function getManifestDirtyDetails(current, baseline) { isDirty, fields, dirtyLineKeys, + dirtyLineFields, summary, }; } @@ -413,6 +437,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: false, dirtyFields: { ...emptyFields }, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }); }, @@ -425,6 +450,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: dirtyInfo.isDirty, dirtyFields: dirtyInfo.fields, dirtyLineKeys: dirtyInfo.dirtyLineKeys, + dirtyLineFields: dirtyInfo.dirtyLineFields, dirtySummary: dirtyInfo.summary, }); }, @@ -442,6 +468,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: false, dirtyFields: { ...emptyFields }, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }); }, @@ -474,6 +501,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: false, dirtyFields: { ...emptyFields }, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }); }, @@ -493,6 +521,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: false, dirtyFields: { ...emptyFields }, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }); }, @@ -513,6 +542,7 @@ export function createManifestEditAutomat({ kind, name }) { isDirty: false, dirtyFields: { ...emptyFields }, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }, actions, diff --git a/src/components/manifest/ManifestForm.jsx b/src/components/manifest/ManifestForm.jsx index 1abd908..253850b 100644 --- a/src/components/manifest/ManifestForm.jsx +++ b/src/components/manifest/ManifestForm.jsx @@ -69,6 +69,7 @@ class ManifestForm extends PureComponent { isDirty: Boolean(initialEdit?.isDirty), dirtyFields: initialEdit?.dirtyFields || null, dirtyLineKeys: initialEdit?.dirtyLineKeys || [], + dirtyLineFields: initialEdit?.dirtyLineFields || {}, dirtySummary: initialEdit?.dirtySummary || [], saving: false, pdfUploading: false, @@ -172,6 +173,7 @@ class ManifestForm extends PureComponent { isDirty: Boolean(state.isDirty), dirtyFields: state.dirtyFields, dirtyLineKeys: state.dirtyLineKeys, + dirtyLineFields: state.dirtyLineFields, dirtySummary: state.dirtySummary, }; } @@ -225,13 +227,14 @@ class ManifestForm extends PureComponent { lines: this.state.lines, attachments: this.state.attachments, }); - const { isDirty, dirtyFields, dirtyLineKeys, dirtySummary } = this.editAutomat.state; + const { isDirty, dirtyFields, dirtyLineKeys, dirtyLineFields, dirtySummary } = this.editAutomat.state; if ( this.state.isDirty !== isDirty || this.state.dirtyFields !== dirtyFields || + this.state.dirtyLineFields !== dirtyLineFields || this.state.dirtySummary !== dirtySummary ) { - this.setState({ isDirty, dirtyFields, dirtyLineKeys, dirtySummary }); + this.setState({ isDirty, dirtyFields, dirtyLineKeys, dirtyLineFields, dirtySummary }); } } } @@ -297,6 +300,7 @@ class ManifestForm extends PureComponent { isDirty: Boolean(this.editAutomat.state.isDirty), dirtyFields: this.editAutomat.state.dirtyFields, dirtyLineKeys: this.editAutomat.state.dirtyLineKeys, + dirtyLineFields: this.editAutomat.state.dirtyLineFields, dirtySummary: this.editAutomat.state.dirtySummary, date: this.editAutomat.state.date, partyId: this.editAutomat.state.partyId, @@ -349,6 +353,7 @@ class ManifestForm extends PureComponent { isDirty: false, dirtyFields: null, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], }); } catch (err) { @@ -380,6 +385,7 @@ class ManifestForm extends PureComponent { isDirty: false, dirtyFields: state.dirtyFields, dirtyLineKeys: state.dirtyLineKeys, + dirtyLineFields: state.dirtyLineFields, dirtySummary: state.dirtySummary, }); enqueueSnackbar('Änderungen verworfen und ursprünglicher Stand wiederhergestellt.', { variant: 'info' }); @@ -874,6 +880,7 @@ class ManifestForm extends PureComponent { isDirty: false, dirtyFields: null, dirtyLineKeys: [], + dirtyLineFields: {}, dirtySummary: [], saving: false, }); @@ -887,7 +894,7 @@ class ManifestForm extends PureComponent { renderArticles() { const cfg = this.cfg; - const { lines, saving, dirtyFields, dirtyLineKeys } = this.state; + const { lines, saving, dirtyLineFields } = this.state; return ( {/* Row 1: Editable Line Inputs */} - td': { borderBottom: 'none', p: 0 }, - ...(isDirty ? { bgcolor: 'rgba(237, 108, 2, 0.08)' } : {}), - }} - > + td': { borderBottom: 'none', p: 0 } }}> {columns.map((col, colIdx) => ( {this.renderField(col, colIdx, columns.length)} @@ -879,19 +890,13 @@ class ManifestFormLine extends PureComponent { {/* Row 2: Matched Supplier Article Details */} {secondLine && ( - td': { pt: 0.25, pb: 0.75, borderBottom: 'none' }, - ...(isDirty ? { bgcolor: 'rgba(237, 108, 2, 0.04)' } : {}), - }} - > + td': { pt: 0.25, pb: 0.75, borderBottom: 'none' } }}> {secondLine} diff --git a/src/components/manifest/ManifestHeader.jsx b/src/components/manifest/ManifestHeader.jsx index a0171dd..2717a39 100644 --- a/src/components/manifest/ManifestHeader.jsx +++ b/src/components/manifest/ManifestHeader.jsx @@ -6,7 +6,6 @@ import CircularProgress from '@mui/material/CircularProgress'; import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import Chip from '@mui/material/Chip'; -import Typography from '@mui/material/Typography'; import UploadFileIcon from '@mui/icons-material/UploadFile'; import Inventory2OutlinedIcon from '@mui/icons-material/Inventory2Outlined'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; @@ -486,33 +485,6 @@ class ManifestHeader extends PureComponent { Wiederherstellen )} - {isDirty && dirtySummary && dirtySummary.length > 0 && ( - - - Geänderte Felder: - - - {dirtySummary.map((item) => ( - - ))} - - - )} {docId != null && kind === 'delivery' && onOpenBookDialog && (