@pisell/pisellos 0.0.568 → 0.0.570

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 (455) hide show
  1. package/dist/effects/index.d.ts +2 -2
  2. package/dist/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  3. package/dist/model/strategy/adapter/itemRule/type.d.ts +6 -6
  4. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  5. package/dist/model/strategy/adapter/promotion/type.d.ts +5 -5
  6. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  7. package/dist/model/strategy/type.d.ts +1 -1
  8. package/dist/modules/BaseModule.d.ts +2 -2
  9. package/dist/modules/BaseModule.js +4 -4
  10. package/dist/modules/BookingContext/index.d.ts +48 -0
  11. package/dist/modules/BookingContext/index.js +566 -0
  12. package/dist/modules/BookingContext/types.d.ts +102 -0
  13. package/dist/modules/BookingContext/types.js +51 -0
  14. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  15. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
  16. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  17. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
  18. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  19. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
  20. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  21. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  22. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  23. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  24. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  25. package/dist/modules/BookingContext/utils/index.js +11 -0
  26. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  27. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  28. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  29. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  30. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  31. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  32. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  33. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  34. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  35. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  36. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  37. package/dist/modules/BookingContext/utils/resources.js +486 -0
  38. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  39. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  40. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  41. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  42. package/dist/modules/Cart/utils/cartProduct.js +26 -5
  43. package/dist/modules/Cart/utils/changePrice.js +27 -20
  44. package/dist/modules/Customer/index.d.ts +20 -0
  45. package/dist/modules/Customer/index.js +172 -83
  46. package/dist/modules/Customer/types.d.ts +3 -1
  47. package/dist/modules/Discount/index.d.ts +2 -1
  48. package/dist/modules/Discount/index.js +37 -9
  49. package/dist/modules/Discount/types.d.ts +2 -1
  50. package/dist/modules/Holder/types.d.ts +1 -1
  51. package/dist/modules/OpenData/index.d.ts +8 -0
  52. package/dist/modules/OpenData/index.js +36 -16
  53. package/dist/modules/OpenData/types.d.ts +1 -1
  54. package/dist/modules/Order/index.d.ts +448 -23
  55. package/dist/modules/Order/index.js +5417 -561
  56. package/dist/modules/Order/types.d.ts +693 -88
  57. package/dist/modules/Order/types.js +68 -1
  58. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  59. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  60. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  61. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  62. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  63. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  64. package/dist/modules/Order/utils.d.ts +167 -18
  65. package/dist/modules/Order/utils.js +960 -165
  66. package/dist/modules/Payment/index.d.ts +10 -9
  67. package/dist/modules/Payment/index.js +465 -703
  68. package/dist/modules/Payment/types.d.ts +47 -23
  69. package/dist/modules/Payment/utils.d.ts +1 -1
  70. package/dist/modules/Payment/utils.js +4 -3
  71. package/dist/modules/Payment/walletpass.js +44 -29
  72. package/dist/modules/Product/index.d.ts +1 -1
  73. package/dist/modules/Product/types.d.ts +29 -7
  74. package/dist/modules/ProductList/index.d.ts +17 -13
  75. package/dist/modules/ProductList/index.js +184 -74
  76. package/dist/modules/ProductList/types.d.ts +17 -0
  77. package/dist/modules/Quotation/index.d.ts +22 -2
  78. package/dist/modules/Quotation/index.js +108 -42
  79. package/dist/modules/Quotation/types.d.ts +19 -0
  80. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  81. package/dist/modules/ResourcePlanner/index.js +181 -0
  82. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  83. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  84. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  85. package/dist/modules/ResourcePlanner/types.js +1 -0
  86. package/dist/modules/Rules/index.d.ts +8 -10
  87. package/dist/modules/Rules/index.js +222 -109
  88. package/dist/modules/Rules/types.d.ts +15 -4
  89. package/dist/modules/SalesSummary/index.d.ts +23 -26
  90. package/dist/modules/SalesSummary/index.js +152 -46
  91. package/dist/modules/SalesSummary/types.d.ts +9 -1
  92. package/dist/modules/SalesSummary/utils.d.ts +3 -22
  93. package/dist/modules/SalesSummary/utils.js +803 -163
  94. package/dist/modules/ScanOrderLogger/types.d.ts +2 -2
  95. package/dist/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  96. package/dist/modules/Schedule/getDateIsInSchedule.js +14 -7
  97. package/dist/modules/Schedule/index.d.ts +18 -5
  98. package/dist/modules/Schedule/index.js +78 -24
  99. package/dist/modules/Schedule/type.d.ts +7 -7
  100. package/dist/modules/Schedule/types.d.ts +11 -9
  101. package/dist/modules/Summary/index.js +4 -3
  102. package/dist/modules/SurchargeList/index.d.ts +18 -0
  103. package/dist/modules/SurchargeList/index.js +185 -0
  104. package/dist/modules/SurchargeList/types.d.ts +15 -0
  105. package/dist/modules/SurchargeList/types.js +1 -0
  106. package/dist/modules/index.d.ts +3 -0
  107. package/dist/modules/index.js +4 -1
  108. package/dist/plugins/app.d.ts +2 -0
  109. package/dist/plugins/request.d.ts +3 -2
  110. package/dist/server/index.d.ts +462 -8
  111. package/dist/server/index.js +6112 -656
  112. package/dist/server/modules/floor-plan/index.d.ts +39 -0
  113. package/dist/server/modules/floor-plan/index.js +595 -0
  114. package/dist/server/modules/floor-plan/types.d.ts +43 -0
  115. package/dist/server/modules/floor-plan/types.js +13 -0
  116. package/dist/server/modules/index.d.ts +7 -2
  117. package/dist/server/modules/index.js +6 -0
  118. package/dist/server/modules/menu/types.d.ts +1 -1
  119. package/dist/server/modules/order/index.d.ts +207 -14
  120. package/dist/server/modules/order/index.js +2326 -379
  121. package/dist/server/modules/order/types.d.ts +91 -20
  122. package/dist/server/modules/order/types.js +14 -1
  123. package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
  124. package/dist/server/modules/order/utils/filterBookings.js +118 -11
  125. package/dist/server/modules/order/utils/filterOrders.js +242 -14
  126. package/dist/server/modules/payment/index.d.ts +28 -0
  127. package/dist/server/modules/payment/index.js +305 -0
  128. package/dist/server/modules/payment/types.d.ts +9 -0
  129. package/dist/server/modules/payment/types.js +1 -0
  130. package/dist/server/modules/products/index.d.ts +105 -14
  131. package/dist/server/modules/products/index.js +1393 -516
  132. package/dist/server/modules/products/types.d.ts +35 -2
  133. package/dist/server/modules/products/types.js +4 -0
  134. package/dist/server/modules/quotation/index.d.ts +39 -0
  135. package/dist/server/modules/quotation/index.js +278 -66
  136. package/dist/server/modules/resource/index.d.ts +2 -3
  137. package/dist/server/modules/resource/index.js +108 -86
  138. package/dist/server/modules/resource/types.d.ts +1 -1
  139. package/dist/server/modules/schedule/index.d.ts +6 -4
  140. package/dist/server/modules/schedule/index.js +116 -85
  141. package/dist/server/modules/schedule/utils.d.ts +1 -1
  142. package/dist/server/test.json +713 -0
  143. package/dist/server/types.d.ts +6 -4
  144. package/dist/server/utils/product.js +2 -2
  145. package/dist/server/utils/small-ticket.d.ts +71 -0
  146. package/dist/server/utils/small-ticket.js +963 -0
  147. package/dist/solution/BaseSales/index.d.ts +378 -0
  148. package/dist/solution/BaseSales/index.js +4006 -0
  149. package/dist/solution/BaseSales/types.d.ts +394 -0
  150. package/dist/solution/BaseSales/types.js +40 -0
  151. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  152. package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
  153. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  154. package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
  155. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  156. package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
  157. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  158. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
  159. package/dist/solution/BaseSales/utils.d.ts +40 -0
  160. package/dist/solution/BaseSales/utils.js +263 -0
  161. package/dist/solution/BookingByStep/index.d.ts +2 -2
  162. package/dist/solution/BookingByStep/utils/resources.d.ts +1 -1
  163. package/dist/solution/BookingTicket/index.d.ts +382 -25
  164. package/dist/solution/BookingTicket/index.js +2506 -443
  165. package/dist/solution/BookingTicket/types.d.ts +191 -6
  166. package/dist/solution/BookingTicket/types.js +83 -10
  167. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  168. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  169. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  170. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  171. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  172. package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
  173. package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
  174. package/dist/solution/BookingTicket/utils/cartView.js +209 -0
  175. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  176. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  177. package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  178. package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
  179. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  180. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  181. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  182. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  183. package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  184. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +41 -1
  185. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  186. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  187. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  188. package/dist/solution/BookingTicket/utils/scan/handleScan.js +11 -3
  189. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  190. package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
  191. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  192. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  193. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  194. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  195. package/dist/solution/Checkout/index.d.ts +1 -0
  196. package/dist/solution/Checkout/index.js +25 -34
  197. package/dist/solution/Checkout/utils/index.js +4 -4
  198. package/dist/solution/RegisterAndLogin/config.js +2 -10
  199. package/dist/solution/Sales/index.d.ts +50 -5
  200. package/dist/solution/Sales/index.js +484 -92
  201. package/dist/solution/Sales/types.d.ts +29 -5
  202. package/dist/solution/ScanOrder/index.d.ts +27 -21
  203. package/dist/solution/ScanOrder/index.js +499 -434
  204. package/dist/solution/ScanOrder/types.d.ts +38 -16
  205. package/dist/solution/ScanOrder/types.js +4 -5
  206. package/dist/solution/ScanOrder/utils.d.ts +4 -1
  207. package/dist/solution/ScanOrder/utils.js +109 -34
  208. package/dist/solution/ShopDiscount/index.js +4 -4
  209. package/dist/solution/ShopDiscount/types.d.ts +1 -1
  210. package/dist/solution/ShopDiscount/utils.d.ts +2 -2
  211. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  212. package/dist/solution/UnifiedBookingSales/index.js +1871 -0
  213. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  214. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  215. package/dist/solution/VenueBooking/index.d.ts +29 -20
  216. package/dist/solution/VenueBooking/index.js +301 -213
  217. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  218. package/dist/solution/VenueBooking/types.d.ts +1 -1
  219. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  220. package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
  221. package/dist/solution/index.d.ts +2 -0
  222. package/dist/solution/index.js +3 -1
  223. package/dist/types/index.d.ts +12 -2
  224. package/dist/utils/task.d.ts +2 -2
  225. package/dist/utils/watch.d.ts +2 -2
  226. package/lib/effects/index.d.ts +2 -2
  227. package/lib/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  228. package/lib/model/strategy/adapter/itemRule/type.d.ts +6 -6
  229. package/lib/model/strategy/adapter/promotion/evaluator.js +3 -2
  230. package/lib/model/strategy/adapter/promotion/type.d.ts +5 -5
  231. package/lib/model/strategy/adapter/walletPass/utils.js +6 -4
  232. package/lib/model/strategy/type.d.ts +1 -1
  233. package/lib/modules/BaseModule.d.ts +2 -2
  234. package/lib/modules/BaseModule.js +4 -4
  235. package/lib/modules/BookingContext/index.d.ts +48 -0
  236. package/lib/modules/BookingContext/index.js +390 -0
  237. package/lib/modules/BookingContext/types.d.ts +102 -0
  238. package/lib/modules/BookingContext/types.js +48 -0
  239. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  240. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +286 -0
  241. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  242. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +148 -0
  243. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  244. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +242 -0
  245. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  246. package/lib/modules/BookingContext/utils/flexible.js +63 -0
  247. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  248. package/lib/modules/BookingContext/utils/formatResourceList.js +35 -0
  249. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  250. package/lib/modules/BookingContext/utils/index.js +126 -0
  251. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  252. package/lib/modules/BookingContext/utils/noResource.js +78 -0
  253. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  254. package/lib/modules/BookingContext/utils/orderLineDisplay.js +29 -0
  255. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  256. package/lib/modules/BookingContext/utils/productExtend.js +330 -0
  257. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  258. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  259. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  260. package/lib/modules/BookingContext/utils/resourceSelection.js +24 -0
  261. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  262. package/lib/modules/BookingContext/utils/resources.js +419 -0
  263. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  264. package/lib/modules/BookingContext/utils/serviceTimes.js +161 -0
  265. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  266. package/lib/modules/BookingContext/utils/timeSlices.js +114 -0
  267. package/lib/modules/Cart/utils/cartProduct.js +27 -5
  268. package/lib/modules/Cart/utils/changePrice.js +20 -14
  269. package/lib/modules/Customer/index.d.ts +20 -0
  270. package/lib/modules/Customer/index.js +63 -10
  271. package/lib/modules/Customer/types.d.ts +3 -1
  272. package/lib/modules/Discount/index.d.ts +2 -1
  273. package/lib/modules/Discount/index.js +18 -2
  274. package/lib/modules/Discount/types.d.ts +2 -1
  275. package/lib/modules/Holder/types.d.ts +1 -1
  276. package/lib/modules/OpenData/index.d.ts +8 -0
  277. package/lib/modules/OpenData/index.js +21 -3
  278. package/lib/modules/OpenData/types.d.ts +1 -1
  279. package/lib/modules/Order/index.d.ts +448 -23
  280. package/lib/modules/Order/index.js +3641 -308
  281. package/lib/modules/Order/types.d.ts +693 -88
  282. package/lib/modules/Order/types.js +55 -1
  283. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  284. package/lib/modules/Order/utils/bundleDiscountHydration.js +106 -0
  285. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  286. package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
  287. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  288. package/lib/modules/Order/utils/orderCollectionIdentity.js +353 -0
  289. package/lib/modules/Order/utils.d.ts +167 -18
  290. package/lib/modules/Order/utils.js +974 -138
  291. package/lib/modules/Payment/index.d.ts +10 -9
  292. package/lib/modules/Payment/index.js +30 -124
  293. package/lib/modules/Payment/types.d.ts +47 -23
  294. package/lib/modules/Payment/utils.d.ts +1 -1
  295. package/lib/modules/Payment/utils.js +4 -3
  296. package/lib/modules/Payment/walletpass.js +16 -6
  297. package/lib/modules/Product/index.d.ts +1 -1
  298. package/lib/modules/Product/types.d.ts +29 -7
  299. package/lib/modules/ProductList/index.d.ts +17 -13
  300. package/lib/modules/ProductList/index.js +92 -51
  301. package/lib/modules/ProductList/types.d.ts +17 -0
  302. package/lib/modules/Quotation/index.d.ts +22 -2
  303. package/lib/modules/Quotation/index.js +76 -20
  304. package/lib/modules/Quotation/types.d.ts +19 -0
  305. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  306. package/lib/modules/ResourcePlanner/index.js +147 -0
  307. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  308. package/lib/modules/ResourcePlanner/planner.js +895 -0
  309. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  310. package/lib/modules/ResourcePlanner/types.js +5 -0
  311. package/lib/modules/Rules/index.d.ts +8 -10
  312. package/lib/modules/Rules/index.js +153 -61
  313. package/lib/modules/Rules/types.d.ts +15 -4
  314. package/lib/modules/SalesSummary/index.d.ts +23 -26
  315. package/lib/modules/SalesSummary/index.js +84 -16
  316. package/lib/modules/SalesSummary/types.d.ts +9 -1
  317. package/lib/modules/SalesSummary/utils.d.ts +3 -22
  318. package/lib/modules/SalesSummary/utils.js +616 -111
  319. package/lib/modules/ScanOrderLogger/types.d.ts +2 -2
  320. package/lib/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  321. package/lib/modules/Schedule/getDateIsInSchedule.js +14 -7
  322. package/lib/modules/Schedule/index.d.ts +18 -5
  323. package/lib/modules/Schedule/index.js +49 -14
  324. package/lib/modules/Schedule/type.d.ts +7 -7
  325. package/lib/modules/Schedule/types.d.ts +11 -9
  326. package/lib/modules/Summary/index.js +2 -2
  327. package/lib/modules/SurchargeList/index.d.ts +18 -0
  328. package/lib/modules/SurchargeList/index.js +95 -0
  329. package/lib/modules/SurchargeList/types.d.ts +15 -0
  330. package/lib/modules/SurchargeList/types.js +5 -0
  331. package/lib/modules/index.d.ts +3 -0
  332. package/lib/modules/index.js +33 -0
  333. package/lib/plugins/app.d.ts +2 -0
  334. package/lib/plugins/request.d.ts +3 -2
  335. package/lib/server/index.d.ts +462 -8
  336. package/lib/server/index.js +3901 -205
  337. package/lib/server/modules/floor-plan/index.d.ts +39 -0
  338. package/lib/server/modules/floor-plan/index.js +306 -0
  339. package/lib/server/modules/floor-plan/types.d.ts +43 -0
  340. package/lib/server/modules/floor-plan/types.js +19 -0
  341. package/lib/server/modules/index.d.ts +7 -2
  342. package/lib/server/modules/index.js +21 -0
  343. package/lib/server/modules/menu/types.d.ts +1 -1
  344. package/lib/server/modules/order/index.d.ts +207 -14
  345. package/lib/server/modules/order/index.js +1324 -141
  346. package/lib/server/modules/order/types.d.ts +91 -20
  347. package/lib/server/modules/order/types.js +11 -1
  348. package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
  349. package/lib/server/modules/order/utils/filterBookings.js +119 -11
  350. package/lib/server/modules/order/utils/filterOrders.js +238 -13
  351. package/lib/server/modules/payment/index.d.ts +28 -0
  352. package/lib/server/modules/payment/index.js +168 -0
  353. package/lib/server/modules/payment/types.d.ts +9 -0
  354. package/lib/server/modules/payment/types.js +5 -0
  355. package/lib/server/modules/products/index.d.ts +105 -14
  356. package/lib/server/modules/products/index.js +588 -97
  357. package/lib/server/modules/products/types.d.ts +35 -2
  358. package/lib/server/modules/products/types.js +3 -0
  359. package/lib/server/modules/quotation/index.d.ts +39 -0
  360. package/lib/server/modules/quotation/index.js +145 -1
  361. package/lib/server/modules/resource/index.d.ts +2 -3
  362. package/lib/server/modules/resource/index.js +71 -45
  363. package/lib/server/modules/resource/types.d.ts +1 -1
  364. package/lib/server/modules/schedule/index.d.ts +6 -4
  365. package/lib/server/modules/schedule/index.js +55 -44
  366. package/lib/server/modules/schedule/utils.d.ts +1 -1
  367. package/lib/server/test.json +713 -0
  368. package/lib/server/types.d.ts +6 -4
  369. package/lib/server/utils/product.js +2 -2
  370. package/lib/server/utils/small-ticket.d.ts +71 -0
  371. package/lib/server/utils/small-ticket.js +926 -0
  372. package/lib/solution/BaseSales/index.d.ts +378 -0
  373. package/lib/solution/BaseSales/index.js +2367 -0
  374. package/lib/solution/BaseSales/types.d.ts +394 -0
  375. package/lib/solution/BaseSales/types.js +47 -0
  376. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  377. package/lib/solution/BaseSales/utils/cartPromotion.js +1155 -0
  378. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  379. package/lib/solution/BaseSales/utils/parseSalesResponse.js +140 -0
  380. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  381. package/lib/solution/BaseSales/utils/quotationPrice.js +231 -0
  382. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  383. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +215 -0
  384. package/lib/solution/BaseSales/utils.d.ts +40 -0
  385. package/lib/solution/BaseSales/utils.js +259 -0
  386. package/lib/solution/BookingByStep/index.d.ts +2 -2
  387. package/lib/solution/BookingByStep/utils/resources.d.ts +1 -1
  388. package/lib/solution/BookingTicket/index.d.ts +382 -25
  389. package/lib/solution/BookingTicket/index.js +1350 -76
  390. package/lib/solution/BookingTicket/types.d.ts +191 -6
  391. package/lib/solution/BookingTicket/types.js +71 -10
  392. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  393. package/lib/solution/BookingTicket/utils/addProductDecision.js +353 -0
  394. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  395. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +94 -0
  396. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  397. package/lib/solution/BookingTicket/utils/bookingStatus.js +136 -0
  398. package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
  399. package/lib/solution/BookingTicket/utils/cartView.js +200 -0
  400. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  401. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  402. package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  403. package/lib/solution/BookingTicket/utils/orderCustomer.js +35 -0
  404. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  405. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +387 -0
  406. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  407. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +220 -0
  408. package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  409. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +24 -3
  410. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  411. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +64 -0
  412. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  413. package/lib/solution/BookingTicket/utils/scan/handleScan.js +4 -2
  414. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  415. package/lib/solution/BookingTicket/utils/scan/index.js +14 -2
  416. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  417. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +115 -0
  418. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  419. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +83 -0
  420. package/lib/solution/Checkout/index.d.ts +1 -0
  421. package/lib/solution/Checkout/index.js +18 -19
  422. package/lib/solution/Checkout/utils/index.js +4 -4
  423. package/lib/solution/RegisterAndLogin/config.js +2 -10
  424. package/lib/solution/Sales/index.d.ts +50 -5
  425. package/lib/solution/Sales/index.js +296 -39
  426. package/lib/solution/Sales/types.d.ts +29 -5
  427. package/lib/solution/ScanOrder/index.d.ts +27 -21
  428. package/lib/solution/ScanOrder/index.js +144 -103
  429. package/lib/solution/ScanOrder/types.d.ts +38 -16
  430. package/lib/solution/ScanOrder/types.js +4 -5
  431. package/lib/solution/ScanOrder/utils.d.ts +4 -1
  432. package/lib/solution/ScanOrder/utils.js +98 -26
  433. package/lib/solution/ShopDiscount/index.js +3 -3
  434. package/lib/solution/ShopDiscount/types.d.ts +1 -1
  435. package/lib/solution/ShopDiscount/utils.d.ts +2 -2
  436. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  437. package/lib/solution/UnifiedBookingSales/index.js +1050 -0
  438. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  439. package/lib/solution/UnifiedBookingSales/types.js +14 -0
  440. package/lib/solution/VenueBooking/index.d.ts +29 -20
  441. package/lib/solution/VenueBooking/index.js +169 -94
  442. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  443. package/lib/solution/VenueBooking/types.d.ts +1 -1
  444. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  445. package/lib/solution/VenueBooking/utils/slotMerge.js +9 -3
  446. package/lib/solution/index.d.ts +2 -0
  447. package/lib/solution/index.js +22 -0
  448. package/lib/types/index.d.ts +12 -2
  449. package/lib/utils/task.d.ts +2 -2
  450. package/lib/utils/watch.d.ts +2 -2
  451. package/package.json +18 -19
  452. package/dist/model/strategy/adapter/promotion/index.d.ts +0 -4
  453. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  454. package/lib/model/strategy/adapter/promotion/index.d.ts +0 -4
  455. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformBaseProductToOrderProduct = transformBaseProductToOrderProduct;
