@freedom_sky/feige-lib 5.13.0 → 5.14.0

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 (172) hide show
  1. package/.eslintignore +2 -2
  2. package/.eslintrc.js +15 -15
  3. package/.prettierrc.js +6 -6
  4. package/CHANGE.md +24 -24
  5. package/dist/announcement/enum/announcement.enum.d.ts +11 -11
  6. package/dist/announcement/enum/announcement.enum.js +15 -15
  7. package/dist/buffet/index.d.ts +46 -46
  8. package/dist/buffet/index.js +95 -95
  9. package/dist/const/const.d.ts +363 -363
  10. package/dist/const/const.js +2416 -2416
  11. package/dist/enum/ai-token.enum.d.ts +10 -10
  12. package/dist/enum/ai-token.enum.js +14 -14
  13. package/dist/enum/checkout.enum.d.ts +13 -13
  14. package/dist/enum/checkout.enum.js +17 -17
  15. package/dist/enum/common.enum.d.ts +14 -14
  16. package/dist/enum/common.enum.js +18 -18
  17. package/dist/enum/continent.enum.d.ts +8 -8
  18. package/dist/enum/continent.enum.js +11 -11
  19. package/dist/enum/dish.enum.d.ts +4 -4
  20. package/dist/enum/dish.enum.js +7 -7
  21. package/dist/enum/from.enum.d.ts +14 -14
  22. package/dist/enum/from.enum.js +17 -17
  23. package/dist/enum/member.enum.d.ts +16 -16
  24. package/dist/enum/member.enum.js +21 -21
  25. package/dist/enum/menu-io.enum.d.ts +4 -4
  26. package/dist/enum/menu-io.enum.js +7 -7
  27. package/dist/enum/order.enum.d.ts +7 -7
  28. package/dist/enum/order.enum.js +10 -10
  29. package/dist/enum/pay-company.enum.d.ts +4 -4
  30. package/dist/enum/pay-company.enum.js +7 -7
  31. package/dist/enum/printer.enum.d.ts +37 -37
  32. package/dist/enum/printer.enum.js +46 -46
  33. package/dist/enum/receptionist.enum.d.ts +8 -8
  34. package/dist/enum/receptionist.enum.js +11 -11
  35. package/dist/enum/role.enum.d.ts +7 -7
  36. package/dist/enum/role.enum.js +10 -10
  37. package/dist/enum/sms.enum.d.ts +14 -14
  38. package/dist/enum/sms.enum.js +18 -18
  39. package/dist/enum/tax.enum.d.ts +4 -4
  40. package/dist/enum/tax.enum.js +7 -7
  41. package/dist/enum/time-menu.enum.d.ts +4 -4
  42. package/dist/enum/time-menu.enum.js +7 -7
  43. package/dist/enum/timezone.emum.d.ts +33 -33
  44. package/dist/enum/timezone.emum.js +36 -36
  45. package/dist/enum/user-status.enum.d.ts +9 -9
  46. package/dist/enum/user-status.enum.js +12 -12
  47. package/dist/enum/visit-task.enum.d.ts +13 -13
  48. package/dist/enum/visit-task.enum.js +17 -17
  49. package/dist/enum/yeepay.enum.d.ts +22 -22
  50. package/dist/enum/yeepay.enum.js +30 -30
  51. package/dist/index.d.ts +200 -200
  52. package/dist/index.js +561 -561
  53. package/dist/interfaces/common/language.interface.d.ts +15 -15
  54. package/dist/interfaces/common/language.interface.js +2 -2
  55. package/dist/interfaces/member/member-transaction.interface.d.ts +27 -27
  56. package/dist/interfaces/member/member-transaction.interface.js +2 -2
  57. package/dist/interfaces/member/member.interface.d.ts +16 -16
  58. package/dist/interfaces/member/member.interface.js +2 -2
  59. package/dist/interfaces/order/baseOrder.interface.d.ts +84 -83
  60. package/dist/interfaces/order/baseOrder.interface.js +2 -2
  61. package/dist/interfaces/order/buffetOrder.interface.d.ts +13 -13
  62. package/dist/interfaces/order/buffetOrder.interface.js +2 -2
  63. package/dist/interfaces/order/deliveryOrder.interface.d.ts +9 -9
  64. package/dist/interfaces/order/deliveryOrder.interface.js +2 -2
  65. package/dist/interfaces/order/index.d.ts +7 -7
  66. package/dist/interfaces/order/index.js +6 -6
  67. package/dist/interfaces/order/order.interface.d.ts +75 -75
  68. package/dist/interfaces/order/order.interface.js +17 -17
  69. package/dist/interfaces/order/pickupOrder.interface.d.ts +8 -8
  70. package/dist/interfaces/order/pickupOrder.interface.js +2 -2
  71. package/dist/interfaces/order/serialOrder.interface.d.ts +4 -4
  72. package/dist/interfaces/order/serialOrder.interface.js +2 -2
  73. package/dist/interfaces/order/tableOrder.interface.d.ts +7 -7
  74. package/dist/interfaces/order/tableOrder.interface.js +2 -2
  75. package/dist/interfaces/store/classification.interface.d.ts +7 -7
  76. package/dist/interfaces/store/classification.interface.js +2 -2
  77. package/dist/interfaces/store/dish.interface.d.ts +18 -18
  78. package/dist/interfaces/store/dish.interface.js +2 -2
  79. package/dist/interfaces/store/dishSnapshot.interface.d.ts +11 -11
  80. package/dist/interfaces/store/dishSnapshot.interface.js +2 -2
  81. package/dist/interfaces/store/member.interface.d.ts +8 -8
  82. package/dist/interfaces/store/member.interface.js +2 -2
  83. package/dist/interfaces/store/menu-export.interface.d.ts +12 -12
  84. package/dist/interfaces/store/menu-export.interface.js +2 -2
  85. package/dist/interfaces/store/specification.interface.d.ts +17 -17
  86. package/dist/interfaces/store/specification.interface.js +2 -2
  87. package/dist/interfaces/store/store.interface.d.ts +287 -287
  88. package/dist/interfaces/store/store.interface.js +2 -2
  89. package/dist/interfaces/store/subscription.interface.d.ts +43 -43
  90. package/dist/interfaces/store/subscription.interface.js +2 -2
  91. package/dist/interfaces/user/user.interface.d.ts +139 -139
  92. package/dist/interfaces/user/user.interface.js +2 -2
  93. package/dist/interfaces/visit-task/visit-task.interface.d.ts +17 -17
  94. package/dist/interfaces/visit-task/visit-task.interface.js +2 -2
  95. package/dist/order/index.d.ts +21 -21
  96. package/dist/order/index.js +57 -57
  97. package/jest.config.js +189 -189
  98. package/josn-hub/orders/tax-have-price-bind-order.ts +381 -381
  99. package/josn-hub/orders/tax-order.ts +371 -371
  100. package/josn-hub/orders//346/225/264/345/215/225/344/273/267/346/240/274/351/203/275/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +321 -321
  101. package/josn-hub/orders//346/234/211/344/270/200/344/270/252/350/217/234/347/232/204/344/273/267/346/240/274/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +348 -348
  102. package/josn-hub/orders//347/202/271/344/272/206/344/270/215/345/212/240/344/273/267/345/222/214/345/233/272/345/256/232/345/212/240/345/207/217/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +350 -350
  103. package/josn-hub/orders//347/202/271/344/272/206/345/233/272/345/256/232/345/212/240/344/273/267-/347/231/276/345/210/206/346/257/224/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +301 -301
  104. package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +321 -321
  105. package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225/345/271/266/346/234/211/351/205/215/351/200/201/350/264/271.ts +159 -159
  106. package/josn-hub/orders//350/207/252/345/212/251/351/244/220/347/232/204/346/203/205/345/206/265.ts +665 -665
  107. package/josn-hub/orders//351/203/250/345/210/206/351/200/200/350/217/234/347/232/204/346/203/205/345/206/265.ts +73 -73
  108. package/package.json +55 -55
  109. package/src/announcement/enum/announcement.enum.ts +12 -12
  110. package/src/buffet/index.ts +123 -123
  111. package/src/const/const.ts +2433 -2433
  112. package/src/enum/ai-token.enum.ts +10 -10
  113. package/src/enum/checkout.enum.ts +14 -14
  114. package/src/enum/common.enum.ts +15 -15
  115. package/src/enum/continent.enum.ts +8 -8
  116. package/src/enum/dish.enum.ts +4 -4
  117. package/src/enum/from.enum.ts +14 -14
  118. package/src/enum/member.enum.ts +16 -16
  119. package/src/enum/menu-io.enum.ts +4 -4
  120. package/src/enum/order.enum.ts +7 -7
  121. package/src/enum/pay-company.enum.ts +4 -4
  122. package/src/enum/printer.enum.ts +41 -41
  123. package/src/enum/receptionist.enum.ts +8 -8
  124. package/src/enum/role.enum.ts +7 -7
  125. package/src/enum/sms.enum.ts +14 -14
  126. package/src/enum/tax.enum.ts +4 -4
  127. package/src/enum/time-menu.enum.ts +4 -4
  128. package/src/enum/timezone.emum.ts +33 -33
  129. package/src/enum/user-status.enum.ts +9 -9
  130. package/src/enum/visit-task.enum.ts +14 -14
  131. package/src/enum/yeepay.enum.ts +27 -27
  132. package/src/index.spec.ts +1082 -1082
  133. package/src/index.ts +612 -612
  134. package/src/interfaces/common/language.interface.ts +15 -15
  135. package/src/interfaces/member/member-transaction.interface.ts +32 -32
  136. package/src/interfaces/member/member.interface.ts +16 -16
  137. package/src/interfaces/order/baseOrder.interface.ts +89 -88
  138. package/src/interfaces/order/buffetOrder.interface.ts +14 -14
  139. package/src/interfaces/order/deliveryOrder.interface.ts +10 -10
  140. package/src/interfaces/order/index.ts +7 -7
  141. package/src/interfaces/order/order.interface.ts +84 -84
  142. package/src/interfaces/order/pickupOrder.interface.ts +9 -9
  143. package/src/interfaces/order/serialOrder.interface.ts +5 -5
  144. package/src/interfaces/order/tableOrder.interface.ts +8 -8
  145. package/src/interfaces/store/classification.interface.ts +7 -7
  146. package/src/interfaces/store/dish.interface.ts +18 -18
  147. package/src/interfaces/store/dishSnapshot.interface.ts +12 -12
  148. package/src/interfaces/store/member.interface.ts +9 -9
  149. package/src/interfaces/store/menu-export.interface.ts +13 -13
  150. package/src/interfaces/store/specification.interface.ts +17 -17
  151. package/src/interfaces/store/store.interface.ts +303 -303
  152. package/src/interfaces/store/subscription.interface.ts +43 -43
  153. package/src/interfaces/user/user.interface.ts +139 -139
  154. package/src/interfaces/visit-task/visit-task.interface.ts +17 -17
  155. package/src/order/index.ts +89 -89
  156. package/tsconfig.json +12 -12
  157. package/dist/enum/checkout.emum.d.ts +0 -11
  158. package/dist/enum/checkout.emum.js +0 -15
  159. package/dist/enum/language.enum.d.ts +0 -21
  160. package/dist/enum/language.enum.js +0 -29
  161. package/dist/interfaces/member-transaction/member-transaction.interface.d.ts +0 -16
  162. package/dist/interfaces/member-transaction/member-transaction.interface.js +0 -2
  163. package/dist/interfaces/member-transaction/member.interface.d.ts +0 -16
  164. package/dist/interfaces/member-transaction/member.interface.js +0 -2
  165. package/dist/interfaces/order/pickupOrder.interface copy.d.ts +0 -8
  166. package/dist/interfaces/order/pickupOrder.interface copy.js +0 -2
  167. package/dist/interfaces/order/seriesOrder.interface.d.ts +0 -4
  168. package/dist/interfaces/order/seriesOrder.interface.js +0 -2
  169. package/dist/interfaces/order/tableOrder.interface copy.d.ts +0 -6
  170. package/dist/interfaces/order/tableOrder.interface copy.js +0 -2
  171. package/dist/interfaces/store/subscription.interface copy.d.ts +0 -27
  172. package/dist/interfaces/store/subscription.interface copy.js +0 -2
