u
This commit is contained in:
@@ -25,6 +25,7 @@ class ManifestLines extends PureComponent {
|
||||
saving,
|
||||
linesColor,
|
||||
dirtyLineFields = {},
|
||||
shipments,
|
||||
onLineChange,
|
||||
onAddLine,
|
||||
onRemoveLine,
|
||||
@@ -103,54 +104,67 @@ class ManifestLines extends PureComponent {
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{Array.isArray(lines) &&
|
||||
lines.map((line, index) => {
|
||||
const lineKey = line.key ?? index;
|
||||
const rawSku = line.sku != null ? String(line.sku).trim() : '';
|
||||
const isDelivery = kind === 'delivery';
|
||||
const matched = isDelivery
|
||||
? supplierArticlesByLineKey[lineKey] ||
|
||||
(rawSku ? supplierArticlesMap[rawSku.toLowerCase()] || supplierArticlesMap[rawSku] : null)
|
||||
: null;
|
||||
const isLineLoading = isDelivery
|
||||
? loadingLineKeys[lineKey] ||
|
||||
(supplierArticlesLoading && !matched)
|
||||
: false;
|
||||
const ledgerLine = line.id != null ? ledgerLinesById[line.id] : null;
|
||||
const lineDirtyFields =
|
||||
dirtyLineFields[lineKey] ||
|
||||
(line.key != null ? dirtyLineFields[line.key] : null) ||
|
||||
(line.id != null ? dirtyLineFields[`id-${line.id}`] : null) ||
|
||||
dirtyLineFields[`idx-${index}`] ||
|
||||
null;
|
||||
{(() => {
|
||||
const shippedSkus = new Set();
|
||||
if (kind === 'order' && Array.isArray(shipments)) {
|
||||
for (const sh of shipments) {
|
||||
for (const sl of sh.lines || []) {
|
||||
if (sl.sku) shippedSkus.add(String(sl.sku).trim().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<ManifestFormLine
|
||||
key={lineKey}
|
||||
index={index}
|
||||
positionIndex={index + 1}
|
||||
kind={kind}
|
||||
line={line.key != null ? line : { ...line, key: index }}
|
||||
columns={columns}
|
||||
saving={saving}
|
||||
dirtyFields={lineDirtyFields}
|
||||
supplierArticle={matched}
|
||||
loading={Boolean(isLineLoading)}
|
||||
supplierArticleBusy={Boolean(busySupplierArticleLineKeys[lineKey])}
|
||||
onChange={onLineChange}
|
||||
onRemove={onRemoveLine}
|
||||
onMove={onMoveLine}
|
||||
isFirstLine={index === 0}
|
||||
isLastLine={index === lines.length - 1}
|
||||
onSkuBlur={onSkuBlur}
|
||||
onCreateArticle={onCreateArticle}
|
||||
onSearchArticle={onSearchArticle}
|
||||
onRemoveSupplierArticle={onRemoveSupplierArticle}
|
||||
ledgerLine={ledgerLine}
|
||||
onBookLine={onBookLine}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
return Array.isArray(lines) &&
|
||||
lines.map((line, index) => {
|
||||
const lineKey = line.key ?? index;
|
||||
const rawSku = line.sku != null ? String(line.sku).trim() : '';
|
||||
const isOnShipment = kind === 'order' && Boolean(rawSku && shippedSkus.has(rawSku.toLowerCase()));
|
||||
const isDelivery = kind === 'delivery';
|
||||
const matched = isDelivery
|
||||
? supplierArticlesByLineKey[lineKey] ||
|
||||
(rawSku ? supplierArticlesMap[rawSku.toLowerCase()] || supplierArticlesMap[rawSku] : null)
|
||||
: null;
|
||||
const isLineLoading = isDelivery
|
||||
? loadingLineKeys[lineKey] ||
|
||||
(supplierArticlesLoading && !matched)
|
||||
: false;
|
||||
const ledgerLine = line.id != null ? ledgerLinesById[line.id] : null;
|
||||
const lineDirtyFields =
|
||||
dirtyLineFields[lineKey] ||
|
||||
(line.key != null ? dirtyLineFields[line.key] : null) ||
|
||||
(line.id != null ? dirtyLineFields[`id-${line.id}`] : null) ||
|
||||
dirtyLineFields[`idx-${index}`] ||
|
||||
null;
|
||||
|
||||
return (
|
||||
<ManifestFormLine
|
||||
key={lineKey}
|
||||
index={index}
|
||||
positionIndex={index + 1}
|
||||
kind={kind}
|
||||
line={line.key != null ? line : { ...line, key: index }}
|
||||
columns={columns}
|
||||
saving={saving}
|
||||
dirtyFields={lineDirtyFields}
|
||||
supplierArticle={matched}
|
||||
loading={Boolean(isLineLoading)}
|
||||
supplierArticleBusy={Boolean(busySupplierArticleLineKeys[lineKey])}
|
||||
isOnShipment={isOnShipment}
|
||||
onChange={onLineChange}
|
||||
onRemove={onRemoveLine}
|
||||
onMove={onMoveLine}
|
||||
isFirstLine={index === 0}
|
||||
isLastLine={index === lines.length - 1}
|
||||
onSkuBlur={onSkuBlur}
|
||||
onCreateArticle={onCreateArticle}
|
||||
onSearchArticle={onSearchArticle}
|
||||
onRemoveSupplierArticle={onRemoveSupplierArticle}
|
||||
ledgerLine={ledgerLine}
|
||||
onBookLine={onBookLine}
|
||||
/>
|
||||
);
|
||||
});
|
||||
})()}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
@@ -173,14 +187,20 @@ class ManifestLines extends PureComponent {
|
||||
Artikel suchen
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
size="small"
|
||||
startIcon={<DeleteSweepOutlinedIcon />}
|
||||
disabled={saving || !lines || lines.length === 0}
|
||||
onClick={onRemoveAllLines}
|
||||
>
|
||||
Alle Zeilen entfernen
|
||||
</Button>
|
||||
{(() => {
|
||||
const hasShippedLines = kind === 'order' && Array.isArray(shipments) && shipments.some((sh) => (sh.lines?.length || 0) > 0);
|
||||
return (
|
||||
<Button
|
||||
size="small"
|
||||
startIcon={<DeleteSweepOutlinedIcon />}
|
||||
disabled={saving || !lines || lines.length === 0 || hasShippedLines}
|
||||
onClick={onRemoveAllLines}
|
||||
title={hasShippedLines ? 'Auftrag enthält bereits ausgelieferte Positionen' : 'Alle Zeilen entfernen'}
|
||||
>
|
||||
Alle Zeilen entfernen
|
||||
</Button>
|
||||
);
|
||||
})()}
|
||||
{(totalNet > 0 || totalGross > 0) && (
|
||||
<Box sx={{ ml: 'auto', display: 'flex', alignItems: 'center', gap: 2, pr: 0.5 }}>
|
||||
<Typography variant="body2" sx={{ color: 'text.secondary', fontWeight: 600, fontSize: '0.8rem' }}>
|
||||
|
||||
Reference in New Issue
Block a user