kts-component-invoice-operate 3.2.113 → 3.2.114

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.
Files changed (205) hide show
  1. package/.dumi/theme/builtins/API.tsx +66 -66
  2. package/.editorconfig +16 -16
  3. package/.fatherrc.ts +4 -4
  4. package/.prettierignore +7 -7
  5. package/.prettierrc +11 -11
  6. package/.umirc.ts +8 -8
  7. package/README.md +9 -9
  8. package/dist/index.esm.js +575 -578
  9. package/dist/index.js +575 -578
  10. package/docs/index.md +5 -5
  11. package/docs-dist/static/arrowDown.a1cbf0d8.svg +2 -2
  12. package/docs-dist/static/arrowUp.4c482054.svg +2 -2
  13. package/docs-dist/static/fork.5431267d.svg +11 -11
  14. package/docs-dist/static/plus.44013ce3.svg +11 -11
  15. package/docs-dist/static/plus.4fd1af30.svg +11 -11
  16. package/index.html +12 -12
  17. package/package.json +61 -61
  18. package/src/Invoice/Invoice-digtal/_test/disabled/index.tsx +38 -38
  19. package/src/Invoice/Invoice-digtal/_test/easiest/index.tsx +16 -16
  20. package/src/Invoice/Invoice-digtal/_test/header/index.tsx +84 -84
  21. package/src/Invoice/Invoice-digtal/_test/importGoods/index.tsx +554 -554
  22. package/src/Invoice/Invoice-digtal/_test/importStakeholder/index.tsx +17 -17
  23. package/src/Invoice/Invoice-digtal/_test/lineCredit/index.tsx +20 -20
  24. package/src/Invoice/Invoice-digtal/_test/prefab/index.tsx +150 -150
  25. package/src/Invoice/Invoice-digtal/_test/readOnly/index.tsx +42 -42
  26. package/src/Invoice/Invoice-digtal/_test/stakeholder/index.tsx +12 -12
  27. package/src/Invoice/Invoice-digtal/_test/typeSelection/index.tsx +29 -29
  28. package/src/Invoice/Invoice-digtal/index.md +30 -30
  29. package/src/Invoice/InvoiceController/InvoiceControllerForm/index.ts +95 -95
  30. package/src/Invoice/InvoiceController/InvoiceControllerState/AutoComplete/index.ts +20 -20
  31. package/src/Invoice/InvoiceController/InvoiceControllerState/BuyerState/index.tsx +88 -88
  32. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/Drag/index.ts +15 -15
  33. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/EndowCode/index.tsx +104 -104
  34. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IColumnsReplenish/index.ts +10 -10
  35. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/IGood/index.ts +78 -78
  36. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ImportGoods/index.ts +80 -80
  37. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/LineAttributeType/index.ts +7 -7
  38. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/ProductComparison/index.ts +9 -9
  39. package/src/Invoice/InvoiceController/InvoiceControllerState/GoodsListState/index.ts +113 -113
  40. package/src/Invoice/InvoiceController/InvoiceControllerState/Stakeholder/index.ts +13 -13
  41. package/src/Invoice/InvoiceController/InvoiceControllerState/index.ts +65 -65
  42. package/src/Invoice/InvoiceController/fns/addGood.ts +11 -11
  43. package/src/Invoice/InvoiceController/fns/addGoodDiscount.ts +126 -126
  44. package/src/Invoice/InvoiceController/fns/addGoodDiscountV2.ts +86 -86
  45. package/src/Invoice/InvoiceController/fns/delGood.ts +41 -41
  46. package/src/Invoice/InvoiceController/fns/getGoodsSearch.ts +26 -26
  47. package/src/Invoice/InvoiceController/fns/importGoodsDrawer.ts +79 -79
  48. package/src/Invoice/InvoiceController/fns/itemBlur.ts +40 -40
  49. package/src/Invoice/InvoiceController/fns/mergeDetails.ts +201 -201
  50. package/src/Invoice/InvoiceController/fns/mergeDiscount.ts +35 -35
  51. package/src/Invoice/InvoiceController/fns/saveEditGood.ts +24 -24
  52. package/src/Invoice/InvoiceController/fns/setEditGood.ts +16 -16
  53. package/src/Invoice/InvoiceController/fns/setGoods.ts +10 -10
  54. package/src/Invoice/InvoiceController/fns/updateInvoiceNo.ts +8 -8
  55. package/src/Invoice/InvoiceController/index.ts +81 -81
  56. package/src/Invoice/_test/buyerNameSearch/index.tsx +42 -42
  57. package/src/Invoice/_test/deduction/index.tsx +935 -935
  58. package/src/Invoice/_test/draft/index.tsx +40 -40
  59. package/src/Invoice/_test/easiest/index.tsx +5 -5
  60. package/src/Invoice/_test/endowCode/index.tsx +1158 -1158
  61. package/src/Invoice/_test/goodsMenuExpand/index.tsx +32 -32
  62. package/src/Invoice/_test/importBuyer/index.tsx +74 -74
  63. package/src/Invoice/_test/importGoods/index.tsx +1197 -1197
  64. package/src/Invoice/_test/invoiceType/index.tsx +59 -59
  65. package/src/Invoice/_test/isInvoiceNo/index.tsx +12 -12
  66. package/src/Invoice/_test/replaceHead/index.tsx +22 -22
  67. package/src/Invoice/_test/retrieveData/index.tsx +22 -22
  68. package/src/Invoice/_test/seller/index.tsx +28 -28
  69. package/src/Invoice/_test/setDataSource/index.tsx +73 -73
  70. package/src/Invoice/_test/unit/index.tsx +19 -19
  71. package/src/Invoice/index.less +29 -29
  72. package/src/Invoice/index.md +53 -53
  73. package/src/Invoice/index.tsx +167 -167
  74. package/src/Invoice/tools/calculate/index.ts +124 -124
  75. package/src/Invoice/tools/coolingFn/index.ts +17 -17
  76. package/src/Invoice/tools/evaluate/index.ts +7 -7
  77. package/src/Invoice/tools/idGenerator/index.ts +2 -2
  78. package/src/Invoice/tools/itemName/index.ts +55 -55
  79. package/src/Invoice/tools/lazyFn/index.ts +19 -19
  80. package/src/Invoice/tools/mounting/index.ts +13 -13
  81. package/src/Invoice/tools/strringFn/index.ts +40 -40
  82. package/src/Invoice/tools/useToGenerateId/index.ts +8 -8
  83. package/src/Invoice/ui/default/AddComparisonDrawer/index.tsx +149 -149
  84. package/src/Invoice/ui/default/Buyer/index.less +219 -219
  85. package/src/Invoice/ui/default/Buyer/index.tsx +114 -114
  86. package/src/Invoice/ui/default/Buyer/ui/BuyerNameInput/index.tsx +166 -166
  87. package/src/Invoice/ui/default/Buyer/ui/ImportBuyerButton/index.tsx +21 -21
  88. package/src/Invoice/ui/default/EndowCodeDrawer/index.less +8 -8
  89. package/src/Invoice/ui/default/EndowCodeDrawer/index.tsx +543 -543
  90. package/src/Invoice/ui/default/GoodsList/hook/useColumns/autoFillFn/index.ts +533 -533
  91. package/src/Invoice/ui/default/GoodsList/hook/useColumns/index.tsx +687 -687
  92. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  93. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  94. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.less +18 -18
  95. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemCodeInput/index.tsx +47 -47
  96. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +17 -17
  97. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +88 -88
  98. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  99. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  100. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +118 -118
  101. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  102. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +25 -25
  103. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  104. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  105. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  106. package/src/Invoice/ui/default/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  107. package/src/Invoice/ui/default/GoodsList/hook/useDeduction/index.tsx +24 -24
  108. package/src/Invoice/ui/default/GoodsList/hook/useOnRow/index.tsx +39 -39
  109. package/src/Invoice/ui/default/GoodsList/hook/useRowSelection/index.tsx +114 -114
  110. package/src/Invoice/ui/default/GoodsList/hook/useWindowClick/index.tsx +23 -23
  111. package/src/Invoice/ui/default/GoodsList/index.less +179 -179
  112. package/src/Invoice/ui/default/GoodsList/index.tsx +205 -205
  113. package/src/Invoice/ui/default/GoodsList/ui/AddRowButton/index.tsx +65 -65
  114. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.less +21 -21
  115. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +244 -244
  116. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  117. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +69 -69
  118. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +65 -65
  119. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDetails/index.tsx +91 -91
  120. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useMergeDiscount/index.tsx +36 -36
  121. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesDiscount/index.tsx +109 -109
  122. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/hooks/useSalesGifts/index.tsx +88 -88
  123. package/src/Invoice/ui/default/GoodsList/ui/BulkMenu/index.tsx +37 -37
  124. package/src/Invoice/ui/default/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  125. package/src/Invoice/ui/default/GoodsList/ui/Search/index.less +10 -10
  126. package/src/Invoice/ui/default/GoodsList/ui/Search/index.tsx +52 -52
  127. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.less +18 -18
  128. package/src/Invoice/ui/default/GoodsList/ui/Statistics/index.tsx +113 -113
  129. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.less +28 -28
  130. package/src/Invoice/ui/default/GoodsList/ui/TableRow/index.tsx +57 -57
  131. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.less +38 -38
  132. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual/index.tsx +108 -108
  133. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.less +44 -44
  134. package/src/Invoice/ui/default/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  135. package/src/Invoice/ui/default/GoodsList/ui/TaxIncludedSwitch/index.tsx +30 -30
  136. package/src/Invoice/ui/default/ImportBuyerDrawer/index.tsx +75 -75
  137. package/src/Invoice/ui/default/ImportGoodsDrawer/index.tsx +198 -201
  138. package/src/Invoice/ui/default/InvoiceHeader/index.less +68 -68
  139. package/src/Invoice/ui/default/InvoiceHeader/index.tsx +246 -246
  140. package/src/Invoice/ui/default/Seller/index.less +113 -113
  141. package/src/Invoice/ui/default/Seller/index.tsx +98 -98
  142. package/src/Invoice/ui/default/Sign/index.less +14 -14
  143. package/src/Invoice/ui/default/Sign/index.tsx +71 -71
  144. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/autoFillFn/index.ts +519 -519
  145. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/index.tsx +650 -650
  146. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/svg/plus.svg +11 -11
  147. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.less +20 -20
  148. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/Drag/index.tsx +205 -205
  149. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.less +9 -9
  150. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/ItemNameInput/index.tsx +77 -77
  151. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowEditButton/index.tsx +30 -30
  152. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/_useAddComparison/index.tsx +43 -43
  153. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useAddDiscount/index.tsx +76 -76
  154. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useDelItem/index.tsx +41 -41
  155. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/hook/useEndowCode/index.tsx +34 -34
  156. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.less +13 -13
  157. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowMenu/index.tsx +98 -98
  158. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/RowSaveButton/index.tsx +14 -14
  159. package/src/Invoice/ui/digtal/GoodsList/hook/useColumns/ui/TitleText/index.tsx +20 -20
  160. package/src/Invoice/ui/digtal/GoodsList/hook/useOnRow/index.tsx +39 -39
  161. package/src/Invoice/ui/digtal/GoodsList/hook/useRowSelection/index.tsx +121 -121
  162. package/src/Invoice/ui/digtal/GoodsList/hook/useWindowClick/index.tsx +23 -23
  163. package/src/Invoice/ui/digtal/GoodsList/index.less +56 -56
  164. package/src/Invoice/ui/digtal/GoodsList/index.tsx +180 -180
  165. package/src/Invoice/ui/digtal/GoodsList/ui/AddRowButton/index.tsx +65 -65
  166. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/index.tsx +339 -339
  167. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useAddDiscountRowButton/svg/add.svg +11 -11
  168. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useCommodityComparisonButton/index.tsx +75 -75
  169. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useDelRowButton/index.tsx +50 -50
  170. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEmptyRefill/index.tsx +35 -35
  171. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useEndowCodeButton/index.tsx +82 -82
  172. package/src/Invoice/ui/digtal/GoodsList/ui/BulkMenu/hooks/useReselectInvoiceType/index.tsx +57 -57
  173. package/src/Invoice/ui/digtal/GoodsList/ui/DescribeSwitch/index.tsx +36 -36
  174. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.less +11 -11
  175. package/src/Invoice/ui/digtal/GoodsList/ui/Search/index.tsx +50 -50
  176. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.less +53 -53
  177. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/index.tsx +99 -99
  178. package/src/Invoice/ui/digtal/GoodsList/ui/Statistics/svg/fork.svg +11 -11
  179. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.less +28 -28
  180. package/src/Invoice/ui/digtal/GoodsList/ui/TableRow/index.tsx +53 -53
  181. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.less +38 -38
  182. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual/index.tsx +108 -108
  183. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.less +44 -44
  184. package/src/Invoice/ui/digtal/GoodsList/ui/TableVirtual.o/index.tsx +96 -96
  185. package/src/Invoice/ui/digtal/GoodsList/ui/TaxIncludedSwitch/index.tsx +30 -30
  186. package/src/Invoice/ui/digtal/InvoiceHeader/index.less +57 -57
  187. package/src/Invoice/ui/digtal/InvoiceHeader/index.tsx +77 -77
  188. package/src/Invoice/ui/digtal/Sign/index.less +48 -48
  189. package/src/Invoice/ui/digtal/Sign/index.tsx +99 -99
  190. package/src/Invoice/ui/digtal/Stakeholder/index.less +75 -75
  191. package/src/Invoice/ui/digtal/Stakeholder/index.tsx +394 -394
  192. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowDown.svg +2 -2
  193. package/src/Invoice/ui/digtal/Stakeholder/svg/arrowUp.svg +2 -2
  194. package/src/Invoice/ui/digtal/Stakeholder/svg/plus.svg +11 -11
  195. package/src/InvoiceTypeModal/_test/easiest/index.tsx +31 -31
  196. package/src/InvoiceTypeModal/index.less +7 -7
  197. package/src/InvoiceTypeModal/index.md +5 -5
  198. package/src/InvoiceTypeModal/index.tsx +153 -153
  199. package/src/TaxClassificationCodeModal/_test/easiest/index.tsx +177 -177
  200. package/src/TaxClassificationCodeModal/index.md +6 -6
  201. package/src/TaxClassificationCodeModal/index.tsx +74 -74
  202. package/src/index.ts +12 -12
  203. package/tsconfig.json +31 -31
  204. package/typings.d.ts +3 -3
  205. package/yarn.e.lock +14331 -14331