package/dist/index.js CHANGED
@@ -1,561 +1,561 @@
1
- "use strict";
2
- function __export(m) {
3
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
- }
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var const_1 = require("./const/const");
7
- exports.CONST = const_1.CONST;
8
- var printer_enum_1 = require("./enum/printer.enum");
9
- exports.PrintStatusEnum = printer_enum_1.PrintStatusEnum;
10
- exports.PrinterDeviceTypeEnum = printer_enum_1.PrinterDeviceTypeEnum;
11
- exports.PrinterWidthEnum = printer_enum_1.PrinterWidthEnum;
12
- var dish_enum_1 = require("./enum/dish.enum");
13
- __export(require("./enum/common.enum"));
14
- __export(require("./enum/time-menu.enum"));
15
- __export(require("./enum/printer.enum"));
16
- __export(require("./enum/member.enum"));
17
- __export(require("./enum/sms.enum"));
18
- __export(require("./enum/ai-token.enum"));
19
- __export(require("./enum/checkout.enum"));
20
- __export(require("./enum/yeepay.enum"));
21
- __export(require("./enum/timezone.emum"));
22
- __export(require("./enum/order.enum"));
23
- __export(require("./enum/tax.enum"));
24
- __export(require("./enum/dish.enum"));
25
- __export(require("./enum/user-status.enum"));
26
- __export(require("./enum/visit-task.enum"));
27
- __export(require("./enum/receptionist.enum"));
28
- __export(require("./enum/from.enum"));
29
- __export(require("./enum/role.enum"));
30
- __export(require("./enum/continent.enum"));
31
- __export(require("./announcement/enum/announcement.enum"));
32
- var menu_io_enum_1 = require("./enum/menu-io.enum");
33
- exports.MenuImportModeEnum = menu_io_enum_1.MenuImportModeEnum;
34
- __export(require("./interfaces/order"));
35
- var pay_company_enum_1 = require("./enum/pay-company.enum");
36
- exports.PayCompanyEnum = pay_company_enum_1.PayCompanyEnum;
37
- var moment = require("moment");
38
- exports.moment = moment;
39
- var big_js_1 = require("big.js");
40
- exports.Big = big_js_1.default;
41
- var tax_enum_1 = require("./enum/tax.enum");
42
- var order_enum_1 = require("./enum/order.enum");
43
- var index_1 = require("./buffet/index");
44
- __export(require("./buffet/index"));
45
- __export(require("./order/index"));
46
- /**
47
- * 小数转化为金额,去除分位之后的尾数
48
- *
49
- * @param {number} num 需要转换的数字
50
- * @returns {number} 返回只保留两位小数的money
51
- */
52
- function parseMoney(num) {
53
- return Math.round(num * 100) / 100;
54
- }
55
- exports.parseMoney = parseMoney;
56
- /**
57
- * 计算加了规格后的菜品单价
58
- *
59
- * @param {Content} conent 单个菜品内容
60
- * @returns {number} 返回订单总金额
61
- *
62
- */
63
- function calcDishFinalPrice(conent) {
64
- var addPrice = 0;
65
- var originPrice = conent.dishSnapshot.type === dish_enum_1.DishType.Weigh
66
- ? conent.weight * conent.dishSnapshot.price
67
- : conent.dishSnapshot.price;
68
- var selectedSpecifications = conent.dishSnapshot.selectedSpecifications || [];
69
- selectedSpecifications.forEach(function (specification) {
70
- if (!specification) {
71
- return;
72
- }
73
- specification.content.forEach(function (item) {
74
- if (item.fareType == const_1.CONST.FARE_TYPE.FIXED) {
75
- addPrice += item.fare;
76
- }
77
- else if (item.fareType == const_1.CONST.FARE_TYPE.PERCENTAGE) {
78
- addPrice += (originPrice * item.fare) / 100;
79
- }
80
- });
81
- });
82
- var dishPrice = originPrice + addPrice;
83
- if (dishPrice < 0) {
84
- dishPrice = 0;
85
- }
86
- return parseMoney(dishPrice);
87
- }
88
- exports.calcDishFinalPrice = calcDishFinalPrice;
89
- /**
90
- * 利用订单计算总价
91
- *
92
- * @param {object} order 订单
93
- * @returns {number} 返回订单总金额
94
- *
95
- */
96
- function calcTotalPrice(order) {
97
- var totalPrice = 0;
98
- order.content.forEach(function (orderContentItem) {
99
- var _a;
100
- totalPrice += calcContentPrice({
101
- orderContentItem: orderContentItem,
102
- buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
103
- orderType: order.type,
104
- adultNum: order.adultNum,
105
- childNum: order.childNum,
106
- contents: order.content,
107
- });
108
- });
109
- if (order.deliveryFee && !order.selfPickUp) {
110
- totalPrice += order.deliveryFee;
111
- }
112
- if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
113
- totalPrice += index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
114
- }
115
- return parseMoney(totalPrice);
116
- }
117
- exports.calcTotalPrice = calcTotalPrice;
118
- /**
119
- *
120
- */
121
- function calcContentPrice(_a) {
122
- var orderContentItem = _a.orderContentItem, buffetItem = _a.buffetItem, orderType = _a.orderType, adultNum = _a.adultNum, childNum = _a.childNum, contents = _a.contents;
123
- if (orderType === order_enum_1.OrderTypeEnum.Buffet) {
124
- var buffetDishItem = index_1.getDishItemInBuffet({ dishId: orderContentItem.dishSnapshot._id, buffet: buffetItem });
125
- if (buffetDishItem) {
126
- var maxUpperLimit = index_1.getMaxBuffetDishUpperLimit({
127
- buffetDishItem: buffetDishItem,
128
- adultNum: adultNum,
129
- childNum: childNum,
130
- });
131
- var beforeCount = getOrderedCountByDishId(orderContentItem.dishSnapshot._id, contents, orderContentItem._id);
132
- var maxUpperLimitForThisItem = Math.max(maxUpperLimit - beforeCount, 0);
133
- if (maxUpperLimitForThisItem >= orderContentItem.count) {
134
- return 0;
135
- }
136
- else {
137
- return (orderContentItem.count - maxUpperLimitForThisItem) * calcDishFinalPrice(orderContentItem);
138
- }
139
- }
140
- else {
141
- return orderContentItem.count * calcDishFinalPrice(orderContentItem);
142
- }
143
- }
144
- else {
145
- return orderContentItem.count * calcDishFinalPrice(orderContentItem);
146
- }
147
- }
148
- exports.calcContentPrice = calcContentPrice;
149
- /**
150
- * @param dishId
151
- * @param contents
152
- * @param beforeKey
153
- */
154
- function getOrderedCountByDishId(dishId, contents, beforeKey) {
155
- var count = 0;
156
- for (var _i = 0, _a = contents.filter(function (content) { return String(content.dishSnapshot._id) === String(dishId); }); _i < _a.length; _i++) {
157
- var content = _a[_i];
158
- if (beforeKey && String(content._id) === String(beforeKey))
159
- break;
160
- count += content.count;
161
- }
162
- return count;
163
- }
164
- exports.getOrderedCountByDishId = getOrderedCountByDishId;
165
- /**
166
- * 计算处理后的应收金额
167
- *
168
- * @param {object} order 订单
169
- * @param {Array} processArr 结账处理过程
170
- * @param noTax
171
- * @param taxEnable
172
- * @returns {object} 返回应收订单总金额,以及处理计算过程
173
- */
174
- function calcReceivablePrice(order, processArr, noTax) {
175
- if (noTax === void 0) { noTax = false; }
176
- var _a, _b;
177
- var totalDiscountPrice = 0;
178
- var resultProcessArr = [];
179
- var totalPrice = calcTotalPrice(order);
180
- var receivablePrice = totalPrice;
181
- var sortedProcessArr = processArr.sort(function (a, b) {
182
- return (const_1.CONST.RECEIVABLE_PROCESSING_TYPE[b.type.toUpperCase()].SORT -
183
- const_1.CONST.RECEIVABLE_PROCESSING_TYPE[a.type.toUpperCase()].SORT);
184
- });
185
- var totalMarkDown = 0;
186
- var receivablePriceAfterDiscount = receivablePrice;
187
- sortedProcessArr.forEach(function (process) {
188
- if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
189
- var rate_1 = -(10 - process.value) / 10;
190
- var volume_1 = 0;
191
- order.content.forEach(function (orderContentItem) {
192
- var _a;
193
- if (orderContentItem.dishSnapshot.noFullOrderDiscount) {
194
- return;
195
- }
196
- var dishTotalPrice = calcContentPrice({
197
- orderContentItem: orderContentItem,
198
- buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
199
- orderType: order.type,
200
- adultNum: order.adultNum,
201
- childNum: order.childNum,
202
- contents: order.content,
203
- });
204
- totalDiscountPrice += dishTotalPrice;
205
- volume_1 += dishTotalPrice * rate_1;
206
- });
207
- if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
208
- var buffetTotalPrice = index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
209
- totalDiscountPrice += buffetTotalPrice;
210
- volume_1 += buffetTotalPrice * rate_1;
211
- }
212
- resultProcessArr.push({
213
- type: process.type,
214
- value: process.value,
215
- volume: volume_1,
216
- });
217
- receivablePrice += volume_1;
218
- receivablePriceAfterDiscount = receivablePrice;
219
- }
220
- else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.MARKDOWN.TYPE) {
221
- var volume = -process.value;
222
- resultProcessArr.push({
223
- type: process.type,
224
- value: process.value,
225
- volume: volume,
226
- });
227
- receivablePrice += volume;
228
- totalMarkDown += -volume;
229
- }
230
- else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.REMOVE_TAILS.TYPE) {
231
- var pow = Math.pow(10, process.value - 2);
232
- var result = Math.floor(receivablePrice / pow) * pow;
233
- var volume = -(receivablePrice - result);
234
- resultProcessArr.push({
235
- type: process.type,
236
- value: process.value,
237
- volume: volume,
238
- });
239
- receivablePrice += volume;
240
- totalMarkDown += -volume;
241
- }
242
- });
243
- var taxObj = {};
244
- if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish && !noTax) {
245
- order.content.forEach(function (orderContentItem) {
246
- var _a, _b;
247
- if (!orderContentItem.dishSnapshot.taxes || orderContentItem.dishSnapshot.taxes.length === 0) {
248
- return;
249
- }
250
- var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
251
- var dishTotalPrice = calcContentPrice({
252
- orderContentItem: orderContentItem,
253
- buffetItem: (_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot,
254
- orderType: order.type,
255
- adultNum: order.adultNum,
256
- childNum: order.childNum,
257
- contents: order.content,
258
- });
259
- if (discountValue && !orderContentItem.dishSnapshot.noFullOrderDiscount) {
260
- var rate = -(10 - discountValue) / 10;
261
- dishTotalPrice += dishTotalPrice * rate;
262
- }
263
- var sharedMarkDown = (totalMarkDown * dishTotalPrice) / receivablePriceAfterDiscount;
264
- orderContentItem.dishSnapshot.taxes.forEach(function (tax) {
265
- var taxFare = (dishTotalPrice - sharedMarkDown) * tax.rate;
266
- var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
267
- taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
268
- });
269
- });
270
- // buffet price
271
- if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
272
- var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
273
- var buffetTotalPrice_1 = index_1.calcBuffetTotalPrice((_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot, order.adultNum, order.childNum);
274
- if (discountValue) {
275
- var rate = -(10 - discountValue) / 10;
276
- buffetTotalPrice_1 += buffetTotalPrice_1 * rate;
277
- }
278
- var sharedMarkDown_1 = (totalMarkDown * buffetTotalPrice_1) / receivablePriceAfterDiscount;
279
- order.buffet.taxes.forEach(function (tax) {
280
- var taxFare = (buffetTotalPrice_1 - sharedMarkDown_1) * tax.rate;
281
- var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
282
- taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
283
- });
284
- }
285
- }
286
- else if (order.taxType === tax_enum_1.TaxTypeEnum.PriceHaveTaxBindOrder && !noTax) {
287
- var totalTaxRate_1 = 0;
288
- order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
289
- totalTaxRate_1 += item.rate;
290
- });
291
- var totalTaxFare_1 = receivablePrice - receivablePrice / (totalTaxRate_1 + 1);
292
- order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
293
- var taxFare = (item.rate / totalTaxRate_1) * totalTaxFare_1;
294
- var taxKey = item.name + "(" + big_js_1.default(item.rate).times(100) + "%)";
295
- taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
296
- });
297
- }
298
- var taxArr = [];
299
- for (var name_1 in taxObj) {
300
- taxArr.push({
301
- name: name_1,
302
- volume: taxObj[name_1],
303
- });
304
- if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish) {
305
- receivablePrice += taxObj[name_1];
306
- }
307
- }
308
- taxArr.sort(function (item1, item2) { return item1.name - item2.name; });
309
- return {
310
- resultProcessArr: resultProcessArr,
311
- receivablePrice: parseMoney(receivablePrice),
312
- taxArr: taxArr,
313
- totalPrice: totalPrice,
314
- totalDiscountPrice: totalDiscountPrice,
315
- };
316
- }
317
- exports.calcReceivablePrice = calcReceivablePrice;
318
- /**
319
- * 计算已收金额
320
- *
321
- * @param {Array} checkoutArr 结账记录
322
- * @returns {number} 返回已收总金额
323
- */
324
- function calcReceived(checkoutArr) {
325
- if (!checkoutArr) {
326
- checkoutArr = [];
327
- }
328
- var totalPaid = 0;
329
- checkoutArr.forEach(function (checkout) {
330
- if (!checkout.retreated) {
331
- totalPaid += checkout.amount;
332
- }
333
- });
334
- return parseMoney(totalPaid);
335
- }
336
- exports.calcReceived = calcReceived;
337
- /**
338
- * 计算剩余金额,去除尾数
339
- *
340
- * @param {number} receivablePrice 应收
341
- * @param {number} received 已收
342
- * @returns {number} 返回已收总金额
343
- */
344
- function calcLeft(receivablePrice, received) {
345
- var left = receivablePrice - received;
346
- return parseMoney(left);
347
- }
348
- exports.calcLeft = calcLeft;
349
- /**
350
- * 获得可读的订单处理过程
351
- *
352
- * @param {Process} process 订单处理过程
353
- * @returns {string} 返回可读字符串
354
- */
355
- function getReadbleProcess(process) {
356
- var result = '';
357
- if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
358
- result = '打' + process.value + '折';
359
- }
360
- else {
361
- result = const_1.CONST.RECEIVABLE_PROCESSING_TYPE[process.type.toUpperCase()].TEXT;
362
- }
363
- return result;
364
- }
365
- exports.getReadbleProcess = getReadbleProcess;
366
- var CHECK_STORE_SUBSCRIPTION_REASON;
367
- (function (CHECK_STORE_SUBSCRIPTION_REASON) {
368
- CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["NeedBuy"] = 1] = "NeedBuy";
369
- CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["Expires"] = 2] = "Expires";
370
- })(CHECK_STORE_SUBSCRIPTION_REASON = exports.CHECK_STORE_SUBSCRIPTION_REASON || (exports.CHECK_STORE_SUBSCRIPTION_REASON = {}));
371
- /**
372
- * 检查店铺是否开通了特定的功能
373
- *
374
- * @param {Store} store 店铺
375
- * @param {string} moduleId 功能id
376
- * @param {string | Date | number} now 对比时间
377
- * @returns {string} 返回可读字符串
378
- */
379
- function checkStoreSubscription(store, moduleId, now) {
380
- var result;
381
- var reason;
382
- // 检查永久开通
383
- if (store.subscription && store.subscription[moduleId] && store.subscription[moduleId].permanent) {
384
- return {
385
- result: true,
386
- reason: reason,
387
- };
388
- }
389
- // 非永久开通,检查过期时间
390
- if (!(store.subscription && store.subscription[moduleId] && store.subscription[moduleId].expires)) {
391
- result = false;
392
- reason = CHECK_STORE_SUBSCRIPTION_REASON.NeedBuy;
393
- }
394
- else if (moment(store.subscription[moduleId].expires).isBefore(now ? moment(now) : moment())) {
395
- result = false;
396
- reason = CHECK_STORE_SUBSCRIPTION_REASON.Expires;
397
- }
398
- else {
399
- result = true;
400
- }
401
- return {
402
- result: result,
403
- reason: reason,
404
- };
405
- }
406
- exports.checkStoreSubscription = checkStoreSubscription;
407
- /**
408
- * 根据店铺获取当前应该用的语言
409
- *
410
- * @param {Store} store 店铺
411
- * @param {string} wantLang 想要的语言
412
- * @param {string | Date | number} now 对比时间
413
- * @returns {object} 返回当前语言和可用语言
414
- */
415
- function getCurrentLangAndRange(store, wantLang, now) {
416
- var result = store.defaultLang;
417
- var langs = [store.defaultLang]; //可用语言范围
418
- if (checkStoreSubscription(store, const_1.CONST.BUSINESS.SUPER_MULTI_LANGUAGE.ID, now).result) {
419
- langs = const_1.CONST.LANGUAGE.map(function (lang) { return lang.code; });
420
- }
421
- else if (checkStoreSubscription(store, const_1.CONST.BUSINESS.MULTI_LANGUAGE.ID, now).result) {
422
- langs = store.subscription.multiLanguage.allow;
423
- }
424
- if (wantLang && langs.filter(function (item) { return wantLang.includes(item); }).length > 0) {
425
- result = wantLang;
426
- }
427
- return {
428
- currentLang: result,
429
- availableLangs: langs,
430
- };
431
- }
432
- exports.getCurrentLangAndRange = getCurrentLangAndRange;
433
- /**
434
- * 在语言对象中找到当前语言最匹配的值,
435
- * 1. 精确匹配
436
- * 2. 如果没有精确匹配,寻找默认语言
437
- * 3. 如果默认语言也没有匹配,则返回第一个不为空的语言
438
- * 4. 如果都为空,那么返回undefinded
439
- *
440
- * @param {object} names 语言
441
- * @param {string} currentLang 目标语言
442
- * @param {string} defaultLang 默认语言
443
- * @returns {string} 返回当前语言的值
444
- */
445
- function getNameFromNames(names, currentLang, defaultLang) {
446
- return (names &&
447
- (names[currentLang] || names[defaultLang] || names[Object.keys(names).filter(function (name) { return names[name]; })[0]]));
448
- }
449
- exports.getNameFromNames = getNameFromNames;
450
- /**
451
- * 根据语言返回处理过的店铺数据
452
- *
453
- * @param {Store} store 店铺
454
- * @param {string} currentLang 目标语言
455
- * @param {string} defaultLang 默认语言
456
- * @returns {object} 返回当前语言和可用语言
457
- */
458
- function getStoreByLanguage(store, currentLang, defaultLang) {
459
- store.name = getNameFromNames(store.names, currentLang, defaultLang) || store.name;
460
- store.description = getNameFromNames(store.descriptions, currentLang, defaultLang) || store.description;
461
- store.classifications.forEach(function (classification) {
462
- classification.name = getNameFromNames(classification.names, currentLang, defaultLang) || classification.name;
463
- });
464
- store.dishes.forEach(function (dish) {
465
- dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
466
- dish.description = getNameFromNames(dish.descriptions, currentLang, defaultLang) || dish.description;
467
- });
468
- store.specifications.forEach(function (specifications) {
469
- specifications.name = getNameFromNames(specifications.names, currentLang, defaultLang) || specifications.name;
470
- specifications.content.forEach(function (content) {
471
- content.name = getNameFromNames(content.names, currentLang, defaultLang) || content.name;
472
- });
473
- });
474
- return store;
475
- }
476
- exports.getStoreByLanguage = getStoreByLanguage;
477
- /**
478
- * 根据语言返回处理过的店铺数据
479
- *
480
- * @param {Content} content 订单内容
481
- * @param {string} currentLang 目标语言
482
- * @param {string} defaultLang 默认语言
483
- * @returns {Content} 返回当前语言的订单
484
- */
485
- function getContentByLanguage(content, currentLang, defaultLang) {
486
- var dish = content.dishSnapshot;
487
- dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
488
- if (dish.selectedSpecifications) {
489
- dish.selectedSpecifications &&
490
- dish.selectedSpecifications.forEach(function (specification) {
491
- specification.name =
492
- getNameFromNames(specification.names, currentLang, defaultLang) || specification.name;
493
- specification.content.forEach(function (tag) {
494
- tag.name = getNameFromNames(tag.names, currentLang, defaultLang) || tag.name;
495
- });
496
- });
497
- }
498
- return content;
499
- }
500
- /**
501
- * 根据语言返回处理过的订单数据
502
- *
503
- * @param {Order} order 店铺
504
- * @param {string} currentLang 目标语言
505
- * @param {string} defaultLang 默认语言
506
- * @returns {Order} 返回当前语言的订单
507
- */
508
- function getOrderByLanguage(order, currentLang, defaultLang) {
509
- if (order.content) {
510
- order.content.map(function (dishGroup) {
511
- return getContentByLanguage(dishGroup, currentLang, defaultLang);
512
- });
513
- }
514
- if (order.tasks) {
515
- order.tasks.forEach(function (task) {
516
- if (task.content) {
517
- task.content.map(function (dishGroup) {
518
- return getContentByLanguage(dishGroup, currentLang, defaultLang);
519
- });
520
- }
521
- });
522
- }
523
- return order;
524
- }
525
- exports.getOrderByLanguage = getOrderByLanguage;
526
- /**
527
- * 根据电话区号返回语言码,如果没找到,返回英文
528
- *
529
- * @param {string} countryCode 区号
530
- * @returns {string} 语言代码的小写格式
531
- */
532
- function getLanguageFromCountryCode(countryCode) {
533
- var data = {
534
- '86': 'zh',
535
- };
536
- var languageCode = data[String(countryCode)] || 'en';
537
- return languageCode;
538
- }
539
- exports.getLanguageFromCountryCode = getLanguageFromCountryCode;
540
- /**
541
- * 根据dishID返回已经下单的数量
542
- *
543
- * @param {Order} order 店铺
544
- * @param dishId
545
- * @returns {number} 返回当前数量
546
- */
547
- function getDishCountByIdInAllUncanceledTasks(order, dishId) {
548
- var count = 0;
549
- if (order.tasks) {
550
- count = order.tasks
551
- .filter(function (task) { return task.status !== const_1.CONST.STATUS.CANCELLED; })
552
- .reduce(function (count, task) {
553
- return (count +
554
- task.content
555
- .filter(function (item) { return String(item.dishSnapshot._id) === String(dishId); })
556
- .reduce(function (value, item) { return value + item.count; }, 0));
557
- }, 0);
558
- }
559
- return count;
560
- }
561
- exports.getDishCountByIdInAllUncanceledTasks = getDishCountByIdInAllUncanceledTasks;
1
+ "use strict";
2
+ function __export(m) {
3
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
+ }
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var const_1 = require("./const/const");
7
+ exports.CONST = const_1.CONST;
8
+ var printer_enum_1 = require("./enum/printer.enum");
9
+ exports.PrintStatusEnum = printer_enum_1.PrintStatusEnum;
10
+ exports.PrinterDeviceTypeEnum = printer_enum_1.PrinterDeviceTypeEnum;
11
+ exports.PrinterWidthEnum = printer_enum_1.PrinterWidthEnum;
12
+ var dish_enum_1 = require("./enum/dish.enum");
13
+ __export(require("./enum/common.enum"));
14
+ __export(require("./enum/time-menu.enum"));
15
+ __export(require("./enum/printer.enum"));
16
+ __export(require("./enum/member.enum"));
17
+ __export(require("./enum/sms.enum"));
18
+ __export(require("./enum/ai-token.enum"));
19
+ __export(require("./enum/checkout.enum"));
20
+ __export(require("./enum/yeepay.enum"));
21
+ __export(require("./enum/timezone.emum"));
22
+ __export(require("./enum/order.enum"));
23
+ __export(require("./enum/tax.enum"));
24
+ __export(require("./enum/dish.enum"));
25
+ __export(require("./enum/user-status.enum"));
26
+ __export(require("./enum/visit-task.enum"));
27
+ __export(require("./enum/receptionist.enum"));
28
+ __export(require("./enum/from.enum"));
29
+ __export(require("./enum/role.enum"));
30
+ __export(require("./enum/continent.enum"));
31
+ __export(require("./announcement/enum/announcement.enum"));
32
+ var menu_io_enum_1 = require("./enum/menu-io.enum");
33
+ exports.MenuImportModeEnum = menu_io_enum_1.MenuImportModeEnum;
34
+ __export(require("./interfaces/order"));
35
+ var pay_company_enum_1 = require("./enum/pay-company.enum");
36
+ exports.PayCompanyEnum = pay_company_enum_1.PayCompanyEnum;
37
+ var moment = require("moment");
38
+ exports.moment = moment;
39
+ var big_js_1 = require("big.js");
40
+ exports.Big = big_js_1.default;
41
+ var tax_enum_1 = require("./enum/tax.enum");
42
+ var order_enum_1 = require("./enum/order.enum");
43
+ var index_1 = require("./buffet/index");
44
+ __export(require("./buffet/index"));
45
+ __export(require("./order/index"));
46
+ /**
47
+ * 小数转化为金额,去除分位之后的尾数
48
+ *
49
+ * @param {number} num 需要转换的数字
50
+ * @returns {number} 返回只保留两位小数的money
51
+ */
52
+ function parseMoney(num) {
53
+ return Math.round(num * 100) / 100;
54
+ }
55
+ exports.parseMoney = parseMoney;
56
+ /**
57
+ * 计算加了规格后的菜品单价
58
+ *
59
+ * @param {Content} conent 单个菜品内容
60
+ * @returns {number} 返回订单总金额
61
+ *
62
+ */
63
+ function calcDishFinalPrice(conent) {
64
+ var addPrice = 0;
65
+ var originPrice = conent.dishSnapshot.type === dish_enum_1.DishType.Weigh
66
+ ? conent.weight * conent.dishSnapshot.price
67
+ : conent.dishSnapshot.price;
68
+ var selectedSpecifications = conent.dishSnapshot.selectedSpecifications || [];
69
+ selectedSpecifications.forEach(function (specification) {
70
+ if (!specification) {
71
+ return;
72
+ }
73
+ specification.content.forEach(function (item) {
74
+ if (item.fareType == const_1.CONST.FARE_TYPE.FIXED) {
75
+ addPrice += item.fare;
76
+ }
77
+ else if (item.fareType == const_1.CONST.FARE_TYPE.PERCENTAGE) {
78
+ addPrice += (originPrice * item.fare) / 100;
79
+ }
80
+ });
81
+ });
82
+ var dishPrice = originPrice + addPrice;
83
+ if (dishPrice < 0) {
84
+ dishPrice = 0;
85
+ }
86
+ return parseMoney(dishPrice);
87
+ }
88
+ exports.calcDishFinalPrice = calcDishFinalPrice;
89
+ /**
90
+ * 利用订单计算总价
91
+ *
92
+ * @param {object} order 订单
93
+ * @returns {number} 返回订单总金额
94
+ *
95
+ */
96
+ function calcTotalPrice(order) {
97
+ var totalPrice = 0;
98
+ order.content.forEach(function (orderContentItem) {
99
+ var _a;
100
+ totalPrice += calcContentPrice({
101
+ orderContentItem: orderContentItem,
102
+ buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
103
+ orderType: order.type,
104
+ adultNum: order.adultNum,
105
+ childNum: order.childNum,
106
+ contents: order.content,
107
+ });
108
+ });
109
+ if (order.deliveryFee && !order.selfPickUp) {
110
+ totalPrice += order.deliveryFee;
111
+ }
112
+ if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
113
+ totalPrice += index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
114
+ }
115
+ return parseMoney(totalPrice);
116
+ }
117
+ exports.calcTotalPrice = calcTotalPrice;
118
+ /**
119
+ *
120
+ */
121
+ function calcContentPrice(_a) {
122
+ var orderContentItem = _a.orderContentItem, buffetItem = _a.buffetItem, orderType = _a.orderType, adultNum = _a.adultNum, childNum = _a.childNum, contents = _a.contents;
123
+ if (orderType === order_enum_1.OrderTypeEnum.Buffet) {
124
+ var buffetDishItem = index_1.getDishItemInBuffet({ dishId: orderContentItem.dishSnapshot._id, buffet: buffetItem });
125
+ if (buffetDishItem) {
126
+ var maxUpperLimit = index_1.getMaxBuffetDishUpperLimit({
127
+ buffetDishItem: buffetDishItem,
128
+ adultNum: adultNum,
129
+ childNum: childNum,
130
+ });
131
+ var beforeCount = getOrderedCountByDishId(orderContentItem.dishSnapshot._id, contents, orderContentItem._id);
132
+ var maxUpperLimitForThisItem = Math.max(maxUpperLimit - beforeCount, 0);
133
+ if (maxUpperLimitForThisItem >= orderContentItem.count) {
134
+ return 0;
135
+ }
136
+ else {
137
+ return (orderContentItem.count - maxUpperLimitForThisItem) * calcDishFinalPrice(orderContentItem);
138
+ }
139
+ }
140
+ else {
141
+ return orderContentItem.count * calcDishFinalPrice(orderContentItem);
142
+ }
143
+ }
144
+ else {
145
+ return orderContentItem.count * calcDishFinalPrice(orderContentItem);
146
+ }
147
+ }
148
+ exports.calcContentPrice = calcContentPrice;
149
+ /**
150
+ * @param dishId
151
+ * @param contents
152
+ * @param beforeKey
153
+ */
154
+ function getOrderedCountByDishId(dishId, contents, beforeKey) {
155
+ var count = 0;
156
+ for (var _i = 0, _a = contents.filter(function (content) { return String(content.dishSnapshot._id) === String(dishId); }); _i < _a.length; _i++) {
157
+ var content = _a[_i];
158
+ if (beforeKey && String(content._id) === String(beforeKey))
159
+ break;
160
+ count += content.count;
161
+ }
162
+ return count;
163
+ }
164
+ exports.getOrderedCountByDishId = getOrderedCountByDishId;
165
+ /**
166
+ * 计算处理后的应收金额
167
+ *
168
+ * @param {object} order 订单
169
+ * @param {Array} processArr 结账处理过程
170
+ * @param noTax
171
+ * @param taxEnable
172
+ * @returns {object} 返回应收订单总金额,以及处理计算过程
173
+ */
174
+ function calcReceivablePrice(order, processArr, noTax) {
175
+ if (noTax === void 0) { noTax = false; }
176
+ var _a, _b;
177
+ var totalDiscountPrice = 0;
178
+ var resultProcessArr = [];
179
+ var totalPrice = calcTotalPrice(order);
180
+ var receivablePrice = totalPrice;
181
+ var sortedProcessArr = processArr.sort(function (a, b) {
182
+ return (const_1.CONST.RECEIVABLE_PROCESSING_TYPE[b.type.toUpperCase()].SORT -
183
+ const_1.CONST.RECEIVABLE_PROCESSING_TYPE[a.type.toUpperCase()].SORT);
184
+ });
185
+ var totalMarkDown = 0;
186
+ var receivablePriceAfterDiscount = receivablePrice;
187
+ sortedProcessArr.forEach(function (process) {
188
+ if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
189
+ var rate_1 = -(10 - process.value) / 10;
190
+ var volume_1 = 0;
191
+ order.content.forEach(function (orderContentItem) {
192
+ var _a;
193
+ if (orderContentItem.dishSnapshot.noFullOrderDiscount) {
194
+ return;
195
+ }
196
+ var dishTotalPrice = calcContentPrice({
197
+ orderContentItem: orderContentItem,
198
+ buffetItem: (_a = order.buffet) === null || _a === void 0 ? void 0 : _a.snapshot,
199
+ orderType: order.type,
200
+ adultNum: order.adultNum,
201
+ childNum: order.childNum,
202
+ contents: order.content,
203
+ });
204
+ totalDiscountPrice += dishTotalPrice;
205
+ volume_1 += dishTotalPrice * rate_1;
206
+ });
207
+ if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
208
+ var buffetTotalPrice = index_1.calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum);
209
+ totalDiscountPrice += buffetTotalPrice;
210
+ volume_1 += buffetTotalPrice * rate_1;
211
+ }
212
+ resultProcessArr.push({
213
+ type: process.type,
214
+ value: process.value,
215
+ volume: volume_1,
216
+ });
217
+ receivablePrice += volume_1;
218
+ receivablePriceAfterDiscount = receivablePrice;
219
+ }
220
+ else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.MARKDOWN.TYPE) {
221
+ var volume = -process.value;
222
+ resultProcessArr.push({
223
+ type: process.type,
224
+ value: process.value,
225
+ volume: volume,
226
+ });
227
+ receivablePrice += volume;
228
+ totalMarkDown += -volume;
229
+ }
230
+ else if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.REMOVE_TAILS.TYPE) {
231
+ var pow = Math.pow(10, process.value - 2);
232
+ var result = Math.floor(receivablePrice / pow) * pow;
233
+ var volume = -(receivablePrice - result);
234
+ resultProcessArr.push({
235
+ type: process.type,
236
+ value: process.value,
237
+ volume: volume,
238
+ });
239
+ receivablePrice += volume;
240
+ totalMarkDown += -volume;
241
+ }
242
+ });
243
+ var taxObj = {};
244
+ if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish && !noTax) {
245
+ order.content.forEach(function (orderContentItem) {
246
+ var _a, _b;
247
+ if (!orderContentItem.dishSnapshot.taxes || orderContentItem.dishSnapshot.taxes.length === 0) {
248
+ return;
249
+ }
250
+ var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
251
+ var dishTotalPrice = calcContentPrice({
252
+ orderContentItem: orderContentItem,
253
+ buffetItem: (_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot,
254
+ orderType: order.type,
255
+ adultNum: order.adultNum,
256
+ childNum: order.childNum,
257
+ contents: order.content,
258
+ });
259
+ if (discountValue && !orderContentItem.dishSnapshot.noFullOrderDiscount) {
260
+ var rate = -(10 - discountValue) / 10;
261
+ dishTotalPrice += dishTotalPrice * rate;
262
+ }
263
+ var sharedMarkDown = (totalMarkDown * dishTotalPrice) / receivablePriceAfterDiscount;
264
+ orderContentItem.dishSnapshot.taxes.forEach(function (tax) {
265
+ var taxFare = (dishTotalPrice - sharedMarkDown) * tax.rate;
266
+ var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
267
+ taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
268
+ });
269
+ });
270
+ // buffet price
271
+ if (order.type === order_enum_1.OrderTypeEnum.Buffet) {
272
+ var discountValue = (_a = sortedProcessArr.find(function (process) { return process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE; })) === null || _a === void 0 ? void 0 : _a.value;
273
+ var buffetTotalPrice_1 = index_1.calcBuffetTotalPrice((_b = order.buffet) === null || _b === void 0 ? void 0 : _b.snapshot, order.adultNum, order.childNum);
274
+ if (discountValue) {
275
+ var rate = -(10 - discountValue) / 10;
276
+ buffetTotalPrice_1 += buffetTotalPrice_1 * rate;
277
+ }
278
+ var sharedMarkDown_1 = (totalMarkDown * buffetTotalPrice_1) / receivablePriceAfterDiscount;
279
+ order.buffet.taxes.forEach(function (tax) {
280
+ var taxFare = (buffetTotalPrice_1 - sharedMarkDown_1) * tax.rate;
281
+ var taxKey = tax.name + "(" + big_js_1.default(tax.rate).times(100) + "%)";
282
+ taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
283
+ });
284
+ }
285
+ }
286
+ else if (order.taxType === tax_enum_1.TaxTypeEnum.PriceHaveTaxBindOrder && !noTax) {
287
+ var totalTaxRate_1 = 0;
288
+ order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
289
+ totalTaxRate_1 += item.rate;
290
+ });
291
+ var totalTaxFare_1 = receivablePrice - receivablePrice / (totalTaxRate_1 + 1);
292
+ order.priceHaveTaxBindOrderTaxes.forEach(function (item) {
293
+ var taxFare = (item.rate / totalTaxRate_1) * totalTaxFare_1;
294
+ var taxKey = item.name + "(" + big_js_1.default(item.rate).times(100) + "%)";
295
+ taxObj[taxKey] = (taxObj[taxKey] || 0) + parseMoney(taxFare);
296
+ });
297
+ }
298
+ var taxArr = [];
299
+ for (var name_1 in taxObj) {
300
+ taxArr.push({
301
+ name: name_1,
302
+ volume: taxObj[name_1],
303
+ });
304
+ if (order.taxType === tax_enum_1.TaxTypeEnum.PriceNoTaxBindDish) {
305
+ receivablePrice += taxObj[name_1];
306
+ }
307
+ }
308
+ taxArr.sort(function (item1, item2) { return item1.name - item2.name; });
309
+ return {
310
+ resultProcessArr: resultProcessArr,
311
+ receivablePrice: parseMoney(receivablePrice),
312
+ taxArr: taxArr,
313
+ totalPrice: totalPrice,
314
+ totalDiscountPrice: totalDiscountPrice,
315
+ };
316
+ }
317
+ exports.calcReceivablePrice = calcReceivablePrice;
318
+ /**
319
+ * 计算已收金额
320
+ *
321
+ * @param {Array} checkoutArr 结账记录
322
+ * @returns {number} 返回已收总金额
323
+ */
324
+ function calcReceived(checkoutArr) {
325
+ if (!checkoutArr) {
326
+ checkoutArr = [];
327
+ }
328
+ var totalPaid = 0;
329
+ checkoutArr.forEach(function (checkout) {
330
+ if (!checkout.retreated) {
331
+ totalPaid += checkout.amount;
332
+ }
333
+ });
334
+ return parseMoney(totalPaid);
335
+ }
336
+ exports.calcReceived = calcReceived;
337
+ /**
338
+ * 计算剩余金额,去除尾数
339
+ *
340
+ * @param {number} receivablePrice 应收
341
+ * @param {number} received 已收
342
+ * @returns {number} 返回已收总金额
343
+ */
344
+ function calcLeft(receivablePrice, received) {
345
+ var left = receivablePrice - received;
346
+ return parseMoney(left);
347
+ }
348
+ exports.calcLeft = calcLeft;
349
+ /**
350
+ * 获得可读的订单处理过程
351
+ *
352
+ * @param {Process} process 订单处理过程
353
+ * @returns {string} 返回可读字符串
354
+ */
355
+ function getReadbleProcess(process) {
356
+ var result = '';
357
+ if (process.type === const_1.CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE) {
358
+ result = '打' + process.value + '折';
359
+ }
360
+ else {
361
+ result = const_1.CONST.RECEIVABLE_PROCESSING_TYPE[process.type.toUpperCase()].TEXT;
362
+ }
363
+ return result;
364
+ }
365
+ exports.getReadbleProcess = getReadbleProcess;
366
+ var CHECK_STORE_SUBSCRIPTION_REASON;
367
+ (function (CHECK_STORE_SUBSCRIPTION_REASON) {
368
+ CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["NeedBuy"] = 1] = "NeedBuy";
369
+ CHECK_STORE_SUBSCRIPTION_REASON[CHECK_STORE_SUBSCRIPTION_REASON["Expires"] = 2] = "Expires";
370
+ })(CHECK_STORE_SUBSCRIPTION_REASON = exports.CHECK_STORE_SUBSCRIPTION_REASON || (exports.CHECK_STORE_SUBSCRIPTION_REASON = {}));
371
+ /**
372
+ * 检查店铺是否开通了特定的功能
373
+ *
374
+ * @param {Store} store 店铺
375
+ * @param {string} moduleId 功能id
376
+ * @param {string | Date | number} now 对比时间
377
+ * @returns {string} 返回可读字符串
378
+ */
379
+ function checkStoreSubscription(store, moduleId, now) {
380
+ var result;
381
+ var reason;
382
+ // 检查永久开通
383
+ if (store.subscription && store.subscription[moduleId] && store.subscription[moduleId].permanent) {
384
+ return {
385
+ result: true,
386
+ reason: reason,
387
+ };
388
+ }
389
+ // 非永久开通,检查过期时间
390
+ if (!(store.subscription && store.subscription[moduleId] && store.subscription[moduleId].expires)) {
391
+ result = false;
392
+ reason = CHECK_STORE_SUBSCRIPTION_REASON.NeedBuy;
393
+ }
394
+ else if (moment(store.subscription[moduleId].expires).isBefore(now ? moment(now) : moment())) {
395
+ result = false;
396
+ reason = CHECK_STORE_SUBSCRIPTION_REASON.Expires;
397
+ }
398
+ else {
399
+ result = true;
400
+ }
401
+ return {
402
+ result: result,
403
+ reason: reason,
404
+ };
405
+ }
406
+ exports.checkStoreSubscription = checkStoreSubscription;
407
+ /**
408
+ * 根据店铺获取当前应该用的语言
409
+ *
410
+ * @param {Store} store 店铺
411
+ * @param {string} wantLang 想要的语言
412
+ * @param {string | Date | number} now 对比时间
413
+ * @returns {object} 返回当前语言和可用语言
414
+ */
415
+ function getCurrentLangAndRange(store, wantLang, now) {
416
+ var result = store.defaultLang;
417
+ var langs = [store.defaultLang]; //可用语言范围
418
+ if (checkStoreSubscription(store, const_1.CONST.BUSINESS.SUPER_MULTI_LANGUAGE.ID, now).result) {
419
+ langs = const_1.CONST.LANGUAGE.map(function (lang) { return lang.code; });
420
+ }
421
+ else if (checkStoreSubscription(store, const_1.CONST.BUSINESS.MULTI_LANGUAGE.ID, now).result) {
422
+ langs = store.subscription.multiLanguage.allow;
423
+ }
424
+ if (wantLang && langs.filter(function (item) { return wantLang.includes(item); }).length > 0) {
425
+ result = wantLang;
426
+ }
427
+ return {
428
+ currentLang: result,
429
+ availableLangs: langs,
430
+ };
431
+ }
432
+ exports.getCurrentLangAndRange = getCurrentLangAndRange;
433
+ /**
434
+ * 在语言对象中找到当前语言最匹配的值,
435
+ * 1. 精确匹配
436
+ * 2. 如果没有精确匹配,寻找默认语言
437
+ * 3. 如果默认语言也没有匹配,则返回第一个不为空的语言
438
+ * 4. 如果都为空,那么返回undefinded
439
+ *
440
+ * @param {object} names 语言
441
+ * @param {string} currentLang 目标语言
442
+ * @param {string} defaultLang 默认语言
443
+ * @returns {string} 返回当前语言的值
444
+ */
445
+ function getNameFromNames(names, currentLang, defaultLang) {
446
+ return (names &&
447
+ (names[currentLang] || names[defaultLang] || names[Object.keys(names).filter(function (name) { return names[name]; })[0]]));
448
+ }
449
+ exports.getNameFromNames = getNameFromNames;
450
+ /**
451
+ * 根据语言返回处理过的店铺数据
452
+ *
453
+ * @param {Store} store 店铺
454
+ * @param {string} currentLang 目标语言
455
+ * @param {string} defaultLang 默认语言
456
+ * @returns {object} 返回当前语言和可用语言
457
+ */
458
+ function getStoreByLanguage(store, currentLang, defaultLang) {
459
+ store.name = getNameFromNames(store.names, currentLang, defaultLang) || store.name;
460
+ store.description = getNameFromNames(store.descriptions, currentLang, defaultLang) || store.description;
461
+ store.classifications.forEach(function (classification) {
462
+ classification.name = getNameFromNames(classification.names, currentLang, defaultLang) || classification.name;
463
+ });
464
+ store.dishes.forEach(function (dish) {
465
+ dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
466
+ dish.description = getNameFromNames(dish.descriptions, currentLang, defaultLang) || dish.description;
467
+ });
468
+ store.specifications.forEach(function (specifications) {
469
+ specifications.name = getNameFromNames(specifications.names, currentLang, defaultLang) || specifications.name;
470
+ specifications.content.forEach(function (content) {
471
+ content.name = getNameFromNames(content.names, currentLang, defaultLang) || content.name;
472
+ });
473
+ });
474
+ return store;
475
+ }
476
+ exports.getStoreByLanguage = getStoreByLanguage;
477
+ /**
478
+ * 根据语言返回处理过的店铺数据
479
+ *
480
+ * @param {Content} content 订单内容
481
+ * @param {string} currentLang 目标语言
482
+ * @param {string} defaultLang 默认语言
483
+ * @returns {Content} 返回当前语言的订单
484
+ */
485
+ function getContentByLanguage(content, currentLang, defaultLang) {
486
+ var dish = content.dishSnapshot;
487
+ dish.name = getNameFromNames(dish.names, currentLang, defaultLang) || dish.name;
488
+ if (dish.selectedSpecifications) {
489
+ dish.selectedSpecifications &&
490
+ dish.selectedSpecifications.forEach(function (specification) {
491
+ specification.name =
492
+ getNameFromNames(specification.names, currentLang, defaultLang) || specification.name;
493
+ specification.content.forEach(function (tag) {
494
+ tag.name = getNameFromNames(tag.names, currentLang, defaultLang) || tag.name;
495
+ });
496
+ });
497
+ }
498
+ return content;
499
+ }
500
+ /**
501
+ * 根据语言返回处理过的订单数据
502
+ *
503
+ * @param {Order} order 店铺
504
+ * @param {string} currentLang 目标语言
505
+ * @param {string} defaultLang 默认语言
506
+ * @returns {Order} 返回当前语言的订单
507
+ */
508
+ function getOrderByLanguage(order, currentLang, defaultLang) {
509
+ if (order.content) {
510
+ order.content.map(function (dishGroup) {
511
+ return getContentByLanguage(dishGroup, currentLang, defaultLang);
512
+ });
513
+ }
514
+ if (order.tasks) {
515
+ order.tasks.forEach(function (task) {
516
+ if (task.content) {
517
+ task.content.map(function (dishGroup) {
518
+ return getContentByLanguage(dishGroup, currentLang, defaultLang);
519
+ });
520
+ }
521
+ });
522
+ }
523
+ return order;
524
+ }
525
+ exports.getOrderByLanguage = getOrderByLanguage;
526
+ /**
527
+ * 根据电话区号返回语言码,如果没找到,返回英文
528
+ *
529
+ * @param {string} countryCode 区号
530
+ * @returns {string} 语言代码的小写格式
531
+ */
532
+ function getLanguageFromCountryCode(countryCode) {
533
+ var data = {
534
+ '86': 'zh',
535
+ };
536
+ var languageCode = data[String(countryCode)] || 'en';
537
+ return languageCode;
538
+ }
539
+ exports.getLanguageFromCountryCode = getLanguageFromCountryCode;
540
+ /**
541
+ * 根据dishID返回已经下单的数量
542
+ *
543
+ * @param {Order} order 店铺
544
+ * @param dishId
545
+ * @returns {number} 返回当前数量
546
+ */
547
+ function getDishCountByIdInAllUncanceledTasks(order, dishId) {
548
+ var count = 0;
549
+ if (order.tasks) {
550
+ count = order.tasks
551
+ .filter(function (task) { return task.status !== const_1.CONST.STATUS.CANCELLED; })
552
+ .reduce(function (count, task) {
553
+ return (count +
554
+ task.content
555
+ .filter(function (item) { return String(item.dishSnapshot._id) === String(dishId); })
556
+ .reduce(function (value, item) { return value + item.count; }, 0));
557
+ }, 0);
558
+ }
559
+ return count;
560
+ }
561
+ exports.getDishCountByIdInAllUncanceledTasks = getDishCountByIdInAllUncanceledTasks;