kts-component-invoice-operate 3.2.244 → 3.2.246
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dumi/theme/builtins/API.tsx +66 -66
- package/.editorconfig +16 -16
- package/.fatherrc.ts +4 -4
- package/.prettierignore +7 -7
- package/.prettierrc +11 -11
- package/.umirc.ts +8 -8
- package/BRANCH.md +5 -0
- package/README.md +12 -12
- package/branch/3.2.x +1 -0
- package/dist/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.d.ts +2 -0
- package/dist/Invoice/ui/digtal/StakeFarmerholder/index.d.ts +2 -0
- package/dist/index.esm.js +126 -7
- package/dist/index.js +126 -7
- package/docs/index.md +5 -5
- package/docs-dist/404.html +33 -33
- package/docs-dist/index.html +33 -33
- package/docs-dist/static/arrowDown.a1cbf0d8.svg +2 -2
- package/docs-dist/static/arrowUp.4c482054.svg +2 -2
- package/docs-dist/static/fork.5431267d.svg +11 -11
- package/docs-dist/static/plus.44013ce3.svg +11 -11
- package/docs-dist/static/plus.4fd1af30.svg +11 -11
- package/docs-dist/umi.css +18 -18
- package/index.html +12 -12
- package/package.json +62 -62
- package/src/Invoice/Invoice-digtal/_test/architecture/index.tsx +21 -21
- package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +40 -40
- package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +214 -214
- package/src/Invoice/Invoice-digtal/_test/freight/index.tsx +14580 -14580
- package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
- package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +868 -868
- package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +18 -18
- package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +19 -19
- package/src/Invoice/Invoice-digtal/_test/pay/index.tsx +14636 -14636
- package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
- package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +55 -55
- package/src/Invoice/Invoice-digtal/_test/realEstateInfo/index.tsx +83 -83
- package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
- package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
- package/src/Invoice/Invoice-digtal/index.md +44 -44
- package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +116 -116
- package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +26 -26
- package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
- package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IColumnsReplenish/index.ts +10 -10
- package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/IGood/index.ts +33 -33
- package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/ImportGoods/index.ts +81 -81
- package/src/Invoice/InvoiceController/InvoiceControllerState/FreightListState/index.ts +39 -39
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +91 -90
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +84 -84
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
- package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +134 -134
- package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IColumnsReplenish/index.ts +10 -10
- package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/IGood/index.ts +35 -35
- package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/ImportGoods/index.ts +81 -81
- package/src/Invoice/InvoiceController/InvoiceControllerState/PayListState/index.ts +39 -39
- package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
- package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +76 -76
- package/src/Invoice/InvoiceController/fns/addFreight.ts +11 -11
- package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
- package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
- package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +86 -86
- package/src/Invoice/InvoiceController/fns/addPay.ts +11 -11
- package/src/Invoice/InvoiceController/fns/delFreight.ts +38 -38
- package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
- package/src/Invoice/InvoiceController/fns/delPay.ts +38 -38
- package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
- package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
- package/src/Invoice/InvoiceController/fns/itemBlur.ts +40 -40
- package/src/Invoice/InvoiceController/fns/mergeDetails.ts +201 -201
- package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +35 -35
- package/src/Invoice/InvoiceController/fns/saveEditFreight.ts +24 -24
- package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
- package/src/Invoice/InvoiceController/fns/saveEditPay.ts +23 -23
- package/src/Invoice/InvoiceController/fns/setEditFreight.ts +16 -16
- package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
- package/src/Invoice/InvoiceController/fns/setEditPay.ts +16 -16
- package/src/Invoice/InvoiceController/fns/setFreight.ts +10 -10
- package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
- package/src/Invoice/InvoiceController/fns/setPay.ts +10 -10
- package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
- package/src/Invoice/InvoiceController/index.ts +127 -127
- package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
- package/src/Invoice/_test/children/index.tsx +214 -214
- package/src/Invoice/_test/deduction/index.tsx +956 -957
- package/src/Invoice/_test/draft/index.tsx +40 -40
- package/src/Invoice/_test/easiest/index.tsx +5 -5
- package/src/Invoice/_test/endowCode/index.tsx +1158 -1158
- package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
- package/src/Invoice/_test/importBuyer/index.tsx +74 -74
- package/src/Invoice/_test/importGoods/index.tsx +1197 -1197
- package/src/Invoice/_test/invoiceType/index.tsx +59 -59
- package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
- package/src/Invoice/_test/replaceHead/index.tsx +22 -22
- package/src/Invoice/_test/retrieveData/index.tsx +22 -22
- package/src/Invoice/_test/seller/index.tsx +28 -28
- package/src/Invoice/_test/setDataSource/index.tsx +73 -73
- package/src/Invoice/_test/unit/index.tsx +19 -19
- package/src/Invoice/index.less +31 -31
- package/src/Invoice/index.md +56 -56
- package/src/Invoice/index.tsx +200 -200
- package/src/Invoice/tools/calculate/index.ts +144 -144
- package/src/Invoice/tools/coolingFn/index.ts +17 -17
- package/src/Invoice/tools/evaluate/index.ts +7 -7
- package/src/Invoice/tools/idGenerator/index.ts +2 -2
- package/src/Invoice/tools/itemName/index.ts +55 -55
- package/src/Invoice/tools/lazyFn/index.ts +19 -19
- package/src/Invoice/tools/mounting/index.ts +13 -13
- package/src/Invoice/tools/strringFn/index.ts +40 -40
- package/src/Invoice/tools/useToGenerateId/index.ts +12 -12
- package/src/Invoice/tools/utils/index.ts +1 -1
- package/src/Invoice/tools/utils/money/index.ts +20 -20
- package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
- package/src/Invoice/ui/default/Buyer/index.less +219 -219
- package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
- package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
- package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
- package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
- package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +612 -612
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +681 -647
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +769 -719
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Expand/index.tsx +57 -57
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +49 -49
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +91 -91
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +118 -118
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/dist/index.js +32 -32
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +25 -25
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +99 -99
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
- package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
- package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
- package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +52 -52
- package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +120 -120
- package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
- package/src/Invoice/ui/default/GoodsList/index.less +185 -185
- package/src/Invoice/ui/default/GoodsList/index.tsx +207 -207
- package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +72 -72
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +109 -109
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +94 -94
- package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
- package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
- package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
- package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
- package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
- package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +114 -114
- package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +40 -40
- package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +71 -71
- package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
- package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +130 -130
- package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
- package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
- package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +31 -31
- package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
- package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +201 -201
- package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
- package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
- package/src/Invoice/ui/default/Seller/index.less +113 -113
- package/src/Invoice/ui/default/Seller/index.tsx +98 -98
- package/src/Invoice/ui/default/Sign/index.less +14 -14
- package/src/Invoice/ui/default/Sign/index.tsx +71 -71
- package/src/Invoice/ui/digtal/Architecture/index.less +18 -18
- package/src/Invoice/ui/digtal/Architecture/index.tsx +177 -177
- package/src/Invoice/ui/digtal/FreightList/hook/useColumns/dist/index.js +616 -616
- package/src/Invoice/ui/digtal/FreightList/hook/useColumns/index.tsx +246 -246
- package/src/Invoice/ui/digtal/FreightList/hook/useColumns/ui/TitleText/index.tsx +20 -20
- package/src/Invoice/ui/digtal/FreightList/hook/useOnRow/index.tsx +37 -37
- package/src/Invoice/ui/digtal/FreightList/hook/useRowSelection/index.tsx +119 -119
- package/src/Invoice/ui/digtal/FreightList/hook/useWindowClick/index.tsx +23 -23
- package/src/Invoice/ui/digtal/FreightList/index.less +72 -72
- package/src/Invoice/ui/digtal/FreightList/index.tsx +129 -129
- package/src/Invoice/ui/digtal/FreightList/ui/AddRowButton/index.tsx +74 -74
- package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
- package/src/Invoice/ui/digtal/FreightList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
- package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.less +28 -28
- package/src/Invoice/ui/digtal/FreightList/ui/TableRow/index.tsx +20 -20
- package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.less +38 -38
- package/src/Invoice/ui/digtal/FreightList/ui/TableVirtual/index.tsx +108 -108
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +683 -683
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/dist/index.js +616 -616
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +723 -724
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +87 -87
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
- package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
- package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +51 -51
- package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
- package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
- package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
- package/src/Invoice/ui/digtal/GoodsList/index.tsx +181 -181
- package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +87 -87
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +340 -340
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +37 -37
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
- package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
- package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
- package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
- package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +60 -60
- package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
- package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +98 -98
- package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
- package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
- package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +52 -52
- package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
- package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +113 -113
- package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +34 -34
- package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
- package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
- package/src/Invoice/ui/digtal/PayList/hook/useColumns/dist/index.js +616 -616
- package/src/Invoice/ui/digtal/PayList/hook/useColumns/index.tsx +168 -168
- package/src/Invoice/ui/digtal/PayList/hook/useColumns/ui/TitleText/index.tsx +20 -20
- package/src/Invoice/ui/digtal/PayList/hook/useOnRow/index.tsx +37 -37
- package/src/Invoice/ui/digtal/PayList/hook/useRowSelection/index.tsx +119 -119
- package/src/Invoice/ui/digtal/PayList/hook/useWindowClick/index.tsx +19 -19
- package/src/Invoice/ui/digtal/PayList/index.less +72 -72
- package/src/Invoice/ui/digtal/PayList/index.tsx +132 -132
- package/src/Invoice/ui/digtal/PayList/ui/AddRowButton/index.tsx +74 -74
- package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
- package/src/Invoice/ui/digtal/PayList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +36 -36
- package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.less +28 -28
- package/src/Invoice/ui/digtal/PayList/ui/TableRow/index.tsx +20 -20
- package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.less +38 -38
- package/src/Invoice/ui/digtal/PayList/ui/TableVirtual/index.tsx +108 -108
- package/src/Invoice/ui/digtal/RealEstateInfo/index.less +21 -21
- package/src/Invoice/ui/digtal/RealEstateInfo/index.tsx +451 -451
- package/src/Invoice/ui/digtal/Sign/index.less +48 -48
- package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
- package/src/Invoice/ui/digtal/StakeFarmerholder/index.less +99 -99
- package/src/Invoice/ui/digtal/StakeFarmerholder/index.tsx +1102 -1096
- package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowDown.svg +2 -2
- package/src/Invoice/ui/digtal/StakeFarmerholder/svg/arrowUp.svg +2 -2
- package/src/Invoice/ui/digtal/StakeFarmerholder/svg/plus.svg +11 -11
- package/src/Invoice/ui/digtal/Stakeholder/index.less +99 -99
- package/src/Invoice/ui/digtal/Stakeholder/index.tsx +453 -453
- package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
- package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
- package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
- package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
- package/src/InvoiceTypeModal/dist/index.js +92 -92
- package/src/InvoiceTypeModal/index.less +7 -7
- package/src/InvoiceTypeModal/index.md +5 -5
- package/src/InvoiceTypeModal/index.tsx +161 -161
- package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +184 -184
- package/src/TaxClassificationCodeModal/index.less +17 -17
- package/src/TaxClassificationCodeModal/index.md +6 -6
- package/src/TaxClassificationCodeModal/index.tsx +152 -152
- package/src/index.ts +13 -13
- package/tsconfig.json +31 -31
- package/typings.d.ts +3 -3
|
@@ -1,683 +1,683 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 数量 保留15位数字
|
|
3
|
-
* 单价 保留15位数字
|
|
4
|
-
* 金额 小数点后 2位
|
|
5
|
-
* 税额 小数点后 2位
|
|
6
|
-
*/
|
|
7
|
-
import { WrappedFormUtils } from 'kts-components-antd-x3/lib/form/Form';
|
|
8
|
-
import InvoiceController, { IGood, LineAttributeType } from '../../../../../../InvoiceController';
|
|
9
|
-
import evaluate from '../../../../../../tools/evaluate';
|
|
10
|
-
import { message } from 'kts-components-antd-x3'
|
|
11
|
-
import { format2, format15, countTaxAmount, countAmountExcludeTax, countPrice } from '../../../../../../tools/calculate';
|
|
12
|
-
import moment from 'moment';
|
|
13
|
-
import { equal } from 'mathjs';
|
|
14
|
-
|
|
15
|
-
export { format2, format15 } from '../../../../../../tools/calculate';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** 延迟函数 */
|
|
20
|
-
const lazyFn = (fn: Function, delayed: number = 200) => {
|
|
21
|
-
let timer: any;
|
|
22
|
-
return (...par: any[]) => {
|
|
23
|
-
clearTimeout(timer);
|
|
24
|
-
timer = setTimeout(() => {
|
|
25
|
-
timer = undefined;
|
|
26
|
-
fn.apply(null, par);
|
|
27
|
-
}, delayed);
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
let promptErrV: any = {}
|
|
32
|
-
|
|
33
|
-
/** 提示错误 */
|
|
34
|
-
const promptErr = (err: any) => {
|
|
35
|
-
if (!err) return false;
|
|
36
|
-
if (err.errors[0].message === 'lineAmountIncludeTax need to revalidate') return true;
|
|
37
|
-
if (err.errors[0].message === 'lineAmountExcludeTax need to revalidate') return true;
|
|
38
|
-
if (err.errors[0].message === 'priceIncludeTax need to revalidate') return true;
|
|
39
|
-
if (err.errors[0].message === 'priceExcludeTax need to revalidate') return true;
|
|
40
|
-
|
|
41
|
-
if (new Date().getTime() - promptErrV.t > 2000 || err.errors[0].message !== promptErrV.m) {
|
|
42
|
-
promptErrV.t = new Date().getTime();
|
|
43
|
-
promptErrV.m = err.errors[0].message;
|
|
44
|
-
message.error({ content: err.errors[0].message, duration: 2 });
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** 清除计算中启动字段 */
|
|
51
|
-
export const clearCalculatingField = async (controller: InvoiceController) => controller.run(async s => s.calculatingField = '');
|
|
52
|
-
|
|
53
|
-
/** 数量改变了 */
|
|
54
|
-
export const onChangeQuantity = lazyFn(
|
|
55
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
56
|
-
form.validateFields(async (err, values) => {
|
|
57
|
-
err = err || {};
|
|
58
|
-
|
|
59
|
-
if (!values.quantity && values.quantity !== 0) {
|
|
60
|
-
await controller.setEditGood({ quantity: undefined });
|
|
61
|
-
await clearCalculatingField(controller);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (err.quantity) {
|
|
65
|
-
await clearCalculatingField(controller);
|
|
66
|
-
return
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
70
|
-
const quantity = format15(values.quantity, calculatingDigits);
|
|
71
|
-
await controller.setEditGood({ quantity });
|
|
72
|
-
form.setFieldsValue({ quantity });
|
|
73
|
-
|
|
74
|
-
// 是否含税
|
|
75
|
-
if (controller.state.goodsListState.isTaxIncluded) {
|
|
76
|
-
// 含税
|
|
77
|
-
if (!err.priceIncludeTax && values.priceIncludeTax) {
|
|
78
|
-
// 可以找到 单价(含税)
|
|
79
|
-
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
80
|
-
const lineAmountIncludeTax = format2(evaluate(`${priceIncludeTax} * ${quantity}`));
|
|
81
|
-
form.setFieldsValue({ lineAmountIncludeTax });
|
|
82
|
-
await controller.setEditGood({ lineAmountIncludeTax });
|
|
83
|
-
} else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
|
|
84
|
-
// 可以找到 金额(含税)
|
|
85
|
-
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
86
|
-
const priceIncludeTax = format15(
|
|
87
|
-
evaluate(`${lineAmountIncludeTax} / ${quantity}`),
|
|
88
|
-
calculatingDigits);
|
|
89
|
-
form.setFieldsValue({ priceIncludeTax });
|
|
90
|
-
await controller.setEditGood({ priceIncludeTax });
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// 更新不含税
|
|
94
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
95
|
-
} else {
|
|
96
|
-
// 不含税
|
|
97
|
-
if (!err.priceExcludeTax && values.priceExcludeTax) {
|
|
98
|
-
// 可以找到 单价(不含税)
|
|
99
|
-
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
100
|
-
const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
|
|
101
|
-
form.setFieldsValue({ lineAmountExcludeTax });
|
|
102
|
-
await controller.setEditGood({ lineAmountExcludeTax, quantity });
|
|
103
|
-
} else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
|
|
104
|
-
// 可以找到 金额(不含税)
|
|
105
|
-
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
106
|
-
const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
|
|
107
|
-
form.setFieldsValue({ priceExcludeTax });
|
|
108
|
-
await controller.setEditGood({ priceExcludeTax, quantity });
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// 更新含税
|
|
112
|
-
await updateUnitPriceTax(controller, form, record);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// 清楚 计算中启动字段
|
|
116
|
-
await clearCalculatingField(controller);
|
|
117
|
-
});
|
|
118
|
-
},
|
|
119
|
-
1000,
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
/** 单价(含税) */
|
|
123
|
-
export const onChangePriceIncludeTax = lazyFn(
|
|
124
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
125
|
-
form.validateFields(async (err, values) => {
|
|
126
|
-
err = err || {};
|
|
127
|
-
|
|
128
|
-
if (!values.priceIncludeTax && values.priceIncludeTax !== 0) {
|
|
129
|
-
await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
|
|
130
|
-
await clearCalculatingField(controller);
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (err.priceIncludeTax) {
|
|
134
|
-
await clearCalculatingField(controller);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
139
|
-
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
140
|
-
await controller.setEditGood({ priceIncludeTax });
|
|
141
|
-
form.setFieldsValue({ priceIncludeTax });
|
|
142
|
-
|
|
143
|
-
// 是否有数量
|
|
144
|
-
if (!err.quantity && values.quantity) {
|
|
145
|
-
const quantity = format15(values.quantity, calculatingDigits);
|
|
146
|
-
const lineAmountIncludeTax = format2(evaluate(`${quantity} * ${priceIncludeTax}`));
|
|
147
|
-
form.setFieldsValue({ lineAmountIncludeTax });
|
|
148
|
-
await controller.setEditGood({ lineAmountIncludeTax });
|
|
149
|
-
} else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
|
|
150
|
-
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
151
|
-
const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
|
|
152
|
-
form.setFieldsValue({ quantity });
|
|
153
|
-
await controller.setEditGood({ quantity });
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// 更新不含税
|
|
157
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
158
|
-
|
|
159
|
-
// 清楚 计算中启动字段
|
|
160
|
-
await clearCalculatingField(controller);
|
|
161
|
-
});
|
|
162
|
-
},
|
|
163
|
-
1000,
|
|
164
|
-
);
|
|
165
|
-
|
|
166
|
-
/** 单价(不含税) */
|
|
167
|
-
export const onChangePriceExcludeTax = lazyFn(
|
|
168
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
169
|
-
form.validateFields(async (err, values) => {
|
|
170
|
-
err = err || {};
|
|
171
|
-
|
|
172
|
-
if (!values.priceExcludeTax && values.priceExcludeTax !== 0) {
|
|
173
|
-
await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
|
|
174
|
-
await clearCalculatingField(controller);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
if (err.priceExcludeTax) {
|
|
178
|
-
await clearCalculatingField(controller);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
183
|
-
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
184
|
-
await controller.setEditGood({ priceExcludeTax });
|
|
185
|
-
form.setFieldsValue({ priceExcludeTax });
|
|
186
|
-
|
|
187
|
-
// 是否有数量
|
|
188
|
-
if (!err.quantity && values.quantity) {
|
|
189
|
-
const quantity = format15(values.quantity, calculatingDigits);
|
|
190
|
-
const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
|
|
191
|
-
form.setFieldsValue({ lineAmountExcludeTax });
|
|
192
|
-
await controller.setEditGood({ lineAmountExcludeTax });
|
|
193
|
-
} else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
|
|
194
|
-
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
195
|
-
const quantity = format15(
|
|
196
|
-
evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`),
|
|
197
|
-
calculatingDigits
|
|
198
|
-
);
|
|
199
|
-
form.setFieldsValue({ quantity });
|
|
200
|
-
await controller.setEditGood({ quantity });
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// 更新含税
|
|
204
|
-
await updateUnitPriceTax(controller, form, record);
|
|
205
|
-
|
|
206
|
-
// 清楚 计算中启动字段
|
|
207
|
-
await clearCalculatingField(controller);
|
|
208
|
-
});
|
|
209
|
-
},
|
|
210
|
-
1000,
|
|
211
|
-
);
|
|
212
|
-
|
|
213
|
-
/** 金额(含税) */
|
|
214
|
-
export const onChangeLineAmountIncludeTax = lazyFn(
|
|
215
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
216
|
-
form.validateFields(async (err, values) => {
|
|
217
|
-
|
|
218
|
-
err = err || {};
|
|
219
|
-
if (promptErr(err.lineAmountIncludeTax) || !values.lineAmountIncludeTax) {
|
|
220
|
-
// 更新不含税
|
|
221
|
-
await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
|
|
222
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
223
|
-
await clearCalculatingField(controller);
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
228
|
-
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
229
|
-
await controller.setEditGood({ lineAmountIncludeTax });
|
|
230
|
-
form.setFieldsValue({ lineAmountIncludeTax });
|
|
231
|
-
|
|
232
|
-
// 是否有数量
|
|
233
|
-
if (!err.quantity && values.quantity) {
|
|
234
|
-
const quantity = format15(values.quantity, calculatingDigits);
|
|
235
|
-
const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${quantity}`), calculatingDigits);
|
|
236
|
-
form.setFieldsValue({ priceIncludeTax });
|
|
237
|
-
await controller.setEditGood({ priceIncludeTax });
|
|
238
|
-
} else if (!err.priceIncludeTax && (values.priceIncludeTax || values.priceIncludeTax === 0)) {
|
|
239
|
-
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
240
|
-
const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
|
|
241
|
-
form.setFieldsValue({ quantity });
|
|
242
|
-
await controller.setEditGood({ quantity });
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// 更新不含税
|
|
246
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
247
|
-
|
|
248
|
-
// 清楚 计算中启动字段
|
|
249
|
-
await clearCalculatingField(controller);
|
|
250
|
-
});
|
|
251
|
-
},
|
|
252
|
-
1000,
|
|
253
|
-
);
|
|
254
|
-
|
|
255
|
-
/** 金额(不含税) */
|
|
256
|
-
export const onChangeLineAmountExcludeTax = lazyFn(
|
|
257
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
258
|
-
form.validateFields(async (err, values) => {
|
|
259
|
-
err = err || {};
|
|
260
|
-
if (promptErr(err.lineAmountExcludeTax) || !values.lineAmountExcludeTax) {
|
|
261
|
-
// 更新含税
|
|
262
|
-
await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
|
|
263
|
-
await updateUnitPriceTax(controller, form, record);
|
|
264
|
-
await clearCalculatingField(controller);
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
268
|
-
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
269
|
-
await controller.setEditGood({ lineAmountExcludeTax });
|
|
270
|
-
form.setFieldsValue({ lineAmountExcludeTax });
|
|
271
|
-
|
|
272
|
-
// 是否有数量
|
|
273
|
-
if (!err.quantity && values.quantity) {
|
|
274
|
-
const quantity = format15(values.quantity, calculatingDigits);
|
|
275
|
-
const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
|
|
276
|
-
form.setFieldsValue({ priceExcludeTax });
|
|
277
|
-
await controller.setEditGood({ priceExcludeTax });
|
|
278
|
-
} else if (!err.priceExcludeTax && values.priceExcludeTax) {
|
|
279
|
-
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
280
|
-
const quantity = format15(evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`), calculatingDigits);
|
|
281
|
-
form.setFieldsValue({ quantity });
|
|
282
|
-
await controller.setEditGood({ quantity });
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// 更新含税
|
|
286
|
-
await updateUnitPriceTax(controller, form, record);
|
|
287
|
-
|
|
288
|
-
// 清楚 计算中启动字段
|
|
289
|
-
await clearCalculatingField(controller);
|
|
290
|
-
});
|
|
291
|
-
},
|
|
292
|
-
1000,
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
/** 税率 */
|
|
296
|
-
export const onChangeTaxRate = lazyFn(
|
|
297
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
298
|
-
|
|
299
|
-
form.validateFields(async (err, values) => {
|
|
300
|
-
err = err || {};
|
|
301
|
-
if (promptErr(err.taxRate) || (!values.taxRate && values.taxRate !== 0)) return;
|
|
302
|
-
|
|
303
|
-
let taxRate = parseFloat(values.taxRate);
|
|
304
|
-
await controller.setEditGood({ taxRate });
|
|
305
|
-
|
|
306
|
-
// 去掉赋码
|
|
307
|
-
(() => {
|
|
308
|
-
const cache = controller.state.goodsListState.endowCode.cache;
|
|
309
|
-
const record = controller.state.goodsListState.editGood;
|
|
310
|
-
if (record && cache[record.$index]) {
|
|
311
|
-
record.favouredPolicyName = cache[record.$index].favouredPolicyName;
|
|
312
|
-
record.favouredPolicyMark = cache[record.$index].favouredPolicyMark;
|
|
313
|
-
record.taxFreeType = cache[record.$index].taxFreeType;
|
|
314
|
-
cache[record.$index] = undefined;
|
|
315
|
-
}
|
|
316
|
-
})()
|
|
317
|
-
|
|
318
|
-
switch (controller.state.goodsListState.calculateType) {
|
|
319
|
-
case '1':
|
|
320
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
321
|
-
break;
|
|
322
|
-
|
|
323
|
-
case '2':
|
|
324
|
-
await updateUnitPriceTax(controller, form, record);
|
|
325
|
-
break;
|
|
326
|
-
|
|
327
|
-
case '3':
|
|
328
|
-
default:
|
|
329
|
-
// 是否含税
|
|
330
|
-
if (controller.state.goodsListState.isTaxIncluded) {
|
|
331
|
-
await updateUnitPriceExcludingTax(controller, form, record);
|
|
332
|
-
} else {
|
|
333
|
-
await updateUnitPriceTax(controller, form, record);
|
|
334
|
-
}
|
|
335
|
-
break;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// 清楚 计算中启动字段
|
|
339
|
-
await clearCalculatingField(controller);
|
|
340
|
-
});
|
|
341
|
-
},
|
|
342
|
-
1000,
|
|
343
|
-
);
|
|
344
|
-
|
|
345
|
-
/** 税额 */
|
|
346
|
-
export const onChangeTaxAmount = lazyFn(
|
|
347
|
-
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
348
|
-
|
|
349
|
-
/** 金额(不含税) */
|
|
350
|
-
let lineAmountExcludeTax;
|
|
351
|
-
|
|
352
|
-
form.validateFields(async (err, values) => {
|
|
353
|
-
err = err || {};
|
|
354
|
-
|
|
355
|
-
const record = controller.state.goodsListState.editGood;
|
|
356
|
-
|
|
357
|
-
// 校验是否有含税金额
|
|
358
|
-
if (err.lineAmountIncludeTax && (!record?.lineAmountIncludeTax && record?.lineAmountIncludeTax !== 0)) {
|
|
359
|
-
await clearCalculatingField(controller);
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// 计数不含税金额
|
|
364
|
-
lineAmountExcludeTax = countAmountExcludeTax(record?.lineAmountIncludeTax || 0, values.taxAmount);
|
|
365
|
-
form.setFieldsValue({ lineAmountExcludeTax });
|
|
366
|
-
|
|
367
|
-
const priceExcludeTax: any = countPrice(lineAmountExcludeTax || '', record?.quantity || '', controller.state.calculatingDigits);
|
|
368
|
-
|
|
369
|
-
await controller.setEditGood({ lineAmountExcludeTax, taxAmount: values.taxAmount, priceExcludeTax });
|
|
370
|
-
form.setFieldsValue({ priceExcludeTax });
|
|
371
|
-
|
|
372
|
-
// 清楚 计算中启动字段
|
|
373
|
-
await clearCalculatingField(controller);
|
|
374
|
-
})
|
|
375
|
-
},
|
|
376
|
-
1000,
|
|
377
|
-
)
|
|
378
|
-
|
|
379
|
-
/** 小规模纳税人 1% 和 3% 自动赋码免税 */
|
|
380
|
-
export function dutyFree(controller: InvoiceController, taxRate: number, form: WrappedFormUtils<any>, record: IGood) {
|
|
381
|
-
|
|
382
|
-
const cache = controller.state.goodsListState.endowCode.cache;
|
|
383
|
-
const invoiceType = controller.state.invoiceType;
|
|
384
|
-
|
|
385
|
-
// 4月1日至12月31日
|
|
386
|
-
console.log('===> 小规模纳税人免税逻辑');
|
|
387
|
-
console.log('===> invoiceType', invoiceType);
|
|
388
|
-
console.log('===> en', controller.state.en);
|
|
389
|
-
console.log('===> taxRate', taxRate);
|
|
390
|
-
console.log('===> state', controller.state);
|
|
391
|
-
|
|
392
|
-
if (moment().valueOf() > moment('2022-12-31 23:59').valueOf()) return taxRate;
|
|
393
|
-
if (controller.state.en !== '08') return taxRate;
|
|
394
|
-
if (invoiceType !== '10' && invoiceType !== '04') return taxRate;
|
|
395
|
-
|
|
396
|
-
if (taxRate === 1 || taxRate === 3) {
|
|
397
|
-
cache[record.$index] = { favouredPolicyName: record.favouredPolicyName, favouredPolicyMark: record.favouredPolicyMark, taxFreeType: record.taxFreeType }
|
|
398
|
-
record.favouredPolicyName = '免税';
|
|
399
|
-
record.taxRate = 0;
|
|
400
|
-
record.favouredPolicyMark = 1;
|
|
401
|
-
record.taxFreeType = 1 as any;
|
|
402
|
-
form.setFieldsValue({ taxRate: 0 });
|
|
403
|
-
return 0;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/** 含税 => 更新(不含税) */
|
|
408
|
-
export const updateUnitPriceExcludingTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
409
|
-
return new Promise((resolve) => {
|
|
410
|
-
form.validateFields(async (err, values) => {
|
|
411
|
-
console.log('含税 => 更新(不含税')
|
|
412
|
-
|
|
413
|
-
err = err || {};
|
|
414
|
-
|
|
415
|
-
/** 税额 */
|
|
416
|
-
let taxAmount;
|
|
417
|
-
|
|
418
|
-
/** 金额(不含税) */
|
|
419
|
-
let lineAmountExcludeTax;
|
|
420
|
-
|
|
421
|
-
/** 不含税单价 */
|
|
422
|
-
let priceExcludeTax;
|
|
423
|
-
|
|
424
|
-
/** 扣除额 */
|
|
425
|
-
const deduction = controller.state.goodsListState.deduction;
|
|
426
|
-
|
|
427
|
-
const { editGood } = controller.state.goodsListState
|
|
428
|
-
|
|
429
|
-
// 计算税额
|
|
430
|
-
if (!promptErr(err.lineAmountIncludeTax) && !promptErr(err.taxRate)) {
|
|
431
|
-
taxAmount = countTaxAmount(values.lineAmountIncludeTax || editGood?.lineAmountIncludeTax, deduction, values.taxRate);
|
|
432
|
-
}
|
|
433
|
-
form.setFieldsValue({ taxAmount });
|
|
434
|
-
await controller.setEditGood({ taxAmount });
|
|
435
|
-
|
|
436
|
-
// 计算 金额(不含税)
|
|
437
|
-
if ((taxAmount || taxAmount === 0) && !promptErr(err.lineAmountIncludeTax)) {
|
|
438
|
-
lineAmountExcludeTax = countAmountExcludeTax(values.lineAmountIncludeTax || editGood?.lineAmountIncludeTax, taxAmount);
|
|
439
|
-
}
|
|
440
|
-
form.setFieldsValue({ lineAmountExcludeTax });
|
|
441
|
-
await controller.setEditGood({ lineAmountExcludeTax });
|
|
442
|
-
|
|
443
|
-
// 单价(不含税)
|
|
444
|
-
if (lineAmountExcludeTax && !promptErr(err.quantity)) {
|
|
445
|
-
priceExcludeTax = countPrice(lineAmountExcludeTax, values.quantity || editGood?.quantity, controller.state.calculatingDigits);
|
|
446
|
-
}
|
|
447
|
-
form.setFieldsValue({ priceExcludeTax });
|
|
448
|
-
await controller.setEditGood({ priceExcludeTax });
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
resolve(undefined)
|
|
452
|
-
})
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
/** 不含税 => 更新(含税) */
|
|
456
|
-
export const updateUnitPriceTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
457
|
-
return new Promise((resolve) => {
|
|
458
|
-
form.validateFields(async (err, values) => {
|
|
459
|
-
console.log('不含税 => 更新(含税)')
|
|
460
|
-
|
|
461
|
-
err = err || {};
|
|
462
|
-
|
|
463
|
-
if (
|
|
464
|
-
!err.taxRat &&
|
|
465
|
-
(values.taxRate || values.taxRate === 0) &&
|
|
466
|
-
!promptErr(err.lineAmountExcludeTax) &&
|
|
467
|
-
(values.lineAmountExcludeTax || values.lineAmountExcludeTax === 0)
|
|
468
|
-
) {
|
|
469
|
-
|
|
470
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
471
|
-
// 金额(含税)= 金额(不含税)* (1+ 税率)
|
|
472
|
-
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
473
|
-
const lineAmountIncludeTax = format2(evaluate(`${lineAmountExcludeTax} * (1+(${values.taxRate}/100))`));
|
|
474
|
-
await controller.setEditGood({ lineAmountIncludeTax });
|
|
475
|
-
|
|
476
|
-
// 单价(含税) = 金额(含税) / (數量)
|
|
477
|
-
// 是否有数量
|
|
478
|
-
if (!err.quantity && values.quantity) {
|
|
479
|
-
const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${values.quantity}`), calculatingDigits);
|
|
480
|
-
await controller.setEditGood({ priceIncludeTax });
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
// 税额 = 金额(含税)-金额(不含税)
|
|
484
|
-
const taxAmount = evaluate(`${lineAmountIncludeTax} - ${lineAmountExcludeTax}`);
|
|
485
|
-
form.setFieldsValue({ taxAmount });
|
|
486
|
-
await controller.setEditGood({ taxAmount });
|
|
487
|
-
} else {
|
|
488
|
-
form.setFieldsValue({ taxAmount: undefined });
|
|
489
|
-
await controller.setEditGood({ taxAmount: undefined });
|
|
490
|
-
}
|
|
491
|
-
// 单价(含税) = 单价(不含税) * (1+税率)
|
|
492
|
-
// if (
|
|
493
|
-
// !err.taxRat &&
|
|
494
|
-
// (values.taxRate || values.taxRate === 0) &&
|
|
495
|
-
// !promptErr(err.priceExcludeTax) &&
|
|
496
|
-
// (values.priceExcludeTax || values.priceExcludeTax === 0)
|
|
497
|
-
// ) {
|
|
498
|
-
// const priceExcludeTax = format15(values.priceExcludeTax);
|
|
499
|
-
// const priceIncludeTax = format15(evaluate(`${priceExcludeTax} * (1+(${values.taxRate}/100))`));
|
|
500
|
-
// await controller.setEditGood({ priceIncludeTax });
|
|
501
|
-
// }
|
|
502
|
-
|
|
503
|
-
resolve(undefined)
|
|
504
|
-
});
|
|
505
|
-
})
|
|
506
|
-
};
|
|
507
|
-
|
|
508
|
-
/** 保存到编辑货物 */
|
|
509
|
-
export const onSaveEditGood = lazyFn(
|
|
510
|
-
(
|
|
511
|
-
controller: InvoiceController,
|
|
512
|
-
form: WrappedFormUtils,
|
|
513
|
-
record: IGood,
|
|
514
|
-
id: string,
|
|
515
|
-
) => {
|
|
516
|
-
form.validateFields(async (err, values) => {
|
|
517
|
-
err = err || {};
|
|
518
|
-
if (err[id]) return;
|
|
519
|
-
|
|
520
|
-
const v = {} as any;
|
|
521
|
-
v[id] = values[id];
|
|
522
|
-
await controller.setEditGood({ ...v });
|
|
523
|
-
});
|
|
524
|
-
},
|
|
525
|
-
1000,
|
|
526
|
-
);
|
|
527
|
-
|
|
528
|
-
/** 单调赋码 */
|
|
529
|
-
export const endowCode = async (controller: InvoiceController, goods: IGood) => {
|
|
530
|
-
await controller.wait();
|
|
531
|
-
await controller.saveEditGood();
|
|
532
|
-
await controller.pipeline(async (s) => {
|
|
533
|
-
if (s.goodsListState.form && s.goodsListState.editGood?.$index === goods?.$index) {
|
|
534
|
-
const err: any = s.goodsListState.form.getFieldsError();
|
|
535
|
-
for (let key in err) {
|
|
536
|
-
if (!err[key]) continue;
|
|
537
|
-
message.error(err[key][0]);
|
|
538
|
-
return;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
let g = s.goodsListState.goodsMap.get(goods.$index) as any;
|
|
543
|
-
let i = s.goodsListState.goodsList.indexOf(g);
|
|
544
|
-
|
|
545
|
-
switch (goods.lineAttribute) {
|
|
546
|
-
case LineAttributeType.正常:
|
|
547
|
-
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index];
|
|
548
|
-
break;
|
|
549
|
-
|
|
550
|
-
case LineAttributeType.折扣行:
|
|
551
|
-
|
|
552
|
-
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i - 1].$index];
|
|
553
|
-
break;
|
|
554
|
-
|
|
555
|
-
case LineAttributeType.被折扣行:
|
|
556
|
-
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i + 1].$index];
|
|
557
|
-
break;
|
|
558
|
-
}
|
|
559
|
-
})();
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
/** 修改了 项目名称 */
|
|
563
|
-
export const onChangeItemName = async (controller: InvoiceController, form: WrappedFormUtils<any>, record: IGood) => {
|
|
564
|
-
controller.run(async s => {
|
|
565
|
-
const value = form.getFieldsValue().itemName;
|
|
566
|
-
|
|
567
|
-
if (s.goodsListState.isMyShow) {
|
|
568
|
-
await controller.setEditGood({ itemNameSelf: value });
|
|
569
|
-
record.itemName && await controller.setEditGood({ itemName: record.itemName });
|
|
570
|
-
} else {
|
|
571
|
-
await controller.setEditGood({ itemName: value });
|
|
572
|
-
record.itemNameSelf && await controller.setEditGood({ itemNameSelf: record.itemNameSelf });
|
|
573
|
-
}
|
|
574
|
-
})
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
/** 修改了含税开关 重新计算 */
|
|
578
|
-
export const onChangeSwitchTax = async (controller: InvoiceController, isTaxIncluded: boolean) => {
|
|
579
|
-
if (!controller.state.goodsListState.isRecalculateWhenSwitchTax) {
|
|
580
|
-
controller.pipeline(async s => { s.goodsListState = { ...s.goodsListState, isTaxIncluded } })();
|
|
581
|
-
return
|
|
582
|
-
}
|
|
583
|
-
const calculatingDigits = controller.state.calculatingDigits;
|
|
584
|
-
|
|
585
|
-
await controller.saveEditGood();
|
|
586
|
-
await controller.wait();
|
|
587
|
-
|
|
588
|
-
await controller.run(async s => {
|
|
589
|
-
if (s.goodsListState.editGood) {
|
|
590
|
-
// message.error({
|
|
591
|
-
// content: '你正在编辑一个货物',
|
|
592
|
-
// key: '你正在编辑一个货物',
|
|
593
|
-
// });
|
|
594
|
-
|
|
595
|
-
// return;
|
|
596
|
-
await controller.state.goodsListState.form?.validateFields(async (err: any, values: any) => {
|
|
597
|
-
if (err) {
|
|
598
|
-
const firstError: any = Object.values(err)[0];
|
|
599
|
-
message.error({
|
|
600
|
-
content: firstError.errors[0].message,
|
|
601
|
-
key: '你正在编辑一个货物',
|
|
602
|
-
});
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
|
-
});
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
s.goodsListState.isTaxIncluded = isTaxIncluded;
|
|
609
|
-
|
|
610
|
-
try {
|
|
611
|
-
let needRefresh = false;
|
|
612
|
-
|
|
613
|
-
if (s.goodsListState?.goodsList && s.goodsListState.goodsList.length) {
|
|
614
|
-
const newGoodsList = s.goodsListState.goodsList.map(good => {
|
|
615
|
-
const {
|
|
616
|
-
quantity: sourceQuantity,
|
|
617
|
-
priceExcludeTax: sourcePriceExcludeTax,
|
|
618
|
-
priceIncludeTax: sourcePriceIncludeTax,
|
|
619
|
-
lineAmountExcludeTax: sourceLineAmountExcludeTax,
|
|
620
|
-
lineAmountIncludeTax: sourceLineAmountIncludeTax,
|
|
621
|
-
taxRate } = good;
|
|
622
|
-
if (isTaxIncluded) {
|
|
623
|
-
if (!sourceQuantity && sourceQuantity !== 0) return good;
|
|
624
|
-
if (!sourcePriceIncludeTax && sourcePriceIncludeTax !== 0) return good;
|
|
625
|
-
if (!taxRate && taxRate !== 0) return good;
|
|
626
|
-
if (sourcePriceExcludeTax && sourceLineAmountExcludeTax && equal(countPrice(sourceLineAmountExcludeTax, sourceQuantity) || 0, sourcePriceExcludeTax)) {
|
|
627
|
-
return good
|
|
628
|
-
} else {
|
|
629
|
-
needRefresh = true;
|
|
630
|
-
}
|
|
631
|
-
const quantity: any = format15(sourceQuantity, calculatingDigits);
|
|
632
|
-
const priceIncludeTax: any = format15(sourcePriceIncludeTax, calculatingDigits);
|
|
633
|
-
|
|
634
|
-
const lineAmountIncludeTax: any = format2(evaluate(`${priceIncludeTax} * ${quantity}`));
|
|
635
|
-
const taxAmount: any = countTaxAmount(lineAmountIncludeTax, controller.state.goodsListState.deduction, taxRate as any);
|
|
636
|
-
const lineAmountExcludeTax: any = countAmountExcludeTax(lineAmountIncludeTax, taxAmount);
|
|
637
|
-
const priceExcludeTax: any = countPrice(lineAmountExcludeTax, quantity, controller.state.calculatingDigits);
|
|
638
|
-
|
|
639
|
-
return {
|
|
640
|
-
...good,
|
|
641
|
-
lineAmountExcludeTax,
|
|
642
|
-
lineAmountIncludeTax,
|
|
643
|
-
taxAmount,
|
|
644
|
-
priceExcludeTax
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
} else {
|
|
648
|
-
if (!sourceQuantity && sourceQuantity !== 0) return good;
|
|
649
|
-
if (!sourcePriceExcludeTax && sourcePriceExcludeTax !== 0) return good;
|
|
650
|
-
if (!taxRate && taxRate !== 0) return good;
|
|
651
|
-
if (sourcePriceIncludeTax && sourceLineAmountIncludeTax && equal(countPrice(sourceLineAmountIncludeTax, sourceQuantity) || 0, sourcePriceIncludeTax)) {
|
|
652
|
-
return good
|
|
653
|
-
} else {
|
|
654
|
-
needRefresh = true;
|
|
655
|
-
}
|
|
656
|
-
const quantity: any = format15(sourceQuantity, calculatingDigits);
|
|
657
|
-
const priceExcludeTax: any = format15(sourcePriceExcludeTax, calculatingDigits);
|
|
658
|
-
|
|
659
|
-
const lineAmountExcludeTax: any = format2(evaluate(`${priceExcludeTax} * ${quantity}`));
|
|
660
|
-
const lineAmountIncludeTax: any = format2(evaluate(`${lineAmountExcludeTax} * (1+(${taxRate}/100))`));
|
|
661
|
-
const priceIncludeTax: any = format15(evaluate(`${lineAmountIncludeTax} / ${quantity}`), calculatingDigits);
|
|
662
|
-
const taxAmount: any = evaluate(`${lineAmountIncludeTax} - ${lineAmountExcludeTax}`);
|
|
663
|
-
|
|
664
|
-
return {
|
|
665
|
-
...good,
|
|
666
|
-
lineAmountExcludeTax,
|
|
667
|
-
lineAmountIncludeTax,
|
|
668
|
-
taxAmount,
|
|
669
|
-
priceIncludeTax
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
})
|
|
674
|
-
|
|
675
|
-
if (needRefresh) {
|
|
676
|
-
s.goodsListState.goodsList = newGoodsList;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
} catch (e) {
|
|
680
|
-
console.error('切换税率重新计算出错', e, s.goodsListState)
|
|
681
|
-
}
|
|
682
|
-
})
|
|
683
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 数量 保留15位数字
|
|
3
|
+
* 单价 保留15位数字
|
|
4
|
+
* 金额 小数点后 2位
|
|
5
|
+
* 税额 小数点后 2位
|
|
6
|
+
*/
|
|
7
|
+
import { WrappedFormUtils } from 'kts-components-antd-x3/lib/form/Form';
|
|
8
|
+
import InvoiceController, { IGood, LineAttributeType } from '../../../../../../InvoiceController';
|
|
9
|
+
import evaluate from '../../../../../../tools/evaluate';
|
|
10
|
+
import { message } from 'kts-components-antd-x3'
|
|
11
|
+
import { format2, format15, countTaxAmount, countAmountExcludeTax, countPrice } from '../../../../../../tools/calculate';
|
|
12
|
+
import moment from 'moment';
|
|
13
|
+
import { equal } from 'mathjs';
|
|
14
|
+
|
|
15
|
+
export { format2, format15 } from '../../../../../../tools/calculate';
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/** 延迟函数 */
|
|
20
|
+
const lazyFn = (fn: Function, delayed: number = 200) => {
|
|
21
|
+
let timer: any;
|
|
22
|
+
return (...par: any[]) => {
|
|
23
|
+
clearTimeout(timer);
|
|
24
|
+
timer = setTimeout(() => {
|
|
25
|
+
timer = undefined;
|
|
26
|
+
fn.apply(null, par);
|
|
27
|
+
}, delayed);
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
let promptErrV: any = {}
|
|
32
|
+
|
|
33
|
+
/** 提示错误 */
|
|
34
|
+
const promptErr = (err: any) => {
|
|
35
|
+
if (!err) return false;
|
|
36
|
+
if (err.errors[0].message === 'lineAmountIncludeTax need to revalidate') return true;
|
|
37
|
+
if (err.errors[0].message === 'lineAmountExcludeTax need to revalidate') return true;
|
|
38
|
+
if (err.errors[0].message === 'priceIncludeTax need to revalidate') return true;
|
|
39
|
+
if (err.errors[0].message === 'priceExcludeTax need to revalidate') return true;
|
|
40
|
+
|
|
41
|
+
if (new Date().getTime() - promptErrV.t > 2000 || err.errors[0].message !== promptErrV.m) {
|
|
42
|
+
promptErrV.t = new Date().getTime();
|
|
43
|
+
promptErrV.m = err.errors[0].message;
|
|
44
|
+
message.error({ content: err.errors[0].message, duration: 2 });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** 清除计算中启动字段 */
|
|
51
|
+
export const clearCalculatingField = async (controller: InvoiceController) => controller.run(async s => s.calculatingField = '');
|
|
52
|
+
|
|
53
|
+
/** 数量改变了 */
|
|
54
|
+
export const onChangeQuantity = lazyFn(
|
|
55
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
56
|
+
form.validateFields(async (err, values) => {
|
|
57
|
+
err = err || {};
|
|
58
|
+
|
|
59
|
+
if (!values.quantity && values.quantity !== 0) {
|
|
60
|
+
await controller.setEditGood({ quantity: undefined });
|
|
61
|
+
await clearCalculatingField(controller);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (err.quantity) {
|
|
65
|
+
await clearCalculatingField(controller);
|
|
66
|
+
return
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
70
|
+
const quantity = format15(values.quantity, calculatingDigits);
|
|
71
|
+
await controller.setEditGood({ quantity });
|
|
72
|
+
form.setFieldsValue({ quantity });
|
|
73
|
+
|
|
74
|
+
// 是否含税
|
|
75
|
+
if (controller.state.goodsListState.isTaxIncluded) {
|
|
76
|
+
// 含税
|
|
77
|
+
if (!err.priceIncludeTax && values.priceIncludeTax) {
|
|
78
|
+
// 可以找到 单价(含税)
|
|
79
|
+
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
80
|
+
const lineAmountIncludeTax = format2(evaluate(`${priceIncludeTax} * ${quantity}`));
|
|
81
|
+
form.setFieldsValue({ lineAmountIncludeTax });
|
|
82
|
+
await controller.setEditGood({ lineAmountIncludeTax });
|
|
83
|
+
} else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
|
|
84
|
+
// 可以找到 金额(含税)
|
|
85
|
+
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
86
|
+
const priceIncludeTax = format15(
|
|
87
|
+
evaluate(`${lineAmountIncludeTax} / ${quantity}`),
|
|
88
|
+
calculatingDigits);
|
|
89
|
+
form.setFieldsValue({ priceIncludeTax });
|
|
90
|
+
await controller.setEditGood({ priceIncludeTax });
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 更新不含税
|
|
94
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
95
|
+
} else {
|
|
96
|
+
// 不含税
|
|
97
|
+
if (!err.priceExcludeTax && values.priceExcludeTax) {
|
|
98
|
+
// 可以找到 单价(不含税)
|
|
99
|
+
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
100
|
+
const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
|
|
101
|
+
form.setFieldsValue({ lineAmountExcludeTax });
|
|
102
|
+
await controller.setEditGood({ lineAmountExcludeTax, quantity });
|
|
103
|
+
} else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
|
|
104
|
+
// 可以找到 金额(不含税)
|
|
105
|
+
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
106
|
+
const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
|
|
107
|
+
form.setFieldsValue({ priceExcludeTax });
|
|
108
|
+
await controller.setEditGood({ priceExcludeTax, quantity });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 更新含税
|
|
112
|
+
await updateUnitPriceTax(controller, form, record);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 清楚 计算中启动字段
|
|
116
|
+
await clearCalculatingField(controller);
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
1000,
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
/** 单价(含税) */
|
|
123
|
+
export const onChangePriceIncludeTax = lazyFn(
|
|
124
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
125
|
+
form.validateFields(async (err, values) => {
|
|
126
|
+
err = err || {};
|
|
127
|
+
|
|
128
|
+
if (!values.priceIncludeTax && values.priceIncludeTax !== 0) {
|
|
129
|
+
await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
|
|
130
|
+
await clearCalculatingField(controller);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (err.priceIncludeTax) {
|
|
134
|
+
await clearCalculatingField(controller);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
139
|
+
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
140
|
+
await controller.setEditGood({ priceIncludeTax });
|
|
141
|
+
form.setFieldsValue({ priceIncludeTax });
|
|
142
|
+
|
|
143
|
+
// 是否有数量
|
|
144
|
+
if (!err.quantity && values.quantity) {
|
|
145
|
+
const quantity = format15(values.quantity, calculatingDigits);
|
|
146
|
+
const lineAmountIncludeTax = format2(evaluate(`${quantity} * ${priceIncludeTax}`));
|
|
147
|
+
form.setFieldsValue({ lineAmountIncludeTax });
|
|
148
|
+
await controller.setEditGood({ lineAmountIncludeTax });
|
|
149
|
+
} else if (!err.lineAmountIncludeTax && values.lineAmountIncludeTax) {
|
|
150
|
+
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
151
|
+
const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
|
|
152
|
+
form.setFieldsValue({ quantity });
|
|
153
|
+
await controller.setEditGood({ quantity });
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 更新不含税
|
|
157
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
158
|
+
|
|
159
|
+
// 清楚 计算中启动字段
|
|
160
|
+
await clearCalculatingField(controller);
|
|
161
|
+
});
|
|
162
|
+
},
|
|
163
|
+
1000,
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
/** 单价(不含税) */
|
|
167
|
+
export const onChangePriceExcludeTax = lazyFn(
|
|
168
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
169
|
+
form.validateFields(async (err, values) => {
|
|
170
|
+
err = err || {};
|
|
171
|
+
|
|
172
|
+
if (!values.priceExcludeTax && values.priceExcludeTax !== 0) {
|
|
173
|
+
await controller.setEditGood({ priceIncludeTax: undefined, priceExcludeTax: undefined });
|
|
174
|
+
await clearCalculatingField(controller);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (err.priceExcludeTax) {
|
|
178
|
+
await clearCalculatingField(controller);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
183
|
+
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
184
|
+
await controller.setEditGood({ priceExcludeTax });
|
|
185
|
+
form.setFieldsValue({ priceExcludeTax });
|
|
186
|
+
|
|
187
|
+
// 是否有数量
|
|
188
|
+
if (!err.quantity && values.quantity) {
|
|
189
|
+
const quantity = format15(values.quantity, calculatingDigits);
|
|
190
|
+
const lineAmountExcludeTax = format2(evaluate(`${quantity} * ${priceExcludeTax}`));
|
|
191
|
+
form.setFieldsValue({ lineAmountExcludeTax });
|
|
192
|
+
await controller.setEditGood({ lineAmountExcludeTax });
|
|
193
|
+
} else if (!err.lineAmountExcludeTax && values.lineAmountExcludeTax) {
|
|
194
|
+
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
195
|
+
const quantity = format15(
|
|
196
|
+
evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`),
|
|
197
|
+
calculatingDigits
|
|
198
|
+
);
|
|
199
|
+
form.setFieldsValue({ quantity });
|
|
200
|
+
await controller.setEditGood({ quantity });
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// 更新含税
|
|
204
|
+
await updateUnitPriceTax(controller, form, record);
|
|
205
|
+
|
|
206
|
+
// 清楚 计算中启动字段
|
|
207
|
+
await clearCalculatingField(controller);
|
|
208
|
+
});
|
|
209
|
+
},
|
|
210
|
+
1000,
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
/** 金额(含税) */
|
|
214
|
+
export const onChangeLineAmountIncludeTax = lazyFn(
|
|
215
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
216
|
+
form.validateFields(async (err, values) => {
|
|
217
|
+
|
|
218
|
+
err = err || {};
|
|
219
|
+
if (promptErr(err.lineAmountIncludeTax) || !values.lineAmountIncludeTax) {
|
|
220
|
+
// 更新不含税
|
|
221
|
+
await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
|
|
222
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
223
|
+
await clearCalculatingField(controller);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
228
|
+
const lineAmountIncludeTax = format2(values.lineAmountIncludeTax);
|
|
229
|
+
await controller.setEditGood({ lineAmountIncludeTax });
|
|
230
|
+
form.setFieldsValue({ lineAmountIncludeTax });
|
|
231
|
+
|
|
232
|
+
// 是否有数量
|
|
233
|
+
if (!err.quantity && values.quantity) {
|
|
234
|
+
const quantity = format15(values.quantity, calculatingDigits);
|
|
235
|
+
const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${quantity}`), calculatingDigits);
|
|
236
|
+
form.setFieldsValue({ priceIncludeTax });
|
|
237
|
+
await controller.setEditGood({ priceIncludeTax });
|
|
238
|
+
} else if (!err.priceIncludeTax && (values.priceIncludeTax || values.priceIncludeTax === 0)) {
|
|
239
|
+
const priceIncludeTax = format15(values.priceIncludeTax, calculatingDigits);
|
|
240
|
+
const quantity = format15(evaluate(`${lineAmountIncludeTax} / ${priceIncludeTax}`), calculatingDigits);
|
|
241
|
+
form.setFieldsValue({ quantity });
|
|
242
|
+
await controller.setEditGood({ quantity });
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// 更新不含税
|
|
246
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
247
|
+
|
|
248
|
+
// 清楚 计算中启动字段
|
|
249
|
+
await clearCalculatingField(controller);
|
|
250
|
+
});
|
|
251
|
+
},
|
|
252
|
+
1000,
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
/** 金额(不含税) */
|
|
256
|
+
export const onChangeLineAmountExcludeTax = lazyFn(
|
|
257
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
258
|
+
form.validateFields(async (err, values) => {
|
|
259
|
+
err = err || {};
|
|
260
|
+
if (promptErr(err.lineAmountExcludeTax) || !values.lineAmountExcludeTax) {
|
|
261
|
+
// 更新含税
|
|
262
|
+
await controller.setEditGood({ lineAmountIncludeTax: undefined, lineAmountExcludeTax: undefined });
|
|
263
|
+
await updateUnitPriceTax(controller, form, record);
|
|
264
|
+
await clearCalculatingField(controller);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
268
|
+
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
269
|
+
await controller.setEditGood({ lineAmountExcludeTax });
|
|
270
|
+
form.setFieldsValue({ lineAmountExcludeTax });
|
|
271
|
+
|
|
272
|
+
// 是否有数量
|
|
273
|
+
if (!err.quantity && values.quantity) {
|
|
274
|
+
const quantity = format15(values.quantity, calculatingDigits);
|
|
275
|
+
const priceExcludeTax = format15(evaluate(`${lineAmountExcludeTax} / ${quantity}`), calculatingDigits);
|
|
276
|
+
form.setFieldsValue({ priceExcludeTax });
|
|
277
|
+
await controller.setEditGood({ priceExcludeTax });
|
|
278
|
+
} else if (!err.priceExcludeTax && values.priceExcludeTax) {
|
|
279
|
+
const priceExcludeTax = format15(values.priceExcludeTax, calculatingDigits);
|
|
280
|
+
const quantity = format15(evaluate(`${lineAmountExcludeTax} / ${priceExcludeTax}`), calculatingDigits);
|
|
281
|
+
form.setFieldsValue({ quantity });
|
|
282
|
+
await controller.setEditGood({ quantity });
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// 更新含税
|
|
286
|
+
await updateUnitPriceTax(controller, form, record);
|
|
287
|
+
|
|
288
|
+
// 清楚 计算中启动字段
|
|
289
|
+
await clearCalculatingField(controller);
|
|
290
|
+
});
|
|
291
|
+
},
|
|
292
|
+
1000,
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
/** 税率 */
|
|
296
|
+
export const onChangeTaxRate = lazyFn(
|
|
297
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
298
|
+
|
|
299
|
+
form.validateFields(async (err, values) => {
|
|
300
|
+
err = err || {};
|
|
301
|
+
if (promptErr(err.taxRate) || (!values.taxRate && values.taxRate !== 0)) return;
|
|
302
|
+
|
|
303
|
+
let taxRate = parseFloat(values.taxRate);
|
|
304
|
+
await controller.setEditGood({ taxRate });
|
|
305
|
+
|
|
306
|
+
// 去掉赋码
|
|
307
|
+
(() => {
|
|
308
|
+
const cache = controller.state.goodsListState.endowCode.cache;
|
|
309
|
+
const record = controller.state.goodsListState.editGood;
|
|
310
|
+
if (record && cache[record.$index]) {
|
|
311
|
+
record.favouredPolicyName = cache[record.$index].favouredPolicyName;
|
|
312
|
+
record.favouredPolicyMark = cache[record.$index].favouredPolicyMark;
|
|
313
|
+
record.taxFreeType = cache[record.$index].taxFreeType;
|
|
314
|
+
cache[record.$index] = undefined;
|
|
315
|
+
}
|
|
316
|
+
})()
|
|
317
|
+
|
|
318
|
+
switch (controller.state.goodsListState.calculateType) {
|
|
319
|
+
case '1':
|
|
320
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
321
|
+
break;
|
|
322
|
+
|
|
323
|
+
case '2':
|
|
324
|
+
await updateUnitPriceTax(controller, form, record);
|
|
325
|
+
break;
|
|
326
|
+
|
|
327
|
+
case '3':
|
|
328
|
+
default:
|
|
329
|
+
// 是否含税
|
|
330
|
+
if (controller.state.goodsListState.isTaxIncluded) {
|
|
331
|
+
await updateUnitPriceExcludingTax(controller, form, record);
|
|
332
|
+
} else {
|
|
333
|
+
await updateUnitPriceTax(controller, form, record);
|
|
334
|
+
}
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// 清楚 计算中启动字段
|
|
339
|
+
await clearCalculatingField(controller);
|
|
340
|
+
});
|
|
341
|
+
},
|
|
342
|
+
1000,
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
/** 税额 */
|
|
346
|
+
export const onChangeTaxAmount = lazyFn(
|
|
347
|
+
(controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
348
|
+
|
|
349
|
+
/** 金额(不含税) */
|
|
350
|
+
let lineAmountExcludeTax;
|
|
351
|
+
|
|
352
|
+
form.validateFields(async (err, values) => {
|
|
353
|
+
err = err || {};
|
|
354
|
+
|
|
355
|
+
const record = controller.state.goodsListState.editGood;
|
|
356
|
+
|
|
357
|
+
// 校验是否有含税金额
|
|
358
|
+
if (err.lineAmountIncludeTax && (!record?.lineAmountIncludeTax && record?.lineAmountIncludeTax !== 0)) {
|
|
359
|
+
await clearCalculatingField(controller);
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// 计数不含税金额
|
|
364
|
+
lineAmountExcludeTax = countAmountExcludeTax(record?.lineAmountIncludeTax || 0, values.taxAmount);
|
|
365
|
+
form.setFieldsValue({ lineAmountExcludeTax });
|
|
366
|
+
|
|
367
|
+
const priceExcludeTax: any = countPrice(lineAmountExcludeTax || '', record?.quantity || '', controller.state.calculatingDigits);
|
|
368
|
+
|
|
369
|
+
await controller.setEditGood({ lineAmountExcludeTax, taxAmount: values.taxAmount, priceExcludeTax });
|
|
370
|
+
form.setFieldsValue({ priceExcludeTax });
|
|
371
|
+
|
|
372
|
+
// 清楚 计算中启动字段
|
|
373
|
+
await clearCalculatingField(controller);
|
|
374
|
+
})
|
|
375
|
+
},
|
|
376
|
+
1000,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
/** 小规模纳税人 1% 和 3% 自动赋码免税 */
|
|
380
|
+
export function dutyFree(controller: InvoiceController, taxRate: number, form: WrappedFormUtils<any>, record: IGood) {
|
|
381
|
+
|
|
382
|
+
const cache = controller.state.goodsListState.endowCode.cache;
|
|
383
|
+
const invoiceType = controller.state.invoiceType;
|
|
384
|
+
|
|
385
|
+
// 4月1日至12月31日
|
|
386
|
+
console.log('===> 小规模纳税人免税逻辑');
|
|
387
|
+
console.log('===> invoiceType', invoiceType);
|
|
388
|
+
console.log('===> en', controller.state.en);
|
|
389
|
+
console.log('===> taxRate', taxRate);
|
|
390
|
+
console.log('===> state', controller.state);
|
|
391
|
+
|
|
392
|
+
if (moment().valueOf() > moment('2022-12-31 23:59').valueOf()) return taxRate;
|
|
393
|
+
if (controller.state.en !== '08') return taxRate;
|
|
394
|
+
if (invoiceType !== '10' && invoiceType !== '04') return taxRate;
|
|
395
|
+
|
|
396
|
+
if (taxRate === 1 || taxRate === 3) {
|
|
397
|
+
cache[record.$index] = { favouredPolicyName: record.favouredPolicyName, favouredPolicyMark: record.favouredPolicyMark, taxFreeType: record.taxFreeType }
|
|
398
|
+
record.favouredPolicyName = '免税';
|
|
399
|
+
record.taxRate = 0;
|
|
400
|
+
record.favouredPolicyMark = 1;
|
|
401
|
+
record.taxFreeType = 1 as any;
|
|
402
|
+
form.setFieldsValue({ taxRate: 0 });
|
|
403
|
+
return 0;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/** 含税 => 更新(不含税) */
|
|
408
|
+
export const updateUnitPriceExcludingTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
409
|
+
return new Promise((resolve) => {
|
|
410
|
+
form.validateFields(async (err, values) => {
|
|
411
|
+
console.log('含税 => 更新(不含税')
|
|
412
|
+
|
|
413
|
+
err = err || {};
|
|
414
|
+
|
|
415
|
+
/** 税额 */
|
|
416
|
+
let taxAmount;
|
|
417
|
+
|
|
418
|
+
/** 金额(不含税) */
|
|
419
|
+
let lineAmountExcludeTax;
|
|
420
|
+
|
|
421
|
+
/** 不含税单价 */
|
|
422
|
+
let priceExcludeTax;
|
|
423
|
+
|
|
424
|
+
/** 扣除额 */
|
|
425
|
+
const deduction = controller.state.goodsListState.deduction;
|
|
426
|
+
|
|
427
|
+
const { editGood } = controller.state.goodsListState
|
|
428
|
+
|
|
429
|
+
// 计算税额
|
|
430
|
+
if (!promptErr(err.lineAmountIncludeTax) && !promptErr(err.taxRate)) {
|
|
431
|
+
taxAmount = countTaxAmount(values.lineAmountIncludeTax || editGood?.lineAmountIncludeTax, deduction, values.taxRate);
|
|
432
|
+
}
|
|
433
|
+
form.setFieldsValue({ taxAmount });
|
|
434
|
+
await controller.setEditGood({ taxAmount });
|
|
435
|
+
|
|
436
|
+
// 计算 金额(不含税)
|
|
437
|
+
if ((taxAmount || taxAmount === 0) && !promptErr(err.lineAmountIncludeTax)) {
|
|
438
|
+
lineAmountExcludeTax = countAmountExcludeTax(values.lineAmountIncludeTax || editGood?.lineAmountIncludeTax, taxAmount);
|
|
439
|
+
}
|
|
440
|
+
form.setFieldsValue({ lineAmountExcludeTax });
|
|
441
|
+
await controller.setEditGood({ lineAmountExcludeTax });
|
|
442
|
+
|
|
443
|
+
// 单价(不含税)
|
|
444
|
+
if (lineAmountExcludeTax && !promptErr(err.quantity)) {
|
|
445
|
+
priceExcludeTax = countPrice(lineAmountExcludeTax, values.quantity || editGood?.quantity, controller.state.calculatingDigits);
|
|
446
|
+
}
|
|
447
|
+
form.setFieldsValue({ priceExcludeTax });
|
|
448
|
+
await controller.setEditGood({ priceExcludeTax });
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
resolve(undefined)
|
|
452
|
+
})
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
/** 不含税 => 更新(含税) */
|
|
456
|
+
export const updateUnitPriceTax = async (controller: InvoiceController, form: WrappedFormUtils, record: IGood) => {
|
|
457
|
+
return new Promise((resolve) => {
|
|
458
|
+
form.validateFields(async (err, values) => {
|
|
459
|
+
console.log('不含税 => 更新(含税)')
|
|
460
|
+
|
|
461
|
+
err = err || {};
|
|
462
|
+
|
|
463
|
+
if (
|
|
464
|
+
!err.taxRat &&
|
|
465
|
+
(values.taxRate || values.taxRate === 0) &&
|
|
466
|
+
!promptErr(err.lineAmountExcludeTax) &&
|
|
467
|
+
(values.lineAmountExcludeTax || values.lineAmountExcludeTax === 0)
|
|
468
|
+
) {
|
|
469
|
+
|
|
470
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
471
|
+
// 金额(含税)= 金额(不含税)* (1+ 税率)
|
|
472
|
+
const lineAmountExcludeTax = format2(values.lineAmountExcludeTax);
|
|
473
|
+
const lineAmountIncludeTax = format2(evaluate(`${lineAmountExcludeTax} * (1+(${values.taxRate}/100))`));
|
|
474
|
+
await controller.setEditGood({ lineAmountIncludeTax });
|
|
475
|
+
|
|
476
|
+
// 单价(含税) = 金额(含税) / (數量)
|
|
477
|
+
// 是否有数量
|
|
478
|
+
if (!err.quantity && values.quantity) {
|
|
479
|
+
const priceIncludeTax = format15(evaluate(`${lineAmountIncludeTax} / ${values.quantity}`), calculatingDigits);
|
|
480
|
+
await controller.setEditGood({ priceIncludeTax });
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// 税额 = 金额(含税)-金额(不含税)
|
|
484
|
+
const taxAmount = evaluate(`${lineAmountIncludeTax} - ${lineAmountExcludeTax}`);
|
|
485
|
+
form.setFieldsValue({ taxAmount });
|
|
486
|
+
await controller.setEditGood({ taxAmount });
|
|
487
|
+
} else {
|
|
488
|
+
form.setFieldsValue({ taxAmount: undefined });
|
|
489
|
+
await controller.setEditGood({ taxAmount: undefined });
|
|
490
|
+
}
|
|
491
|
+
// 单价(含税) = 单价(不含税) * (1+税率)
|
|
492
|
+
// if (
|
|
493
|
+
// !err.taxRat &&
|
|
494
|
+
// (values.taxRate || values.taxRate === 0) &&
|
|
495
|
+
// !promptErr(err.priceExcludeTax) &&
|
|
496
|
+
// (values.priceExcludeTax || values.priceExcludeTax === 0)
|
|
497
|
+
// ) {
|
|
498
|
+
// const priceExcludeTax = format15(values.priceExcludeTax);
|
|
499
|
+
// const priceIncludeTax = format15(evaluate(`${priceExcludeTax} * (1+(${values.taxRate}/100))`));
|
|
500
|
+
// await controller.setEditGood({ priceIncludeTax });
|
|
501
|
+
// }
|
|
502
|
+
|
|
503
|
+
resolve(undefined)
|
|
504
|
+
});
|
|
505
|
+
})
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
/** 保存到编辑货物 */
|
|
509
|
+
export const onSaveEditGood = lazyFn(
|
|
510
|
+
(
|
|
511
|
+
controller: InvoiceController,
|
|
512
|
+
form: WrappedFormUtils,
|
|
513
|
+
record: IGood,
|
|
514
|
+
id: string,
|
|
515
|
+
) => {
|
|
516
|
+
form.validateFields(async (err, values) => {
|
|
517
|
+
err = err || {};
|
|
518
|
+
if (err[id]) return;
|
|
519
|
+
|
|
520
|
+
const v = {} as any;
|
|
521
|
+
v[id] = values[id];
|
|
522
|
+
await controller.setEditGood({ ...v });
|
|
523
|
+
});
|
|
524
|
+
},
|
|
525
|
+
1000,
|
|
526
|
+
);
|
|
527
|
+
|
|
528
|
+
/** 单调赋码 */
|
|
529
|
+
export const endowCode = async (controller: InvoiceController, goods: IGood) => {
|
|
530
|
+
await controller.wait();
|
|
531
|
+
await controller.saveEditGood();
|
|
532
|
+
await controller.pipeline(async (s) => {
|
|
533
|
+
if (s.goodsListState.form && s.goodsListState.editGood?.$index === goods?.$index) {
|
|
534
|
+
const err: any = s.goodsListState.form.getFieldsError();
|
|
535
|
+
for (let key in err) {
|
|
536
|
+
if (!err[key]) continue;
|
|
537
|
+
message.error(err[key][0]);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
let g = s.goodsListState.goodsMap.get(goods.$index) as any;
|
|
543
|
+
let i = s.goodsListState.goodsList.indexOf(g);
|
|
544
|
+
|
|
545
|
+
switch (goods.lineAttribute) {
|
|
546
|
+
case LineAttributeType.正常:
|
|
547
|
+
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index];
|
|
548
|
+
break;
|
|
549
|
+
|
|
550
|
+
case LineAttributeType.折扣行:
|
|
551
|
+
|
|
552
|
+
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i - 1].$index];
|
|
553
|
+
break;
|
|
554
|
+
|
|
555
|
+
case LineAttributeType.被折扣行:
|
|
556
|
+
s.goodsListState.endowCode.endowcodeGoodIndex = [goods.$index, s.goodsListState.goodsList[i + 1].$index];
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
})();
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/** 修改了 项目名称 */
|
|
563
|
+
export const onChangeItemName = async (controller: InvoiceController, form: WrappedFormUtils<any>, record: IGood) => {
|
|
564
|
+
controller.run(async s => {
|
|
565
|
+
const value = form.getFieldsValue().itemName;
|
|
566
|
+
|
|
567
|
+
if (s.goodsListState.isMyShow) {
|
|
568
|
+
await controller.setEditGood({ itemNameSelf: value });
|
|
569
|
+
record.itemName && await controller.setEditGood({ itemName: record.itemName });
|
|
570
|
+
} else {
|
|
571
|
+
await controller.setEditGood({ itemName: value });
|
|
572
|
+
record.itemNameSelf && await controller.setEditGood({ itemNameSelf: record.itemNameSelf });
|
|
573
|
+
}
|
|
574
|
+
})
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/** 修改了含税开关 重新计算 */
|
|
578
|
+
export const onChangeSwitchTax = async (controller: InvoiceController, isTaxIncluded: boolean) => {
|
|
579
|
+
if (!controller.state.goodsListState.isRecalculateWhenSwitchTax) {
|
|
580
|
+
controller.pipeline(async s => { s.goodsListState = { ...s.goodsListState, isTaxIncluded } })();
|
|
581
|
+
return
|
|
582
|
+
}
|
|
583
|
+
const calculatingDigits = controller.state.calculatingDigits;
|
|
584
|
+
|
|
585
|
+
await controller.saveEditGood();
|
|
586
|
+
await controller.wait();
|
|
587
|
+
|
|
588
|
+
await controller.run(async s => {
|
|
589
|
+
if (s.goodsListState.editGood) {
|
|
590
|
+
// message.error({
|
|
591
|
+
// content: '你正在编辑一个货物',
|
|
592
|
+
// key: '你正在编辑一个货物',
|
|
593
|
+
// });
|
|
594
|
+
|
|
595
|
+
// return;
|
|
596
|
+
await controller.state.goodsListState.form?.validateFields(async (err: any, values: any) => {
|
|
597
|
+
if (err) {
|
|
598
|
+
const firstError: any = Object.values(err)[0];
|
|
599
|
+
message.error({
|
|
600
|
+
content: firstError.errors[0].message,
|
|
601
|
+
key: '你正在编辑一个货物',
|
|
602
|
+
});
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
s.goodsListState.isTaxIncluded = isTaxIncluded;
|
|
609
|
+
|
|
610
|
+
try {
|
|
611
|
+
let needRefresh = false;
|
|
612
|
+
|
|
613
|
+
if (s.goodsListState?.goodsList && s.goodsListState.goodsList.length) {
|
|
614
|
+
const newGoodsList = s.goodsListState.goodsList.map(good => {
|
|
615
|
+
const {
|
|
616
|
+
quantity: sourceQuantity,
|
|
617
|
+
priceExcludeTax: sourcePriceExcludeTax,
|
|
618
|
+
priceIncludeTax: sourcePriceIncludeTax,
|
|
619
|
+
lineAmountExcludeTax: sourceLineAmountExcludeTax,
|
|
620
|
+
lineAmountIncludeTax: sourceLineAmountIncludeTax,
|
|
621
|
+
taxRate } = good;
|
|
622
|
+
if (isTaxIncluded) {
|
|
623
|
+
if (!sourceQuantity && sourceQuantity !== 0) return good;
|
|
624
|
+
if (!sourcePriceIncludeTax && sourcePriceIncludeTax !== 0) return good;
|
|
625
|
+
if (!taxRate && taxRate !== 0) return good;
|
|
626
|
+
if (sourcePriceExcludeTax && sourceLineAmountExcludeTax && equal(countPrice(sourceLineAmountExcludeTax, sourceQuantity) || 0, sourcePriceExcludeTax)) {
|
|
627
|
+
return good
|
|
628
|
+
} else {
|
|
629
|
+
needRefresh = true;
|
|
630
|
+
}
|
|
631
|
+
const quantity: any = format15(sourceQuantity, calculatingDigits);
|
|
632
|
+
const priceIncludeTax: any = format15(sourcePriceIncludeTax, calculatingDigits);
|
|
633
|
+
|
|
634
|
+
const lineAmountIncludeTax: any = format2(evaluate(`${priceIncludeTax} * ${quantity}`));
|
|
635
|
+
const taxAmount: any = countTaxAmount(lineAmountIncludeTax, controller.state.goodsListState.deduction, taxRate as any);
|
|
636
|
+
const lineAmountExcludeTax: any = countAmountExcludeTax(lineAmountIncludeTax, taxAmount);
|
|
637
|
+
const priceExcludeTax: any = countPrice(lineAmountExcludeTax, quantity, controller.state.calculatingDigits);
|
|
638
|
+
|
|
639
|
+
return {
|
|
640
|
+
...good,
|
|
641
|
+
lineAmountExcludeTax,
|
|
642
|
+
lineAmountIncludeTax,
|
|
643
|
+
taxAmount,
|
|
644
|
+
priceExcludeTax
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
} else {
|
|
648
|
+
if (!sourceQuantity && sourceQuantity !== 0) return good;
|
|
649
|
+
if (!sourcePriceExcludeTax && sourcePriceExcludeTax !== 0) return good;
|
|
650
|
+
if (!taxRate && taxRate !== 0) return good;
|
|
651
|
+
if (sourcePriceIncludeTax && sourceLineAmountIncludeTax && equal(countPrice(sourceLineAmountIncludeTax, sourceQuantity) || 0, sourcePriceIncludeTax)) {
|
|
652
|
+
return good
|
|
653
|
+
} else {
|
|
654
|
+
needRefresh = true;
|
|
655
|
+
}
|
|
656
|
+
const quantity: any = format15(sourceQuantity, calculatingDigits);
|
|
657
|
+
const priceExcludeTax: any = format15(sourcePriceExcludeTax, calculatingDigits);
|
|
658
|
+
|
|
659
|
+
const lineAmountExcludeTax: any = format2(evaluate(`${priceExcludeTax} * ${quantity}`));
|
|
660
|
+
const lineAmountIncludeTax: any = format2(evaluate(`${lineAmountExcludeTax} * (1+(${taxRate}/100))`));
|
|
661
|
+
const priceIncludeTax: any = format15(evaluate(`${lineAmountIncludeTax} / ${quantity}`), calculatingDigits);
|
|
662
|
+
const taxAmount: any = evaluate(`${lineAmountIncludeTax} - ${lineAmountExcludeTax}`);
|
|
663
|
+
|
|
664
|
+
return {
|
|
665
|
+
...good,
|
|
666
|
+
lineAmountExcludeTax,
|
|
667
|
+
lineAmountIncludeTax,
|
|
668
|
+
taxAmount,
|
|
669
|
+
priceIncludeTax
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
})
|
|
674
|
+
|
|
675
|
+
if (needRefresh) {
|
|
676
|
+
s.goodsListState.goodsList = newGoodsList;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
} catch (e) {
|
|
680
|
+
console.error('切换税率重新计算出错', e, s.goodsListState)
|
|
681
|
+
}
|
|
682
|
+
})
|
|
683
|
+
}
|