@pisell/pisellos 0.10.14 → 0.10.16

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 (301) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  3. package/dist/model/strategy/strategy-example.js +5 -19
  4. package/dist/modules/Cart/index.js +0 -3
  5. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  6. package/dist/modules/Date/index.js +1 -5
  7. package/dist/modules/Discount/index.js +2 -4
  8. package/dist/modules/OpenData/index.js +0 -2
  9. package/dist/modules/Order/index.d.ts +1 -1
  10. package/dist/modules/Order/index.js +75 -91
  11. package/dist/modules/Order/types.d.ts +5 -1
  12. package/dist/modules/Order/utils/virtualSettlement.d.ts +8 -1
  13. package/dist/modules/Order/utils/virtualSettlement.js +15 -2
  14. package/dist/modules/Order/utils.js +7 -1
  15. package/dist/modules/Payment/index.js +97 -162
  16. package/dist/modules/Product/types.d.ts +2 -0
  17. package/dist/modules/Rules/index.js +1 -4
  18. package/dist/modules/Schedule/index.js +0 -1
  19. package/dist/modules/Schedule/utils.js +0 -1
  20. package/dist/modules/Step/index.js +0 -1
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.js +97 -129
  24. package/dist/server/modules/menu/index.js +32 -41
  25. package/dist/server/modules/order/index.js +2 -4
  26. package/dist/server/modules/products/index.js +24 -42
  27. package/dist/server/modules/quotation/index.js +29 -38
  28. package/dist/server/modules/resource/index.js +3 -4
  29. package/dist/server/modules/schedule/index.js +27 -35
  30. package/dist/server/utils/product.js +0 -1
  31. package/dist/solution/BaseSales/index.js +107 -76
  32. package/dist/solution/BaseSales/types.d.ts +2 -0
  33. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  34. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  37. package/dist/solution/BaseSales/utils.js +6 -3
  38. package/dist/solution/BookingByStep/index.d.ts +2 -2
  39. package/dist/solution/BookingByStep/index.js +7 -59
  40. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  41. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  42. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  43. package/dist/solution/BookingTicket/index.js +8 -4
  44. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  45. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  46. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  47. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  48. package/dist/solution/BuyTickets/index.js +9 -12
  49. package/dist/solution/Checkout/index.js +177 -252
  50. package/dist/solution/Checkout/utils/index.js +4 -16
  51. package/dist/solution/RegisterAndLogin/index.js +30 -76
  52. package/dist/solution/ScanOrder/index.js +50 -60
  53. package/dist/solution/ScanOrder/types.d.ts +2 -0
  54. package/dist/solution/ScanOrder/utils.js +6 -3
  55. package/dist/solution/ShopDiscount/index.js +2 -7
  56. package/dist/solution/VenueBooking/index.js +45 -55
  57. package/dist/utils/task.js +15 -18
  58. package/dist/utils/watch.js +0 -1
  59. package/lib/apis/picoding.js +2 -0
  60. package/lib/core/index.js +131 -131
  61. package/lib/effects/index.js +46 -57
  62. package/lib/index.js +82 -49
  63. package/lib/model/index.js +14 -21
  64. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  66. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  67. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  68. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  69. package/lib/model/strategy/adapter/index.js +100 -64
  70. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  71. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  72. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  73. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  74. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  75. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  76. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  77. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  78. package/lib/model/strategy/adapter/promotion/index.js +43 -48
  79. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  80. package/lib/model/strategy/adapter/type.js +4 -16
  81. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  82. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  83. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  84. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  85. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  86. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  87. package/lib/model/strategy/engine.js +270 -168
  88. package/lib/model/strategy/index.js +49 -34
  89. package/lib/model/strategy/strategy-example.js +243 -239
  90. package/lib/model/strategy/type.js +100 -40
  91. package/lib/modules/Account/index.js +39 -53
  92. package/lib/modules/Account/types.js +20 -33
  93. package/lib/modules/AccountList/index.js +116 -154
  94. package/lib/modules/AccountList/types.js +30 -31
  95. package/lib/modules/AccountList/utils.js +18 -30
  96. package/lib/modules/BaseModule.js +23 -42
  97. package/lib/modules/BookingContext/index.js +158 -136
  98. package/lib/modules/BookingContext/types.js +46 -32
  99. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  100. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  101. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  102. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  103. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  104. package/lib/modules/BookingContext/utils/index.js +124 -41
  105. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  106. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  107. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  108. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  109. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  110. package/lib/modules/BookingContext/utils/resources.js +209 -167
  111. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  112. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  113. package/lib/modules/Cart/index.js +170 -124
  114. package/lib/modules/Cart/types.js +46 -51
  115. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  116. package/lib/modules/Cart/utils/cartDate.js +56 -61
  117. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  118. package/lib/modules/Cart/utils/cartNote.js +27 -32
  119. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  120. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  121. package/lib/modules/Cart/utils/cartResource.js +70 -78
  122. package/lib/modules/Cart/utils/changePrice.js +22 -50
  123. package/lib/modules/Cart/utils/index.js +106 -48
  124. package/lib/modules/Customer/constants.js +13 -34
  125. package/lib/modules/Customer/index.js +235 -172
  126. package/lib/modules/Customer/types.js +38 -35
  127. package/lib/modules/Date/index.js +116 -115
  128. package/lib/modules/Date/types.js +16 -28
  129. package/lib/modules/Date/utils.js +174 -123
  130. package/lib/modules/Discount/index.js +133 -143
  131. package/lib/modules/Discount/types.js +9 -31
  132. package/lib/modules/Guests/index.js +30 -56
  133. package/lib/modules/Guests/types.js +23 -33
  134. package/lib/modules/Holder/index.js +209 -189
  135. package/lib/modules/Holder/types.js +4 -16
  136. package/lib/modules/Holder/utils.js +20 -49
  137. package/lib/modules/OpenData/index.js +70 -76
  138. package/lib/modules/OpenData/types.js +4 -16
  139. package/lib/modules/OpenData/utils.js +44 -78
  140. package/lib/modules/Order/index.d.ts +1 -1
  141. package/lib/modules/Order/index.js +1810 -2238
  142. package/lib/modules/Order/payment-utils.js +77 -120
  143. package/lib/modules/Order/types.d.ts +5 -1
  144. package/lib/modules/Order/types.js +87 -35
  145. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  146. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  147. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  148. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  149. package/lib/modules/Order/utils/virtualSettlement.d.ts +8 -1
  150. package/lib/modules/Order/utils/virtualSettlement.js +126 -164
  151. package/lib/modules/Order/utils.js +834 -668
  152. package/lib/modules/Payment/cash.js +20 -33
  153. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  154. package/lib/modules/Payment/eftpos.js +16 -30
  155. package/lib/modules/Payment/index.js +532 -399
  156. package/lib/modules/Payment/mx51.js +1 -0
  157. package/lib/modules/Payment/types.js +230 -108
  158. package/lib/modules/Payment/utils.js +52 -51
  159. package/lib/modules/Payment/walletpass.js +485 -660
  160. package/lib/modules/Product/index.js +51 -46
  161. package/lib/modules/Product/types.d.ts +2 -0
  162. package/lib/modules/Product/types.js +4 -16
  163. package/lib/modules/Product/utils.js +32 -33
  164. package/lib/modules/ProductList/index.js +138 -161
  165. package/lib/modules/ProductList/types.js +9 -31
  166. package/lib/modules/Quotation/index.js +66 -100
  167. package/lib/modules/Quotation/types.js +4 -16
  168. package/lib/modules/Resource/index.js +27 -59
  169. package/lib/modules/Resource/types.js +22 -32
  170. package/lib/modules/Resource/utils.js +30 -38
  171. package/lib/modules/ResourcePlanner/index.js +25 -23
  172. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  173. package/lib/modules/ResourcePlanner/planner.js +591 -772
  174. package/lib/modules/ResourcePlanner/types.js +10 -29
  175. package/lib/modules/Rules/index.js +1218 -959
  176. package/lib/modules/Rules/types.js +17 -40
  177. package/lib/modules/SalesSummary/index.js +78 -89
  178. package/lib/modules/SalesSummary/types.js +4 -16
  179. package/lib/modules/SalesSummary/utils.js +359 -442
  180. package/lib/modules/ScanOrderLogger/index.js +59 -79
  181. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  182. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  183. package/lib/modules/ScanOrderLogger/types.js +4 -16
  184. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  185. package/lib/modules/Schedule/index.js +100 -114
  186. package/lib/modules/Schedule/type.js +4 -16
  187. package/lib/modules/Schedule/types.js +4 -16
  188. package/lib/modules/Schedule/utils.js +433 -291
  189. package/lib/modules/Step/index.js +40 -52
  190. package/lib/modules/Step/tyeps.js +4 -16
  191. package/lib/modules/Summary/index.js +66 -71
  192. package/lib/modules/Summary/types.js +4 -16
  193. package/lib/modules/Summary/utils.js +773 -418
  194. package/lib/modules/SurchargeList/index.js +46 -60
  195. package/lib/modules/SurchargeList/types.js +4 -16
  196. package/lib/modules/index.js +245 -63
  197. package/lib/plugins/app.js +4 -16
  198. package/lib/plugins/index.js +36 -25
  199. package/lib/plugins/request.js +137 -126
  200. package/lib/plugins/shopStore.js +4 -16
  201. package/lib/plugins/user.js +4 -16
  202. package/lib/plugins/window.js +171 -179
  203. package/lib/server/index.js +3027 -2655
  204. package/lib/server/modules/floor-plan/index.js +102 -123
  205. package/lib/server/modules/floor-plan/types.js +15 -30
  206. package/lib/server/modules/index.js +106 -68
  207. package/lib/server/modules/menu/index.js +146 -122
  208. package/lib/server/modules/menu/types.js +18 -31
  209. package/lib/server/modules/order/index.js +758 -956
  210. package/lib/server/modules/order/types.js +122 -33
  211. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  212. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  213. package/lib/server/modules/payment/index.js +59 -83
  214. package/lib/server/modules/payment/types.js +4 -16
  215. package/lib/server/modules/products/index.js +575 -459
  216. package/lib/server/modules/products/types.js +44 -34
  217. package/lib/server/modules/quotation/index.js +137 -172
  218. package/lib/server/modules/quotation/types.js +21 -31
  219. package/lib/server/modules/resource/index.js +213 -184
  220. package/lib/server/modules/resource/types.js +42 -33
  221. package/lib/server/modules/schedule/index.js +135 -123
  222. package/lib/server/modules/schedule/types.js +14 -21
  223. package/lib/server/modules/schedule/utils.js +334 -163
  224. package/lib/server/types.js +4 -16
  225. package/lib/server/utils/index.js +25 -23
  226. package/lib/server/utils/product.js +196 -139
  227. package/lib/server/utils/schedule.js +34 -41
  228. package/lib/server/utils/small-ticket.js +479 -456
  229. package/lib/server/utils/time.js +40 -49
  230. package/lib/solution/BaseSales/index.js +1276 -1485
  231. package/lib/solution/BaseSales/types.d.ts +2 -0
  232. package/lib/solution/BaseSales/types.js +42 -38
  233. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  234. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  235. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  236. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  237. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  238. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  239. package/lib/solution/BaseSales/utils.js +161 -143
  240. package/lib/solution/BookingByStep/index.d.ts +2 -2
  241. package/lib/solution/BookingByStep/index.js +1527 -1340
  242. package/lib/solution/BookingByStep/types.js +40 -99
  243. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  244. package/lib/solution/BookingByStep/utils/products.js +42 -52
  245. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  246. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  247. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  248. package/lib/solution/BookingTicket/index.js +598 -514
  249. package/lib/solution/BookingTicket/types.js +99 -77
  250. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  251. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  252. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  253. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  254. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  255. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  256. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  257. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  258. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  259. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  260. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  261. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  262. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  263. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  264. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  265. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  266. package/lib/solution/BuyTickets/index.js +67 -70
  267. package/lib/solution/BuyTickets/types.js +22 -38
  268. package/lib/solution/Checkout/index.js +1451 -1158
  269. package/lib/solution/Checkout/types.js +91 -61
  270. package/lib/solution/Checkout/utils/index.js +228 -156
  271. package/lib/solution/PlaceOrder/index.js +55 -0
  272. package/lib/solution/RegisterAndLogin/config.js +493 -460
  273. package/lib/solution/RegisterAndLogin/index.js +633 -630
  274. package/lib/solution/RegisterAndLogin/types.js +189 -76
  275. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  276. package/lib/solution/Sales/index.js +328 -324
  277. package/lib/solution/Sales/types.js +27 -33
  278. package/lib/solution/ScanOrder/index.js +822 -852
  279. package/lib/solution/ScanOrder/types.d.ts +2 -0
  280. package/lib/solution/ScanOrder/types.js +33 -34
  281. package/lib/solution/ScanOrder/utils.js +412 -374
  282. package/lib/solution/ShopDiscount/index.js +226 -232
  283. package/lib/solution/ShopDiscount/types.js +15 -37
  284. package/lib/solution/ShopDiscount/utils.js +300 -172
  285. package/lib/solution/UnifiedBookingSales/index.js +1052 -1213
  286. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  287. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  288. package/lib/solution/VenueBooking/index.js +811 -879
  289. package/lib/solution/VenueBooking/types.js +19 -39
  290. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  291. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  292. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  293. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  294. package/lib/solution/VenueBooking/utils.js +130 -67
  295. package/lib/solution/index.js +124 -41
  296. package/lib/store/createStore.js +32 -29
  297. package/lib/types/index.js +4 -16
  298. package/lib/utils/payment-number.js +26 -46
  299. package/lib/utils/task.js +36 -36
  300. package/lib/utils/watch.js +81 -47
  301. package/package.json +2 -1