7
+ var _utils = require("../../../modules/Order/utils");
8
+ var _manualProductDiscount = require("../../../modules/Order/utils/manualProductDiscount");
9
+ function toNumber(value, fallback = 0) {
10
+ const parsedValue = Number(value);
11
+ if (!Number.isFinite(parsedValue)) return fallback;
12
+ return parsedValue;
13
+ }
14
+ function toProductId(value) {
15
+ if (value === null || value === undefined || value === '') return null;
16
+ const parsedValue = Number(value);
17
+ if (!Number.isFinite(parsedValue)) return null;
18
+ return parsedValue;
19
+ }
20
+ function toSafePositiveInt(value, fallback = 1) {
21
+ const parsedValue = Math.floor(Number(value));
22
+ if (!Number.isFinite(parsedValue) || parsedValue < 1) return fallback;
23
+ return parsedValue;
24
+ }
25
+ function toPriceString(value, fallback = '0.00') {
26
+ const parsedValue = Number(value);
27
+ if (!Number.isFinite(parsedValue)) return fallback;
28
+ return parsedValue.toFixed(2);
29
+ }
30
+ function isBlankValue(value) {
31
+ return value === undefined || value === null || typeof value === 'string' && value.trim() === '';
32
+ }
33
+ function firstNonBlank(...values) {
34
+ return values.find(value => !isBlankValue(value));
35
+ }
36
+ function normalizeOptionItems(optionItems) {
37
+ if (!Array.isArray(optionItems)) return [];
38
+ return optionItems.map(optionItem => {
39
+ const optionGroupItemId = toNumber(optionItem?.option_group_item_id ?? optionItem?.id);
40
+ const price = optionItem?.price ?? optionItem?.add_price ?? 0;
41
+ return {
42
+ ...optionItem,
43
+ option_group_item_id: optionGroupItemId,
44
+ option_group_id: toNumber(optionItem?.option_group_id),
45
+ num: toSafePositiveInt(optionItem?.num ?? optionItem?.quantity, 1),
46
+ add_price: toNumber(price, 0),
47
+ price: undefined
48
+ };
49
+ });
50
+ }
51
+ function normalizeBundleItems(bundleItems, preferPriceField = false) {
52
+ if (!Array.isArray(bundleItems)) return [];
53
+ return bundleItems.map(bundleItem => {
54
+ const unitSelling = preferPriceField ? bundleItem.price ?? bundleItem.bundle_selling_price ?? bundleItem.custom_price ?? bundleItem.product_price ?? '0' : bundleItem.bundle_selling_price ?? bundleItem.price ?? bundleItem.custom_price ?? bundleItem.product_price ?? '0';
55
+ const unitStr = toPriceString(unitSelling, '0.00');
56
+ const num = toSafePositiveInt(bundleItem?.num ?? bundleItem?.quantity, 1);
57
+ const magnitudeSource = {
58
+ ...bundleItem,
59
+ option: normalizeOptionItems(bundleItem?.option),
60
+ bundle_selling_price: unitStr,
61
+ // 计算 markdown 净额时,只传真实毛价;仅有 bundle_selling_price 时按历史净额兜底。
62
+ price: bundleItem.price ?? bundleItem.custom_price
63
+ };
64
+ const normalizedItem = {
65
+ ...bundleItem,
66
+ num,
67
+ quantity: bundleItem?.quantity ?? num,
68
+ // price 保留毛价(markdown 仍为正),由 price_type 决定符号。
69
+ price: bundleItem.price ?? unitStr,
70
+ bundle_selling_price: unitStr,
71
+ original_price: bundleItem.original_price ?? bundleItem.product_price ?? bundleItem.price ?? unitStr,
72
+ option: normalizeOptionItems(bundleItem?.option),
73
+ discount_list: preferPriceField ? [] : bundleItem.discount_list
74
+ };
75
+ // bundle_selling_price 落「正净额」:markdown = |price| − Σoptions;markup/原价维持原值。
76
+ normalizedItem.bundle_selling_price = (0, _utils.getBundleSellingMagnitude)(magnitudeSource).toFixed(2);
77
+ if ((normalizedItem.price_type ?? normalizedItem.custom_price_type) === 'markdown' && (normalizedItem.price_type_ext === '' || normalizedItem.price_type_ext === undefined || normalizedItem.price_type_ext === null)) {
78
+ normalizedItem.custom_price = normalizedItem.custom_price ?? normalizedItem.price;
79
+ normalizedItem.price = normalizedItem.bundle_selling_price;
80
+ }
81
+ return normalizedItem;
82
+ });
83
+ }
84
+ function findVariantById(origin, variantId) {
85
+ if (!origin || !variantId || variantId <= 0) return null;
86
+ const variants = Array.isArray(origin?.variant) ? origin.variant : [];
87
+ return variants.find(variant => Number(variant?.id) === variantId) || null;
88
+ }
89
+
90
+ /**
91
+ * 将商品列表原始数据 + 商品详情选择回调转换成 OrderModule.addProductToOrder 入参。
92
+ *
93
+ * 注意:这里不生成 identity,缺省时由 OrderModule 自动补齐。
94
+ */
95
+ function transformBaseProductToOrderProduct(params) {
96
+ const {
97
+ payload,
98
+ fallbackProductId = null
99
+ } = params;
100
+ if (!payload || typeof payload !== 'object') return null;
101
+ const sourceProduct = params.sourceProduct || params.sourceItem || {};
102
+ const productId = toProductId(payload.product_id ?? payload.id ?? sourceProduct?.product_id ?? sourceProduct?.id ?? fallbackProductId);
103
+ if (productId === null) return null;
104
+ const productVariantId = toNumber(payload.product_variant_id ?? payload.variant_id ?? sourceProduct?.product_variant_id ?? sourceProduct?.variant_id, 0);
105
+ const callbackOrigin = payload.origin || payload._origin?.sourceProduct || payload._origin?.sourceItem || payload._origin || {};
106
+ const origin = {
107
+ ...(sourceProduct || {}),
108
+ ...(callbackOrigin || {})
109
+ };
110
+ const matchedVariant = findVariantById(callbackOrigin, productVariantId) ?? findVariantById(sourceProduct, productVariantId) ?? findVariantById(origin, productVariantId);
111
+ const sourceProductPrice = toPriceString(payload.price ?? payload.selling_price ?? matchedVariant?.price ?? matchedVariant?.base_price ?? origin?.price ?? origin?.base_price ?? sourceProduct?.price ?? sourceProduct?.selling_price ?? sourceProduct?.base_price, '0.00');
112
+ const explicitLineTotal = payload.line_total ?? payload.total ?? payload._extend?.total;
113
+ const hasExplicitLineTotal = Number.isFinite(Number(explicitLineTotal));
114
+ const lineCompositeTotal = toPriceString(explicitLineTotal, sourceProductPrice);
115
+ const hasPriceOverride = payload.price_override !== undefined && payload.price_override !== null && payload.price_override !== '';
116
+ const productOptionItem = (0, _utils.normalizeProductSkuOptions)(normalizeOptionItems(payload.product_sku?.option ?? payload.option ?? payload.options ?? payload.product_option_item));
117
+ const productBundle = normalizeBundleItems(payload.bundle ?? payload.product_bundle, hasPriceOverride);
118
+ // `payload.unique` 是业务侧商品/票务标识,可能在连续加同一商品时重复;
119
+ // 行级唯一值只接受显式协议字段,缺省交给 OrderModule 生成。
120
+ const uniqueIdentificationNumber = payload.unique_identification_number;
121
+ const resolvedQuantity = toSafePositiveInt(payload.quantity ?? payload.num, 1);
122
+ const originTotal = (0, _manualProductDiscount.resolveManualDiscountOriginTotal)({
123
+ originTotal: payload.origin_total,
124
+ extendOriginTotal: payload._extend?.origin_total,
125
+ originExtendOriginTotal: origin?._extend?.origin_total,
126
+ sourceExtendOriginTotal: sourceProduct?._extend?.origin_total,
127
+ catalogUnitPrice: origin?.base_price ?? origin?.price ?? sourceProduct?.base_price ?? sourceProduct?.price,
128
+ quantity: resolvedQuantity
129
+ });
130
+ const sellingTotal = Number(payload.line_total ?? payload.total ?? payload._extend?.total ?? lineCompositeTotal);
131
+ const discountReason = (0, _manualProductDiscount.resolveManualDiscountReasonFromSources)({
132
+ discountReason: payload.discount_reason,
133
+ extendDiscountReason: payload._extend?.discount_reason,
134
+ originExtendDiscountReason: origin?._extend?.discount_reason
135
+ });
136
+ const lineOriginalPrice = hasPriceOverride && Number.isFinite(originTotal) ? toPriceString(originTotal) : lineCompositeTotal;
137
+ const manualDiscountList = (0, _manualProductDiscount.shouldBuildManualProductDiscount)({
138
+ hasPriceOverride,
139
+ originTotal,
140
+ sellingTotal
141
+ }) ? (0, _manualProductDiscount.mergeManualProductDiscountIntoList)(payload.discount_list, (0, _manualProductDiscount.buildManualProductDiscountItem)({
142
+ originTotal: Number.isFinite(originTotal) ? originTotal : Number(lineOriginalPrice),
143
+ sellingTotal: Number.isFinite(sellingTotal) ? sellingTotal : Number(lineCompositeTotal),
144
+ quantity: resolvedQuantity,
145
+ message: discountReason,
146
+ discountway: payload._extend?.discountway,
147
+ discount_per: payload._extend?.discount_per
148
+ })) : payload.discount_list || [];
149
+
150
+ // v2:source 不含 option;main_product_* 含 option(与 normalizeOrderProduct 一致)
151
+ const optionSum = (0, _utils.sumOptionUnitPrice)(productOptionItem).toNumber();
152
+ const mainProductOriginalPrice = toPriceString(Number(sourceProductPrice) + optionSum);
153
+ const bundleOnlyComposite = (0, _utils.composeLinePrice)({
154
+ mainPrice: 0,
155
+ bundle: productBundle
156
+ });
157
+ const derivedMainSelling = hasExplicitLineTotal ? Number(lineCompositeTotal) - Number(bundleOnlyComposite) : Number(mainProductOriginalPrice);
158
+ const mainProductSellingPrice = toPriceString(Number.isFinite(derivedMainSelling) && derivedMainSelling >= 0 ? derivedMainSelling : Number(mainProductOriginalPrice));
159
+ const metadata = {
160
+ unique: payload.unique,
161
+ session: payload.session,
162
+ form: payload.form,
163
+ service_times: payload.service_times,
164
+ machine_code: payload.machine_code,
165
+ schedule_id: payload.schedule_id,
166
+ duration: payload.duration,
167
+ policy_id: payload.policy_id,
168
+ source_shop_id: payload.source_shop_id,
169
+ source_product_price: sourceProductPrice,
170
+ main_product_selling_price: mainProductSellingPrice,
171
+ main_product_original_price: mainProductOriginalPrice,
172
+ price_schema_version: 2,
173
+ holder_config: sourceProduct?.holder_config,
174
+ ...(hasPriceOverride ? {
175
+ price_override: String(payload.price_override),
176
+ is_manual_discount: 1
177
+ } : {}),
178
+ ...(payload.bundle_edit !== undefined ? {
179
+ bundle_edit: payload.bundle_edit
180
+ } : {})
181
+ };
182
+ if (uniqueIdentificationNumber) {
183
+ metadata.unique_identification_number = String(uniqueIdentificationNumber);
184
+ }
185
+ // 从源头补充商品多语言标题
186
+ const productTitle = {
187
+ ...(sourceProduct?.title_i18n || {}),
188
+ original: sourceProduct?.title || ''
189
+ };
190
+ return {
191
+ product_id: productId,
192
+ product_variant_id: productVariantId,
193
+ unique_identification_number: uniqueIdentificationNumber ? String(uniqueIdentificationNumber) : undefined,
194
+ num: resolvedQuantity,
195
+ product_sku: {
196
+ ...(payload.product_sku && typeof payload.product_sku === 'object' ? payload.product_sku : {}),
197
+ option: productOptionItem
198
+ },
199
+ product_bundle: productBundle,
200
+ discount_list: manualDiscountList,
201
+ // 折后行价由 normalizeOrderProduct 按 main + bundle 合成;手动改价时 bundle 已为分摊后单价
202
+ selling_price: lineCompositeTotal,
203
+ original_price: lineOriginalPrice,
204
+ tax_fee: toPriceString(payload.tax_fee ?? matchedVariant?.tax_fee ?? origin?.tax_fee ?? sourceProduct?.tax_fee, '0.00'),
205
+ is_charge_tax: toNumber(payload.is_charge_tax ?? matchedVariant?.is_charge_tax ?? origin?.is_charge_tax ?? sourceProduct?.is_charge_tax, 0),
206
+ metadata,
207
+ note: payload.note != null ? String(payload.note) : '',
208
+ product_title: productTitle,
209
+ product_cover: firstNonBlank(matchedVariant?.cover, sourceProduct?.cover),
210
+ _origin: {
211
+ ...(sourceProduct || {}),
212
+ callbackData: payload
213
+ }
214
+ };
215
+ }
@@ -0,0 +1,40 @@
1
+ import { BaseSalesOrderProduct, BaseSalesOrderProductIdentity, BaseSalesSummary } from './types';
2
+ /**
3
+ * 构建金额全为 0 的空 summary。
4
+ * 作为尚未计算金额时的兜底默认值,避免下游因 undefined 报错。
5
+ */
6
+ export declare function createEmptySummary(): BaseSalesSummary;
7
+ /**
8
+ * 将选项行 / 套餐行归一成稳定 JSON,用于「同 SKU 是否合并」判断。
9
+ * 数组元素先按主键排序再序列化,避免顺序差异导致误判为不同行。
10
+ */
11
+ export declare function buildProductLineFingerprint(productOptionItem?: unknown, productBundle?: unknown): string;
12
+ export declare function getSafeProductNum(num?: number): number;
13
+ /**
14
+ * removeProductFromOrder 仅传 SKU 时的通配 identity(对象上未声明选项键)。
15
+ * 与显式 `product_sku: { option: [] }` 区分:后者只匹配「无选项」行。
16
+ */
17
+ export declare function isSkuOnlyDeleteIdentity(x: BaseSalesOrderProductIdentity): boolean;
18
+ /**
19
+ * 对外部传入的商品对象做归一化(v2 composite 语义):
20
+ * - 补全可选字段默认值(未传则使用兜底值,避免后续计算时因 undefined 导致异常)
21
+ * - 对 num 调用 getSafeProductNum 做安全处理
22
+ * - 保留 _origin 供后续业务流程(如促销规则)使用
23
+ *
24
+ * 价格字段语义(metadata 权威源 + composite 派生):
25
+ * - `metadata.source_product_price`:主商品/variant 基础价(已应用报价单),**不含 option**、
26
+ * **不含折扣**。是推导 main_product_* 的起点。variant 分支优先读 `metadata.origin.variant[vid].price`。
27
+ * - `metadata.main_product_original_price`:`source + Σ(option.price × option.num)`,**含 option**、
28
+ * **不含折扣**。
29
+ * - `metadata.main_product_selling_price`:`main_product_original_price - 主商品券 per-unit amount`,
30
+ * **含 option**、**含折扣**。
31
+ * - 行级 `selling_price` = `main_product_selling_price + Σ(bundle_selling_price × num)`。
32
+ * - 行级 `original_price` = `main_product_original_price + Σ(bundle 原价 × num)`。
33
+ *
34
+ * 迁移与幂等:
35
+ * - `metadata.price_schema_version === 2` → 已新语义归一化,保留 main_product_* 原值(保留折扣)。
36
+ * - 其它情况(v1 / 缺字段 / 无 metadata)→ 按"main_product_selling_price 曾是 main-only"的旧约定
37
+ * 反推 legacyDiscount,再以新 source + options 基准重算。最终统一打上 `price_schema_version: 2`。
38
+ * - 因此多次 normalize 不会重复叠加 option/bundle。
39
+ */
40
+ export declare function normalizeOrderProduct(product: Partial<BaseSalesOrderProduct> & BaseSalesOrderProductIdentity): BaseSalesOrderProduct;
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildProductLineFingerprint = buildProductLineFingerprint;
7
+ exports.createEmptySummary = createEmptySummary;
8
+ exports.getSafeProductNum = getSafeProductNum;
9
+ exports.isSkuOnlyDeleteIdentity = isSkuOnlyDeleteIdentity;
10
+ exports.normalizeOrderProduct = normalizeOrderProduct;
11
+ var _decimal = _interopRequireDefault(require("decimal.js"));
12
+ var _utils = require("../../modules/Order/utils");
13
+ var _manualProductDiscount = require("../../modules/Order/utils/manualProductDiscount");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ /**
16
+ * 构建金额全为 0 的空 summary。
17
+ * 作为尚未计算金额时的兜底默认值,避免下游因 undefined 报错。
18
+ */
19
+ function createEmptySummary() {
20
+ return {
21
+ product_quantity: 0,
22
+ product_original_amount: '0.00',
23
+ product_amount: '0.00',
24
+ product_expect_amount: '0.00',
25
+ product_tax_fee: '0.00',
26
+ shipping_fee: '0.00',
27
+ shipping_tax_fee: '0.00',
28
+ tax_fee: '0.00',
29
+ surcharge_fee: '0.00',
30
+ discount_amount: '0.00',
31
+ deposit_amount: '0.00',
32
+ expect_amount: '0.00',
33
+ total_amount: '0.00',
34
+ amount_gap: '0.00',
35
+ rounding_amount: '0.00',
36
+ pay_service_charge_amount: '0.00'
37
+ };
38
+ }
39
+ /**
40
+ * 将选项行 / 套餐行归一成稳定 JSON,用于「同 SKU 是否合并」判断。
41
+ * 数组元素先按主键排序再序列化,避免顺序差异导致误判为不同行。
42
+ */
43
+ function buildProductLineFingerprint(productOptionItem, productBundle) {
44
+ const optArr = Array.isArray(productOptionItem) ? productOptionItem : [];
45
+ const normalizedOpts = optArr.map(item => ({
46
+ option_group_item_id: Number(item?.option_group_item_id) || 0,
47
+ option_group_id: Number(item?.option_group_id) || 0,
48
+ num: typeof item?.num === 'number' && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
49
+ price: String(item?.add_price ?? item?.price ?? '')
50
+ })).sort((p, q) => {
51
+ if (p.option_group_item_id !== q.option_group_item_id) {
52
+ return p.option_group_item_id - q.option_group_item_id;
53
+ }
54
+ if (p.option_group_id !== q.option_group_id) return p.option_group_id - q.option_group_id;
55
+ if (p.num !== q.num) return p.num - q.num;
56
+ return p.price.localeCompare(q.price);
57
+ });
58
+ const bundleArr = Array.isArray(productBundle) ? productBundle : [];
59
+ const normalizedBundles = bundleArr.map(item => ({
60
+ bundle_id: Number(item?.bundle_id ?? item?.id ?? 0) || 0,
61
+ product_id: Number(item?.product_id) || 0,
62
+ num: typeof item?.num === 'number' && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1
63
+ })).sort((p, q) => {
64
+ if (p.bundle_id !== q.bundle_id) return p.bundle_id - q.bundle_id;
65
+ if (p.product_id !== q.product_id) return p.product_id - q.product_id;
66
+ return p.num - q.num;
67
+ });
68
+ return JSON.stringify([normalizedOpts, normalizedBundles]);
69
+ }
70
+ function getSafeProductNum(num) {
71
+ if (!num || Number.isNaN(num)) return 1;
72
+ if (num < 1) return 1;
73
+ return Math.floor(num);
74
+ }
75
+
76
+ /**
77
+ * removeProductFromOrder 仅传 SKU 时的通配 identity(对象上未声明选项键)。
78
+ * 与显式 `product_sku: { option: [] }` 区分:后者只匹配「无选项」行。
79
+ */
80
+ function isSkuOnlyDeleteIdentity(x) {
81
+ if (x.identity_key) return false;
82
+ return !('product_sku' in x) && !('product_bundle' in x);
83
+ }
84
+
85
+ /**
86
+ * 对外部传入的商品对象做归一化(v2 composite 语义):
87
+ * - 补全可选字段默认值(未传则使用兜底值,避免后续计算时因 undefined 导致异常)
88
+ * - 对 num 调用 getSafeProductNum 做安全处理
89
+ * - 保留 _origin 供后续业务流程(如促销规则)使用
90
+ *
91
+ * 价格字段语义(metadata 权威源 + composite 派生):
92
+ * - `metadata.source_product_price`:主商品/variant 基础价(已应用报价单),**不含 option**、
93
+ * **不含折扣**。是推导 main_product_* 的起点。variant 分支优先读 `metadata.origin.variant[vid].price`。
94
+ * - `metadata.main_product_original_price`:`source + Σ(option.price × option.num)`,**含 option**、
95
+ * **不含折扣**。
96
+ * - `metadata.main_product_selling_price`:`main_product_original_price - 主商品券 per-unit amount`,
97
+ * **含 option**、**含折扣**。
98
+ * - 行级 `selling_price` = `main_product_selling_price + Σ(bundle_selling_price × num)`。
99
+ * - 行级 `original_price` = `main_product_original_price + Σ(bundle 原价 × num)`。
100
+ *
101
+ * 迁移与幂等:
102
+ * - `metadata.price_schema_version === 2` → 已新语义归一化,保留 main_product_* 原值(保留折扣)。
103
+ * - 其它情况(v1 / 缺字段 / 无 metadata)→ 按"main_product_selling_price 曾是 main-only"的旧约定
104
+ * 反推 legacyDiscount,再以新 source + options 基准重算。最终统一打上 `price_schema_version: 2`。
105
+ * - 因此多次 normalize 不会重复叠加 option/bundle。
106
+ */
107
+ function normalizeOrderProduct(product) {
108
+ const metadata = {
109
+ ...(product.metadata || {})
110
+ };
111
+ // 不透明 identity 契约:每条订单行必须带 identity_key。
112
+ // 调用方未传时由 SDK 自动生成 UUID,后续 update/remove 只做严格比对,避免猜测合成 key。
113
+ const resolvedIdentityKey = product.metadata?.unique_identification_number ? String(product.metadata.unique_identification_number) : product.unique_identification_number && String(product.unique_identification_number).length > 0 ? String(product.unique_identification_number) : product.identity_key && String(product.identity_key).length > 0 ? String(product.identity_key) : (0, _utils.createUuidV4)();
114
+ metadata.unique_identification_number = resolvedIdentityKey;
115
+ const priceOverride = metadata.price_override;
116
+ const originOtherBundle = metadata.origin?._extend?.other?.bundle;
117
+ let bundleInput = product.product_bundle || [];
118
+ if (priceOverride !== undefined && priceOverride !== null && priceOverride !== '' && Array.isArray(originOtherBundle) && originOtherBundle.length > 0) {
119
+ const priceById = new Map();
120
+ originOtherBundle.forEach(item => {
121
+ if (item?.id == null) return;
122
+ const unit = item.price ?? item.bundle_selling_price;
123
+ if (unit === undefined || unit === null) return;
124
+ priceById.set(String(item.id), String(unit));
125
+ });
126
+ const base = Array.isArray(bundleInput) && bundleInput.length > 0 ? bundleInput : originOtherBundle;
127
+ bundleInput = base.map(item => {
128
+ const unit = priceById.get(String(item?.id));
129
+ if (unit === undefined) return item;
130
+ return {
131
+ ...item,
132
+ price: unit,
133
+ bundle_selling_price: unit
134
+ };
135
+ });
136
+ }
137
+ const normalizedBundle = bundleInput.map(item => ({
138
+ ...item,
139
+ bundle_id: item.bundle_id ?? item.id,
140
+ bundle_product_id: item.bundle_product_id ?? item._bundle_product_id,
141
+ bundle_group_id: item.bundle_group_id ?? item.group_id,
142
+ bundle_selling_price: item.bundle_selling_price ?? item.price ?? '0.00',
143
+ price: item.price ?? item.custom_price ?? item.bundle_selling_price ?? '0.00',
144
+ price_type: item.price_type ?? item.custom_price_type ?? '',
145
+ price_type_ext: item.price_type_ext ?? item.custom_price_type_ext ?? ''
146
+ }));
147
+ const normalizedOptions = (0, _utils.normalizeProductSkuOptions)(product.product_sku?.option);
148
+ const optionSum = (0, _utils.sumOptionUnitPrice)(normalizedOptions);
149
+ const productSku = {
150
+ ...(0, _utils.ensureProductSku)(product),
151
+ option: normalizedOptions
152
+ };
153
+
154
+ // 1) 解析 source_product_price。
155
+ // 优先级:
156
+ // 1) metadata.source_product_price(v2 权威)
157
+ // 2) variantPrice(命中 variant_id,从 metadata.origin.variant[vid].price 读)
158
+ // 3) _origin.price / _origin.base_price(后端语义的基础价)
159
+ // 4) v1 兼容:无 v2 标记但存在 metadata.main_product_original_price(v1 main-only,即旧 source)
160
+ // 5) 入参 original_price(v1 addProduct 约定:original_price 为 pre-discount 基础价)
161
+ // 6) 入参 selling_price(最末兜底,新添加路径 caller 只给 selling_price)
162
+ const isV2 = metadata.price_schema_version === 2 || metadata.price_schema_version === '2';
163
+ const variantId = Number(product.product_variant_id || 0);
164
+ const variantList = variantId ? metadata?.origin?.variant : null;
165
+ const variantPrice = Array.isArray(variantList) ? variantList.find(v => Number(v?.id) === variantId)?.price : undefined;
166
+ const resolvedSource = (() => {
167
+ if (metadata.source_product_price !== undefined) {
168
+ return String(metadata.source_product_price);
169
+ }
170
+ if (variantPrice !== undefined && variantPrice !== null) {
171
+ return String(variantPrice);
172
+ }
173
+ const originPrice = product._origin?.price;
174
+ if (originPrice !== undefined && originPrice !== null) {
175
+ return String(originPrice);
176
+ }
177
+ const originBasePrice = product._origin?.base_price;
178
+ if (originBasePrice !== undefined && originBasePrice !== null) {
179
+ return String(originBasePrice);
180
+ }
181
+ if (!isV2 && metadata.main_product_original_price !== undefined) {
182
+ return String(metadata.main_product_original_price);
183
+ }
184
+ return product.original_price ?? product.selling_price ?? '0.00';
185
+ })();
186
+
187
+ // 2) 派生 main_product_original_price(含 option、不含折扣)
188
+ const mainOriginalDec = new _decimal.default(Number(resolvedSource) || 0).plus(optionSum);
189
+ const mainOriginalStr = mainOriginalDec.toDecimalPlaces(2).toFixed(2);
190
+
191
+ // 3) 派生 main_product_selling_price(含 option、含主商品折扣)
192
+ // - v2 数据:直接沿用 metadata.main_product_selling_price(保留折扣)
193
+ // - v1 metadata:main_product_selling_price 旧语义是 main-only(≈ source-level 折后价),
194
+ // 反推 legacyDiscount = main_original(旧) - main_selling(旧),再用新 main_original - legacyDiscount
195
+ // - v1 addProduct 入参:top-level selling_price < original_price 表示主商品折扣;
196
+ // 用差额作为 legacyDiscount 映射到新 main_selling
197
+ // - 其它:视为无折扣,main_selling = main_original
198
+ let mainSellingDec;
199
+ if (isV2 && metadata.main_product_selling_price != null) {
200
+ mainSellingDec = new _decimal.default(Number(metadata.main_product_selling_price) || 0);
201
+ } else if (metadata.main_product_selling_price != null && metadata.main_product_original_price != null) {
202
+ const legacyOriginal = new _decimal.default(Number(metadata.main_product_original_price) || 0);
203
+ const legacySelling = new _decimal.default(Number(metadata.main_product_selling_price) || 0);
204
+ const legacyDiscount = legacyOriginal.minus(legacySelling);
205
+ mainSellingDec = mainOriginalDec.minus(legacyDiscount);
206
+ } else if (product.original_price != null && product.selling_price != null && new _decimal.default(Number(product.original_price) || 0).greaterThan(new _decimal.default(Number(product.selling_price) || 0))) {
207
+ const topOriginal = new _decimal.default(Number(product.original_price) || 0);
208
+ const topSelling = new _decimal.default(Number(product.selling_price) || 0);
209
+ const legacyDiscount = topOriginal.minus(topSelling);
210
+ mainSellingDec = mainOriginalDec.minus(legacyDiscount);
211
+ } else {
212
+ mainSellingDec = mainOriginalDec;
213
+ }
214
+ const mainSellingStr = mainSellingDec.toDecimalPlaces(2).toFixed(2);
215
+
216
+ // 4) 落盘 metadata:三字段 + schema 版本 sentinel
217
+ metadata.source_product_price = resolvedSource;
218
+ metadata.main_product_original_price = mainOriginalStr;
219
+ metadata.main_product_selling_price = mainSellingStr;
220
+ metadata.price_schema_version = 2;
221
+
222
+ // 5) 合成行级 composite(main 已含 option,本步只叠 bundle)
223
+ const composedSellingPrice = (0, _utils.composeLinePrice)({
224
+ mainPrice: mainSellingStr,
225
+ bundle: normalizedBundle
226
+ });
227
+ const composedOriginalPrice = (0, _utils.composeLinePrice)({
228
+ mainPrice: mainOriginalStr,
229
+ bundle: normalizedBundle,
230
+ useOriginalBundle: true
231
+ });
232
+ const finalOriginalPrice = (0, _utils.resolveManualOverrideLineOriginalPrice)({
233
+ num: product.num,
234
+ metadata,
235
+ lineOriginalPrice: product.original_price
236
+ }, composedOriginalPrice);
237
+ const discountList = (0, _manualProductDiscount.ensureManualProductDiscountList)({
238
+ discountList: product.discount_list,
239
+ metadata,
240
+ originalPrice: finalOriginalPrice,
241
+ sellingPrice: composedSellingPrice,
242
+ quantity: getSafeProductNum(product.num)
243
+ });
244
+ return {
245
+ order_detail_id: product.order_detail_id || null,
246
+ product_id: product.product_id,
247
+ num: getSafeProductNum(product.num),
248
+ product_variant_id: product.product_variant_id,
249
+ product_sku: productSku,
250
+ selling_price: composedSellingPrice,
251
+ original_price: finalOriginalPrice,
252
+ tax_fee: product.tax_fee || '0.00',
253
+ is_charge_tax: product.is_charge_tax ?? 0,
254
+ discount_list: discountList,
255
+ product_bundle: normalizedBundle,
256
+ metadata,
257
+ note: product.note != null ? String(product.note) : ''
258
+ };
259
+ }
@@ -326,7 +326,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
326
326
  date: string;
