u
This commit is contained in:
@@ -12,6 +12,7 @@ import withNavigate from '../withNavigate';
|
||||
import ManifestHeader from './ManifestHeader';
|
||||
import ManifestLines from './ManifestLines';
|
||||
import ManifestPdfDialog from './ManifestPdfDialog';
|
||||
import ArticleSearchDialog from './ArticleSearchDialog';
|
||||
import {
|
||||
buildManifestBody,
|
||||
restoreAttachmentsFromApi,
|
||||
@@ -43,6 +44,8 @@ class ManifestForm extends PureComponent {
|
||||
pdfDialogOpen: false,
|
||||
pdfDialogData: null,
|
||||
pdfFileName: '',
|
||||
articleSearchDialogOpen: false,
|
||||
articleSearchLine: null,
|
||||
};
|
||||
this._cancelled = false;
|
||||
this.handleRetry = this.handleRetry.bind(this);
|
||||
@@ -53,6 +56,10 @@ class ManifestForm extends PureComponent {
|
||||
this.handleExternalNumberChange.bind(this);
|
||||
this.handleLineChange = this.handleLineChange.bind(this);
|
||||
this.handleAddLine = this.handleAddLine.bind(this);
|
||||
this.handleAddArticleLine = this.handleAddArticleLine.bind(this);
|
||||
this.handleOpenArticleSearchForLine = this.handleOpenArticleSearchForLine.bind(this);
|
||||
this.handleCloseArticleSearch = this.handleCloseArticleSearch.bind(this);
|
||||
this.handleAssignArticleForLine = this.handleAssignArticleForLine.bind(this);
|
||||
this.handleRemoveLine = this.handleRemoveLine.bind(this);
|
||||
this.handleRemoveAllLines = this.handleRemoveAllLines.bind(this);
|
||||
this.handleSave = this.handleSave.bind(this);
|
||||
@@ -205,6 +212,95 @@ class ManifestForm extends PureComponent {
|
||||
this.setState((prev) => ({ lines: [...prev.lines, emptyLine()] }));
|
||||
}
|
||||
|
||||
handleAddArticleLine(article) {
|
||||
if (!article) return;
|
||||
const netVal =
|
||||
article.price != null
|
||||
? String(article.price)
|
||||
: article.vknetto != null
|
||||
? String(article.vknetto)
|
||||
: article.net != null
|
||||
? String(article.net)
|
||||
: '';
|
||||
const taxVal =
|
||||
article.taxrate != null
|
||||
? String(article.taxrate)
|
||||
: article.tax != null
|
||||
? String(article.tax)
|
||||
: '';
|
||||
|
||||
const newLine = {
|
||||
key: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
||||
amount: '1',
|
||||
sku: article.sku || '',
|
||||
name: article.name || '',
|
||||
tax: taxVal,
|
||||
taxrate: taxVal,
|
||||
net: netVal,
|
||||
netprice: netVal,
|
||||
rebate: '',
|
||||
pu: '1',
|
||||
unit: article.unit || 'Stück',
|
||||
};
|
||||
|
||||
this.setState((prev) => {
|
||||
if (prev.lines.length === 1 && !prev.lines[0].sku && !prev.lines[0].name) {
|
||||
return { lines: [newLine] };
|
||||
}
|
||||
return { lines: [...prev.lines, newLine] };
|
||||
});
|
||||
}
|
||||
|
||||
handleOpenArticleSearchForLine(line) {
|
||||
this.setState({
|
||||
articleSearchDialogOpen: true,
|
||||
articleSearchLine: line,
|
||||
});
|
||||
}
|
||||
|
||||
handleCloseArticleSearch() {
|
||||
this.setState({
|
||||
articleSearchDialogOpen: false,
|
||||
articleSearchLine: null,
|
||||
});
|
||||
}
|
||||
|
||||
handleAssignArticleForLine(article, targetLine) {
|
||||
if (!article || !targetLine) return;
|
||||
const netVal =
|
||||
article.price != null
|
||||
? String(article.price)
|
||||
: article.vknetto != null
|
||||
? String(article.vknetto)
|
||||
: article.net != null
|
||||
? String(article.net)
|
||||
: '';
|
||||
const taxVal =
|
||||
article.taxrate != null
|
||||
? String(article.taxrate)
|
||||
: article.tax != null
|
||||
? String(article.tax)
|
||||
: '';
|
||||
|
||||
this.setState((prev) => ({
|
||||
lines: prev.lines.map((l) => {
|
||||
if (l.key !== targetLine.key) return l;
|
||||
return {
|
||||
...l,
|
||||
sku: article.sku || l.sku,
|
||||
name: article.name || l.name,
|
||||
tax: taxVal || l.tax,
|
||||
taxrate: taxVal || l.taxrate,
|
||||
net: netVal || l.net,
|
||||
netprice: netVal || l.netprice,
|
||||
unit: article.unit || l.unit || 'Stück',
|
||||
};
|
||||
}),
|
||||
articleSearchDialogOpen: false,
|
||||
articleSearchLine: null,
|
||||
}));
|
||||
}
|
||||
|
||||
handleRemoveLine(key) {
|
||||
this.setState((prev) => {
|
||||
const next = prev.lines.filter((line) => line.key !== key);
|
||||
@@ -424,6 +520,8 @@ class ManifestForm extends PureComponent {
|
||||
linesColor={cfg.linesColor}
|
||||
onLineChange={this.handleLineChange}
|
||||
onAddLine={this.handleAddLine}
|
||||
onAddArticleLine={this.handleAddArticleLine}
|
||||
onSearchArticle={this.handleOpenArticleSearchForLine}
|
||||
onRemoveLine={this.handleRemoveLine}
|
||||
onRemoveAllLines={this.handleRemoveAllLines}
|
||||
onSave={() => void this.handleSave()}
|
||||
@@ -496,6 +594,12 @@ class ManifestForm extends PureComponent {
|
||||
onClose={this.handleClosePdfDialog}
|
||||
onAbort={this.handleAbortParse}
|
||||
/>
|
||||
<ArticleSearchDialog
|
||||
open={this.state.articleSearchDialogOpen}
|
||||
line={this.state.articleSearchLine}
|
||||
onClose={this.handleCloseArticleSearch}
|
||||
onAssign={this.handleAssignArticleForLine}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user