u
This commit is contained in:
@@ -423,6 +423,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
const actions = {
|
const actions = {
|
||||||
loadDoc(id, doc) {
|
loadDoc(id, doc) {
|
||||||
const date = dateInputValue(doc.date);
|
const date = dateInputValue(doc.date);
|
||||||
|
const createdAt = doc.createdAt ?? doc.created_at ?? null;
|
||||||
const partyId = doc.partyId ?? null;
|
const partyId = doc.partyId ?? null;
|
||||||
const number = doc.number ?? '';
|
const number = doc.number ?? '';
|
||||||
const externalNumber = doc.externalNumber != null ? String(doc.externalNumber) : '';
|
const externalNumber = doc.externalNumber != null ? String(doc.externalNumber) : '';
|
||||||
@@ -431,6 +432,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
|
|
||||||
const baseline = {
|
const baseline = {
|
||||||
date,
|
date,
|
||||||
|
createdAt,
|
||||||
partyId,
|
partyId,
|
||||||
number,
|
number,
|
||||||
externalNumber,
|
externalNumber,
|
||||||
@@ -443,6 +445,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
mode: 'edit',
|
mode: 'edit',
|
||||||
id,
|
id,
|
||||||
date,
|
date,
|
||||||
|
createdAt,
|
||||||
partyId,
|
partyId,
|
||||||
number,
|
number,
|
||||||
externalNumber,
|
externalNumber,
|
||||||
@@ -508,6 +511,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
|
|
||||||
commitSaved(savedDoc) {
|
commitSaved(savedDoc) {
|
||||||
const date = dateInputValue(savedDoc.date);
|
const date = dateInputValue(savedDoc.date);
|
||||||
|
const createdAt = savedDoc.createdAt ?? savedDoc.created_at ?? automat.state.createdAt ?? null;
|
||||||
const partyId = savedDoc.partyId ?? null;
|
const partyId = savedDoc.partyId ?? null;
|
||||||
const number = savedDoc.number ?? automat.state.number;
|
const number = savedDoc.number ?? automat.state.number;
|
||||||
const externalNumber = savedDoc.externalNumber != null ? String(savedDoc.externalNumber) : '';
|
const externalNumber = savedDoc.externalNumber != null ? String(savedDoc.externalNumber) : '';
|
||||||
@@ -516,6 +520,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
|
|
||||||
const baseline = {
|
const baseline = {
|
||||||
date,
|
date,
|
||||||
|
createdAt,
|
||||||
partyId,
|
partyId,
|
||||||
number,
|
number,
|
||||||
externalNumber,
|
externalNumber,
|
||||||
@@ -525,6 +530,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
|
|
||||||
automat.setState({
|
automat.setState({
|
||||||
date,
|
date,
|
||||||
|
createdAt,
|
||||||
partyId,
|
partyId,
|
||||||
number,
|
number,
|
||||||
externalNumber,
|
externalNumber,
|
||||||
@@ -545,6 +551,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
mode: 'edit',
|
mode: 'edit',
|
||||||
id: null,
|
id: null,
|
||||||
date: '',
|
date: '',
|
||||||
|
createdAt: null,
|
||||||
partyId: null,
|
partyId: null,
|
||||||
number: '',
|
number: '',
|
||||||
externalNumber: '',
|
externalNumber: '',
|
||||||
@@ -566,6 +573,7 @@ export function createManifestEditAutomat({ kind, name }) {
|
|||||||
mode: 'edit',
|
mode: 'edit',
|
||||||
id: null,
|
id: null,
|
||||||
date: '',
|
date: '',
|
||||||
|
createdAt: null,
|
||||||
partyId: null,
|
partyId: null,
|
||||||
number: '',
|
number: '',
|
||||||
externalNumber: '',
|
externalNumber: '',
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ class ManifestForm extends PureComponent {
|
|||||||
parties: initialParties,
|
parties: initialParties,
|
||||||
partiesLoading: !partiesReady,
|
partiesLoading: !partiesReady,
|
||||||
date: initialDate,
|
date: initialDate,
|
||||||
|
createdAt: initialDoc?.createdAt || initialEdit?.createdAt || null,
|
||||||
partyId: initialDoc?.partyId ?? null,
|
partyId: initialDoc?.partyId ?? null,
|
||||||
number: initialDoc?.number || '',
|
number: initialDoc?.number || '',
|
||||||
externalNumber: initialDoc?.externalNumber || '',
|
externalNumber: initialDoc?.externalNumber || '',
|
||||||
@@ -256,6 +257,7 @@ class ManifestForm extends PureComponent {
|
|||||||
if (String(state.id) === String(this.props.docId)) {
|
if (String(state.id) === String(this.props.docId)) {
|
||||||
return {
|
return {
|
||||||
date: state.date || '',
|
date: state.date || '',
|
||||||
|
createdAt: state.createdAt ?? null,
|
||||||
partyId: state.partyId,
|
partyId: state.partyId,
|
||||||
externalNumber: state.externalNumber || '',
|
externalNumber: state.externalNumber || '',
|
||||||
lines: state.lines || [],
|
lines: state.lines || [],
|
||||||
@@ -449,6 +451,7 @@ class ManifestForm extends PureComponent {
|
|||||||
dirtyLineFields: this.editAutomat.state.dirtyLineFields,
|
dirtyLineFields: this.editAutomat.state.dirtyLineFields,
|
||||||
dirtySummary: this.editAutomat.state.dirtySummary,
|
dirtySummary: this.editAutomat.state.dirtySummary,
|
||||||
date: this.editAutomat.state.date,
|
date: this.editAutomat.state.date,
|
||||||
|
createdAt: this.editAutomat.state.createdAt ?? null,
|
||||||
partyId: this.editAutomat.state.partyId,
|
partyId: this.editAutomat.state.partyId,
|
||||||
number: this.editAutomat.state.number,
|
number: this.editAutomat.state.number,
|
||||||
externalNumber: this.editAutomat.state.externalNumber,
|
externalNumber: this.editAutomat.state.externalNumber,
|
||||||
@@ -511,6 +514,7 @@ class ManifestForm extends PureComponent {
|
|||||||
|
|
||||||
const loadedDoc = {
|
const loadedDoc = {
|
||||||
date: dateInputValue(doc.date),
|
date: dateInputValue(doc.date),
|
||||||
|
createdAt: doc.createdAt ?? doc.created_at ?? null,
|
||||||
partyId: doc[cfg.partyField],
|
partyId: doc[cfg.partyField],
|
||||||
number: doc.number ?? '',
|
number: doc.number ?? '',
|
||||||
externalNumber:
|
externalNumber:
|
||||||
@@ -1302,6 +1306,7 @@ class ManifestForm extends PureComponent {
|
|||||||
const apiLines = requireArray(doc.lines, `${cfg.docField}.lines`);
|
const apiLines = requireArray(doc.lines, `${cfg.docField}.lines`);
|
||||||
const savedDoc = {
|
const savedDoc = {
|
||||||
date: dateInputValue(doc.date),
|
date: dateInputValue(doc.date),
|
||||||
|
createdAt: doc.createdAt ?? doc.created_at ?? this.state.createdAt ?? null,
|
||||||
partyId: doc[cfg.partyField],
|
partyId: doc[cfg.partyField],
|
||||||
number: doc.number ?? '',
|
number: doc.number ?? '',
|
||||||
externalNumber:
|
externalNumber:
|
||||||
@@ -1407,6 +1412,7 @@ class ManifestForm extends PureComponent {
|
|||||||
partyId={partyId}
|
partyId={partyId}
|
||||||
partyError={this.state.partyError}
|
partyError={this.state.partyError}
|
||||||
date={date}
|
date={date}
|
||||||
|
createdAt={this.state.createdAt}
|
||||||
number={number}
|
number={number}
|
||||||
externalNumber={externalNumber}
|
externalNumber={externalNumber}
|
||||||
saving={saving}
|
saving={saving}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
manifestConfig,
|
manifestConfig,
|
||||||
partyDisplayName,
|
partyDisplayName,
|
||||||
getLowestSortNonSupplierCustomerGroup,
|
getLowestSortNonSupplierCustomerGroup,
|
||||||
|
formatDateTime,
|
||||||
} from './manifestConfig';
|
} from './manifestConfig';
|
||||||
import { notifyError, notifyErrorMessage } from '../../utils/notify';
|
import { notifyError, notifyErrorMessage } from '../../utils/notify';
|
||||||
import entityAutomat from '../../automats/entityAutomat';
|
import entityAutomat from '../../automats/entityAutomat';
|
||||||
@@ -303,6 +304,7 @@ class ManifestHeader extends PureComponent {
|
|||||||
partiesLoading,
|
partiesLoading,
|
||||||
partyId,
|
partyId,
|
||||||
date,
|
date,
|
||||||
|
createdAt,
|
||||||
number,
|
number,
|
||||||
externalNumber,
|
externalNumber,
|
||||||
saving,
|
saving,
|
||||||
@@ -512,6 +514,24 @@ class ManifestHeader extends PureComponent {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
|
{isEdit && createdAt ? (
|
||||||
|
<SingleLineTextEdit
|
||||||
|
size="small"
|
||||||
|
label="Erstellt am"
|
||||||
|
value={formatDateTime(createdAt)}
|
||||||
|
disabled
|
||||||
|
slotProps={{
|
||||||
|
inputLabel: { shrink: true },
|
||||||
|
}}
|
||||||
|
sx={{
|
||||||
|
flex: { xs: '1 1 100%', sm: '1 1 150px' },
|
||||||
|
minWidth: { sm: 130 },
|
||||||
|
'& .MuiInputBase-input': {
|
||||||
|
fontVariantNumeric: 'tabular-nums',
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
</Box>
|
</Box>
|
||||||
<AttachmentList
|
<AttachmentList
|
||||||
kind={kind}
|
kind={kind}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import PaymentsOutlinedIcon from '@mui/icons-material/PaymentsOutlined';
|
|||||||
import AddIcon from '@mui/icons-material/Add';
|
import AddIcon from '@mui/icons-material/Add';
|
||||||
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
||||||
import { PanelTile } from 'dashgui/panels';
|
import { PanelTile } from 'dashgui/panels';
|
||||||
import { formatDate } from './manifestConfig';
|
import { formatDate, formatDateTime } from './manifestConfig';
|
||||||
import { formatPrice } from '../../utils/price';
|
import { formatPrice } from '../../utils/price';
|
||||||
import { typeLabel, typeIcon } from './OrderPaymentList';
|
import { typeLabel, typeIcon } from './OrderPaymentList';
|
||||||
import ShipmentDetailDialog from './ShipmentDetailDialog';
|
import ShipmentDetailDialog from './ShipmentDetailDialog';
|
||||||
@@ -91,6 +91,7 @@ export class OrderDocumentsTiles extends PureComponent {
|
|||||||
const carrier = sh.shippings?.[0]?.carrier;
|
const carrier = sh.shippings?.[0]?.carrier;
|
||||||
const tracking = sh.shippings?.[0]?.trackingCode;
|
const tracking = sh.shippings?.[0]?.trackingCode;
|
||||||
const posCount = sh.lineCount ?? sh.lines?.length ?? 0;
|
const posCount = sh.lineCount ?? sh.lines?.length ?? 0;
|
||||||
|
const shDate = sh.date || sh.createdAt || sh.created_at;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
@@ -114,7 +115,7 @@ export class OrderDocumentsTiles extends PureComponent {
|
|||||||
</Typography>
|
</Typography>
|
||||||
<Stack direction="row" spacing={0.5} sx={{ alignItems: 'center' }}>
|
<Stack direction="row" spacing={0.5} sx={{ alignItems: 'center' }}>
|
||||||
<Typography variant="caption" color="text.secondary">
|
<Typography variant="caption" color="text.secondary">
|
||||||
{sh.date ? formatDate(sh.date) : '–'}
|
{shDate ? formatDateTime(shDate) : '–'}
|
||||||
</Typography>
|
</Typography>
|
||||||
{navigate && (
|
{navigate && (
|
||||||
<IconButton
|
<IconButton
|
||||||
@@ -231,6 +232,7 @@ export class OrderDocumentsTiles extends PureComponent {
|
|||||||
<Stack spacing={1}>
|
<Stack spacing={1}>
|
||||||
{payments.map((pay) => {
|
{payments.map((pay) => {
|
||||||
const pType = pay.type || pay.paymentType || pay.payment_type;
|
const pType = pay.type || pay.paymentType || pay.payment_type;
|
||||||
|
const payDate = pay.date || pay.createdAt || pay.created_at || pay.timestamp;
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
key={pay.id}
|
key={pay.id}
|
||||||
@@ -257,20 +259,26 @@ export class OrderDocumentsTiles extends PureComponent {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
<Stack direction="row" spacing={1} sx={{ alignItems: 'center', flexShrink: 0, ml: 1 }}>
|
|
||||||
{pay.date ? (
|
|
||||||
<Typography variant="caption" color="text.secondary">
|
|
||||||
{formatDate(pay.date)}
|
|
||||||
</Typography>
|
|
||||||
) : null}
|
|
||||||
<Typography
|
<Typography
|
||||||
variant="subtitle2"
|
variant="subtitle2"
|
||||||
sx={{ fontWeight: 700, color: 'success.dark', fontVariantNumeric: 'tabular-nums' }}
|
sx={{ fontWeight: 700, color: 'success.dark', fontVariantNumeric: 'tabular-nums', flexShrink: 0, ml: 1 }}
|
||||||
>
|
>
|
||||||
+{formatPrice(pay.amount)}
|
+{formatPrice(pay.amount)}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Stack>
|
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
|
{payDate ? (
|
||||||
|
<Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mt: 0.5 }}>
|
||||||
|
{pay.id != null ? (
|
||||||
|
<Typography variant="caption" color="text.secondary" sx={{ fontFamily: 'monospace' }}>
|
||||||
|
#{pay.id}
|
||||||
|
</Typography>
|
||||||
|
) : <span />}
|
||||||
|
<Typography variant="caption" color="text.secondary">
|
||||||
|
{formatDateTime(payDate)}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
) : null}
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import { enqueueSnackbar } from 'notistack';
|
|||||||
import AppDialog from '../AppDialog';
|
import AppDialog from '../AppDialog';
|
||||||
import { shipment as shipmentApi, shipping as shippingApi, stock as stockApi } from '../../api';
|
import { shipment as shipmentApi, shipping as shippingApi, stock as stockApi } from '../../api';
|
||||||
import { notifyError } from '../../utils/notify';
|
import { notifyError } from '../../utils/notify';
|
||||||
import { formatDate } from './manifestConfig';
|
import { formatDate, formatDateTime } from './manifestConfig';
|
||||||
import orderAutomat from '../../automats/orderAutomat';
|
import orderAutomat from '../../automats/orderAutomat';
|
||||||
import shipmentAutomat from '../../automats/shipmentAutomat';
|
import shipmentAutomat from '../../automats/shipmentAutomat';
|
||||||
import carrierAutomat from '../../automats/carrierAutomat';
|
import carrierAutomat from '../../automats/carrierAutomat';
|
||||||
@@ -433,7 +433,9 @@ export default class ShipmentDetailDialog extends PureComponent {
|
|||||||
{shipment.number || 'Lieferschein'}
|
{shipment.number || 'Lieferschein'}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="caption" color="text.secondary">
|
<Typography variant="caption" color="text.secondary">
|
||||||
{shipment.date ? `Datum: ${formatDate(shipment.date)}` : ''}
|
{(shipment.date || shipment.createdAt || shipment.created_at)
|
||||||
|
? `Datum: ${formatDateTime(shipment.date || shipment.createdAt || shipment.created_at)}`
|
||||||
|
: ''}
|
||||||
{shipment.externalNumber ? (
|
{shipment.externalNumber ? (
|
||||||
<>
|
<>
|
||||||
{' • Ref: '}
|
{' • Ref: '}
|
||||||
|
|||||||
@@ -96,6 +96,19 @@ export function formatDate(iso) {
|
|||||||
return d.toLocaleDateString('de-DE');
|
return d.toLocaleDateString('de-DE');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function formatDateTime(iso) {
|
||||||
|
if (!iso) return '–';
|
||||||
|
const d = new Date(iso);
|
||||||
|
if (Number.isNaN(d.getTime())) return String(iso);
|
||||||
|
return d.toLocaleString('de-DE', {
|
||||||
|
day: '2-digit',
|
||||||
|
month: '2-digit',
|
||||||
|
year: 'numeric',
|
||||||
|
hour: '2-digit',
|
||||||
|
minute: '2-digit',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delivery documents have a server-allocated, read-only `number` plus an
|
* Delivery documents have a server-allocated, read-only `number` plus an
|
||||||
* optional user-entered `externalNumber`. Returns the display value for a
|
* optional user-entered `externalNumber`. Returns the display value for a
|
||||||
|
|||||||
Reference in New Issue
Block a user