@pisell/pisellos 0.0.568 → 0.0.569
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
- package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
- package/dist/modules/BaseModule.d.ts +2 -2
- package/dist/modules/BaseModule.js +4 -4
- package/dist/modules/BookingContext/index.d.ts +48 -0
- package/dist/modules/BookingContext/index.js +566 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
- package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Cart/utils/cartProduct.js +26 -5
- package/dist/modules/Cart/utils/changePrice.js +27 -20
- package/dist/modules/Customer/index.d.ts +20 -0
- package/dist/modules/Customer/index.js +172 -83
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.d.ts +2 -1
- package/dist/modules/Discount/index.js +37 -9
- package/dist/modules/Discount/types.d.ts +1 -0
- package/dist/modules/OpenData/index.d.ts +8 -0
- package/dist/modules/OpenData/index.js +36 -16
- package/dist/modules/Order/index.d.ts +448 -23
- package/dist/modules/Order/index.js +5417 -561
- package/dist/modules/Order/types.d.ts +693 -88
- package/dist/modules/Order/types.js +68 -1
- package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
- package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
- package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
- package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
- package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
- package/dist/modules/Order/utils.d.ts +167 -18
- package/dist/modules/Order/utils.js +960 -165
- package/dist/modules/Payment/index.d.ts +10 -9
- package/dist/modules/Payment/index.js +465 -703
- package/dist/modules/Payment/types.d.ts +40 -16
- package/dist/modules/Payment/utils.d.ts +1 -1
- package/dist/modules/Payment/utils.js +4 -3
- package/dist/modules/Payment/walletpass.js +44 -29
- package/dist/modules/Product/types.d.ts +29 -7
- package/dist/modules/ProductList/index.d.ts +17 -13
- package/dist/modules/ProductList/index.js +184 -74
- package/dist/modules/ProductList/types.d.ts +17 -0
- package/dist/modules/Quotation/index.d.ts +22 -2
- package/dist/modules/Quotation/index.js +108 -42
- package/dist/modules/Quotation/types.d.ts +19 -0
- package/dist/modules/ResourcePlanner/index.d.ts +24 -0
- package/dist/modules/ResourcePlanner/index.js +181 -0
- package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
- package/dist/modules/ResourcePlanner/planner.js +1069 -0
- package/dist/modules/ResourcePlanner/types.d.ts +227 -0
- package/dist/modules/ResourcePlanner/types.js +1 -0
- package/dist/modules/Rules/index.d.ts +8 -10
- package/dist/modules/Rules/index.js +221 -109
- package/dist/modules/Rules/types.d.ts +14 -3
- package/dist/modules/SalesSummary/index.d.ts +23 -26
- package/dist/modules/SalesSummary/index.js +152 -46
- package/dist/modules/SalesSummary/types.d.ts +9 -1
- package/dist/modules/SalesSummary/utils.d.ts +3 -22
- package/dist/modules/SalesSummary/utils.js +803 -163
- package/dist/modules/Schedule/getDateIsInSchedule.js +14 -7
- package/dist/modules/Schedule/index.d.ts +18 -5
- package/dist/modules/Schedule/index.js +78 -24
- package/dist/modules/Schedule/types.d.ts +2 -0
- package/dist/modules/Summary/index.js +4 -3
- package/dist/modules/SurchargeList/index.d.ts +18 -0
- package/dist/modules/SurchargeList/index.js +185 -0
- package/dist/modules/SurchargeList/types.d.ts +15 -0
- package/dist/modules/SurchargeList/types.js +1 -0
- package/dist/modules/index.d.ts +3 -0
- package/dist/modules/index.js +4 -1
- package/dist/plugins/app.d.ts +2 -0
- package/dist/plugins/request.d.ts +1 -0
- package/dist/server/index.d.ts +462 -8
- package/dist/server/index.js +6112 -656
- package/dist/server/modules/floor-plan/index.d.ts +39 -0
- package/dist/server/modules/floor-plan/index.js +595 -0
- package/dist/server/modules/floor-plan/types.d.ts +43 -0
- package/dist/server/modules/floor-plan/types.js +13 -0
- package/dist/server/modules/index.d.ts +7 -2
- package/dist/server/modules/index.js +6 -0
- package/dist/server/modules/order/index.d.ts +207 -14
- package/dist/server/modules/order/index.js +2326 -379
- package/dist/server/modules/order/types.d.ts +76 -5
- package/dist/server/modules/order/types.js +14 -1
- package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
- package/dist/server/modules/order/utils/filterBookings.js +118 -11
- package/dist/server/modules/order/utils/filterOrders.js +242 -14
- package/dist/server/modules/payment/index.d.ts +28 -0
- package/dist/server/modules/payment/index.js +305 -0
- package/dist/server/modules/payment/types.d.ts +9 -0
- package/dist/server/modules/payment/types.js +1 -0
- package/dist/server/modules/products/index.d.ts +105 -14
- package/dist/server/modules/products/index.js +1393 -516
- package/dist/server/modules/products/types.d.ts +34 -1
- package/dist/server/modules/products/types.js +4 -0
- package/dist/server/modules/quotation/index.d.ts +39 -0
- package/dist/server/modules/quotation/index.js +278 -66
- package/dist/server/modules/resource/index.d.ts +2 -3
- package/dist/server/modules/resource/index.js +108 -86
- package/dist/server/modules/schedule/index.d.ts +6 -4
- package/dist/server/modules/schedule/index.js +116 -85
- package/dist/server/test.json +713 -0
- package/dist/server/types.d.ts +2 -0
- package/dist/server/utils/product.js +2 -2
- package/dist/server/utils/small-ticket.d.ts +71 -0
- package/dist/server/utils/small-ticket.js +963 -0
- package/dist/solution/BaseSales/index.d.ts +378 -0
- package/dist/solution/BaseSales/index.js +4006 -0
- package/dist/solution/BaseSales/types.d.ts +394 -0
- package/dist/solution/BaseSales/types.js +40 -0
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
- package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
- package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
- package/dist/solution/BaseSales/utils.d.ts +40 -0
- package/dist/solution/BaseSales/utils.js +263 -0
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +394 -25
- package/dist/solution/BookingTicket/index.js +2506 -443
- package/dist/solution/BookingTicket/types.d.ts +191 -6
- package/dist/solution/BookingTicket/types.js +83 -10
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
- package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
- package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
- package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
- package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
- package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
- package/dist/solution/BookingTicket/utils/cartView.js +209 -0
- package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
- package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
- package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
- package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
- package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
- package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +41 -1
- package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
- package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
- package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +11 -3
- package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
- package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
- package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
- package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
- package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
- package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
- package/dist/solution/Checkout/index.d.ts +1 -0
- package/dist/solution/Checkout/index.js +25 -34
- package/dist/solution/Checkout/utils/index.js +4 -4
- package/dist/solution/RegisterAndLogin/config.js +2 -10
- package/dist/solution/Sales/index.d.ts +50 -5
- package/dist/solution/Sales/index.js +484 -92
- package/dist/solution/Sales/types.d.ts +26 -2
- package/dist/solution/ScanOrder/index.d.ts +27 -21
- package/dist/solution/ScanOrder/index.js +499 -434
- package/dist/solution/ScanOrder/types.d.ts +33 -11
- package/dist/solution/ScanOrder/types.js +4 -5
- package/dist/solution/ScanOrder/utils.d.ts +4 -1
- package/dist/solution/ScanOrder/utils.js +109 -34
- package/dist/solution/ShopDiscount/index.js +4 -4
- package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
- package/dist/solution/UnifiedBookingSales/index.js +1871 -0
- package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
- package/dist/solution/UnifiedBookingSales/types.js +11 -0
- package/dist/solution/VenueBooking/index.d.ts +29 -20
- package/dist/solution/VenueBooking/index.js +301 -213
- package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
- package/dist/solution/index.d.ts +2 -0
- package/dist/solution/index.js +3 -1
- package/dist/types/index.d.ts +11 -1
- package/lib/model/strategy/adapter/promotion/evaluator.js +3 -2
- package/lib/model/strategy/adapter/walletPass/utils.js +6 -4
- package/lib/modules/BaseModule.d.ts +2 -2
- package/lib/modules/BaseModule.js +4 -4
- package/lib/modules/BookingContext/index.d.ts +48 -0
- package/lib/modules/BookingContext/index.js +390 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +48 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +286 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +148 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +242 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +63 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +35 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +126 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +78 -0
- package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +29 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +330 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +419 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +161 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +114 -0
- package/lib/modules/Cart/utils/cartProduct.js +27 -5
- package/lib/modules/Cart/utils/changePrice.js +20 -14
- package/lib/modules/Customer/index.d.ts +20 -0
- package/lib/modules/Customer/index.js +63 -10
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.d.ts +2 -1
- package/lib/modules/Discount/index.js +18 -2
- package/lib/modules/Discount/types.d.ts +1 -0
- package/lib/modules/OpenData/index.d.ts +8 -0
- package/lib/modules/OpenData/index.js +21 -3
- package/lib/modules/Order/index.d.ts +448 -23
- package/lib/modules/Order/index.js +3641 -308
- package/lib/modules/Order/types.d.ts +693 -88
- package/lib/modules/Order/types.js +55 -1
- package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
- package/lib/modules/Order/utils/bundleDiscountHydration.js +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
- package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
- package/lib/modules/Order/utils/orderCollectionIdentity.js +353 -0
- package/lib/modules/Order/utils.d.ts +167 -18
- package/lib/modules/Order/utils.js +974 -138
- package/lib/modules/Payment/index.d.ts +10 -9
- package/lib/modules/Payment/index.js +30 -124
- package/lib/modules/Payment/types.d.ts +40 -16
- package/lib/modules/Payment/utils.d.ts +1 -1
- package/lib/modules/Payment/utils.js +4 -3
- package/lib/modules/Payment/walletpass.js +16 -6
- package/lib/modules/Product/types.d.ts +29 -7
- package/lib/modules/ProductList/index.d.ts +17 -13
- package/lib/modules/ProductList/index.js +92 -51
- package/lib/modules/ProductList/types.d.ts +17 -0
- package/lib/modules/Quotation/index.d.ts +22 -2
- package/lib/modules/Quotation/index.js +76 -20
- package/lib/modules/Quotation/types.d.ts +19 -0
- package/lib/modules/ResourcePlanner/index.d.ts +24 -0
- package/lib/modules/ResourcePlanner/index.js +147 -0
- package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
- package/lib/modules/ResourcePlanner/planner.js +895 -0
- package/lib/modules/ResourcePlanner/types.d.ts +227 -0
- package/lib/modules/ResourcePlanner/types.js +5 -0
- package/lib/modules/Rules/index.d.ts +8 -10
- package/lib/modules/Rules/index.js +152 -60
- package/lib/modules/Rules/types.d.ts +14 -3
- package/lib/modules/SalesSummary/index.d.ts +23 -26
- package/lib/modules/SalesSummary/index.js +84 -16
- package/lib/modules/SalesSummary/types.d.ts +9 -1
- package/lib/modules/SalesSummary/utils.d.ts +3 -22
- package/lib/modules/SalesSummary/utils.js +616 -111
- package/lib/modules/Schedule/getDateIsInSchedule.js +14 -7
- package/lib/modules/Schedule/index.d.ts +18 -5
- package/lib/modules/Schedule/index.js +49 -14
- package/lib/modules/Schedule/types.d.ts +2 -0
- package/lib/modules/Summary/index.js +2 -2
- package/lib/modules/SurchargeList/index.d.ts +18 -0
- package/lib/modules/SurchargeList/index.js +95 -0
- package/lib/modules/SurchargeList/types.d.ts +15 -0
- package/lib/modules/SurchargeList/types.js +5 -0
- package/lib/modules/index.d.ts +3 -0
- package/lib/modules/index.js +33 -0
- package/lib/plugins/app.d.ts +2 -0
- package/lib/plugins/request.d.ts +1 -0
- package/lib/server/index.d.ts +462 -8
- package/lib/server/index.js +3901 -205
- package/lib/server/modules/floor-plan/index.d.ts +39 -0
- package/lib/server/modules/floor-plan/index.js +306 -0
- package/lib/server/modules/floor-plan/types.d.ts +43 -0
- package/lib/server/modules/floor-plan/types.js +19 -0
- package/lib/server/modules/index.d.ts +7 -2
- package/lib/server/modules/index.js +21 -0
- package/lib/server/modules/order/index.d.ts +207 -14
- package/lib/server/modules/order/index.js +1324 -141
- package/lib/server/modules/order/types.d.ts +76 -5
- package/lib/server/modules/order/types.js +11 -1
- package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
- package/lib/server/modules/order/utils/filterBookings.js +119 -11
- package/lib/server/modules/order/utils/filterOrders.js +238 -13
- package/lib/server/modules/payment/index.d.ts +28 -0
- package/lib/server/modules/payment/index.js +168 -0
- package/lib/server/modules/payment/types.d.ts +9 -0
- package/lib/server/modules/payment/types.js +5 -0
- package/lib/server/modules/products/index.d.ts +105 -14
- package/lib/server/modules/products/index.js +588 -97
- package/lib/server/modules/products/types.d.ts +34 -1
- package/lib/server/modules/products/types.js +3 -0
- package/lib/server/modules/quotation/index.d.ts +39 -0
- package/lib/server/modules/quotation/index.js +145 -1
- package/lib/server/modules/resource/index.d.ts +2 -3
- package/lib/server/modules/resource/index.js +71 -45
- package/lib/server/modules/schedule/index.d.ts +6 -4
- package/lib/server/modules/schedule/index.js +55 -44
- package/lib/server/test.json +713 -0
- package/lib/server/types.d.ts +2 -0
- package/lib/server/utils/product.js +2 -2
- package/lib/server/utils/small-ticket.d.ts +71 -0
- package/lib/server/utils/small-ticket.js +926 -0
- package/lib/solution/BaseSales/index.d.ts +378 -0
- package/lib/solution/BaseSales/index.js +2367 -0
- package/lib/solution/BaseSales/types.d.ts +394 -0
- package/lib/solution/BaseSales/types.js +47 -0
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +1155 -0
- package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +140 -0
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +231 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +215 -0
- package/lib/solution/BaseSales/utils.d.ts +40 -0
- package/lib/solution/BaseSales/utils.js +259 -0
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +394 -25
- package/lib/solution/BookingTicket/index.js +1350 -76
- package/lib/solution/BookingTicket/types.d.ts +191 -6
- package/lib/solution/BookingTicket/types.js +71 -10
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +353 -0
- package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +94 -0
- package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
- package/lib/solution/BookingTicket/utils/bookingStatus.js +136 -0
- package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
- package/lib/solution/BookingTicket/utils/cartView.js +200 -0
- package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
- package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +35 -0
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +387 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +220 -0
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +24 -3
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +64 -0
- package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +4 -2
- package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
- package/lib/solution/BookingTicket/utils/scan/index.js +14 -2
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +115 -0
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +83 -0
- package/lib/solution/Checkout/index.d.ts +1 -0
- package/lib/solution/Checkout/index.js +18 -19
- package/lib/solution/Checkout/utils/index.js +4 -4
- package/lib/solution/RegisterAndLogin/config.js +2 -10
- package/lib/solution/Sales/index.d.ts +50 -5
- package/lib/solution/Sales/index.js +296 -39
- package/lib/solution/Sales/types.d.ts +26 -2
- package/lib/solution/ScanOrder/index.d.ts +27 -21
- package/lib/solution/ScanOrder/index.js +144 -103
- package/lib/solution/ScanOrder/types.d.ts +33 -11
- package/lib/solution/ScanOrder/types.js +4 -5
- package/lib/solution/ScanOrder/utils.d.ts +4 -1
- package/lib/solution/ScanOrder/utils.js +98 -26
- package/lib/solution/ShopDiscount/index.js +3 -3
- package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
- package/lib/solution/UnifiedBookingSales/index.js +1050 -0
- package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
- package/lib/solution/UnifiedBookingSales/types.js +14 -0
- package/lib/solution/VenueBooking/index.d.ts +29 -20
- package/lib/solution/VenueBooking/index.js +169 -94
- package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +9 -3
- package/lib/solution/index.d.ts +2 -0
- package/lib/solution/index.js +22 -0
- package/lib/types/index.d.ts +11 -1
- package/package.json +1 -1
- package/dist/solution/Checkout/appointmentDemo.json +0 -1
- package/lib/solution/Checkout/appointmentDemo.json +0 -1
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildCacheItemFromCartDetail = buildCacheItemFromCartDetail;
|
|
7
|
+
exports.buildCacheItemFromDetail = buildCacheItemFromDetail;
|
|
8
|
+
exports.buildRequiresDetailPayload = buildRequiresDetailPayload;
|
|
9
|
+
exports.decideAddProduct = decideAddProduct;
|
|
10
|
+
exports.decideAfterDetail = decideAfterDetail;
|
|
11
|
+
exports.decideAutoClose = decideAutoClose;
|
|
12
|
+
exports.getIsEject = getIsEject;
|
|
13
|
+
exports.getIsOnlySession = getIsOnlySession;
|
|
14
|
+
exports.prepareBookingCacheItem = prepareBookingCacheItem;
|
|
15
|
+
exports.transformDetailToProductAndBooking = transformDetailToProductAndBooking;
|
|
16
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
17
|
+
var _BookingContext = require("../../../modules/BookingContext");
|
|
18
|
+
var _transformBaseProductToOrderProduct = require("../../BaseSales/utils/transformBaseProductToOrderProduct");
|
|
19
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
+
/**
|
|
21
|
+
* cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
|
|
22
|
+
*
|
|
23
|
+
* 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
|
|
24
|
+
* 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(门禁:`getIsAutoClose` on prepared cacheItem)
|
|
25
|
+
* 3. `add`:两关均通过,直接 transform + 加车
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** 资源 / 时间编辑抽屉所需的最小 payload。 */
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 第一段:是否需要打开规格 / SKU 详情弹窗(与 addService `handleSelectProduct` 一致,不用 `getIsEject` 做门禁)。
|
|
32
|
+
*/
|
|
33
|
+
function needsSpecDetailModal(item) {
|
|
34
|
+
if (item?.open_sold_weight) return true;
|
|
35
|
+
if (item?.isOpenDetailModal) return true;
|
|
36
|
+
if (!item?.cartDetailValue) return true;
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 第二段:预约商品是否仍需打开资源 / 时间编辑(与 info2 `cacheItem.autoClose` 等价)。
|
|
42
|
+
*/
|
|
43
|
+
function needsBookingEdit(cacheItem, ctx) {
|
|
44
|
+
if (isNormalBookingProduct(cacheItem)) return false;
|
|
45
|
+
const isAutoAllocationOn = ctx?.isAutoAllocationOn || (() => true);
|
|
46
|
+
return !(0, _BookingContext.getIsAutoClose)(cacheItem, isAutoAllocationOn);
|
|
47
|
+
}
|
|
48
|
+
function buildRequiresBookingEditPayload(cacheItem, ctx) {
|
|
49
|
+
return {
|
|
50
|
+
cacheItem,
|
|
51
|
+
customerId: ctx?.customerId,
|
|
52
|
+
date: typeof ctx?.date === 'string' ? ctx.date : null
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 加车主决策:对齐 `handleSelectProduct` 两段分支。
|
|
58
|
+
*/
|
|
59
|
+
function decideAddProduct(item, ctx) {
|
|
60
|
+
const derivedCtx = withDerivedBookingCtx(ctx);
|
|
61
|
+
if (needsSpecDetailModal(item)) {
|
|
62
|
+
return {
|
|
63
|
+
action: 'requiresDetail',
|
|
64
|
+
payload: buildRequiresDetailPayload(item, derivedCtx)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const cacheItem = prepareBookingCacheItem(buildCacheItemFromCartDetail(item, derivedCtx), derivedCtx);
|
|
68
|
+
if (needsBookingEdit(cacheItem, derivedCtx)) {
|
|
69
|
+
return {
|
|
70
|
+
action: 'requiresBookingEdit',
|
|
71
|
+
cacheItem,
|
|
72
|
+
payload: buildRequiresBookingEditPayload(cacheItem, derivedCtx)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
action: 'add',
|
|
77
|
+
cacheItem
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
|
|
83
|
+
*/
|
|
84
|
+
function decideAfterDetail(cacheItem, ctx) {
|
|
85
|
+
const derivedCtx = withDerivedBookingCtx(ctx);
|
|
86
|
+
const extended = prepareBookingCacheItem(cacheItem, derivedCtx);
|
|
87
|
+
if (needsBookingEdit(extended, derivedCtx)) {
|
|
88
|
+
return {
|
|
89
|
+
action: 'requiresBookingEdit',
|
|
90
|
+
cacheItem: extended,
|
|
91
|
+
payload: buildRequiresBookingEditPayload(extended, derivedCtx)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
action: 'add',
|
|
96
|
+
cacheItem: extended
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
function isNormalBookingProduct(item) {
|
|
105
|
+
return !(0, _BookingContext.isBookingProduct)(item);
|
|
106
|
+
}
|
|
107
|
+
function hasPreparedBookingExtend(cacheItem) {
|
|
108
|
+
// 场次/时间已写入但资源仍未选中时,须继续走 getProductExtend(对齐 info2 必定调用 getProductExtend)。
|
|
109
|
+
if ((0, _BookingContext.productNeedsResourceExtend)(cacheItem) && !(0, _BookingContext.hasActualResourceSelection)(cacheItem)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
const ext = cacheItem?._extend || {};
|
|
113
|
+
const hasResourceState = Boolean((0, _BookingContext.hasActualResourceSelection)(cacheItem) && ext.capacity && (ext.endDate || ext.end_date));
|
|
114
|
+
const hasSessionState = Boolean((0, _BookingContext.isSessionProduct)(cacheItem) && ext.other?.session && ext.start_time && (ext.end_time || ext.endDate));
|
|
115
|
+
const hasMultiDayState = Boolean(isNormalBookingProduct(cacheItem) === false && isMultiDayLike(cacheItem));
|
|
116
|
+
const hasExplicitTimeState = Boolean(ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate));
|
|
117
|
+
return hasResourceState || hasSessionState || hasMultiDayState || hasExplicitTimeState;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** 弹窗 / Host 使用的日历日,与 ticketBooking `state.date.format('YYYY-MM-DD')` 对齐。 */
|
|
121
|
+
function formatBookingDateForUI(date) {
|
|
122
|
+
if (date == null || date === '') return null;
|
|
123
|
+
const parsed = (0, _dayjs.default)(date);
|
|
124
|
+
return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** 补齐 presetStartTime(decideAutoClose / transform 与 BookingTicket.buildAddProductCtx 共用)。 */
|
|
128
|
+
function withDerivedBookingCtx(ctx) {
|
|
129
|
+
if (!ctx) return {};
|
|
130
|
+
return {
|
|
131
|
+
...ctx,
|
|
132
|
+
presetStartTime: ctx.presetStartTime ?? (0, _BookingContext.derivePresetStartTimeFromDate)(ctx.date)
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function isMultiDayLike(cacheItem) {
|
|
136
|
+
const ext = cacheItem?._extend || {};
|
|
137
|
+
return Boolean(cacheItem?.duration?.type === 'days' && ext.duration && ext.start_date && ext.end_date);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* 统一补齐预约商品的运行态字段。
|
|
142
|
+
*
|
|
143
|
+
* 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
|
|
144
|
+
* `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
|
|
145
|
+
*/
|
|
146
|
+
function prepareBookingCacheItem(cacheItem, ctx) {
|
|
147
|
+
if (isNormalBookingProduct(cacheItem) || hasPreparedBookingExtend(cacheItem)) {
|
|
148
|
+
return cacheItem;
|
|
149
|
+
}
|
|
150
|
+
return (0, _BookingContext.getProductExtend)({
|
|
151
|
+
cacheItem,
|
|
152
|
+
ctx: withDerivedBookingCtx(ctx),
|
|
153
|
+
isDisabledTime: true
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function decideAutoClose(item, ctx) {
|
|
157
|
+
const decision = decideAddProduct(item, ctx);
|
|
158
|
+
if (decision.action === 'add') {
|
|
159
|
+
return {
|
|
160
|
+
autoClose: true,
|
|
161
|
+
cacheItem: decision.cacheItem
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (decision.action === 'requiresBookingEdit') {
|
|
165
|
+
return {
|
|
166
|
+
autoClose: false,
|
|
167
|
+
cacheItem: decision.cacheItem
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
autoClose: false
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
|
|
177
|
+
*/
|
|
178
|
+
function getIsEject(item, type = 'select') {
|
|
179
|
+
const isSession = (0, _BookingContext.isSessionProduct)(item);
|
|
180
|
+
const isSoldByWeight = Boolean(item?.open_sold_weight);
|
|
181
|
+
const need = type === 'detail' || (item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0 || isSession || isSoldByWeight;
|
|
182
|
+
return need ? 1 : 0;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** 仅 session 商品(且没有 variant/option/package)。 */
|
|
186
|
+
function getIsOnlySession(item) {
|
|
187
|
+
const isSession = (0, _BookingContext.isSessionProduct)(item);
|
|
188
|
+
return !((item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0) && isSession;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
|
|
193
|
+
*/
|
|
194
|
+
function buildRequiresDetailPayload(item, ctx) {
|
|
195
|
+
const isOnlySession = getIsOnlySession(item);
|
|
196
|
+
const isEject = getIsEject(item, ctx?.type || 'select');
|
|
197
|
+
return {
|
|
198
|
+
item,
|
|
199
|
+
showConfig: {
|
|
200
|
+
option: (item?.option_group_count || 0) > 0,
|
|
201
|
+
session: (0, _BookingContext.isSessionProduct)(item),
|
|
202
|
+
variant: (item?.is_variant || 0) > 0,
|
|
203
|
+
package: (item?.bundle_group_count || 0) > 0,
|
|
204
|
+
number: Boolean(item?.open_sold_weight)
|
|
205
|
+
},
|
|
206
|
+
isOnlySession,
|
|
207
|
+
isEject: isEject ? 1 : 0,
|
|
208
|
+
customerId: ctx?.customerId,
|
|
209
|
+
date: formatBookingDateForUI(ctx?.date),
|
|
210
|
+
productData: item
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
|
|
216
|
+
* 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
|
|
217
|
+
*/
|
|
218
|
+
function buildCacheItemFromCartDetail(item, ctx) {
|
|
219
|
+
const cartDetailValue = item.cartDetailValue || {};
|
|
220
|
+
const other = JSON.parse(JSON.stringify(cartDetailValue || {}));
|
|
221
|
+
other.session = cartDetailValue.session;
|
|
222
|
+
/** 列表/接口可能只带 product_id 不带 id,勿用 item.id 覆盖掉已有 product_id */
|
|
223
|
+
const resolvedId = item.id ?? item.product_id;
|
|
224
|
+
let extend = (0, _BookingContext.applySessionTimesToExtend)(item, {
|
|
225
|
+
start_date: ctx?.date || undefined,
|
|
226
|
+
/** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
|
|
227
|
+
quantity: ctx?.quantity ?? cartDetailValue?.quantity ?? 1,
|
|
228
|
+
product_name: item.title,
|
|
229
|
+
other,
|
|
230
|
+
isNormalProduct: !(0, _BookingContext.isBookingProduct)(item),
|
|
231
|
+
price: item?._extend?.price ?? item?.price
|
|
232
|
+
}, {
|
|
233
|
+
date: ctx?.date
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
...item,
|
|
237
|
+
id: resolvedId,
|
|
238
|
+
product_id: resolvedId,
|
|
239
|
+
_key: cartDetailValue.key,
|
|
240
|
+
_extend: extend,
|
|
241
|
+
new: 1
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
|
|
247
|
+
*
|
|
248
|
+
* 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
|
|
249
|
+
* 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
|
|
250
|
+
*/
|
|
251
|
+
function buildCacheItemFromDetail(item, detailResult, ctx) {
|
|
252
|
+
const _currentItem = detailResult.detail || item;
|
|
253
|
+
const _detail = _currentItem;
|
|
254
|
+
const detailExtend = _detail?._extend || {};
|
|
255
|
+
const other = JSON.parse(JSON.stringify(detailResult.e || {}));
|
|
256
|
+
other.session = detailResult.e?.session;
|
|
257
|
+
const resolvedId = _currentItem.id ?? _currentItem.product_id;
|
|
258
|
+
const mergedItem = {
|
|
259
|
+
...item,
|
|
260
|
+
..._detail,
|
|
261
|
+
extension_type: _detail.extension_type ?? item.extension_type
|
|
262
|
+
};
|
|
263
|
+
const runtimeExtend = (0, _BookingContext.applySessionTimesToExtend)(mergedItem, {
|
|
264
|
+
start_date: ctx?.date || detailExtend.start_date || undefined,
|
|
265
|
+
quantity: ctx?.quantity ?? detailResult.e?.quantity ?? detailExtend.quantity ?? 1,
|
|
266
|
+
price: detailExtend.price ?? _detail?.price ?? item?.price,
|
|
267
|
+
product_name: _currentItem.title ?? detailExtend.product_name,
|
|
268
|
+
other,
|
|
269
|
+
isNormalProduct: !(0, _BookingContext.isBookingProduct)(mergedItem)
|
|
270
|
+
}, {
|
|
271
|
+
date: ctx?.date
|
|
272
|
+
});
|
|
273
|
+
const extend = {
|
|
274
|
+
...detailExtend,
|
|
275
|
+
...runtimeExtend,
|
|
276
|
+
other
|
|
277
|
+
};
|
|
278
|
+
const note = detailExtend.note ?? _detail?.note;
|
|
279
|
+
return {
|
|
280
|
+
..._detail,
|
|
281
|
+
id: resolvedId,
|
|
282
|
+
product_id: resolvedId,
|
|
283
|
+
extension_type: mergedItem.extension_type,
|
|
284
|
+
_key: detailResult.e?.key,
|
|
285
|
+
...(note != null && note !== '' ? {
|
|
286
|
+
note: String(note)
|
|
287
|
+
} : {}),
|
|
288
|
+
_extend: extend,
|
|
289
|
+
new: 1
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
|
|
295
|
+
*
|
|
296
|
+
* - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
|
|
297
|
+
* - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
|
|
298
|
+
* - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
|
|
299
|
+
*/
|
|
300
|
+
function transformDetailToProductAndBooking(cacheItem, ctx) {
|
|
301
|
+
const preparedCacheItem = prepareBookingCacheItem(cacheItem, withDerivedBookingCtx(ctx));
|
|
302
|
+
const payload = buildBasePayloadFromCacheItem(preparedCacheItem, ctx);
|
|
303
|
+
const productInput = (0, _transformBaseProductToOrderProduct.transformBaseProductToOrderProduct)({
|
|
304
|
+
payload,
|
|
305
|
+
sourceProduct: preparedCacheItem
|
|
306
|
+
});
|
|
307
|
+
if (!productInput) {
|
|
308
|
+
throw new Error('[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)');
|
|
309
|
+
}
|
|
310
|
+
const isNormalProduct = isNormalBookingProduct(preparedCacheItem);
|
|
311
|
+
let booking;
|
|
312
|
+
if (!isNormalProduct) {
|
|
313
|
+
booking = (0, _BookingContext.cacheItemToBookingInput)(preparedCacheItem, {
|
|
314
|
+
bookingConfig: ctx?.bookingConfig
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
product: productInput,
|
|
319
|
+
booking,
|
|
320
|
+
cacheItem: preparedCacheItem
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* 把 cacheItem._extend.other 中的字段 + 顶层运行态拼成 `BaseProductDetailPayload`。
|
|
326
|
+
*/
|
|
327
|
+
function buildBasePayloadFromCacheItem(cacheItem, ctx) {
|
|
328
|
+
const other = cacheItem?._extend?.other || {};
|
|
329
|
+
const quantity = ctx?.quantity != null && ctx.quantity > 0 ? ctx.quantity : cacheItem?._extend?.quantity ?? 1;
|
|
330
|
+
const resolvedPid = cacheItem?.product_id ?? cacheItem?.id;
|
|
331
|
+
const extend = cacheItem?._extend || {};
|
|
332
|
+
return {
|
|
333
|
+
id: cacheItem?.id ?? cacheItem?.product_id,
|
|
334
|
+
product_id: resolvedPid,
|
|
335
|
+
variant_id: other?.product_variant_id ?? other?.variant_id ?? 0,
|
|
336
|
+
quantity,
|
|
337
|
+
option: other?.option || [],
|
|
338
|
+
bundle: other?.bundle || extend?.skuValue?.bundle || extend?._skuValue?.bundle || [],
|
|
339
|
+
unique: other?.unique,
|
|
340
|
+
session: other?.session,
|
|
341
|
+
note: extend?.note,
|
|
342
|
+
price: extend?.price ?? cacheItem?.price,
|
|
343
|
+
selling_price: extend?.price ?? cacheItem?.price,
|
|
344
|
+
line_total: extend?.total,
|
|
345
|
+
total: extend?.total,
|
|
346
|
+
origin_total: extend?.origin_total,
|
|
347
|
+
price_override: extend?.priceOverride,
|
|
348
|
+
bundle_edit: extend?.bundle_edit,
|
|
349
|
+
discount_reason: extend?.discount_reason,
|
|
350
|
+
discount_list: cacheItem?.discount_list,
|
|
351
|
+
_extend: extend
|
|
352
|
+
};
|
|
353
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { BaseSalesOrderProduct } from '../../BaseSales';
|
|
2
|
+
import type { ISalesBooking } from '../../BaseSales/utils/parseSalesResponse';
|
|
3
|
+
export interface BuildAddTimeCurrentItemParams {
|
|
4
|
+
booking: ISalesBooking;
|
|
5
|
+
product: BaseSalesOrderProduct | null;
|
|
6
|
+
productsByUid?: Record<string, {
|
|
7
|
+
origin?: Record<string, any>;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolveBookingCanAddTimeParams extends BuildAddTimeCurrentItemParams {
|
|
11
|
+
addTimeProducts?: any[];
|
|
12
|
+
bookingConfig?: Record<string, any> | null;
|
|
13
|
+
shopOpeningHours?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildAddTimeCurrentItem({ booking, product, productsByUid, }: BuildAddTimeCurrentItemParams): Record<string, any> | null;
|
|
22
|
+
/**
|
|
23
|
+
* 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveBookingCanAddTime(params: ResolveBookingCanAddTimeParams): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* 判断一个加时商品是否适用于当前预约商品。
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
|
|
34
|
+
*/
|
|
35
|
+
export declare function isUsableAddTimeProduct(addTime: any, currentItem: Record<string, any> | null | undefined, shopOpeningHours?: string): boolean;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildAddTimeCurrentItem = buildAddTimeCurrentItem;
|
|
7
|
+
exports.isUsableAddTimeProduct = isUsableAddTimeProduct;
|
|
8
|
+
exports.resolveBookingCanAddTime = resolveBookingCanAddTime;
|
|
9
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
|
+
var _lodashEs = require("lodash-es");
|
|
11
|
+
var _serviceTimes = require("../../../modules/BookingContext/utils/serviceTimes");
|
|
12
|
+
var _timeSlices = require("../../../modules/BookingContext/utils/timeSlices");
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
/**
|
|
15
|
+
* 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
|
|
19
|
+
*/
|
|
20
|
+
function buildAddTimeCurrentItem({
|
|
21
|
+
booking,
|
|
22
|
+
product,
|
|
23
|
+
productsByUid
|
|
24
|
+
}) {
|
|
25
|
+
if (!booking || !product) return null;
|
|
26
|
+
const uid = product.metadata?.unique_identification_number;
|
|
27
|
+
const origin = uid ? productsByUid?.[String(uid)]?.origin : undefined;
|
|
28
|
+
const sourceProduct = origin || booking.product || {};
|
|
29
|
+
const startAt = booking.start_date && booking.start_time ? `${booking.start_date} ${booking.start_time}` : booking.start_date;
|
|
30
|
+
const endAt = booking.end_date && booking.end_time ? `${booking.end_date} ${booking.end_time}` : booking.end_date;
|
|
31
|
+
return {
|
|
32
|
+
...sourceProduct,
|
|
33
|
+
...booking.product,
|
|
34
|
+
product_id: product.product_id ?? sourceProduct.product_id ?? sourceProduct.id,
|
|
35
|
+
id: sourceProduct.id ?? product.product_id,
|
|
36
|
+
collection: sourceProduct.collection || booking.product?.collection || [],
|
|
37
|
+
duration: sourceProduct.duration || booking.duration,
|
|
38
|
+
_extend: {
|
|
39
|
+
...(sourceProduct._extend || {}),
|
|
40
|
+
startDate: startAt ? (0, _dayjs.default)(startAt) : undefined,
|
|
41
|
+
endDate: endAt ? (0, _dayjs.default)(endAt) : undefined,
|
|
42
|
+
start_date: booking.start_date,
|
|
43
|
+
end_date: booking.end_date,
|
|
44
|
+
start_time: booking.start_time,
|
|
45
|
+
end_time: booking.end_time,
|
|
46
|
+
sub_type: booking.sub_type
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
|
|
56
|
+
*/
|
|
57
|
+
function resolveBookingCanAddTime(params) {
|
|
58
|
+
const quickTime = params.bookingConfig?.config?.information_tab?.appointment_card?.quick_time;
|
|
59
|
+
if (quickTime !== undefined && quickTime !== 1) return false;
|
|
60
|
+
const currentItem = buildAddTimeCurrentItem(params);
|
|
61
|
+
if (!currentItem || (0, _serviceTimes.isMultiDayProduct)(currentItem)) return false;
|
|
62
|
+
return (params.addTimeProducts || []).some(item => isUsableAddTimeProduct(item?.add_time, currentItem, params.shopOpeningHours));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 判断一个加时商品是否适用于当前预约商品。
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
|
|
70
|
+
*/
|
|
71
|
+
function isUsableAddTimeProduct(addTime, currentItem, shopOpeningHours) {
|
|
72
|
+
if (!addTime || !currentItem) return false;
|
|
73
|
+
if (addTime.additional_time_options === 'unlimited') {
|
|
74
|
+
const startDate = (0, _dayjs.default)(currentItem._extend?.startDate);
|
|
75
|
+
const endDate = (0, _dayjs.default)(currentItem._extend?.endDate);
|
|
76
|
+
if (!startDate.isValid() || !endDate.isValid()) return false;
|
|
77
|
+
const maxEndDate = (0, _timeSlices.getEndDate)(startDate, 'flexible', '', shopOpeningHours);
|
|
78
|
+
if (endDate.isAfter(maxEndDate)) return false;
|
|
79
|
+
}
|
|
80
|
+
const relationProduct = addTime.relation_product || {};
|
|
81
|
+
const type = relationProduct.type;
|
|
82
|
+
const products = Array.isArray(relationProduct.products) ? relationProduct.products : [];
|
|
83
|
+
if (type === 'product_all') return true;
|
|
84
|
+
if (type === 'product_collection') {
|
|
85
|
+
return Boolean((0, _lodashEs.intersectionBy)(products.map(item => ({
|
|
86
|
+
...item,
|
|
87
|
+
id: item.product_collection_id
|
|
88
|
+
})), currentItem.collection || [], 'id').length);
|
|
89
|
+
}
|
|
90
|
+
if (type === 'products') {
|
|
91
|
+
return products.some(item => item.product_id == currentItem.product_id);
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BookingTicket - 预约状态相关纯函数。
|
|
3
|
+
*
|
|
4
|
+
* 该文件不持有任何运行时引用(无 request / store / effects),
|
|
5
|
+
* 只做字段解析与本地数组的原地写入/回滚,便于独立单测与未来其他
|
|
6
|
+
* booking 写操作(editBooking / cancelBooking 等)复用。
|
|
7
|
+
*
|
|
8
|
+
* 设计依据:参考 .cursor/rules/data-field-semantics.mdc,
|
|
9
|
+
* 字段含义严格对齐既有协议(OrderTempOrder / parseSalesResponse),
|
|
10
|
+
* 不发明等价关系。
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* 子预约状态机转移动作(POST /schedule/booking-transition/{schedule_event_id})。
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* await bookingTicket.transitionChildBooking({
|
|
17
|
+
* schedule_event_id: 301,
|
|
18
|
+
* action: 'confirm',
|
|
19
|
+
* });
|
|
20
|
+
*/
|
|
21
|
+
export type BookingTransitionAction = 'confirm' | 'reject' | 'arrive' | 'start' | 'complete' | 'cancel' | 'no_show' | 'reschedule';
|
|
22
|
+
/** 子预约状态转移入参 */
|
|
23
|
+
export interface TransitionChildBookingParams {
|
|
24
|
+
schedule_event_id: number | string;
|
|
25
|
+
action: BookingTransitionAction;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 从 tempOrder 解析用于调用 appointment-status 接口的 schedule id。
|
|
29
|
+
*
|
|
30
|
+
* 优先级:
|
|
31
|
+
* 1. `tempOrder.metadata.appointment_booking_parent_schedule_id`
|
|
32
|
+
* 2. `tempOrder.bookings` 中 `parent_id === 0` 的 `schedule_event_id`
|
|
33
|
+
*
|
|
34
|
+
* 都缺失时返回 null,由调用方决定如何抛错。
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveScheduleId(tempOrder: {
|
|
37
|
+
bookings?: any[];
|
|
38
|
+
metadata?: Record<string, any> | null;
|
|
39
|
+
} | null | undefined): number | string | null;
|
|
40
|
+
/**
|
|
41
|
+
* 原地把所有 bookings 的 `appointment_status` 覆盖为新值,
|
|
42
|
+
* 返回原 status 数组用于回滚(顺序与 bookings 一一对应)。
|
|
43
|
+
*
|
|
44
|
+
* - 元素为 null/undefined 时跳过写入(但占位仍保留以保证回滚下标对齐)
|
|
45
|
+
* - 不会克隆 booking 对象,保持与 OrderModule.tempOrder 引用一致
|
|
46
|
+
*/
|
|
47
|
+
export declare function applyBookingsStatus(bookings: any[] | null | undefined, status: string): Array<string | undefined>;
|
|
48
|
+
/**
|
|
49
|
+
* 把 applyBookingsStatus 的返回值原地写回,撤销乐观更新。
|
|
50
|
+
* 长度不一致时按较短一方对齐(防御式编程,正常路径不会发生)。
|
|
51
|
+
*/
|
|
52
|
+
export declare function restoreBookingsStatus(bookings: any[] | null | undefined, previous: Array<string | undefined>): void;
|
|
53
|
+
/**
|
|
54
|
+
* 将状态机 action 解析为转移后的 `appointment_status`。
|
|
55
|
+
*
|
|
56
|
+
* `reschedule` 暂未在状态矩阵启用,返回 null 表示跳过乐观更新。
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* resolveStatusAfterTransition('confirm'); // 'confirmed'
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveStatusAfterTransition(action: BookingTransitionAction): string | null;
|
|
62
|
+
/**
|
|
63
|
+
* 在 bookings 中按 `schedule_event_id` 定位子预约并乐观写入 `appointment_status`。
|
|
64
|
+
*
|
|
65
|
+
* @returns 写入前的 status;未命中时返回 undefined(调用方跳过回滚)
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* const prev = applyChildBookingStatus(tempOrder.bookings, 301, 'confirmed');
|
|
69
|
+
*/
|
|
70
|
+
export declare function applyChildBookingStatus(bookings: any[] | null | undefined, scheduleEventId: number | string, status: string): string | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* 撤销 applyChildBookingStatus 对单条子预约的乐观写入。
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* restoreChildBookingStatus(tempOrder.bookings, 301, prev);
|
|
76
|
+
*/
|
|
77
|
+
export declare function restoreChildBookingStatus(bookings: any[] | null | undefined, scheduleEventId: number | string, previous: string | undefined): void;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.applyBookingsStatus = applyBookingsStatus;
|
|
7
|
+
exports.applyChildBookingStatus = applyChildBookingStatus;
|
|
8
|
+
exports.resolveScheduleId = resolveScheduleId;
|
|
9
|
+
exports.resolveStatusAfterTransition = resolveStatusAfterTransition;
|
|
10
|
+
exports.restoreBookingsStatus = restoreBookingsStatus;
|
|
11
|
+
exports.restoreChildBookingStatus = restoreChildBookingStatus;
|
|
12
|
+
/**
|
|
13
|
+
* BookingTicket - 预约状态相关纯函数。
|
|
14
|
+
*
|
|
15
|
+
* 该文件不持有任何运行时引用(无 request / store / effects),
|
|
16
|
+
* 只做字段解析与本地数组的原地写入/回滚,便于独立单测与未来其他
|
|
17
|
+
* booking 写操作(editBooking / cancelBooking 等)复用。
|
|
18
|
+
*
|
|
19
|
+
* 设计依据:参考 .cursor/rules/data-field-semantics.mdc,
|
|
20
|
+
* 字段含义严格对齐既有协议(OrderTempOrder / parseSalesResponse),
|
|
21
|
+
* 不发明等价关系。
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 子预约状态机转移动作(POST /schedule/booking-transition/{schedule_event_id})。
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* await bookingTicket.transitionChildBooking({
|
|
29
|
+
* schedule_event_id: 301,
|
|
30
|
+
* action: 'confirm',
|
|
31
|
+
* });
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** 子预约状态转移入参 */
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 从 tempOrder 解析用于调用 appointment-status 接口的 schedule id。
|
|
38
|
+
*
|
|
39
|
+
* 优先级:
|
|
40
|
+
* 1. `tempOrder.metadata.appointment_booking_parent_schedule_id`
|
|
41
|
+
* 2. `tempOrder.bookings` 中 `parent_id === 0` 的 `schedule_event_id`
|
|
42
|
+
*
|
|
43
|
+
* 都缺失时返回 null,由调用方决定如何抛错。
|
|
44
|
+
*/
|
|
45
|
+
function resolveScheduleId(tempOrder) {
|
|
46
|
+
if (!tempOrder) return null;
|
|
47
|
+
const metaScheduleId = tempOrder.metadata?.appointment_booking_parent_schedule_id;
|
|
48
|
+
if (metaScheduleId !== undefined && metaScheduleId !== null) {
|
|
49
|
+
return metaScheduleId;
|
|
50
|
+
}
|
|
51
|
+
const bookings = Array.isArray(tempOrder.bookings) ? tempOrder.bookings : [];
|
|
52
|
+
const rootBooking = bookings.find(b => b?.parent_id === 0);
|
|
53
|
+
const fallback = rootBooking?.schedule_event_id;
|
|
54
|
+
return fallback !== undefined && fallback !== null ? fallback : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 原地把所有 bookings 的 `appointment_status` 覆盖为新值,
|
|
59
|
+
* 返回原 status 数组用于回滚(顺序与 bookings 一一对应)。
|
|
60
|
+
*
|
|
61
|
+
* - 元素为 null/undefined 时跳过写入(但占位仍保留以保证回滚下标对齐)
|
|
62
|
+
* - 不会克隆 booking 对象,保持与 OrderModule.tempOrder 引用一致
|
|
63
|
+
*/
|
|
64
|
+
function applyBookingsStatus(bookings, status) {
|
|
65
|
+
if (!Array.isArray(bookings)) return [];
|
|
66
|
+
const previous = bookings.map(b => b?.appointment_status);
|
|
67
|
+
bookings.forEach(b => {
|
|
68
|
+
if (b) b.appointment_status = status;
|
|
69
|
+
});
|
|
70
|
+
return previous;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 把 applyBookingsStatus 的返回值原地写回,撤销乐观更新。
|
|
75
|
+
* 长度不一致时按较短一方对齐(防御式编程,正常路径不会发生)。
|
|
76
|
+
*/
|
|
77
|
+
function restoreBookingsStatus(bookings, previous) {
|
|
78
|
+
if (!Array.isArray(bookings)) return;
|
|
79
|
+
const len = Math.min(bookings.length, previous.length);
|
|
80
|
+
for (let i = 0; i < len; i += 1) {
|
|
81
|
+
const b = bookings[i];
|
|
82
|
+
if (b) b.appointment_status = previous[i];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 将状态机 action 解析为转移后的 `appointment_status`。
|
|
88
|
+
*
|
|
89
|
+
* `reschedule` 暂未在状态矩阵启用,返回 null 表示跳过乐观更新。
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* resolveStatusAfterTransition('confirm'); // 'confirmed'
|
|
93
|
+
*/
|
|
94
|
+
function resolveStatusAfterTransition(action) {
|
|
95
|
+
const map = {
|
|
96
|
+
confirm: 'confirmed',
|
|
97
|
+
reject: 'rejected',
|
|
98
|
+
arrive: 'arrived',
|
|
99
|
+
start: 'started',
|
|
100
|
+
complete: 'completed',
|
|
101
|
+
cancel: 'cancelled',
|
|
102
|
+
no_show: 'no_show',
|
|
103
|
+
reschedule: null
|
|
104
|
+
};
|
|
105
|
+
return map[action] ?? null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 在 bookings 中按 `schedule_event_id` 定位子预约并乐观写入 `appointment_status`。
|
|
110
|
+
*
|
|
111
|
+
* @returns 写入前的 status;未命中时返回 undefined(调用方跳过回滚)
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* const prev = applyChildBookingStatus(tempOrder.bookings, 301, 'confirmed');
|
|
115
|
+
*/
|
|
116
|
+
function applyChildBookingStatus(bookings, scheduleEventId, status) {
|
|
117
|
+
if (!Array.isArray(bookings)) return undefined;
|
|
118
|
+
const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
|
|
119
|
+
if (idx === -1) return undefined;
|
|
120
|
+
const previous = bookings[idx]?.appointment_status;
|
|
121
|
+
bookings[idx].appointment_status = status;
|
|
122
|
+
return previous;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* 撤销 applyChildBookingStatus 对单条子预约的乐观写入。
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* restoreChildBookingStatus(tempOrder.bookings, 301, prev);
|
|
130
|
+
*/
|
|
131
|
+
function restoreChildBookingStatus(bookings, scheduleEventId, previous) {
|
|
132
|
+
if (!Array.isArray(bookings) || previous === undefined) return;
|
|
133
|
+
const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
|
|
134
|
+
if (idx === -1) return;
|
|
135
|
+
bookings[idx].appointment_status = previous;
|
|
136
|
+
}
|