@@ -1,202 +1,202 @@
1
-
2
- import { message } from 'kts-xui';
3
- import { chain, bignumber } from 'mathjs';
4
- import idGenerator from '../../tools/idGenerator';
5
- import { IGood, InvoiceControllerState, LineAttributeType } from '..';
6
- import { format15 } from '../../tools/calculate';
7
-
8
- export default async function mergeDetails(state: InvoiceControllerState, selectedGoodIndex?: string[]) {
9
-
10
- if (state.goodsListState.editGood || !selectedGoodIndex || selectedGoodIndex.length < 2) return;
11
-
12
- const goodsList = state.goodsListState.goodsList.filter(e => selectedGoodIndex.indexOf(e.$index) >= 0);
13
- if (goodsList.length < 2) return;
14
-
15
- grouping(goodsList).forEach(merge);
16
-
17
- /** 分组 */
18
- function grouping(goodsList: IGood[]): IGood[][] {
19
- const grouped: any = {};
20
- goodsList.forEach(good => {
21
- const key = (() => {
22
- switch (good.lineAttribute) {
23
- case LineAttributeType.折让行:
24
- return LineAttributeType.折让行
25
- case LineAttributeType.赠品行:
26
- return LineAttributeType.赠品行
27
- default:
28
- return LineAttributeType.正常
29
- }
30
- })()
31
-
32
- if (!grouped[key]) {
33
- grouped[key] = [];
34
- }
35
-
36
- grouped[key].push({ ...good, lineAttribute: key });
37
- })
38
- return Object.values(grouped);
39
- }
40
-
41
- /** 合并 */
42
- async function merge(goodsList: IGood[]) {
43
- if (goodsList.length < 2) return;
44
-
45
- const selectedGoodIndex = goodsList.map(e => e.$index);
46
- try {
47
- // 创建合并后的商品对象
48
- let sum: IGood = {
49
- $index: idGenerator(),
50
- lineAttribute: goodsList[0].lineAttribute,
51
- }
52
-
53
- // 存在税率不一样的明细,不能合并
54
- await checkTaxTate(goodsList);
55
-
56
- // 填充行明细信息
57
- sum = await fillingInformationGood(goodsList, sum);
58
-
59
- // 合并数量
60
- sum.quantity = await mergeQuantity(goodsList, state.calculatingDigits);
61
-
62
- // 合并金额(不含税)
63
- sum.lineAmountExcludeTax = await mergeLineAmountExcludeTax(goodsList);
64
-
65
- // 合并金额(含税)
66
- sum.lineAmountIncludeTax = await mergeLineAmountIncludeTax(goodsList);
67
-
68
- // 计算单价(不含税)
69
- sum.priceExcludeTax = await calculatePriceExcludeTax(sum, state.calculatingDigits);
70
-
71
- // 计算单价(含税)
72
- sum.priceIncludeTax = await calculatePriceIncludeTax(sum, state.calculatingDigits);
73
-
74
- // 计算税额
75
- sum.taxAmount = chain(bignumber(sum.lineAmountIncludeTax)).subtract(bignumber(sum.lineAmountExcludeTax)).done().toNumber()
76
-
77
- // 校验数据 是否数量和金额是否同号
78
- await checkSameNumber(sum);
79
-
80
- const p = state.goodsListState.goodsList.indexOf(goodsList[0]);
81
- state.goodsListState.goodsList = state.goodsListState.goodsList.filter(e => selectedGoodIndex.indexOf(e.$index) < 0);
82
- state.goodsListState.goodsList.splice(p, 0, sum);
83
- state.goodsListState.goodsList = state.goodsListState.goodsList.filter(e => e.lineAmountExcludeTax !== 0);
84
- state.goodsListState.goodsMap = new Map();
85
- state.goodsListState.goodsList.forEach(e => { state.goodsListState.goodsMap.set(e.$index, e) });
86
- state.goodsListState.selectedGoodIndex = [];
87
- } catch (error: any) {
88
- showError(error)
89
- }
90
- }
91
- }
92
-
93
- /** 计算单价(含税) */
94
- async function calculatePriceIncludeTax(sum: IGood, calculatingDigits?: number) {
95
- if (!sum.quantity) return undefined;
96
- const value = chain(bignumber(sum.lineAmountIncludeTax)).divide(bignumber(sum.quantity)).done().toNumber()
97
- return format15(value, calculatingDigits) || undefined;
98
- }
99
-
100
- /** 计算单价(不含税) */
101
- async function calculatePriceExcludeTax(sum: IGood, calculatingDigits?: number) {
102
- if (!sum.quantity) return undefined;
103
- const value = chain(bignumber(sum.lineAmountExcludeTax)).divide(bignumber(sum.quantity)).done().toNumber();
104
- return format15(value, calculatingDigits) || undefined;
105
- }
106
-
107
- /** 合并金额(含税) */
108
- async function mergeLineAmountIncludeTax(goodsList: IGood[]) {
109
- let sum = chain(bignumber(0));
110
- goodsList.forEach(e => {
111
- sum = sum.add(bignumber(e.lineAmountIncludeTax || 0))
112
- })
113
- return sum.done().toNumber();
114
- }
115
-
116
- /** 合并金额(不含税) */
117
- async function mergeLineAmountExcludeTax(goodsList: IGood[]) {
118
- let sum = chain(bignumber(0));
119
- goodsList.forEach(e => {
120
- sum = sum.add(bignumber(e.lineAmountExcludeTax || 0))
121
- })
122
- return sum.done().toNumber();
123
- }
124
-
125
- /** 合并数量 */
126
- async function mergeQuantity(goodsList: IGood[], calculatingDigits?: number) {
127
- let sum = chain(bignumber(0));
128
- goodsList.forEach(e => {
129
- sum = sum.add(bignumber(e.quantity || 0))
130
- })
131
-
132
- return sum.done().toNumber()
133
- ? format15(sum.done().toNumber() || 0, calculatingDigits) as any
134
- : undefined
135
- }
136
-
137
- /** 填充行明细信息 */
138
- async function fillingInformationGood(goodsList: IGood[], sum: IGood) {
139
- sum = { ...sum };
140
-
141
- const goods = goodsList[findMaxIndex(goodsList.map(e => e.lineAmountIncludeTax || 0))]
142
-
143
- return { ...goods, lineAttribute: sum.lineAttribute };
144
- }
145
-
146
- /** 存在税率不一样的明细,不能合并 */
147
- async function checkTaxTate(goodsList: IGood[]) {
148
- const tax = goodsList[0].taxRate;
149
- for (let i = 1; i < goodsList.length; i++) {
150
- if (tax !== goodsList[i].taxRate) {
151
- throw new Error('存在税率不一样的明细,不能合并');
152
- }
153
- }
154
- }
155
-
156
- /** 校验数据 是否数量和金额是否同号 */
157
- async function checkSameNumber(good: IGood) {
158
- if (!good.quantity) return;
159
-
160
- if (!good.lineAmountExcludeTax && good.lineAmountExcludeTax !== 0) {
161
- const content = '金额不能为空';
162
- message.error({ content, key: content });
163
- throw new Error(content);
164
- }
165
-
166
- if (
167
- good.quantity >= 0 && good.lineAmountExcludeTax >= 0 ||
168
- good.lineAmountExcludeTax === 0 ||
169
- good.quantity < 0 && good.lineAmountExcludeTax < 0
170
- ) {
171
- return;
172
- } else {
173
- const content = '合并失败,合并后“数量”和“金额”必须同时为正数或同时为负数。';
174
- message.error({ content, key: content });
175
- throw new Error(content);
176
- }
177
- }
178
-
179
- /** 显示错误信息 */
180
- function showError(error: Error) {
181
- console.log(error);
182
- message.error({ content: error.message, key: error.message });
183
- }
184
-
185
- /** 查询最大数据的索引 */
186
- function findMaxIndex(arr: number[]): number {
187
- if (arr.length === 0) {
188
- throw new Error("数组为空");
189
- }
190
-
191
- let maxIndex = 0;
192
- let maxValue = arr[0];
193
-
194
- for (let i = arr.length - 1; i >= 0; i--) {
195
- if (arr[i] > maxValue) {
196
- maxValue = arr[i];
197
- maxIndex = i;
198
- }
199
- }
200
-
201
- return maxIndex;
1
+
2
+ import { message } from 'kts-xui';
3
+ import { chain, bignumber } from 'mathjs';
4
+ import idGenerator from '../../tools/idGenerator';
5
+ import { IGood, InvoiceControllerState, LineAttributeType } from '..';
6
+ import { format15 } from '../../tools/calculate';
7
+
8
+ export default async function mergeDetails(state: InvoiceControllerState, selectedGoodIndex?: string[]) {
9
+
10
+ if (state.goodsListState.editGood || !selectedGoodIndex || selectedGoodIndex.length < 2) return;
11
+
12
+ const goodsList = state.goodsListState.goodsList.filter(e => selectedGoodIndex.indexOf(e.$index) >= 0);
13
+ if (goodsList.length < 2) return;
14
+
15
+ grouping(goodsList).forEach(merge);
16
+
17
+ /** 分组 */
18
+ function grouping(goodsList: IGood[]): IGood[][] {
19
+ const grouped: any = {};
20
+ goodsList.forEach(good => {
21
+ const key = (() => {
22
+ switch (good.lineAttribute) {
23
+ case LineAttributeType.折让行:
24
+ return LineAttributeType.折让行
25
+ case LineAttributeType.赠品行:
26
+ return LineAttributeType.赠品行
27
+ default:
28
+ return LineAttributeType.正常
29
+ }
30
+ })()
31
+
32
+ if (!grouped[key]) {
33
+ grouped[key] = [];
34
+ }
35
+
36
+ grouped[key].push({ ...good, lineAttribute: key });
37
+ })
38
+ return Object.values(grouped);
39
+ }
40
+
41
+ /** 合并 */
42
+ async function merge(goodsList: IGood[]) {
43
+ if (goodsList.length < 2) return;
44
+
45
+ const selectedGoodIndex = goodsList.map(e => e.$index);
46
+ try {
47
+ // 创建合并后的商品对象
48
+ let sum: IGood = {
49
+ $index: idGenerator(),
50
+ lineAttribute: goodsList[0].lineAttribute,
51
+ }
52
+
53
+ // 存在税率不一样的明细,不能合并
54
+ await checkTaxTate(goodsList);
55
+
56
+ // 填充行明细信息
57
+ sum = await fillingInformationGood(goodsList, sum);
58
+
59
+ // 合并数量
60
+ sum.quantity = await mergeQuantity(goodsList, state.calculatingDigits);
61
+
62
+ // 合并金额(不含税)
63
+ sum.lineAmountExcludeTax = await mergeLineAmountExcludeTax(goodsList);
64
+
65
+ // 合并金额(含税)
66
+ sum.lineAmountIncludeTax = await mergeLineAmountIncludeTax(goodsList);
67
+
68
+ // 计算单价(不含税)
69
+ sum.priceExcludeTax = await calculatePriceExcludeTax(sum, state.calculatingDigits);
70
+
71
+ // 计算单价(含税)
72
+ sum.priceIncludeTax = await calculatePriceIncludeTax(sum, state.calculatingDigits);
73
+
74
+ // 计算税额
75
+ sum.taxAmount = chain(bignumber(sum.lineAmountIncludeTax)).subtract(bignumber(sum.lineAmountExcludeTax)).done().toNumber()
76
+
77
+ // 校验数据 是否数量和金额是否同号
78
+ await checkSameNumber(sum);
79
+
80
+ const p = state.goodsListState.goodsList.indexOf(goodsList[0]);
81
+ state.goodsListState.goodsList = state.goodsListState.goodsList.filter(e => selectedGoodIndex.indexOf(e.$index) < 0);
82
+ state.goodsListState.goodsList.splice(p, 0, sum);
83
+ state.goodsListState.goodsList = state.goodsListState.goodsList.filter(e => e.lineAmountExcludeTax !== 0);
84
+ state.goodsListState.goodsMap = new Map();
85
+ state.goodsListState.goodsList.forEach(e => { state.goodsListState.goodsMap.set(e.$index, e) });
86
+ state.goodsListState.selectedGoodIndex = [];
87
+ } catch (error: any) {
88
+ showError(error)
89
+ }
90
+ }
91
+ }
92
+
93
+ /** 计算单价(含税) */
94
+ async function calculatePriceIncludeTax(sum: IGood, calculatingDigits?: number) {
95
+ if (!sum.quantity) return undefined;
96
+ const value = chain(bignumber(sum.lineAmountIncludeTax)).divide(bignumber(sum.quantity)).done().toNumber()
97
+ return format15(value, calculatingDigits) || undefined;
98
+ }
99
+
100
+ /** 计算单价(不含税) */
101
+ async function calculatePriceExcludeTax(sum: IGood, calculatingDigits?: number) {
102
+ if (!sum.quantity) return undefined;
103
+ const value = chain(bignumber(sum.lineAmountExcludeTax)).divide(bignumber(sum.quantity)).done().toNumber();
104
+ return format15(value, calculatingDigits) || undefined;
105
+ }
106
+
107
+ /** 合并金额(含税) */
108
+ async function mergeLineAmountIncludeTax(goodsList: IGood[]) {
109
+ let sum = chain(bignumber(0));
110
+ goodsList.forEach(e => {
111
+ sum = sum.add(bignumber(e.lineAmountIncludeTax || 0))
112
+ })
113
+ return sum.done().toNumber();
114
+ }
115
+
116
+ /** 合并金额(不含税) */
117
+ async function mergeLineAmountExcludeTax(goodsList: IGood[]) {
118
+ let sum = chain(bignumber(0));
119
+ goodsList.forEach(e => {
120
+ sum = sum.add(bignumber(e.lineAmountExcludeTax || 0))
121
+ })
122
+ return sum.done().toNumber();
123
+ }
124
+
125
+ /** 合并数量 */
126
+ async function mergeQuantity(goodsList: IGood[], calculatingDigits?: number) {
127
+ let sum = chain(bignumber(0));
128
+ goodsList.forEach(e => {
129
+ sum = sum.add(bignumber(e.quantity || 0))
130
+ })
131
+
132
+ return sum.done().toNumber()
133
+ ? format15(sum.done().toNumber() || 0, calculatingDigits) as any
134
+ : undefined
135
+ }
136
+
137
+ /** 填充行明细信息 */
138
+ async function fillingInformationGood(goodsList: IGood[], sum: IGood) {
139
+ sum = { ...sum };
140
+
141
+ const goods = goodsList[findMaxIndex(goodsList.map(e => e.lineAmountIncludeTax || 0))]
142
+
143
+ return { ...goods, lineAttribute: sum.lineAttribute };
144
+ }
145
+
146
+ /** 存在税率不一样的明细,不能合并 */
147
+ async function checkTaxTate(goodsList: IGood[]) {
148
+ const tax = goodsList[0].taxRate;
149
+ for (let i = 1; i < goodsList.length; i++) {
150
+ if (tax !== goodsList[i].taxRate) {
151
+ throw new Error('存在税率不一样的明细,不能合并');
152
+ }
153
+ }
154
+ }
155
+
156
+ /** 校验数据 是否数量和金额是否同号 */
157
+ async function checkSameNumber(good: IGood) {
158
+ if (!good.quantity) return;
159
+
160
+ if (!good.lineAmountExcludeTax && good.lineAmountExcludeTax !== 0) {
161
+ const content = '金额不能为空';
162
+ message.error({ content, key: content });
163
+ throw new Error(content);
164
+ }
165
+
166
+ if (
167
+ good.quantity >= 0 && good.lineAmountExcludeTax >= 0 ||
168
+ good.lineAmountExcludeTax === 0 ||
169
+ good.quantity < 0 && good.lineAmountExcludeTax < 0
170
+ ) {
171
+ return;
172
+ } else {
173
+ const content = '合并失败,合并后“数量”和“金额”必须同时为正数或同时为负数。';
174
+ message.error({ content, key: content });
175
+ throw new Error(content);
176
+ }
177
+ }
178
+
179
+ /** 显示错误信息 */
180
+ function showError(error: Error) {
181
+ console.log(error);
182
+ message.error({ content: error.message, key: error.message });
183
+ }
184
+
185
+ /** 查询最大数据的索引 */
186
+ function findMaxIndex(arr: number[]): number {
187
+ if (arr.length === 0) {
188
+ throw new Error("数组为空");
189
+ }
190
+
191
+ let maxIndex = 0;
192
+ let maxValue = arr[0];
193
+
194
+ for (let i = arr.length - 1; i >= 0; i--) {
195
+ if (arr[i] > maxValue) {
196
+ maxValue = arr[i];
197
+ maxIndex = i;
198
+ }
199
+ }
200
+
201
+ return maxIndex;
202
202
  }
@@ -1,36 +1,36 @@
1
-
2
-
3
- import { IGood, InvoiceControllerState, LineAttributeType } from '..';
4
- import { format15 } from '../../tools/calculate';
5
- import { chain, bignumber } from 'mathjs';
6
- import idGenerator from '../../tools/idGenerator';
7
-
8
- export default async function mergeDiscount(state: InvoiceControllerState) {
9
- if (state.goodsListState.goodsList.length <= 1 || state.goodsListState.editGood) return;
10
-
11
- const goodsList = state.goodsListState.goodsList.slice();
12
- for (let i = 0; i < goodsList.length; i++) {
13
- const good = goodsList[i];
14
- if (good.lineAttribute * 1 === LineAttributeType.被折扣行) {
15
- const sum: IGood = { ...good, $index: idGenerator(), lineAttribute: LineAttributeType.正常, discountGroup: undefined };
16
- const zk = goodsList[i + 1];
17
-
18
- sum.lineAmountExcludeTax = chain(bignumber(good.lineAmountExcludeTax)).subtract(bignumber(Math.abs(zk.lineAmountExcludeTax || 0))).done().toNumber();
19
- sum.lineAmountIncludeTax = chain(bignumber(good.lineAmountIncludeTax)).subtract(bignumber(Math.abs(zk.lineAmountIncludeTax || 0))).done().toNumber();
20
- sum.taxAmount = chain(bignumber(sum.lineAmountIncludeTax)).subtract(bignumber(sum.lineAmountExcludeTax)).done().toNumber();
21
- sum.quantity = good.quantity;
22
- if (sum.quantity) {
23
- const calculatingDigits = state.calculatingDigits;
24
- sum.priceExcludeTax = format15(chain(bignumber(sum.lineAmountExcludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0;
25
- sum.priceIncludeTax = format15(chain(bignumber(sum.lineAmountIncludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0;
26
- }
27
-
28
- if (sum.lineAmountIncludeTax === 0) {
29
- goodsList.splice(i, 2); i--;
30
- } else {
31
- goodsList.splice(i, 2, sum);
32
- }
33
- }
34
- }
35
- state.goodsListState.goodsList = goodsList;
1
+
2
+
3
+ import { IGood, InvoiceControllerState, LineAttributeType } from '..';
4
+ import { format15 } from '../../tools/calculate';
5
+ import { chain, bignumber } from 'mathjs';
6
+ import idGenerator from '../../tools/idGenerator';
7
+
8
+ export default async function mergeDiscount(state: InvoiceControllerState) {
9
+ if (state.goodsListState.goodsList.length <= 1 || state.goodsListState.editGood) return;
10
+
11
+ const goodsList = state.goodsListState.goodsList.slice();
12
+ for (let i = 0; i < goodsList.length; i++) {
13
+ const good = goodsList[i];
14
+ if (good.lineAttribute * 1 === LineAttributeType.被折扣行) {
15
+ const sum: IGood = { ...good, $index: idGenerator(), lineAttribute: LineAttributeType.正常, discountGroup: undefined };
16
+ const zk = goodsList[i + 1];
17
+
18
+ sum.lineAmountExcludeTax = chain(bignumber(good.lineAmountExcludeTax)).subtract(bignumber(Math.abs(zk.lineAmountExcludeTax || 0))).done().toNumber();
19
+ sum.lineAmountIncludeTax = chain(bignumber(good.lineAmountIncludeTax)).subtract(bignumber(Math.abs(zk.lineAmountIncludeTax || 0))).done().toNumber();
20
+ sum.taxAmount = chain(bignumber(sum.lineAmountIncludeTax)).subtract(bignumber(sum.lineAmountExcludeTax)).done().toNumber();
21
+ sum.quantity = good.quantity;
22
+ if (sum.quantity) {
23
+ const calculatingDigits = state.calculatingDigits;
24
+ sum.priceExcludeTax = format15(chain(bignumber(sum.lineAmountExcludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0;
25
+ sum.priceIncludeTax = format15(chain(bignumber(sum.lineAmountIncludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0;
26
+ }
27
+
28
+ if (sum.lineAmountIncludeTax === 0) {
29
+ goodsList.splice(i, 2); i--;
30
+ } else {
31
+ goodsList.splice(i, 2, sum);
32
+ }
33
+ }
34
+ }
35
+ state.goodsListState.goodsList = goodsList;
36
36
  }
@@ -1,24 +1,24 @@
1
- import { InvoiceControllerState } from '../';
2
-
3
- /**
4
- * 保存正在编辑的货物
5
- */
6
- export default async (state: InvoiceControllerState) => {
7
-
8
- const editGood = state.goodsListState.editGood;
9
- const form = state.goodsListState.form;
10
-
11
- if (!editGood || !form || state.goodsListState.importGoods.isVisibleDrawer || state.calculatingField) return;
12
- if ((await validateFields(form)).err) return;
13
-
14
- state.goodsListState.goodsList = state.goodsListState.goodsList.map((e) =>
15
- e.$index === editGood.$index ? { ...e, ...editGood } : e,
16
- );
17
- state.goodsListState.editGood = undefined;
18
- };
19
-
20
- const validateFields = (form: any) => new Promise((resolve: (v: { err: any; values: any }) => void) => {
21
- form.validateFields(async (err: any, values: any) => {
22
- resolve({ err, values });
23
- });
24
- });
1
+ import { InvoiceControllerState } from '../';
2
+
3
+ /**
4
+ * 保存正在编辑的货物
5
+ */
6
+ export default async (state: InvoiceControllerState) => {
7
+
8
+ const editGood = state.goodsListState.editGood;
9
+ const form = state.goodsListState.form;
10
+
11
+ if (!editGood || !form || state.goodsListState.importGoods.isVisibleDrawer || state.calculatingField) return;
12
+ if ((await validateFields(form)).err) return;
13
+
14
+ state.goodsListState.goodsList = state.goodsListState.goodsList.map((e) =>
15
+ e.$index === editGood.$index ? { ...e, ...editGood } : e,
16
+ );
17
+ state.goodsListState.editGood = undefined;
18
+ };
19
+
20
+ const validateFields = (form: any) => new Promise((resolve: (v: { err: any; values: any }) => void) => {
21
+ form.validateFields(async (err: any, values: any) => {
22
+ resolve({ err, values });
23
+ });
24
+ });
@@ -1,16 +1,16 @@
1
- import { InvoiceControllerState, IGood } from '../';
2
-
3
- /**
4
- * 设置当前的编辑货物
5
- */
6
- export default async (state: InvoiceControllerState, newEditGood?: any) => {
7
- if (newEditGood) {
8
- const editGood = state.goodsListState.editGood as IGood;
9
- state.goodsListState = {
10
- ...state.goodsListState,
11
- editGood: { ...editGood, ...newEditGood },
12
- };
13
- } else {
14
- state.goodsListState = { ...state.goodsListState, editGood: undefined };
15
- }
16
- };
1
+ import { InvoiceControllerState, IGood } from '../';
2
+
3
+ /**
4
+ * 设置当前的编辑货物
5
+ */
6
+ export default async (state: InvoiceControllerState, newEditGood?: any) => {
7
+ if (newEditGood) {
8
+ const editGood = state.goodsListState.editGood as IGood;
9
+ state.goodsListState = {
10
+ ...state.goodsListState,
11
+ editGood: { ...editGood, ...newEditGood },
12
+ };
13
+ } else {
14
+ state.goodsListState = { ...state.goodsListState, editGood: undefined };
15
+ }
16
+ };
@@ -1,11 +1,11 @@
1
-
2
- import { InvoiceControllerState, IGood } from '../';
3
-
4
- /**
5
- * 设置单个货物属性
6
- */
7
- export default async (state: InvoiceControllerState, options?: IGood) => {
8
- if (!options || !options.$index) return;
9
- const goodsList = state.goodsListState.goodsList.map(e => e.$index === options.$index ? { ...e, ...options } : e);
10
- state.goodsListState = { ...state.goodsListState, goodsList };
1
+
2
+ import { InvoiceControllerState, IGood } from '../';
3
+
4
+ /**
5
+ * 设置单个货物属性
6
+ */
7
+ export default async (state: InvoiceControllerState, options?: IGood) => {
8
+ if (!options || !options.$index) return;
9
+ const goodsList = state.goodsListState.goodsList.map(e => e.$index === options.$index ? { ...e, ...options } : e);
10
+ state.goodsListState = { ...state.goodsListState, goodsList };
11
11
  };
@@ -1,9 +1,9 @@
1
-
2
- import InvoiceControllerState from '../InvoiceControllerState';
3
-
4
- /**
5
- * 更新 发票单据编号
6
- */
7
- export default async (state: InvoiceControllerState) => {
8
- return `INV${(Math.random() * 10000000000000).toFixed(0)}`;
1
+
2
+ import InvoiceControllerState from '../InvoiceControllerState';
3
+
4
+ /**
5
+ * 更新 发票单据编号
6
+ */
7
+ export default async (state: InvoiceControllerState) => {
8
+ return `INV${(Math.random() * 10000000000000).toFixed(0)}`;
9
9
  };