u
This commit is contained in:
@@ -297,6 +297,7 @@ class DeliveryRow extends PureComponent {
|
||||
textTransform: 'none',
|
||||
fontSize: '0.75rem',
|
||||
fontWeight: 600,
|
||||
color: '#ffffff',
|
||||
}}
|
||||
>
|
||||
Buchen
|
||||
|
||||
@@ -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 (
|
||||
<Tooltip
|
||||
title={
|
||||
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)`
|
||||
}
|
||||
>
|
||||
<Tooltip title={tooltipTitle}>
|
||||
<Chip
|
||||
size="small"
|
||||
clickable={isClickable}
|
||||
@@ -212,35 +229,47 @@ class ManifestFormLine extends PureComponent {
|
||||
}
|
||||
icon={
|
||||
isBooked ? (
|
||||
<CheckCircleOutlineOutlinedIcon sx={{ '&&': { fontSize: 13 } }} />
|
||||
<CheckCircleOutlineOutlinedIcon sx={{ '&&': { fontSize: 13, color: 'inherit' } }} />
|
||||
) : (
|
||||
<Inventory2OutlinedIcon sx={{ '&&': { fontSize: 13 } }} />
|
||||
<Inventory2OutlinedIcon sx={{ '&&': { fontSize: 13, color: 'inherit' } }} />
|
||||
)
|
||||
}
|
||||
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',
|
||||
},
|
||||
}}
|
||||
/>
|
||||
</Tooltip>
|
||||
@@ -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',
|
||||
}}
|
||||
>
|
||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.25 }}>
|
||||
{this.props.kind === 'delivery' && Boolean(this.props.onBookLine) && (
|
||||
<Tooltip
|
||||
title={
|
||||
!ledgerLine
|
||||
? 'Lieferung zuerst speichern, um diese Position zu verbuchen'
|
||||
: ledgerLine.isBooked
|
||||
? 'Position bereits verbucht (Klicken zum Einsehen)'
|
||||
: `Position verbuchen (${ledgerLine.remainingAmount > 0 ? `${ledgerLine.remainingAmount} Stk.` : ''})`
|
||||
}
|
||||
>
|
||||
<span>
|
||||
<IconButton
|
||||
size="small"
|
||||
aria-label="Position verbuchen"
|
||||
disabled={saving || !ledgerLine}
|
||||
onClick={(e) => {
|
||||
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 ? (
|
||||
<CheckCircleOutlineOutlinedIcon sx={{ fontSize: 18 }} />
|
||||
) : (
|
||||
<Inventory2OutlinedIcon sx={{ fontSize: 18 }} />
|
||||
)}
|
||||
</IconButton>
|
||||
</span>
|
||||
</Tooltip>
|
||||
)}
|
||||
{this.props.onMove && (
|
||||
<>
|
||||
<span>
|
||||
|
||||
@@ -511,7 +511,7 @@ class ManifestHeader extends PureComponent {
|
||||
Wiederherstellen
|
||||
</Button>
|
||||
)}
|
||||
{docId != null && kind === 'delivery' && onOpenBookDialog && ledgerSummary?.hasTrackStock && (
|
||||
{docId != null && kind === 'delivery' && onOpenBookDialog && Boolean(ledgerSummary && (ledgerSummary.totalPositions > 0 || ledgerSummary.lines?.length > 0 || ledgerSummary.hasTrackStock)) && (
|
||||
<Button
|
||||
variant={ledgerSummary?.status === 'booked' ? 'outlined' : 'contained'}
|
||||
color={
|
||||
@@ -535,13 +535,17 @@ class ManifestHeader extends PureComponent {
|
||||
fontWeight: 700,
|
||||
fontSize: '0.8125rem',
|
||||
whiteSpace: 'nowrap',
|
||||
...(ledgerSummary?.status !== 'booked' && {
|
||||
color: '#ffffff',
|
||||
'& .MuiButton-startIcon': { color: '#ffffff' },
|
||||
}),
|
||||
}}
|
||||
>
|
||||
{ledgerSummary?.status === 'booked'
|
||||
? 'Lager gebucht'
|
||||
? 'Vollständig gebucht'
|
||||
: ledgerSummary?.status === 'partial'
|
||||
? 'Rest einbuchen'
|
||||
: 'Ins Lager buchen'}
|
||||
? 'Rest verbuchen'
|
||||
: 'Lieferung verbuchen'}
|
||||
</Button>
|
||||
)}
|
||||
{kind === 'quote' && docId != null && onCreateOrder && (
|
||||
|
||||
Reference in New Issue
Block a user