From 0b0ffb2203b3495332435a4da2ece65b607287c5 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 17 Oct 2026 00:53:01 +0200 Subject: [PATCH] u --- src/components/manifest/DeliveryList.jsx | 1 + src/components/manifest/ManifestFormLine.jsx | 138 ++++++++++++++----- src/components/manifest/ManifestHeader.jsx | 12 +- 3 files changed, 113 insertions(+), 38 deletions(-) diff --git a/src/components/manifest/DeliveryList.jsx b/src/components/manifest/DeliveryList.jsx index 660ce24..d44c523 100644 --- a/src/components/manifest/DeliveryList.jsx +++ b/src/components/manifest/DeliveryList.jsx @@ -297,6 +297,7 @@ class DeliveryRow extends PureComponent { textTransform: 'none', fontSize: '0.75rem', fontWeight: 600, + color: '#ffffff', }} > Buchen diff --git a/src/components/manifest/ManifestFormLine.jsx b/src/components/manifest/ManifestFormLine.jsx index bd99ab8..ae9e19a 100644 --- a/src/components/manifest/ManifestFormLine.jsx +++ b/src/components/manifest/ManifestFormLine.jsx @@ -184,21 +184,38 @@ class ManifestFormLine extends PureComponent { renderLedgerChip() { const { ledgerLine, onBookLine } = this.props; - if (!ledgerLine || !ledgerLine.trackStock) return null; + if (!ledgerLine) return null; const isBooked = ledgerLine.isBooked; const isPartial = !isBooked && ledgerLine.bookedAmount > 0; const isClickable = Boolean(onBookLine); + const isTracked = Boolean(ledgerLine.trackStock); + + const tooltipTitle = isTracked + ? isBooked + ? `Vollständig im Lager gebucht: ${ledgerLine.bookedAmount} Stück (Klicken für Details)` + : isPartial + ? `Teilweise im Lager gebucht: ${ledgerLine.bookedAmount} von ${ledgerLine.targetAmount} Stück (Klicken zum Einbuchen dieser Position)` + : `Noch nicht im Lager gebucht (${ledgerLine.targetAmount} Stück – Klicken zum Einbuchen dieser Position)` + : isBooked + ? `Vollständig im Ledger verbucht: ${ledgerLine.bookedAmount} Stück (Klicken für Details)` + : isPartial + ? `Teilweise im Ledger verbucht: ${ledgerLine.bookedAmount} von ${ledgerLine.targetAmount} Stück (Klicken zum Verbuchen dieser Position)` + : `Noch nicht im Ledger verbucht (${ledgerLine.targetAmount} Stück – Klicken zum Verbuchen dieser Position)`; + + const label = isTracked + ? isBooked + ? `Lager: ${ledgerLine.bookedAmount} Stk. gebucht` + : isPartial + ? `Lager: ${ledgerLine.bookedAmount}/${ledgerLine.targetAmount} Stk.` + : 'Lager: offen' + : isBooked + ? `Gebucht: ${ledgerLine.bookedAmount} Stk.` + : isPartial + ? `Gebucht: ${ledgerLine.bookedAmount}/${ledgerLine.targetAmount} Stk.` + : 'Verbuchen: offen'; return ( - + + ) : ( - + ) } - label={ - isBooked - ? `Lager: ${ledgerLine.bookedAmount} Stk. gebucht` - : isPartial - ? `Lager: ${ledgerLine.bookedAmount}/${ledgerLine.targetAmount} Stk.` - : 'Lager: offen' - } - color={isBooked ? 'success' : isPartial ? 'warning' : 'default'} - variant="outlined" + label={label} + variant={isBooked ? 'outlined' : 'filled'} sx={{ - height: 20, - fontSize: '0.68rem', - fontWeight: 600, + height: 22, + fontSize: '0.7rem', + fontWeight: 700, cursor: isClickable ? 'pointer' : 'default', - bgcolor: isBooked ? 'success.50' : undefined, - '&:hover': isClickable + ...(isBooked ? { - bgcolor: isBooked - ? 'success.100' - : isPartial - ? 'warning.100' - : 'action.hover', + bgcolor: 'rgba(21, 128, 61, 0.08)', + color: '#15803d', + borderColor: '#15803d', + borderWidth: 1, + borderStyle: 'solid', + '&:hover': isClickable ? { bgcolor: 'rgba(21, 128, 61, 0.16)' } : undefined, } - : undefined, + : isPartial + ? { + bgcolor: '#d97706', + color: '#ffffff', + border: 'none', + '&:hover': isClickable ? { bgcolor: '#b45309' } : undefined, + } + : { + bgcolor: 'primary.main', + color: '#ffffff', + border: 'none', + '&:hover': isClickable ? { bgcolor: 'primary.dark' } : undefined, + }), + '& .MuiChip-label': { + color: 'inherit', + px: 0.75, + }, + '& .MuiChip-icon': { + color: 'inherit', + }, }} /> @@ -1122,7 +1151,7 @@ class ManifestFormLine extends PureComponent { } render() { - const { columns = LINE_COLUMNS, saving } = this.props; + const { columns = LINE_COLUMNS, saving, ledgerLine } = this.props; const secondLine = this.renderSecondLine(); return ( @@ -1153,11 +1182,52 @@ class ManifestFormLine extends PureComponent { pl: 0.5, pr: 0.5, verticalAlign: 'middle', - width: this.props.onMove ? 92 : 40, + width: (this.props.onMove ? 80 : 36) + (this.props.kind === 'delivery' && Boolean(this.props.onBookLine) ? 36 : 0), whiteSpace: 'nowrap', }} > + {this.props.kind === 'delivery' && Boolean(this.props.onBookLine) && ( + 0 ? `${ledgerLine.remainingAmount} Stk.` : ''})` + } + > + + { + e.stopPropagation(); + if (ledgerLine) { + this.props.onBookLine(ledgerLine); + } + }} + color={ + !ledgerLine + ? 'default' + : ledgerLine.isBooked + ? 'success' + : ledgerLine.bookedAmount > 0 + ? 'warning' + : 'primary' + } + sx={{ p: 0.35 }} + > + {ledgerLine?.isBooked ? ( + + ) : ( + + )} + + + + )} {this.props.onMove && ( <> diff --git a/src/components/manifest/ManifestHeader.jsx b/src/components/manifest/ManifestHeader.jsx index cbe033c..c3c74e6 100644 --- a/src/components/manifest/ManifestHeader.jsx +++ b/src/components/manifest/ManifestHeader.jsx @@ -511,7 +511,7 @@ class ManifestHeader extends PureComponent { Wiederherstellen )} - {docId != null && kind === 'delivery' && onOpenBookDialog && ledgerSummary?.hasTrackStock && ( + {docId != null && kind === 'delivery' && onOpenBookDialog && Boolean(ledgerSummary && (ledgerSummary.totalPositions > 0 || ledgerSummary.lines?.length > 0 || ledgerSummary.hasTrackStock)) && ( )} {kind === 'quote' && docId != null && onCreateOrder && (