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;
}