327
327
  status: string;
328
328
  week: string;
329
- weekNum: 0 | 2 | 1 | 3 | 5 | 4 | 6;
329
+ weekNum: 0 | 2 | 1 | 3 | 4 | 5 | 6;
330
330
  }[]>;
331
331
  submitTimeSlot(timeSlots: TimeSliceItem): void;
332
332
  private getScheduleDataByIds;
@@ -373,7 +373,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
373
373
  };
374
374
  setOtherData(key: string, value: any): void;
375
375
  getOtherData(key: string): any;
376
- getProductTypeById(id: number): Promise<"normal" | "duration" | "session">;
376
+ getProductTypeById(id: number): Promise<"duration" | "session" | "normal">;
377
377
  /**
378
378
  * 提供给 UI 的方法,减轻 UI 层的计算压力,UI 层只需要传递 cartItemId 和 resourceCode 即返回对应的 renderList
379
379
  *
@@ -6,7 +6,7 @@ import { CartItem, ProductData } from '../../../modules';
6
6
  * 3. 格式化资源相关 格式化资源列表 --> 格式化资源 --> 获取时间切片列表 --> 判断单个时间切片是否可用 formatResources
7
7
  *
8
8
  */
9
- type DateType = Dayjs;
9
+ declare type DateType = Dayjs;
10
10
  export interface TimeSliceItem {
11
11
  start_time: string;
12
12
  end_time: string;