u
This commit is contained in:
@@ -297,6 +297,7 @@ class DeliveryRow extends PureComponent {
|
|||||||
textTransform: 'none',
|
textTransform: 'none',
|
||||||
fontSize: '0.75rem',
|
fontSize: '0.75rem',
|
||||||
fontWeight: 600,
|
fontWeight: 600,
|
||||||
|
color: '#ffffff',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Buchen
|
Buchen
|
||||||
|
|||||||
@@ -184,21 +184,38 @@ class ManifestFormLine extends PureComponent {
|
|||||||
|
|
||||||
renderLedgerChip() {
|
renderLedgerChip() {
|
||||||
const { ledgerLine, onBookLine } = this.props;
|
const { ledgerLine, onBookLine } = this.props;
|
||||||
if (!ledgerLine || !ledgerLine.trackStock) return null;
|
if (!ledgerLine) return null;
|
||||||
const isBooked = ledgerLine.isBooked;
|
const isBooked = ledgerLine.isBooked;
|
||||||
const isPartial = !isBooked && ledgerLine.bookedAmount > 0;
|
const isPartial = !isBooked && ledgerLine.bookedAmount > 0;
|
||||||
const isClickable = Boolean(onBookLine);
|
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 (
|
return (
|
||||||
<Tooltip
|
<Tooltip title={tooltipTitle}>
|
||||||
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)`
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<Chip
|
<Chip
|
||||||
size="small"
|
size="small"
|
||||||
clickable={isClickable}
|
clickable={isClickable}
|
||||||
@@ -212,35 +229,47 @@ class ManifestFormLine extends PureComponent {
|
|||||||
}
|
}
|
||||||
icon={
|
icon={
|
||||||
isBooked ? (
|
isBooked ? (
|
||||||
<CheckCircleOutlineOutlinedIcon sx={{ '&&': { fontSize: 13 } }} />
|
<CheckCircleOutlineOutlinedIcon sx={{ '&&': { fontSize: 13, color: 'inherit' } }} />
|
||||||
) : (
|
) : (
|
||||||
<Inventory2OutlinedIcon sx={{ '&&': { fontSize: 13 } }} />
|
<Inventory2OutlinedIcon sx={{ '&&': { fontSize: 13, color: 'inherit' } }} />
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
label={
|
label={label}
|
||||||
isBooked
|
variant={isBooked ? 'outlined' : 'filled'}
|
||||||
? `Lager: ${ledgerLine.bookedAmount} Stk. gebucht`
|
|
||||||
: isPartial
|
|
||||||
? `Lager: ${ledgerLine.bookedAmount}/${ledgerLine.targetAmount} Stk.`
|
|
||||||
: 'Lager: offen'
|
|
||||||
}
|
|
||||||
color={isBooked ? 'success' : isPartial ? 'warning' : 'default'}
|
|
||||||
variant="outlined"
|
|
||||||
sx={{
|
sx={{
|
||||||
height: 20,
|
height: 22,
|
||||||
fontSize: '0.68rem',
|
fontSize: '0.7rem',
|
||||||
fontWeight: 600,
|
fontWeight: 700,
|
||||||
cursor: isClickable ? 'pointer' : 'default',
|
cursor: isClickable ? 'pointer' : 'default',
|
||||||
bgcolor: isBooked ? 'success.50' : undefined,
|
...(isBooked
|
||||||
'&:hover': isClickable
|
|
||||||
? {
|
? {
|
||||||
bgcolor: isBooked
|
bgcolor: 'rgba(21, 128, 61, 0.08)',
|
||||||
? 'success.100'
|
color: '#15803d',
|
||||||
: isPartial
|
borderColor: '#15803d',
|
||||||
? 'warning.100'
|
borderWidth: 1,
|
||||||
: 'action.hover',
|
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>
|
</Tooltip>
|
||||||
@@ -1122,7 +1151,7 @@ class ManifestFormLine extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { columns = LINE_COLUMNS, saving } = this.props;
|
const { columns = LINE_COLUMNS, saving, ledgerLine } = this.props;
|
||||||
const secondLine = this.renderSecondLine();
|
const secondLine = this.renderSecondLine();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -1153,11 +1182,52 @@ class ManifestFormLine extends PureComponent {
|
|||||||
pl: 0.5,
|
pl: 0.5,
|
||||||
pr: 0.5,
|
pr: 0.5,
|
||||||
verticalAlign: 'middle',
|
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',
|
whiteSpace: 'nowrap',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.25 }}>
|
<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 && (
|
{this.props.onMove && (
|
||||||
<>
|
<>
|
||||||
<span>
|
<span>
|
||||||
|
|||||||
@@ -511,7 +511,7 @@ class ManifestHeader extends PureComponent {
|
|||||||
Wiederherstellen
|
Wiederherstellen
|
||||||
</Button>
|
</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
|
<Button
|
||||||
variant={ledgerSummary?.status === 'booked' ? 'outlined' : 'contained'}
|
variant={ledgerSummary?.status === 'booked' ? 'outlined' : 'contained'}
|
||||||
color={
|
color={
|
||||||
@@ -535,13 +535,17 @@ class ManifestHeader extends PureComponent {
|
|||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
fontSize: '0.8125rem',
|
fontSize: '0.8125rem',
|
||||||
whiteSpace: 'nowrap',
|
whiteSpace: 'nowrap',
|
||||||
|
...(ledgerSummary?.status !== 'booked' && {
|
||||||
|
color: '#ffffff',
|
||||||
|
'& .MuiButton-startIcon': { color: '#ffffff' },
|
||||||
|
}),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{ledgerSummary?.status === 'booked'
|
{ledgerSummary?.status === 'booked'
|
||||||
? 'Lager gebucht'
|
? 'Vollständig gebucht'
|
||||||
: ledgerSummary?.status === 'partial'
|
: ledgerSummary?.status === 'partial'
|
||||||
? 'Rest einbuchen'
|
? 'Rest verbuchen'
|
||||||
: 'Ins Lager buchen'}
|
: 'Lieferung verbuchen'}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{kind === 'quote' && docId != null && onCreateOrder && (
|
{kind === 'quote' && docId != null && onCreateOrder && (
|
||||||
|
|||||||
Reference in New Issue
Block a user