u
This commit is contained in:
@@ -47,7 +47,7 @@ import {
|
|||||||
import { backendErrorFrom, isBackendFailure } from '../utils/backendError';
|
import { backendErrorFrom, isBackendFailure } from '../utils/backendError';
|
||||||
|
|
||||||
const NUMBER_SCHEMES = [
|
const NUMBER_SCHEMES = [
|
||||||
{ type: 'sku', label: 'Artikel-SKU', icon: Inventory2Icon },
|
{ type: 'sku', label: 'Artikelnummer (ArtNr)', icon: Inventory2Icon },
|
||||||
{ type: 'entity', label: 'Kundennummer', icon: PeopleIcon },
|
{ type: 'entity', label: 'Kundennummer', icon: PeopleIcon },
|
||||||
{ type: 'delivery', label: 'Lieferschein', icon: LocalShippingIcon },
|
{ type: 'delivery', label: 'Lieferschein', icon: LocalShippingIcon },
|
||||||
{ type: 'adjustment', label: 'Bestandskorrektur', icon: TuneIcon },
|
{ type: 'adjustment', label: 'Bestandskorrektur', icon: TuneIcon },
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ export default class ArticleImageSearchDialog extends PureComponent {
|
|||||||
suggestions.push({ label: `${brandName} ${articleName}`, value: `${brandName} ${articleName}` });
|
suggestions.push({ label: `${brandName} ${articleName}`, value: `${brandName} ${articleName}` });
|
||||||
}
|
}
|
||||||
if (sku && sku !== query && sku !== articleName) {
|
if (sku && sku !== query && sku !== articleName) {
|
||||||
suggestions.push({ label: `SKU: ${sku}`, value: sku });
|
suggestions.push({ label: `ArtNr: ${sku}`, value: sku });
|
||||||
}
|
}
|
||||||
if (firstEan && firstEan !== query) {
|
if (firstEan && firstEan !== query) {
|
||||||
suggestions.push({ label: `EAN: ${firstEan}`, value: firstEan });
|
suggestions.push({ label: `EAN: ${firstEan}`, value: firstEan });
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ export default class ArticleSupplierDialog extends PureComponent {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<TextInput
|
<TextInput
|
||||||
label="Lieferanten-Artikelnummer (SKU)"
|
label="Lieferanten-Artikelnummer (ArtNr)"
|
||||||
value={sku}
|
value={sku}
|
||||||
onChange={(e) => this.setState({ sku: e.target.value })}
|
onChange={(e) => this.setState({ sku: e.target.value })}
|
||||||
placeholder="z. B. LF-09412"
|
placeholder="z. B. LF-09412"
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export default class ArticleSearchDialog extends PureComponent {
|
|||||||
<Typography variant="caption" color="text.secondary">
|
<Typography variant="caption" color="text.secondary">
|
||||||
{line ? (
|
{line ? (
|
||||||
<>
|
<>
|
||||||
{isDelivery ? 'Lieferanten-SKU' : 'SKU'}: <strong>{rawSku || '–'}</strong>
|
{isDelivery ? 'Lieferanten-ArtNr' : 'ArtNr'}: <strong>{rawSku || '–'}</strong>
|
||||||
{line?.name ? ` · ${line.name}` : ''}
|
{line?.name ? ` · ${line.name}` : ''}
|
||||||
</>
|
</>
|
||||||
) : isDelivery ? (
|
) : isDelivery ? (
|
||||||
|
|||||||
@@ -505,8 +505,8 @@ export default class BookDeliveryDialog extends PureComponent {
|
|||||||
<TableHead sx={{ backgroundColor: SURFACE_RAISED }}>
|
<TableHead sx={{ backgroundColor: SURFACE_RAISED }}>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell sx={{ fontWeight: 600, width: 44 }} align="center">Pos.</TableCell>
|
<TableCell sx={{ fontWeight: 600, width: 44 }} align="center">Pos.</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>Lieferanten-SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>Lieferanten-ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>Eigene SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>Eigene ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>EAN</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>EAN</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>Artikel</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>Artikel</TableCell>
|
||||||
<TableCell align="right" sx={{ fontWeight: 600 }}>Bestand</TableCell>
|
<TableCell align="right" sx={{ fontWeight: 600 }}>Bestand</TableCell>
|
||||||
@@ -780,7 +780,7 @@ export default class BookDeliveryDialog extends PureComponent {
|
|||||||
{prefillLine && (
|
{prefillLine && (
|
||||||
<Alert severity="info" sx={{ mb: 2 }}>
|
<Alert severity="info" sx={{ mb: 2 }}>
|
||||||
Vorausgewählt zum Verbuchen: Position{' '}
|
Vorausgewählt zum Verbuchen: Position{' '}
|
||||||
<strong>{prefillLine.sku ? `SKU ${prefillLine.sku}` : prefillLine.name}</strong> ({amountsToBook[prefillLine.id] || 0} Stk.). Andere Positionen stehen auf 0.
|
<strong>{prefillLine.sku ? `ArtNr ${prefillLine.sku}` : prefillLine.name}</strong> ({amountsToBook[prefillLine.id] || 0} Stk.). Andere Positionen stehen auf 0.
|
||||||
</Alert>
|
</Alert>
|
||||||
)}
|
)}
|
||||||
{this.renderLinesTable()}
|
{this.renderLinesTable()}
|
||||||
|
|||||||
@@ -793,7 +793,7 @@ class ManifestFormLine extends PureComponent {
|
|||||||
)}
|
)}
|
||||||
<HelpOutlineIcon sx={{ fontSize: 15, color: 'warning.main' }} />
|
<HelpOutlineIcon sx={{ fontSize: 15, color: 'warning.main' }} />
|
||||||
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.72rem' }}>
|
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.72rem' }}>
|
||||||
Kein Artikel für SKU „{rawSku}“ gefunden.
|
Kein Artikel für ArtNr „{rawSku}“ gefunden.
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
@@ -981,7 +981,7 @@ class ManifestFormLine extends PureComponent {
|
|||||||
{/* Supplier SKU if distinct */}
|
{/* Supplier SKU if distinct */}
|
||||||
{supplierArticle.sku && supplierArticle.sku !== rawSku && supplierArticle.sku !== article.sku && (
|
{supplierArticle.sku && supplierArticle.sku !== rawSku && supplierArticle.sku !== article.sku && (
|
||||||
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.7rem' }}>
|
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.7rem' }}>
|
||||||
(Lief.-SKU: <strong>{supplierArticle.sku}</strong>)
|
(Lief.-ArtNr: <strong>{supplierArticle.sku}</strong>)
|
||||||
</Typography>
|
</Typography>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@@ -1093,8 +1093,8 @@ class ManifestFormLine extends PureComponent {
|
|||||||
<HelpOutlineIcon sx={{ fontSize: 15, color: 'warning.main' }} />
|
<HelpOutlineIcon sx={{ fontSize: 15, color: 'warning.main' }} />
|
||||||
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.72rem' }}>
|
<Typography variant="caption" color="text.secondary" sx={{ fontSize: '0.72rem' }}>
|
||||||
{this.props.kind === 'delivery'
|
{this.props.kind === 'delivery'
|
||||||
? `Kein Lieferanten-Artikel für SKU „${rawSku}“ gefunden.`
|
? `Kein Lieferanten-Artikel für ArtNr „${rawSku}“ gefunden.`
|
||||||
: `Kein Artikel für SKU „${rawSku}“ gefunden.`}
|
: `Kein Artikel für ArtNr „${rawSku}“ gefunden.`}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ export default class OrderShipmentDialog extends PureComponent {
|
|||||||
onChange={() => this.handleToggleAll(openItems)}
|
onChange={() => this.handleToggleAll(openItems)}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600 }}>Artikel</TableCell>
|
<TableCell sx={{ fontWeight: 600 }}>Artikel</TableCell>
|
||||||
<TableCell align="right" sx={{ fontWeight: 600 }}>Bestellt</TableCell>
|
<TableCell align="right" sx={{ fontWeight: 600 }}>Bestellt</TableCell>
|
||||||
<TableCell align="right" sx={{ fontWeight: 600 }}>Geliefert</TableCell>
|
<TableCell align="right" sx={{ fontWeight: 600 }}>Geliefert</TableCell>
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ export default class ShipmentDetailDialog extends PureComponent {
|
|||||||
<Table size="small">
|
<Table size="small">
|
||||||
<TableHead sx={{ bgcolor: SURFACE_RAISED }}>
|
<TableHead sx={{ bgcolor: SURFACE_RAISED }}>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.75 }}>SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.75 }}>ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.75 }}>Bezeichnung</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.75 }}>Bezeichnung</TableCell>
|
||||||
<TableCell align="right" sx={{ fontWeight: 600, py: 0.75 }}>Menge</TableCell>
|
<TableCell align="right" sx={{ fontWeight: 600, py: 0.75 }}>Menge</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ export function buildLines(lines, { requireAtLeastOne }) {
|
|||||||
|
|
||||||
const missing = [];
|
const missing = [];
|
||||||
if (!sku && !name) {
|
if (!sku && !name) {
|
||||||
missing.push('Artikel (SKU oder Name)');
|
missing.push('Artikel (ArtNr oder Name)');
|
||||||
}
|
}
|
||||||
if (amount == null) {
|
if (amount == null) {
|
||||||
missing.push(rawAmount != null ? 'gültige Menge' : 'Menge');
|
missing.push(rawAmount != null ? 'gültige Menge' : 'Menge');
|
||||||
@@ -556,35 +556,35 @@ export async function buildManifestBody(
|
|||||||
export const LINE_COLUMNS = [
|
export const LINE_COLUMNS = [
|
||||||
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
||||||
{ id: 'amount', label: 'Amount', width: 80, align: 'right', type: 'number' },
|
{ id: 'amount', label: 'Amount', width: 80, align: 'right', type: 'number' },
|
||||||
{ id: 'sku', label: 'SKU', width: 130, align: 'left', type: 'text' },
|
{ id: 'sku', label: 'ArtNr', width: 130, align: 'left', type: 'text' },
|
||||||
{ id: 'name', label: 'Name', width: 200, align: 'left', type: 'text' },
|
{ id: 'name', label: 'Name', width: 200, align: 'left', type: 'text' },
|
||||||
{ id: 'tax', label: 'Tax', width: 70, align: 'right', type: 'number' },
|
{ id: 'tax', label: 'MwSt', width: 70, align: 'right', type: 'number' },
|
||||||
{ id: 'rebate', label: 'Rebate', width: 75, align: 'right', type: 'number' },
|
{ id: 'rebate', label: 'Rabatt', width: 75, align: 'right', type: 'number' },
|
||||||
{ id: 'net', label: 'Net', width: 95, align: 'right', type: 'number' },
|
{ id: 'net', label: 'Netto', width: 95, align: 'right', type: 'number' },
|
||||||
{ id: 'gross', label: 'Gross', width: 95, align: 'right', type: 'number' },
|
{ id: 'gross', label: 'Brutto', width: 95, align: 'right', type: 'number' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const QUOTE_LINE_COLUMNS = LINE_COLUMNS;
|
export const QUOTE_LINE_COLUMNS = LINE_COLUMNS;
|
||||||
|
|
||||||
export const ORDER_LINE_COLUMNS = [
|
export const ORDER_LINE_COLUMNS = [
|
||||||
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
||||||
{ id: 'sku', label: 'SKU', width: 130, align: 'left', type: 'text' },
|
{ id: 'sku', label: 'ArtNr', width: 130, align: 'left', type: 'text' },
|
||||||
{ id: 'name', label: 'Name', width: 200, align: 'left', type: 'text' },
|
{ id: 'name', label: 'Name', width: 200, align: 'left', type: 'text' },
|
||||||
{ id: 'amount', label: 'Amount', width: 80, align: 'right', type: 'number' },
|
{ id: 'amount', label: 'Amount', width: 80, align: 'right', type: 'number' },
|
||||||
{ id: 'tax', label: 'Tax', width: 70, align: 'right', type: 'number' },
|
{ id: 'tax', label: 'MwSt', width: 70, align: 'right', type: 'number' },
|
||||||
{ id: 'rebate', label: 'Rebate', width: 75, align: 'right', type: 'number' },
|
{ id: 'rebate', label: 'Rabatt', width: 75, align: 'right', type: 'number' },
|
||||||
{ id: 'net', label: 'Net', width: 95, align: 'right', type: 'number' },
|
{ id: 'net', label: 'Netto', width: 95, align: 'right', type: 'number' },
|
||||||
{ id: 'gross', label: 'Gross', width: 95, align: 'right', type: 'number' },
|
{ id: 'gross', label: 'Brutto', width: 95, align: 'right', type: 'number' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const DELIVERY_LINE_COLUMNS = [
|
export const DELIVERY_LINE_COLUMNS = [
|
||||||
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
{ id: 'pos', label: 'Pos', width: 44, align: 'center' },
|
||||||
{ id: 'sku', label: 'SKU', width: 130, align: 'left', type: 'text' },
|
{ id: 'sku', label: 'ArtNr', width: 130, align: 'left', type: 'text' },
|
||||||
{ id: 'name', label: 'Name', width: 220, align: 'left', type: 'text' },
|
{ id: 'name', label: 'Name', width: 220, align: 'left', type: 'text' },
|
||||||
{ id: 'amount', label: 'Amount', width: 88, align: 'right', type: 'number' },
|
{ id: 'amount', label: 'Amount', width: 88, align: 'right', type: 'number' },
|
||||||
{ id: 'pu', label: 'PU', width: 80, align: 'right', type: 'number' },
|
{ id: 'pu', label: 'PU', width: 80, align: 'right', type: 'number' },
|
||||||
{ id: 'taxrate', label: 'Tax', width: 80, align: 'right', type: 'number' },
|
{ id: 'taxrate', label: 'MwSt', width: 80, align: 'right', type: 'number' },
|
||||||
{ id: 'netprice', label: 'Net', width: 104, align: 'right', type: 'number' },
|
{ id: 'netprice', label: 'Netto', width: 104, align: 'right', type: 'number' },
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @typedef {'delivery'|'quote'|'order'} ManifestKind */
|
/** @typedef {'delivery'|'quote'|'order'} ManifestKind */
|
||||||
|
|||||||
@@ -635,7 +635,7 @@ class ArtikelSearchPage extends Component {
|
|||||||
sx={{ maxWidth: 520, flexGrow: 1 }}
|
sx={{ maxWidth: 520, flexGrow: 1 }}
|
||||||
autoFocus
|
autoFocus
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
placeholder="(EAN, SKU, Name)"
|
placeholder="(EAN, ArtNr, Name)"
|
||||||
value={input}
|
value={input}
|
||||||
onChange={this.handleInputChange}
|
onChange={this.handleInputChange}
|
||||||
slotProps={{
|
slotProps={{
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ class LieferungNeuPage extends PureComponent {
|
|||||||
|
|
||||||
const internalSku = article?.sku;
|
const internalSku = article?.sku;
|
||||||
if (!internalSku) {
|
if (!internalSku) {
|
||||||
const msg = 'Artikel hat keine SKU.';
|
const msg = 'Artikel hat keine ArtNr.';
|
||||||
enqueueSnackbar(msg, { variant: 'error' });
|
enqueueSnackbar(msg, { variant: 'error' });
|
||||||
throw new Error(msg);
|
throw new Error(msg);
|
||||||
}
|
}
|
||||||
@@ -1517,8 +1517,8 @@ class LieferungNeuPage extends PureComponent {
|
|||||||
<TableHead sx={{ bgcolor: SURFACE_RAISED }}>
|
<TableHead sx={{ bgcolor: SURFACE_RAISED }}>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Zeitpunkt</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Zeitpunkt</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Lieferanten SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Lieferanten-ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Eigene SKU</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Eigene ArtNr</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.5 }}>Name</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.5 }}>Name</TableCell>
|
||||||
<TableCell align="right" sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Menge geliefert</TableCell>
|
<TableCell align="right" sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Menge geliefert</TableCell>
|
||||||
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Lager</TableCell>
|
<TableCell sx={{ fontWeight: 600, py: 0.5, whiteSpace: 'nowrap' }}>Lager</TableCell>
|
||||||
|
|||||||
Reference in New Issue
Block a user