@@ -1,36 +1,46 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/products/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- ProductsHooks: () => ProductsHooks
23
- });
24
- module.exports = __toCommonJS(types_exports);
25
- var ProductsHooks = /* @__PURE__ */ ((ProductsHooks2) => {
26
- ProductsHooks2["onProductsLoaded"] = "products:onProductsLoaded";
27
- ProductsHooks2["onProductsChanged"] = "products:onProductsChanged";
28
- ProductsHooks2["onProductSelected"] = "products:onProductSelected";
29
- ProductsHooks2["onProductsPriceApplied"] = "products:onProductsPriceApplied";
30
- ProductsHooks2["onProductsSyncCompleted"] = "products:onProductsSyncCompleted";
31
- return ProductsHooks2;
32
- })(ProductsHooks || {});
33
- // Annotate the CommonJS export names for ESM import in node:
34
- 0 && (module.exports = {
35
- ProductsHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
36
5
  });
6
+ exports.ProductsHooks = void 0;
7
+ /**
8
+ * Products 模块状态
9
+ */
10
+ /**
11
+ * 商品格式化后数据
12
+ */
13
+ /**
14
+ * 商品轻量查询范围
15
+ */
16
+ /**
17
+ * 加载报价单商品价格参数
18
+ */
19
+ /**
20
+ * 加载报价单商品价格返回数据
21
+ */
22
+ /**
23
+ * 加载报价单商品价格返回数据
24
+ */
25
+ /**
26
+ * Products 模块状态
27
+ */
28
+ /**
29
+ * Products 模块钩子
30
+ */
31
+ let ProductsHooks = exports.ProductsHooks = /*#__PURE__*/function (ProductsHooks) {
32
+ ProductsHooks["onProductsLoaded"] = "products:onProductsLoaded";
33
+ ProductsHooks["onProductsChanged"] = "products:onProductsChanged";
34
+ ProductsHooks["onProductSelected"] = "products:onProductSelected";
35
+ ProductsHooks["onProductsPriceApplied"] = "products:onProductsPriceApplied";
36
+ ProductsHooks["onProductsSyncCompleted"] = "products:onProductsSyncCompleted";
37
+ return ProductsHooks;
38
+ }({});
39
+ /** pubsub 商品同步消息结构 */
40
+ /**
41
+ * 商品格式化器上下文
42
+ */
43
+ /**
44
+ * 商品格式化器类型
45
+ * 用于对商品数据进行处理和格式化(包括价格应用、字段扩展等)
46
+ */
@@ -1,109 +1,97 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/server/modules/quotation/index.ts
30
- var quotation_exports = {};
31
- __export(quotation_exports, {
32
- QuotationModule: () => QuotationModule
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
33
5
  });
