import React from 'react'; import { Drawer, Table } from 'kts-components-antd-x3'; import Invoice from '../../..'; import { updateUnitPriceExcludingTax, updateUnitPriceTax, dutyFree, format15 } from '../GoodsList/hook/useColumns/autoFillFn'; import { countAmountIncludeTax } from '../../../tools/calculate' import { IGood } from '../../../InvoiceController'; import evaluate from '../../../tools/evaluate'; export default () => { const controller = Invoice.useInvoiceController(); const visible = controller.useMemo(s => s.goodsListState.importGoods.isVisibleDrawer, []); const topExpand = controller.useMemo(s => s.goodsListState.importGoods.topExpand, []); const onClose = React.useCallback(() => { controller.pipeline(async s => { s.goodsListState.importGoods.isVisibleDrawer = false })(); }, [controller]); return ( { topExpand &&
{topExpand}
}
); }; const DrawerBody = () => { const controller = Invoice.useInvoiceController(); const columns = controller.useMemo(s => s.goodsListState.importGoods.columns, []); const dataSource = controller.useMemo(s => s.goodsListState.importGoods.dataSource, []); const pagination = controller.useMemo(s => s.goodsListState.importGoods.pagination, []); // const [editGood] = React.useState(controller.state.goodsListState.editGood); React.useEffect(() => { controller.getGoodsList && controller.getGoodsList({ pagination: { current: 1 } }) }, [controller]); const roundTo8Decimals = (num:number) => Math.round(num * 1e8) / 1e8; return ( { controller.getGoodsList && controller.getGoodsList({ pagination }) }} onRow={record => { return { onClick: () => { controller.run(async s => { Object.keys(record).filter(e => !record[e] && record[e] !== 0).forEach(e => { delete record[e] }); // 导入时校验函数 if (await s.goodsListState.importGoods.verifyFn(record) === false) return; // 没用 被编辑的货物 和 form 就退出 if (!s.goodsListState.editGood || !s.goodsListState.form) return; // 导入时清空之前输入的值,使用导入的单价和税率(参考税局系统) record.quantity = undefined; record.lineAmountExcludeTax = undefined; record.lineAmountIncludeTax = undefined; // console.log('s.goodsListState.editGood1:', s.goodsListState.editGood); // 光电定制化功能:无论是否有值都替换 itemCode, itemName, shorthand, taxCategoryCode, taxClassificationCode; // 如果其他输入框有值就不替换,没值就替换:itemModelName, lineAmountExcludeTax, lineAmountIncludeTax,lineAttribute,priceExcludeTax, // priceIncludeTax,quantity, serialNo, taxAmount, taxRate, unit // 中间数据 const between = { ...record }; // console.log(':between:', between); between.itemName = getItemName(record, s.goodsListState.editGood); between.itemCode = getItemCode(record, s.goodsListState.editGood); between.itemNameOther = getItemNameOther(record, s.goodsListState.editGood); // 设置编辑货物 const editGood: IGood = s.goodsListState.editGood = { ...s.goodsListState.editGood, // itemModelName: undefined, // itemModelNameSelf: undefined, ...between, itemModelName:s.goodsListState.editGood?.itemModelName ?? between.itemModelName, itemModelNameSelf:s.goodsListState.editGood?.itemModelNameSelf ?? between.itemModelNameSelf, lineAmountExcludeTax:s.goodsListState.editGood?.lineAmountExcludeTax ?? between.lineAmountExcludeTax, lineAmountIncludeTax:s.goodsListState.editGood?.lineAmountIncludeTax ?? between.lineAmountIncludeTax, priceExcludeTax:roundTo8Decimals(s.goodsListState.editGood?.priceExcludeTax ?? between.priceExcludeTax), priceIncludeTax:roundTo8Decimals(s.goodsListState.editGood?.priceIncludeTax ?? between.priceIncludeTax), quantity:s.goodsListState.editGood?.quantity ?? between.quantity, unit:s.goodsListState.editGood?.unit ?? between.unit, // serialNo:s.goodsListState.editGood?.itemModelName ?? between.itemModelName, // taxAmount:s.goodsListState.editGood?.itemModelName ?? between.itemModelName, // taxRate:s.goodsListState.editGood?.itemModelName ?? between.itemModelName, // lineAttribute:s.goodsListState.editGood?.lineAttribute, }; if (editGood.taxRate) { editGood.taxRate = dutyFree(controller, editGood.taxRate, s.goodsListState.form, editGood) } if (`${editGood.priceIncludeTax}` === '0') { editGood.priceIncludeTax = undefined; editGood.priceExcludeTax = undefined; } else { editGood.priceExcludeTax = editGood.priceExcludeTax || getPriceExcludeTax(editGood, record, 8) as number; } if (editGood.quantity && editGood.priceIncludeTax) { editGood.lineAmountIncludeTax = countAmountIncludeTax(editGood.quantity, editGood.priceIncludeTax, s.calculatingDigits); } // 导入FORM里 s.goodsListState.form.setFieldsValue({ ...editGood, }); // if (s.goodsListState.isMyShow) { // s.goodsListState.form.setFieldsValue({ // ...editGood, // itemName: editGood.itemNameSelf, // itemModelName: editGood.itemModelNameSelf, // }); // } else { // s.goodsListState.form.setFieldsValue({ // ...editGood, // }); // } s.goodsListState.importGoods.isVisibleDrawer = false; s.goodsListState.isTaxIncluded ? await updateUnitPriceExcludingTax(controller, s.goodsListState.form, record) : await updateUnitPriceTax(controller, s.goodsListState.form, record) }) } }; }} /> ); }; /** 项目名称 */ // const getItemName = (record: any) => { // return record.shorthand // ? `*${record.shorthand}*${record.itemName}` // : record.itemName; // }; /** 货物单价,不含税 */ const getPriceExcludeTax = (s: IGood, record: any, calculatingDigits?: number) => { if ((!s.taxRate && s.taxRate !== 0) || (!record.priceIncludeTax && record.priceIncludeTax !== 0)) return; // 单价(含税)/(1+税率) = 单价(不含税) return format15(evaluate(`${record.priceIncludeTax} / (1+${s.taxRate}/100)`), calculatingDigits); }; // 获取我方名称 const getItemName = (record: any, editGood: IGood) => { // let shorthand; // shorthand = record.shorthand; // if (shorthand) { // return `*${shorthand}*${record.itemName}`; // } // shorthand = getSN(editGood.itemName)?.shorthand; // if (shorthand) { // return `*${shorthand}*${record.itemNameSelf}`; // } return record.itemName; } // 获取他方名称 const getItemNameOther = (record: any, editGood: IGood) => { // if (!editGood.itemName) return editGood.itemName; // let shorthand; // shorthand = record.shorthand; // if (shorthand) { // return `*${shorthand}*${record.itemNameSelf}`; // } return record.itemName; } // 获取商品编号 const getItemCode = (record: any, editGood: IGood) => { // let shorthand; // shorthand = record.shorthand; // if (shorthand) { // return `*${shorthand}*${record.itemName}`; // } // shorthand = getSN(editGood.itemName)?.shorthand; // if (shorthand) { // return `*${shorthand}*${record.itemNameSelf}`; // } return record.productCode; }