import { PureComponent } from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import AppDialog from '../AppDialog'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogTitle from '@mui/material/DialogTitle'; import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import Alert from '@mui/material/Alert'; import CloseIcon from '@mui/icons-material/Close'; import ArticleSearch from '../article/ArticleSearch'; import deliveryEditorAutomat from '../../automats/deliveryEditorAutomat'; export default class ArticleSearchDialog extends PureComponent { constructor(props) { super(props); this.state = { assigningSku: null, error: null, }; } componentDidUpdate(prevProps) { if (!prevProps.open && this.props.open) { this.setState({ assigningSku: null, error: null }); } } handleClose = () => { this.setState({ assigningSku: null, error: null }); this.props.onClose?.(); }; handleSelect = async (article) => { const { onAssign, line, kind = 'delivery' } = this.props; const isDelivery = kind === 'delivery'; if (!onAssign || !article?.sku) return; if (article.isParent || article.is_parent) { this.setState({ error: 'Ein Vaterartikel kann nicht auf Belege gebucht werden.' }); return; } this.setState({ assigningSku: article.sku, error: null }); try { await onAssign(article, line); } catch (err) { this.setState({ error: err?.message || (isDelivery ? (line ? 'Fehler beim Verknüpfen des Lieferanten-Artikels.' : 'Fehler beim Hinzufügen des Artikels.') : 'Fehler beim Zuordnen des Artikels.'), }); } finally { this.setState({ assigningSku: null }); } }; render() { const { open, onClose, line, kind = 'delivery', supplierArticles: propSupplierArticles } = this.props; const { assigningSku, error } = this.state; const isDelivery = kind === 'delivery'; const onlySupplierArticles = isDelivery && !line; const rawSku = line?.sku != null ? String(line.sku).trim() : ''; const supplierArticlesList = onlySupplierArticles ? (propSupplierArticles ?? deliveryEditorAutomat.state.supplierArticles ?? []) : null; const includeSkus = onlySupplierArticles ? supplierArticlesList.map((sa) => sa.article?.sku || sa.sku).filter(Boolean) : null; const extraArticles = onlySupplierArticles ? supplierArticlesList.map((sa) => ({ id: sa.article?.id ?? sa.id, sku: sa.article?.sku || sa.sku, name: sa.article?.name || sa.name || sa.sku || '', brand: sa.article?.brand, brandName: sa.article?.brand?.name || sa.article?.brandName, stock: sa.article?.stock ?? sa.stock, available: sa.article?.available, price: sa.price?.net ?? sa.article?.price ?? sa.article?.vknetto, eans: sa.article?.eans || [sa.sku].filter(Boolean), isParent: false, })) : []; return ( {line ? 'Existierenden Artikel zuordnen' : isDelivery ? 'Lieferanten-Artikel auswählen' : 'Artikel auswählen'} {line ? ( <> {isDelivery ? 'Lieferanten-SKU' : 'SKU'}: {rawSku || '–'} {line?.name ? ` · ${line.name}` : ''} ) : isDelivery ? ( 'Nur mit dem ausgewählten Lieferanten verknüpfte Artikel' ) : ( 'Artikel für Beleg auswählen' )} {error && ( {error} )} {onlySupplierArticles && supplierArticlesList.length === 0 && ( Für diesen Lieferanten sind noch keine Artikel verknüpft. )} ); } }