34
- module.exports = __toCommonJS(quotation_exports);
35
- var import_lodash_es = require("lodash-es");
36
- var import_dayjs = __toESM(require("dayjs"));
37
- var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore"));
38
- var import_isSameOrAfter = __toESM(require("dayjs/plugin/isSameOrAfter"));
39
- var import_BaseModule = require("../../../modules/BaseModule");
40
- var import_types = require("./types");
41
- var import_getDateIsInSchedule = require("../../../modules/Schedule/getDateIsInSchedule");
42
- import_dayjs.default.extend(import_isSameOrBefore.default);
43
- import_dayjs.default.extend(import_isSameOrAfter.default);
44
- var INDEXDB_STORE_NAME = "quotation";
45
- var QuotationModule = class extends import_BaseModule.BaseModule {
6
+ exports.QuotationModule = void 0;
7
+ var _lodashEs = require("lodash-es");
8
+ var _dayjs = _interopRequireDefault(require("dayjs"));
9
+ var _isSameOrBefore = _interopRequireDefault(require("dayjs/plugin/isSameOrBefore"));
10
+ var _isSameOrAfter = _interopRequireDefault(require("dayjs/plugin/isSameOrAfter"));
11
+ var _BaseModule = require("../../../modules/BaseModule");
12
+ var _types = require("./types");
13
+ var _getDateIsInSchedule = require("../../../modules/Schedule/getDateIsInSchedule");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ _dayjs.default.extend(_isSameOrBefore.default);
16
+ _dayjs.default.extend(_isSameOrAfter.default);
17
+
18
+ /**
19
+ * IndexDB 存储名称
20
+ */
21
+ const INDEXDB_STORE_NAME = 'quotation';
22
+
23
+ /**
24
+ * 报价单模块 - 用于管理报价单数据和计算商品价格
25
+ */
26
+ class QuotationModule extends _BaseModule.BaseModule {
27
+ defaultName = 'quotation';
28
+ defaultVersion = '1.0.0';
29
+ request;
30
+ store;
31
+ dbManager; // IndexDBManager 实例
32
+ scheduleResolver;
46
33
  constructor(name, version) {
47
34
  super(name, version);
48
- this.defaultName = "quotation";
49
- this.defaultVersion = "1.0.0";
50
35
  }
51
36
  async initialize(core, options) {
52
- var _a;
53
37
  this.core = core;
54
- this.store = options == null ? void 0 : options.store;
55
- if (Array.isArray((_a = options == null ? void 0 : options.initialState) == null ? void 0 : _a.quotationList)) {
56
- this.store.quotationList = options == null ? void 0 : options.initialState.quotationList;
57
- this.core.effects.emit(import_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
38
+ this.store = options?.store;
39
+ if (Array.isArray(options?.initialState?.quotationList)) {
40
+ this.store.quotationList = options?.initialState.quotationList;
41
+ this.core.effects.emit(_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
58
42
  } else {
59
43
  this.store.quotationList = [];
60
44
  }
61
- this.request = core.getPlugin("request");
45
+
46
+ // 获取依赖的插件
47
+ this.request = core.getPlugin('request');
62
48
  if (!this.request) {
63
- throw new Error("QuotationModule 需要 request 插件支持");
49
+ throw new Error('QuotationModule 需要 request 插件支持');
64
50
  }
65
- const appPlugin = core.getPlugin("app");
51
+
52
+ // 获取并存储 dbManager
53
+ const appPlugin = core.getPlugin('app');
66
54
  if (appPlugin) {
67
55
  const app = appPlugin.getApp();
68
56
  this.dbManager = app.dbManager;
69
- if (this.dbManager) {
70
- console.log("[Quotation] IndexDB Manager 已初始化");
71
- } else {
72
- console.warn("[Quotation] IndexDB Manager 未找到");
57
+ if (this.dbManager) {} else {
58
+ console.warn('[Quotation] IndexDB Manager 未找到');
73
59
  }
74
60
  }
75
61
  }
62
+
76
63
  /**
77
64
  * 加载报价单列表(从服务器)
78
65
  * TODO: 接口地址待定
79
66
  */
80
67
  async loadQuotationList() {
81
- var _a;
82
68
  try {
83
- const response = await this.request.get(
84
- `/quotation`,
85
- {
86
- num: 999,
87
- skip: 1,
88
- status: "published"
89
- }
90
- );
91
- const quotationList = ((_a = response.data) == null ? void 0 : _a.list) || [];
69
+ // TODO: 替换为实际的接口地址
70
+ const response = await this.request.get(`/quotation`, {
71
+ num: 999,
72
+ skip: 1,
73
+ status: 'published'
74
+ });
75
+ const quotationList = response.data?.list || [];
76
+
77
+ // 保存到 IndexDB
92
78
  await this.saveQuotationToIndexDB(quotationList);
93
79
  await this.setQuotationList(quotationList);
94
80
  return quotationList;
95
81
  } catch (error) {
96
- console.error("[Quotation] 加载报价单数据失败:", error);
82
+ console.error('[Quotation] 加载报价单数据失败:', error);
97
83
  return [];
98
84
  }
99
85
  }
86
+
100
87
  /**
101
88
  * 设置报价单列表
102
89
  */
103
90
  async setQuotationList(quotationList) {
104
91
  this.store.quotationList = quotationList;
105
- await this.core.effects.emit(import_types.QuotationHooks.onQuotationLoaded, quotationList);
92
+ await this.core.effects.emit(_types.QuotationHooks.onQuotationLoaded, quotationList);
106
93
  }
94
+
107
95
  /**
108
96
  * 获取报价单列表
109
97
  */
@@ -111,52 +99,45 @@ var QuotationModule = class extends import_BaseModule.BaseModule {
111
99
  return this.store.quotationList;
112
100
  }
113
101
  async loadQuotations(params) {
114
- var _a;
115
102
  if (Array.isArray(this.store.quotationList) && this.store.quotationList.length > 0) {
116
- this.store.quotationList.sort(
117
- (a, b) => Number(a.sort ?? a.priority ?? 0) - Number(b.sort ?? b.priority ?? 0)
118
- );
103
+ this.store.quotationList.sort((a, b) => Number(a.sort ?? a.priority ?? 0) - Number(b.sort ?? b.priority ?? 0));
119
104
  return;
120
105
  }
121
106
  const query = {};
122
- if (params == null ? void 0 : params.channel)
123
- query.channel = params.channel;
124
- if ((params == null ? void 0 : params.channel) === "online_store")
125
- query.channel = "online-store";
126
- const res = await this.request.get(
127
- "/quotation/available",
128
- query,
129
- { useCache: false, osServer: true }
130
- );
131
- const list = ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.list) || (res == null ? void 0 : res.list) || [];
107
+ if (params?.channel) query.channel = params.channel;
108
+ if (params?.channel === 'online_store') query.channel = 'online-store';
109
+ const res = await this.request.get('/quotation/available', query, {
110
+ useCache: false,
111
+ osServer: true
112
+ });
113
+ const list = res?.data?.list || res?.list || [];
132
114
  list.sort((a, b) => Number(a.sort ?? a.priority ?? 0) - Number(b.sort ?? b.priority ?? 0));
133
115
  this.store.quotationList = list;
134
- await this.core.effects.emit(import_types.QuotationHooks.onQuotationLoaded, this.store.quotationList);
116
+ await this.core.effects.emit(_types.QuotationHooks.onQuotationLoaded, this.store.quotationList);
135
117
  }
136
118
  setScheduleResolver(resolver) {
137
119
  this.scheduleResolver = resolver;
138
120
  }
139
121
  getPriceForProduct(params) {
140
- var _a;
141
- return ((_a = this.getQuotationMatchForProduct(params)) == null ? void 0 : _a.price) ?? null;
122
+ return this.getQuotationMatchForProduct(params)?.price ?? null;
142
123
  }
143
124
  getQuotationMatchForProduct(params) {
144
- const { productId, variantId, datetime, channel, customer_id } = params;
125
+ const {
126
+ productId,
127
+ variantId,
128
+ datetime,
129
+ channel,
130
+ customer_id
131
+ } = params;
145
132
  for (const quotation of this.store.quotationList) {
146
- if (!this.isQuotationVisibleForChannel(quotation, channel))
147
- continue;
148
- if (!this.isQuotationVisibleForCustomer(quotation, customer_id))
149
- continue;
150
- if (!this.isQuotationActiveAt(quotation, datetime))
151
- continue;
133
+ if (!this.isQuotationVisibleForChannel(quotation, channel)) continue;
134
+ if (!this.isQuotationVisibleForCustomer(quotation, customer_id)) continue;
135
+ if (!this.isQuotationActiveAt(quotation, datetime)) continue;
152
136
  const match = this.findProductData(quotation, productId, variantId);
153
- if (!match)
154
- continue;
137
+ if (!match) continue;
155
138
  const value = match.value ?? match.final_price ?? match.discount_value;
156
- if (Number(value) === 0)
157
- continue;
158
- if (value === void 0 || value === null || value === "")
159
- continue;
139
+ if (Number(value) === 0) continue;
140
+ if (value === undefined || value === null || value === '') continue;
160
141
  return {
161
142
  price: String(value),
162
143
  quotationShelfId: Number(quotation.id) || 0
@@ -165,28 +146,25 @@ var QuotationModule = class extends import_BaseModule.BaseModule {
165
146
  return null;
166
147
  }
167
148
  getQuotationShelfId(params) {
168
- var _a;
169
- return ((_a = this.getQuotationMatchForProduct(params)) == null ? void 0 : _a.quotationShelfId) ?? 0;
149
+ return this.getQuotationMatchForProduct(params)?.quotationShelfId ?? 0;
170
150
  }
171
151
  getQuotationCustomerScopeInfo() {
172
- const customerById = /* @__PURE__ */ new Map();
173
- const quotationScopes = this.store.quotationList.filter((quotation) => Array.isArray(quotation == null ? void 0 : quotation.customer) && quotation.customer.length > 0).map((quotation) => {
152
+ const customerById = new Map();
153
+ const quotationScopes = this.store.quotationList.filter(quotation => Array.isArray(quotation?.customer) && quotation.customer.length > 0).map(quotation => {
174
154
  const customerIds = [];
175
155
  const customers = [];
176
- const localSeen = /* @__PURE__ */ new Set();
177
- (quotation.customer || []).forEach((customer) => {
178
- const customerId = this.normalizeCustomerId(customer == null ? void 0 : customer.id);
179
- if (!customerId || localSeen.has(customerId))
180
- return;
156
+ const localSeen = new Set();
157
+ (quotation.customer || []).forEach(customer => {
158
+ const customerId = this.normalizeCustomerId(customer?.id);
159
+ if (!customerId || localSeen.has(customerId)) return;
181
160
  localSeen.add(customerId);
182
161
  customerIds.push(customerId);
183
162
  customers.push(customer);
184
- if (!customerById.has(customerId))
185
- customerById.set(customerId, customer);
163
+ if (!customerById.has(customerId)) customerById.set(customerId, customer);
186
164
  });
187
165
  return {
188
166
  quotationId: Number(quotation.id),
189
- quotationName: String(quotation.name || ""),
167
+ quotationName: String(quotation.name || ''),
190
168
  customerIds,
191
169
  customers
192
170
  };
@@ -206,88 +184,72 @@ var QuotationModule = class extends import_BaseModule.BaseModule {
206
184
  */
207
185
  async clear() {
208
186
  this.store.quotationList = [];
187
+
188
+ // 同时清空 IndexDB 中的数据
209
189
  if (this.dbManager) {
210
190
  try {
211
191
  await this.dbManager.clear(INDEXDB_STORE_NAME);
212
- console.log("[Quotation] IndexDB 缓存已清空");
213
192
  } catch (error) {
214
- console.error("[Quotation] 清空 IndexDB 缓存失败:", error);
193
+ console.error('[Quotation] 清空 IndexDB 缓存失败:', error);
215
194
  }
216
195
  }
217
- console.log("[Quotation] 缓存已清空");
218
196
  }
219
197
  normalizeCustomerId(customerId) {
220
- if (customerId === void 0 || customerId === null || customerId === "")
221
- return null;
198
+ if (customerId === undefined || customerId === null || customerId === '') return null;
222
199
  return String(customerId);
223
200
  }
224
201
  hasValidCustomerId(customerId) {
225
- if (customerId === void 0 || customerId === null || customerId === "")
226
- return false;
202
+ if (customerId === undefined || customerId === null || customerId === '') return false;
227
203
  return Number(customerId) > 0;
228
204
  }
229
205
  isQuotationVisibleForCustomer(quotation, customerId) {
230
206
  const customers = quotation.customer || [];
231
- if (!Array.isArray(customers) || customers.length === 0)
232
- return true;
233
- if (!this.hasValidCustomerId(customerId))
234
- return false;
235
- return customers.some((customer) => String(customer.id) === String(customerId));
207
+ if (!Array.isArray(customers) || customers.length === 0) return true;
208
+ if (!this.hasValidCustomerId(customerId)) return false;
209
+ return customers.some(customer => String(customer.id) === String(customerId));
236
210
  }
237
211
  isQuotationVisibleForChannel(quotation, channel) {
238
- if (!channel)
239
- return true;
240
- const normalizedChannel = channel === "online_store" ? "online-store" : channel;
212
+ if (!channel) return true;
213
+ const normalizedChannel = channel === 'online_store' ? 'online-store' : channel;
241
214
  const channels = quotation.channel;
242
- if (!Array.isArray(channels) || channels.length === 0)
243
- return true;
244
- return channels.some((item) => String(item) === normalizedChannel);
215
+ if (!Array.isArray(channels) || channels.length === 0) return true;
216
+ return channels.some(item => String(item) === normalizedChannel);
245
217
  }
246
218
  isQuotationActiveAt(quotation, datetime) {
247
219
  const quotationSchedules = Array.isArray(quotation.schedule) ? quotation.schedule : [];
248
220
  const scheduleIds = Array.isArray(quotation.schedule_ids) ? quotation.schedule_ids : [];
249
- if (!quotationSchedules.length && !scheduleIds.length)
250
- return false;
221
+ if (!quotationSchedules.length && !scheduleIds.length) return false;
251
222
  const scheduleItems = [];
252
- quotationSchedules.forEach((schedule) => {
253
- var _a;
254
- const full = (_a = this.scheduleResolver) == null ? void 0 : _a.call(this, schedule.id);
223
+ quotationSchedules.forEach(schedule => {
224
+ const full = this.scheduleResolver?.(schedule.id);
255
225
  if (full) {
256
226
  scheduleItems.push(full);
257
227
  return;
258
228
  }
259
- if (this.scheduleResolver)
260
- return;
229
+ if (this.scheduleResolver) return;
261
230
  scheduleItems.push({
262
231
  ...schedule,
263
- repeat_type: schedule.repeat_type || "none",
232
+ repeat_type: schedule.repeat_type || 'none',
264
233
  repeat_rule: schedule.repeat_rule || null,
265
234
  time_slot: schedule.time_slot || []
266
235
  });
267
236
  });
268
- scheduleIds.forEach((id) => {
269
- var _a;
270
- const full = (_a = this.scheduleResolver) == null ? void 0 : _a.call(this, id);
271
- if (full)
272
- scheduleItems.push(full);
237
+ scheduleIds.forEach(id => {
238
+ const full = this.scheduleResolver?.(id);
239
+ if (full) scheduleItems.push(full);
273
240
  });
274
- if (!scheduleItems.length)
275
- return false;
276
- return (0, import_getDateIsInSchedule.getDateIsInSchedule)(datetime, scheduleItems);
241
+ if (!scheduleItems.length) return false;
242
+ return (0, _getDateIsInSchedule.getDateIsInSchedule)(datetime, scheduleItems);
277
243
  }
278
244
  findProductData(quotation, productId, variantId) {
279
245
  const productData = Array.isArray(quotation.product_data) ? quotation.product_data : Array.isArray(quotation.product_prices) ? quotation.product_prices : [];
280
246
  if (variantId && variantId !== 0) {
281
- const variantMatch = productData.find(
282
- (item) => Number(item.product_id) === productId && Number(item.variant_id || 0) === variantId
283
- );
284
- if (variantMatch)
285
- return variantMatch;
247
+ const variantMatch = productData.find(item => Number(item.product_id) === productId && Number(item.variant_id || 0) === variantId);
248
+ if (variantMatch) return variantMatch;
286
249
  }
287
- return productData.find(
288
- (item) => Number(item.product_id) === productId && Number(item.variant_id || 0) === 0
289
- );
250
+ return productData.find(item => Number(item.product_id) === productId && Number(item.variant_id || 0) === 0);
290
251
  }
252
+
291
253
  /**
292
254
  * 从 IndexDB 加载报价单数据
293
255
  * @private
@@ -297,13 +259,15 @@ var QuotationModule = class extends import_BaseModule.BaseModule {
297
259
  return [];
298
260
  }
299
261
  try {
262
+ // 直接获取所有报价单记录
300
263
  const quotationList = await this.dbManager.getAll(INDEXDB_STORE_NAME);
301
264
  return quotationList || [];
302
265
  } catch (error) {
303
- console.error("[Quotation] 从 IndexDB 读取数据失败:", error);
266
+ console.error('[Quotation] 从 IndexDB 读取数据失败:', error);
304
267
  return [];
305
268
  }
306
269
  }
270
+
307
271
  /**
308
272
  * 保存报价单数据到 IndexDB
309
273
  * @private
@@ -313,43 +277,44 @@ var QuotationModule = class extends import_BaseModule.BaseModule {
313
277
  return;
314
278
  }
315
279
  try {
280
+ // 先清空现有的报价单数据
316
281
  await this.dbManager.clear(INDEXDB_STORE_NAME);
317
- const savePromises = quotationList.map(
318
- (quotation) => this.dbManager.add(INDEXDB_STORE_NAME, quotation)
319
- );
282
+
283
+ // 逐个保存报价单(每个报价单是独立的记录)
284
+ const savePromises = quotationList.map(quotation => this.dbManager.add(INDEXDB_STORE_NAME, quotation));
320
285
  await Promise.all(savePromises);
321
- console.log(`[Quotation] 已将 ${quotationList.length} 条报价单数据保存到 IndexDB`);
322
286
  } catch (error) {
323
- console.error("[Quotation] 保存数据到 IndexDB 失败:", error);
287
+ console.error('[Quotation] 保存数据到 IndexDB 失败:', error);
324
288
  }
325
289
  }
290
+
326
291
  /**
327
292
  * 预加载模块数据(统一接口)
328
293
  * 在模块注册后自动调用
329
294
  */
330
295
  async preload() {
331
- console.log("[Quotation] 开始预加载数据...");
332
296
  try {
297
+ // 1. 尝试从 IndexDB 加载数据
333
298
  const cachedData = await this.loadQuotationFromIndexDB();
334
299
  if (cachedData && cachedData.length > 0) {
335
- console.log(`[Quotation] 从 IndexDB 加载了 ${cachedData.length} 条报价单数据`);
336
- this.store.quotationList = (0, import_lodash_es.cloneDeep)(cachedData);
337
- this.core.effects.emit(import_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
300
+ // 将缓存数据放入 store
301
+ this.store.quotationList = (0, _lodashEs.cloneDeep)(cachedData);
302
+ this.core.effects.emit(_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
338
303
  return;
339
304
  }
340
- console.log("[Quotation] IndexDB 中没有缓存数据,从服务器加载...");
341
305
  } catch (error) {
342
- console.warn("[Quotation] 从 IndexDB 加载数据失败:", error);
306
+ console.warn('[Quotation] 从 IndexDB 加载数据失败:', error);
343
307
  }
308
+
309
+ // 2. 如果 IndexDB 中没有数据,从服务器加载
344
310
  const quotationList = await this.loadQuotationList();
311
+
312
+ // 3. 将服务器数据保存到 IndexDB 和 store
345
313
  if (quotationList && quotationList.length > 0) {
346
314
  await this.saveQuotationToIndexDB(quotationList);
347
- this.store.quotationList = (0, import_lodash_es.cloneDeep)(quotationList);
348
- this.core.effects.emit(import_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
315
+ this.store.quotationList = (0, _lodashEs.cloneDeep)(quotationList);
316
+ this.core.effects.emit(_types.QuotationHooks.onQuotationChanged, this.store.quotationList);
349
317
  }
350
318
  }
351
- };
352
- // Annotate the CommonJS export names for ESM import in node:
353
- 0 && (module.exports = {
354
- QuotationModule
355
- });
319
+ }
320
+ exports.QuotationModule = QuotationModule;
@@ -1,33 +1,23 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/quotation/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- QuotationHooks: () => QuotationHooks
23
- });
24
- module.exports = __toCommonJS(types_exports);
25
- var QuotationHooks = /* @__PURE__ */ ((QuotationHooks2) => {
26
- QuotationHooks2["onQuotationLoaded"] = "quotation:onQuotationLoaded";
27
- QuotationHooks2["onQuotationChanged"] = "quotation:onQuotationChanged";
28
- return QuotationHooks2;
29
- })(QuotationHooks || {});
30
- // Annotate the CommonJS export names for ESM import in node:
31
- 0 && (module.exports = {
32
- QuotationHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
33
5
  });
6
+ exports.QuotationHooks = void 0;
7
+ /**
8
+ * 报价单模块状态
9
+ */
10
+ /**
11
+ * 报价单数据结构
12
+ */
13
+ /**
14
+ * 报价单商品价格配置
15
+ */
16
+ /**
17
+ * 报价单模块钩子
18
+ */
19
+ let QuotationHooks = exports.QuotationHooks = /*#__PURE__*/function (QuotationHooks) {
20
+ QuotationHooks["onQuotationLoaded"] = "quotation:onQuotationLoaded";
21
+ QuotationHooks["onQuotationChanged"] = "quotation:onQuotationChanged";
22
+ return QuotationHooks;
23
+ }({});