@pisell/pisellos 0.0.571 → 0.0.572

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 (143) 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/index.d.ts +4 -0
  5. package/dist/model/strategy/adapter/promotion/type.d.ts +5 -5
  6. package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  7. package/dist/model/strategy/adapter/walletPass/evaluator.js +4 -2
  8. package/dist/model/strategy/type.d.ts +1 -1
  9. package/dist/modules/BookingContext/types.d.ts +4 -4
  10. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +1 -1
  11. package/dist/modules/Customer/types.d.ts +1 -1
  12. package/dist/modules/Discount/availability.d.ts +7 -0
  13. package/dist/modules/Discount/availability.js +52 -0
  14. package/dist/modules/Discount/entitlementPass.d.ts +34 -0
  15. package/dist/modules/Discount/entitlementPass.js +147 -0
  16. package/dist/modules/Discount/entitlementState.d.ts +8 -0
  17. package/dist/modules/Discount/entitlementState.js +205 -0
  18. package/dist/modules/Discount/index.d.ts +5 -2
  19. package/dist/modules/Discount/index.js +124 -25
  20. package/dist/modules/Discount/types.d.ts +29 -6
  21. package/dist/modules/Holder/types.d.ts +1 -1
  22. package/dist/modules/OpenData/types.d.ts +1 -1
  23. package/dist/modules/Order/types.d.ts +5 -5
  24. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +1 -1
  25. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +1 -1
  26. package/dist/modules/Order/utils.d.ts +1 -1
  27. package/dist/modules/Payment/types.d.ts +7 -7
  28. package/dist/modules/Product/index.d.ts +1 -1
  29. package/dist/modules/ResourcePlanner/types.d.ts +4 -4
  30. package/dist/modules/Rules/entitlementLines.d.ts +8 -0
  31. package/dist/modules/Rules/entitlementLines.js +159 -0
  32. package/dist/modules/Rules/index.d.ts +13 -3
  33. package/dist/modules/Rules/index.js +617 -342
  34. package/dist/modules/Rules/types.d.ts +4 -4
  35. package/dist/modules/ScanOrderLogger/types.d.ts +2 -2
  36. package/dist/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  37. package/dist/modules/Schedule/type.d.ts +7 -7
  38. package/dist/modules/Schedule/types.d.ts +9 -9
  39. package/dist/plugins/app.d.ts +1 -1
  40. package/dist/plugins/request.d.ts +2 -2
  41. package/dist/plugins/window.d.ts +2 -2
  42. package/dist/server/modules/floor-plan/types.d.ts +1 -1
  43. package/dist/server/modules/menu/types.d.ts +1 -1
  44. package/dist/server/modules/order/types.d.ts +16 -16
  45. package/dist/server/modules/products/types.d.ts +1 -1
  46. package/dist/server/modules/resource/types.d.ts +1 -1
  47. package/dist/server/modules/schedule/utils.d.ts +1 -1
  48. package/dist/server/types.d.ts +4 -4
  49. package/dist/server/utils/small-ticket.d.ts +1 -1
  50. package/dist/solution/BaseSales/index.d.ts +1 -1
  51. package/dist/solution/BaseSales/types.d.ts +7 -7
  52. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -1
  53. package/dist/solution/BookingByStep/index.d.ts +1 -1
  54. package/dist/solution/BookingByStep/utils/resources.d.ts +1 -1
  55. package/dist/solution/BookingTicket/index.d.ts +13 -1
  56. package/dist/solution/BookingTicket/types.d.ts +3 -3
  57. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +1 -1
  58. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +1 -1
  59. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +1 -1
  60. package/dist/solution/Sales/types.d.ts +4 -4
  61. package/dist/solution/ScanOrder/types.d.ts +5 -5
  62. package/dist/solution/ShopDiscount/index.d.ts +3 -0
  63. package/dist/solution/ShopDiscount/index.js +161 -78
  64. package/dist/solution/ShopDiscount/types.d.ts +1 -1
  65. package/dist/solution/ShopDiscount/utils.d.ts +3 -2
  66. package/dist/solution/ShopDiscount/utils.js +40 -1
  67. package/dist/solution/UnifiedBookingSales/types.d.ts +1 -1
  68. package/dist/solution/VenueBooking/types.d.ts +1 -1
  69. package/dist/types/index.d.ts +1 -1
  70. package/dist/utils/task.d.ts +2 -2
  71. package/dist/utils/watch.d.ts +2 -2
  72. package/lib/effects/index.d.ts +2 -2
  73. package/lib/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  74. package/lib/model/strategy/adapter/itemRule/type.d.ts +6 -6
  75. package/lib/model/strategy/adapter/promotion/index.d.ts +4 -0
  76. package/lib/model/strategy/adapter/promotion/type.d.ts +5 -5
  77. package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +2 -0
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +2 -0
  79. package/lib/model/strategy/type.d.ts +1 -1
  80. package/lib/modules/BookingContext/types.d.ts +4 -4
  81. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +1 -1
  82. package/lib/modules/Customer/types.d.ts +1 -1
  83. package/lib/modules/Discount/availability.d.ts +7 -0
  84. package/lib/modules/Discount/availability.js +46 -0
  85. package/lib/modules/Discount/entitlementPass.d.ts +34 -0
  86. package/lib/modules/Discount/entitlementPass.js +141 -0
  87. package/lib/modules/Discount/entitlementState.d.ts +8 -0
  88. package/lib/modules/Discount/entitlementState.js +150 -0
  89. package/lib/modules/Discount/index.d.ts +5 -2
  90. package/lib/modules/Discount/index.js +59 -14
  91. package/lib/modules/Discount/types.d.ts +29 -6
  92. package/lib/modules/Holder/types.d.ts +1 -1
  93. package/lib/modules/OpenData/types.d.ts +1 -1
  94. package/lib/modules/Order/types.d.ts +5 -5
  95. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +1 -1
  96. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +1 -1
  97. package/lib/modules/Order/utils.d.ts +1 -1
  98. package/lib/modules/Payment/types.d.ts +7 -7
  99. package/lib/modules/Product/index.d.ts +1 -1
  100. package/lib/modules/ResourcePlanner/types.d.ts +4 -4
  101. package/lib/modules/Rules/entitlementLines.d.ts +8 -0
  102. package/lib/modules/Rules/entitlementLines.js +128 -0
  103. package/lib/modules/Rules/index.d.ts +13 -3
  104. package/lib/modules/Rules/index.js +284 -61
  105. package/lib/modules/Rules/types.d.ts +4 -4
  106. package/lib/modules/ScanOrderLogger/types.d.ts +2 -2
  107. package/lib/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  108. package/lib/modules/Schedule/type.d.ts +7 -7
  109. package/lib/modules/Schedule/types.d.ts +9 -9
  110. package/lib/plugins/app.d.ts +1 -1
  111. package/lib/plugins/request.d.ts +2 -2
  112. package/lib/plugins/window.d.ts +2 -2
  113. package/lib/server/modules/floor-plan/types.d.ts +1 -1
  114. package/lib/server/modules/menu/types.d.ts +1 -1
  115. package/lib/server/modules/order/types.d.ts +16 -16
  116. package/lib/server/modules/products/types.d.ts +1 -1
  117. package/lib/server/modules/resource/types.d.ts +1 -1
  118. package/lib/server/modules/schedule/utils.d.ts +1 -1
  119. package/lib/server/types.d.ts +4 -4
  120. package/lib/server/utils/small-ticket.d.ts +1 -1
  121. package/lib/solution/BaseSales/index.d.ts +1 -1
  122. package/lib/solution/BaseSales/types.d.ts +7 -7
  123. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -1
  124. package/lib/solution/BookingByStep/index.d.ts +1 -1
  125. package/lib/solution/BookingByStep/utils/resources.d.ts +1 -1
  126. package/lib/solution/BookingTicket/index.d.ts +13 -1
  127. package/lib/solution/BookingTicket/types.d.ts +3 -3
  128. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +1 -1
  129. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +1 -1
  130. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +1 -1
  131. package/lib/solution/Sales/types.d.ts +4 -4
  132. package/lib/solution/ScanOrder/types.d.ts +5 -5
  133. package/lib/solution/ShopDiscount/index.d.ts +3 -0
  134. package/lib/solution/ShopDiscount/index.js +55 -18
  135. package/lib/solution/ShopDiscount/types.d.ts +1 -1
  136. package/lib/solution/ShopDiscount/utils.d.ts +3 -2
  137. package/lib/solution/ShopDiscount/utils.js +39 -3
  138. package/lib/solution/UnifiedBookingSales/types.d.ts +1 -1
  139. package/lib/solution/VenueBooking/types.d.ts +1 -1
  140. package/lib/types/index.d.ts +1 -1
  141. package/lib/utils/task.d.ts +2 -2
  142. package/lib/utils/watch.d.ts +2 -2
  143. package/package.json +19 -18
@@ -31,6 +31,9 @@ import { filterDiscountListByBookingTime as _filterDiscountListByBookingTime, is
31
31
  import { UnavailableReason } from "../../modules/Rules/types";
32
32
  import Decimal from 'decimal.js';
33
33
  import { isBoolean } from 'lodash-es';
34
+ import { isEntitlementPass } from "../../modules/Discount/entitlementPass";
35
+ import { getDiscountLifecycleReason } from "../../modules/Discount/availability";
36
+ import { mergeEntitlementDiscountLists, retainScannedEntitlements, withCommittedEntitlementDetails } from "../../modules/Discount/entitlementState";
34
37
  export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
35
38
  _inherits(ShopDiscountImpl, _BaseModule);
36
39
  var _super = _createSuper(ShopDiscountImpl);
@@ -47,6 +50,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
47
50
  _defineProperty(_assertThisInitialized(_this), "store", void 0);
48
51
  _defineProperty(_assertThisInitialized(_this), "options", {});
49
52
  _defineProperty(_assertThisInitialized(_this), "hooks", void 0);
53
+ _defineProperty(_assertThisInitialized(_this), "entitlementPassEnabled", false);
50
54
  _this.store = {
51
55
  customer: null,
52
56
  productList: [],
@@ -65,6 +69,21 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
65
69
 
66
70
  // =========== 生命周期方法 ===========
67
71
  _createClass(ShopDiscountImpl, [{
72
+ key: "setEntitlementPassEnabled",
73
+ value:
74
+ // 由使用多次卡的预约组件显式开启,其他入口沿用原券流程。
75
+ function setEntitlementPassEnabled(enabled) {
76
+ var _this$store$rules;
77
+ this.entitlementPassEnabled = enabled;
78
+ (_this$store$rules = this.store.rules) === null || _this$store$rules === void 0 || _this$store$rules.setEntitlementPassEnabled(enabled);
79
+ if (!enabled) {
80
+ var _this$store$discount;
81
+ (_this$store$discount = this.store.discount) === null || _this$store$discount === void 0 || _this$store$discount.setDiscountList(this.getDiscountList().filter(function (item) {
82
+ return !isEntitlementPass(item);
83
+ }));
84
+ }
85
+ }
86
+ }, {
68
87
  key: "initialize",
69
88
  value: function () {
70
89
  var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
@@ -99,14 +118,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
99
118
  key: "destroy",
100
119
  value: function () {
101
120
  var _destroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
102
- var _this$store$discount, _this$store$rules;
121
+ var _this$store$discount2, _this$store$rules2;
103
122
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
104
123
  while (1) switch (_context2.prev = _context2.next) {
105
124
  case 0:
106
125
  this.store.productList = [];
107
126
  this.store.customer = null;
108
- (_this$store$discount = this.store.discount) === null || _this$store$discount === void 0 || _this$store$discount.destroy();
109
- (_this$store$rules = this.store.rules) === null || _this$store$rules === void 0 || _this$store$rules.destroy();
127
+ (_this$store$discount2 = this.store.discount) === null || _this$store$discount2 === void 0 || _this$store$discount2.destroy();
128
+ (_this$store$rules2 = this.store.rules) === null || _this$store$rules2 === void 0 || _this$store$rules2.destroy();
110
129
  this.core.effects.offByModuleDestroy(this.name);
111
130
  _context2.next = 7;
112
131
  return this.core.effects.emit("".concat(this.name, ":onDestroy"), {});
@@ -125,14 +144,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
125
144
  key: "clear",
126
145
  value: function () {
127
146
  var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
128
- var _this$store$discount2, _this$store$rules2;
147
+ var _this$store$discount3, _this$store$rules3;
129
148
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
130
149
  while (1) switch (_context3.prev = _context3.next) {
131
150
  case 0:
132
151
  this.store.productList = [];
133
152
  this.store.customer = null;
134
- (_this$store$discount2 = this.store.discount) === null || _this$store$discount2 === void 0 || _this$store$discount2.clear();
135
- (_this$store$rules2 = this.store.rules) === null || _this$store$rules2 === void 0 || _this$store$rules2.clear();
153
+ (_this$store$discount3 = this.store.discount) === null || _this$store$discount3 === void 0 || _this$store$discount3.clear();
154
+ (_this$store$rules3 = this.store.rules) === null || _this$store$rules3 === void 0 || _this$store$rules3.clear();
136
155
  case 4:
137
156
  case "end":
138
157
  return _context3.stop();
@@ -196,9 +215,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
196
215
  var _this2 = this;
197
216
  this.core.effects.only("".concat(this.name, ":onCustomerChange"), function (customer) {
198
217
  var _this2$options$otherP;
199
- if ((_this2$options$otherP = _this2.options.otherParams) !== null && _this2$options$otherP !== void 0 && _this2$options$otherP.cacheId && _this2.getDiscountList().length) {
200
- return;
201
- }
218
+ if (!_this2.entitlementPassEnabled && (_this2$options$otherP = _this2.options.otherParams) !== null && _this2$options$otherP !== void 0 && _this2$options$otherP.cacheId && _this2.getDiscountList().length) return;
202
219
  _this2.loadPrepareConfig({
203
220
  customerId: customer.id,
204
221
  action: 'create',
@@ -265,17 +282,28 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
265
282
  value: function () {
266
283
  var _setCustomer = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(customer) {
267
284
  var _this$store$customer;
285
+ var _this$store$discount4, retained;
268
286
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
269
287
  while (1) switch (_context4.prev = _context4.next) {
270
288
  case 0:
271
289
  if (!(((_this$store$customer = this.store.customer) === null || _this$store$customer === void 0 ? void 0 : _this$store$customer.id) !== customer.id)) {
272
- _context4.next = 4;
290
+ _context4.next = 8;
273
291
  break;
274
292
  }
275
293
  this.store.customer = customer;
276
- _context4.next = 4;
294
+ if (!this.entitlementPassEnabled) {
295
+ _context4.next = 6;
296
+ break;
297
+ }
298
+ retained = this.getDiscountList().filter(function (item) {
299
+ return !isEntitlementPass(item) || item.isEditMode || item.isScan && String(item.customer_id) === String(customer.id);
300
+ });
301
+ _context4.next = 6;
302
+ return (_this$store$discount4 = this.store.discount) === null || _this$store$discount4 === void 0 ? void 0 : _this$store$discount4.setDiscountList(retained);
303
+ case 6:
304
+ _context4.next = 8;
277
305
  return this.core.effects.emit("".concat(this.name, ":onCustomerChange"), customer);
278
- case 4:
306
+ case 8:
279
307
  case "end":
280
308
  return _context4.stop();
281
309
  }
@@ -334,6 +362,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
334
362
  },
335
363
  newProductList = _ref.productList,
336
364
  newDiscountList = _ref.discountList;
365
+ if (this.entitlementPassEnabled) this.store.productList = newProductList || productList;
337
366
  if (newDiscountList) {
338
367
  newDiscountList = this.setDiscountList(newDiscountList);
339
368
  }
@@ -399,13 +428,13 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
399
428
  key: "batchSearchByProductIds",
400
429
  value: function () {
401
430
  var _batchSearchByProductIds = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(productIds) {
402
- var _this$store$discount3;
431
+ var _this$store$discount5;
403
432
  var resultDiscountList, currentDiscountList, newDiscountList;
404
433
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
405
434
  while (1) switch (_context5.prev = _context5.next) {
406
435
  case 0:
407
436
  _context5.next = 2;
408
- return (_this$store$discount3 = this.store.discount) === null || _this$store$discount3 === void 0 ? void 0 : _this$store$discount3.batchSearchByProductIds(productIds);
437
+ return (_this$store$discount5 = this.store.discount) === null || _this$store$discount5 === void 0 ? void 0 : _this$store$discount5.batchSearchByProductIds(productIds);
409
438
  case 2:
410
439
  _context5.t0 = _context5.sent;
411
440
  if (_context5.t0) {
@@ -439,15 +468,16 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
439
468
  key: "scanCode",
440
469
  value: function () {
441
470
  var _scanCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(code, customerId) {
442
- var _this$store$discount4, _this$store$bookingSu2, resultDiscountWithReason, resultDiscountList, unavailableReasonKey, rulesModule, withScanList, currentSelectedDiscountList, _ref2, newProductList, newDiscountList, isAvailable, unavailableReason, _this$options$otherPa6;
471
+ var _this$store$discount6, _this$store$bookingSu2, _find, resultDiscountWithReason, resultDiscountList, unavailableReasonKey, rulesModule, withScanList, currentSelectedDiscountList, _ref2, newProductList, newDiscountList, evaluatedDiscountList, isAvailable, unavailableReason, isAccepted, _this$options$otherPa6, ids, retainable, _this$store$discount7;
443
472
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
444
473
  while (1) switch (_context6.prev = _context6.next) {
445
474
  case 0:
446
475
  _context6.prev = 0;
447
476
  _context6.next = 3;
448
- return (_this$store$discount4 = this.store.discount) === null || _this$store$discount4 === void 0 ? void 0 : _this$store$discount4.batchSearch(code, {
477
+ return (_this$store$discount6 = this.store.discount) === null || _this$store$discount6 === void 0 ? void 0 : _this$store$discount6.batchSearch(code, {
449
478
  customerId: customerId,
450
- orderId: this.store.orderId
479
+ orderId: this.store.orderId,
480
+ withEntitlementPass: this.entitlementPassEnabled
451
481
  });
452
482
  case 3:
453
483
  _context6.t0 = _context6.sent;
@@ -495,7 +525,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
495
525
  currentSelectedDiscountList = this.getDiscountList().filter(function (n) {
496
526
  return n.isSelected;
497
527
  });
498
- if (!(currentSelectedDiscountList.length && currentSelectedDiscountList.some(function (n) {
528
+ if (!(!withScanList.some(isEntitlementPass) && currentSelectedDiscountList.length && currentSelectedDiscountList.some(function (n) {
499
529
  return withScanList.some(function (m) {
500
530
  return m.id === n.id;
501
531
  });
@@ -521,30 +551,58 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
521
551
  isAvailable: false,
522
552
  productList: this.store.productList || [],
523
553
  discountList: this.getDiscountList()
524
- }, newProductList = _ref2.productList, newDiscountList = _ref2.discountList, isAvailable = _ref2.isAvailable, unavailableReason = _ref2.unavailableReason;
554
+ }, newProductList = _ref2.productList, newDiscountList = _ref2.discountList, evaluatedDiscountList = _ref2.evaluatedDiscountList, isAvailable = _ref2.isAvailable, unavailableReason = _ref2.unavailableReason;
555
+ isAccepted = isAvailable;
525
556
  if (!isAvailable) {
526
- _context6.next = 25;
557
+ _context6.next = 27;
527
558
  break;
528
559
  }
560
+ if (this.entitlementPassEnabled) this.setProductList(newProductList || []);
529
561
  this.setDiscountList(newDiscountList || []);
530
562
  this.store.originalDiscountList = newDiscountList || [];
531
- this.setProductList(newProductList || []);
563
+ if (!this.entitlementPassEnabled) this.setProductList(newProductList || []);
532
564
  if (!(this.isWalkIn() && resultDiscountList.length && ((_this$options$otherPa6 = this.options.otherParams) === null || _this$options$otherPa6 === void 0 ? void 0 : _this$options$otherPa6.platform) === 'shop' && !((resultDiscountList[0].customer_id || 1) === 1))) {
533
- _context6.next = 25;
565
+ _context6.next = 27;
534
566
  break;
535
567
  }
536
- _context6.next = 25;
568
+ _context6.next = 27;
537
569
  return this.getCustomerWallet(resultDiscountList[0].customer_id);
538
- case 25:
570
+ case 27:
571
+ if (!isAvailable) {
572
+ ids = new Set(withScanList.map(function (item) {
573
+ return String(item.id);
574
+ }));
575
+ retainable = (evaluatedDiscountList || []).filter(function (item) {
576
+ return ids.has(String(item.id)) && isEntitlementPass(item) && !getDiscountLifecycleReason(item);
577
+ });
578
+ if (retainable.length) {
579
+ this.setDiscountList(retainScannedEntitlements(this.getDiscountList(), retainable));
580
+ isAccepted = true;
581
+ }
582
+ }
583
+ if (!this.entitlementPassEnabled) {
584
+ _context6.next = 32;
585
+ break;
586
+ }
587
+ this.store.originalDiscountList = this.getDiscountList();
588
+ _context6.next = 32;
589
+ return (_this$store$discount7 = this.store.discount) === null || _this$store$discount7 === void 0 ? void 0 : _this$store$discount7.setOriginalDiscountList(this.getDiscountList());
590
+ case 32:
539
591
  return _context6.abrupt("return", {
540
592
  type: "clientCalc",
541
593
  isAvailable: isAvailable || false,
542
- productList: newProductList || this.store.productList || [],
543
- discountList: newDiscountList || this.getDiscountList(),
544
- unavailableReason: unavailableReason
594
+ isAccepted: isAccepted,
595
+ productList: isAvailable ? newProductList : this.store.productList || [],
596
+ discountList: this.getDiscountList(),
597
+ unavailableReason: unavailableReason,
598
+ unavailableReasonKey: ((_find = (evaluatedDiscountList || []).find(function (item) {
599
+ return withScanList.some(function (scanned) {
600
+ return String(scanned.id) === String(item.id);
601
+ }) && item.reasonCode;
602
+ })) === null || _find === void 0 ? void 0 : _find.reasonCode) || unavailableReasonKey
545
603
  });
546
- case 28:
547
- _context6.prev = 28;
604
+ case 35:
605
+ _context6.prev = 35;
548
606
  _context6.t1 = _context6["catch"](0);
549
607
  console.error('[ShopDiscount] 扫码出错:', _context6.t1);
550
608
  return _context6.abrupt("return", {
@@ -554,11 +612,11 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
554
612
  discountList: this.getDiscountList(),
555
613
  unavailableReason: UnavailableReason.Unknown
556
614
  });
557
- case 32:
615
+ case 39:
558
616
  case "end":
559
617
  return _context6.stop();
560
618
  }
561
- }, _callee6, this, [[0, 28]]);
619
+ }, _callee6, this, [[0, 35]]);
562
620
  }));
563
621
  function scanCode(_x5, _x6) {
564
622
  return _scanCode.apply(this, arguments);
@@ -568,8 +626,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
568
626
  }, {
569
627
  key: "calcDiscountApplicableProductTotalPrice",
570
628
  value: function calcDiscountApplicableProductTotalPrice(discount) {
571
- var _this$store$discount5;
572
- return (_this$store$discount5 = this.store.discount) === null || _this$store$discount5 === void 0 ? void 0 : _this$store$discount5.calcDiscountApplicableProductTotalPrice(discount);
629
+ var _this$store$discount8;
630
+ return (_this$store$discount8 = this.store.discount) === null || _this$store$discount8 === void 0 ? void 0 : _this$store$discount8.calcDiscountApplicableProductTotalPrice(discount);
573
631
  }
574
632
 
575
633
  // =========== 私有辅助方法 ===========
@@ -614,7 +672,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
614
672
  key: "setDiscountList",
615
673
  value: function setDiscountList(discountList) {
616
674
  var _this3 = this,
617
- _this$store$discount6;
675
+ _this$hooks,
676
+ _this$store$discount9;
618
677
  var productList = this.store.productList || [];
619
678
  var editModeDiscountList = [];
620
679
  productList.forEach(function (item) {
@@ -661,8 +720,14 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
661
720
  });
662
721
  }
663
722
  });
664
- var newDiscountList = [].concat(editModeDiscountList, _toConsumableArray(discountList.filter(function (item) {
665
- return !item.isDisabled;
723
+ var newDiscountList = this.entitlementPassEnabled ? withCommittedEntitlementDetails([].concat(_toConsumableArray(editModeDiscountList.filter(function (item) {
724
+ return !isEntitlementPass(item);
725
+ })), _toConsumableArray(discountList.filter(function (item) {
726
+ return isEntitlementPass(item) || !item.isDisabled;
727
+ }))), productList, ((_this$hooks = this.hooks) === null || _this$hooks === void 0 ? void 0 : _this$hooks.getProduct) || function (item) {
728
+ return item;
729
+ }) : [].concat(editModeDiscountList, _toConsumableArray(discountList.filter(function (item) {
730
+ return !item.isDisabled && !isEntitlementPass(item);
666
731
  })));
667
732
  var isProductFree = function isProductFree(id) {
668
733
  var _this3$hooks2;
@@ -703,7 +768,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
703
768
  item.isDisabledForProductUsed = false;
704
769
  }
705
770
  });
706
- (_this$store$discount6 = this.store.discount) === null || _this$store$discount6 === void 0 || _this$store$discount6.setDiscountList(newDiscountList);
771
+ (_this$store$discount9 = this.store.discount) === null || _this$store$discount9 === void 0 || _this$store$discount9.setDiscountList(newDiscountList);
707
772
  this.emitDiscountListChange(newDiscountList);
708
773
  return newDiscountList;
709
774
  }
@@ -712,8 +777,8 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
712
777
  }, {
713
778
  key: "getDiscountList",
714
779
  value: function getDiscountList() {
715
- var _this$store$discount7;
716
- return ((_this$store$discount7 = this.store.discount) === null || _this$store$discount7 === void 0 ? void 0 : _this$store$discount7.getDiscountList()) || [];
780
+ var _this$store$discount10;
781
+ return ((_this$store$discount10 = this.store.discount) === null || _this$store$discount10 === void 0 ? void 0 : _this$store$discount10.getDiscountList()) || [];
717
782
  }
718
783
 
719
784
  // 获取客户钱包信息
@@ -721,7 +786,7 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
721
786
  key: "getCustomerWallet",
722
787
  value: function () {
723
788
  var _getCustomerWallet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(id) {
724
- var _result, customer;
789
+ var _result, customer, customerUpdate;
725
790
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
726
791
  while (1) switch (_context8.prev = _context8.next) {
727
792
  case 0:
@@ -733,25 +798,32 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
733
798
  case 3:
734
799
  _result = _context8.sent;
735
800
  if (!(_result !== null && _result !== void 0 && _result.data)) {
736
- _context8.next = 9;
801
+ _context8.next = 12;
737
802
  break;
738
803
  }
739
804
  customer = Object.assign({}, (_objectDestructuringEmpty(_result.data), _result.data));
740
- this.setCustomer(customer);
741
- _context8.next = 9;
805
+ customerUpdate = this.setCustomer(customer);
806
+ if (!this.entitlementPassEnabled) {
807
+ _context8.next = 10;
808
+ break;
809
+ }
810
+ _context8.next = 10;
811
+ return customerUpdate;
812
+ case 10:
813
+ _context8.next = 12;
742
814
  return this.core.effects.emit("".concat(this.name, ":onScanCustomerChange"), customer);
743
- case 9:
744
- _context8.next = 14;
815
+ case 12:
816
+ _context8.next = 17;
745
817
  break;
746
- case 11:
747
- _context8.prev = 11;
818
+ case 14:
819
+ _context8.prev = 14;
748
820
  _context8.t0 = _context8["catch"](0);
749
821
  console.error('[ShopDiscount] 获取客户钱包信息出错:', _context8.t0);
750
- case 14:
822
+ case 17:
751
823
  case "end":
752
824
  return _context8.stop();
753
825
  }
754
- }, _callee8, this, [[0, 11]]);
826
+ }, _callee8, this, [[0, 14]]);
755
827
  }));
756
828
  function getCustomerWallet(_x8) {
757
829
  return _getCustomerWallet.apply(this, arguments);
@@ -795,69 +867,80 @@ export var ShopDiscountImpl = /*#__PURE__*/function (_BaseModule) {
795
867
  key: "loadPrepareConfig",
796
868
  value: function () {
797
869
  var _loadPrepareConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(params) {
798
- var _this$getCustomer2, _this$store$discount8, _this$getDiscountList, _this$store$discount9, _this$store$productLi2, orderId, customerId, prepareConfigResult, goodPassList, scanDiscount, scanDiscountIds, newGoodPassList, newDiscountList, filteredDiscountList, _result3;
870
+ var _this4 = this;
871
+ var _this$getCustomer2, _this$store$discount11, _this$getCustomer3, _this$store$discount12, _this$store$discount13, _this$store$productLi2, entitlementPassEnabled, orderId, customerId, prepareConfigResult, goodPassList, newDiscountList, filteredDiscountList, _result3;
799
872
  return _regeneratorRuntime().wrap(function _callee10$(_context10) {
800
873
  while (1) switch (_context10.prev = _context10.next) {
801
874
  case 0:
802
875
  _context10.prev = 0;
876
+ entitlementPassEnabled = this.entitlementPassEnabled;
803
877
  orderId = this.store.orderId;
804
878
  customerId = params.customerId || ((_this$getCustomer2 = this.getCustomer()) === null || _this$getCustomer2 === void 0 ? void 0 : _this$getCustomer2.id); // if (customerId === 1 || !customerId) {
805
879
  // return
806
880
  // }
807
- _context10.next = 5;
808
- return (_this$store$discount8 = this.store.discount) === null || _this$store$discount8 === void 0 ? void 0 : _this$store$discount8.loadPrepareConfig(_objectSpread({
881
+ _context10.next = 6;
882
+ return (_this$store$discount11 = this.store.discount) === null || _this$store$discount11 === void 0 ? void 0 : _this$store$discount11.loadPrepareConfig(_objectSpread(_objectSpread({
809
883
  customer_id: customerId,
810
884
  action: orderId ? 'edit' : 'create',
811
885
  with_good_pass: 1,
812
886
  with_discount_card: 1,
813
- with_wallet_pass_holder: 1,
887
+ with_wallet_pass_holder: 1
888
+ }, this.entitlementPassEnabled ? {
889
+ with_entitlement_pass: 1,
890
+ filter_order_wallet_pass_usage: 0
891
+ } : {}), {}, {
814
892
  request_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
815
893
  }, orderId ? {
816
894
  order_id: orderId
817
895
  } : {}));
818
- case 5:
896
+ case 6:
819
897
  prepareConfigResult = _context10.sent;
820
898
  goodPassList = (prepareConfigResult === null || prepareConfigResult === void 0 ? void 0 : prepareConfigResult.discountList) || [];
821
- scanDiscount = (_this$getDiscountList = this.getDiscountList()) === null || _this$getDiscountList === void 0 ? void 0 : _this$getDiscountList.filter(function (item) {
822
- return item.isScan;
823
- }); // goodPassList 里可能有 scanDiscount 重合的部分,goodPassList 需要剔除
824
- scanDiscountIds = scanDiscount.map(function (n) {
825
- return n.id;
826
- });
827
- newGoodPassList = goodPassList.filter(function (n) {
828
- return !scanDiscountIds.includes(n.id);
829
- });
830
- newDiscountList = [].concat(_toConsumableArray(scanDiscount), _toConsumableArray(newGoodPassList || [])); // 存储原始优惠券列表
899
+ if (!(entitlementPassEnabled !== this.entitlementPassEnabled)) {
900
+ _context10.next = 10;
901
+ break;
902
+ }
903
+ return _context10.abrupt("return");
904
+ case 10:
905
+ if (!(entitlementPassEnabled && (String(customerId) !== String((_this$getCustomer3 = this.getCustomer()) === null || _this$getCustomer3 === void 0 ? void 0 : _this$getCustomer3.id) || String(orderId) !== String(this.store.orderId)))) {
906
+ _context10.next = 12;
907
+ break;
908
+ }
909
+ return _context10.abrupt("return");
910
+ case 12:
911
+ newDiscountList = mergeEntitlementDiscountLists(this.getDiscountList(), goodPassList || [], (_this$store$discount12 = this.store.discount) === null || _this$store$discount12 === void 0 ? void 0 : _this$store$discount12.getOriginalDiscountList()); // 存储原始优惠券列表
831
912
  this.store.originalDiscountList = newDiscountList;
832
- _context10.next = 14;
833
- return (_this$store$discount9 = this.store.discount) === null || _this$store$discount9 === void 0 ? void 0 : _this$store$discount9.setOriginalDiscountList(newDiscountList);
834
- case 14:
913
+ _context10.next = 16;
914
+ return (_this$store$discount13 = this.store.discount) === null || _this$store$discount13 === void 0 ? void 0 : _this$store$discount13.setOriginalDiscountList(newDiscountList);
915
+ case 16:
835
916
  // 根据当前预约时间过滤优惠券列表
836
- filteredDiscountList = this.filterDiscountListByBookingTime(newDiscountList, this.store.currentBookingTime);
917
+ filteredDiscountList = newDiscountList.filter(function (item) {
918
+ return isEntitlementPass(item) || _this4.filterDiscountListByBookingTime([item], _this4.store.currentBookingTime).length > 0;
919
+ });
837
920
  this.store.filteredDiscountList = filteredDiscountList;
838
921
  this.setDiscountList(filteredDiscountList || []);
839
922
  if (!((_this$store$productLi2 = this.store.productList) !== null && _this$store$productLi2 !== void 0 && _this$store$productLi2.length)) {
840
- _context10.next = 21;
923
+ _context10.next = 23;
841
924
  break;
842
925
  }
843
926
  _result3 = this.calcDiscount(this.store.productList);
844
- _context10.next = 21;
845
- return this.core.effects.emit("".concat(this.name, ":onLoadPrepareCalcResult"), _result3);
846
- case 21:
847
927
  _context10.next = 23;
848
- return this.core.effects.emit("".concat(this.name, ":onLoadDiscountList"), filteredDiscountList);
928
+ return this.core.effects.emit("".concat(this.name, ":onLoadPrepareCalcResult"), _result3);
849
929
  case 23:
850
- _context10.next = 28;
851
- break;
930
+ _context10.next = 25;
931
+ return this.core.effects.emit("".concat(this.name, ":onLoadDiscountList"), filteredDiscountList);
852
932
  case 25:
853
- _context10.prev = 25;
933
+ _context10.next = 30;
934
+ break;
935
+ case 27:
936
+ _context10.prev = 27;
854
937
  _context10.t0 = _context10["catch"](0);
855
938
  console.error('[ShopDiscount] 加载准备配置出错:', _context10.t0);
856
- case 28:
939
+ case 30:
857
940
  case "end":
858
941
  return _context10.stop();
859
942
  }
860
- }, _callee10, this, [[0, 25]]);
943
+ }, _callee10, this, [[0, 27]]);
861
944
  }));
862
945
  function loadPrepareConfig(_x10) {
863
946
  return _loadPrepareConfig.apply(this, arguments);
@@ -11,7 +11,7 @@ export declare enum ShopDiscountHooks {
11
11
  onRulesListChange = "shopDiscount:onRulesListChange",
12
12
  onLoadPrepareCalcResult = "shopDiscount:onLoadPrepareCalcResult"
13
13
  }
14
- export declare type Customer = {
14
+ export type Customer = {
15
15
  id: string | number;
16
16
  name: string;
17
17
  email: string;
@@ -21,13 +21,13 @@ export declare const isAllNormalProduct: (items: any[]) => boolean;
21
21
  * @returns
22
22
  */
23
23
  export declare const getDiscountAmount: (discount: Discount, total: number, price: number) => number;
24
- export declare const getDiscountListAmountTotal: (discount: Discount[]) => Discount;
24
+ export declare const getDiscountListAmountTotal: (discount: Discount[]) => any;
25
25
  /**
26
26
  * 获取折扣金额 计算每个折扣的金额
27
27
  * @param discount
28
28
  * @returns
29
29
  */
30
- export declare const getDiscountListAmount: (discount: Discount[]) => Discount;
30
+ export declare const getDiscountListAmount: (discount: Discount[]) => any;
31
31
  export interface ScheduleItem {
32
32
  id: number;
33
33
  name: string | {
@@ -98,3 +98,4 @@ export declare const calculateOrderLevelDiscountAllocation: (discount: Discount,
98
98
  discountAmount: number;
99
99
  difference: number;
100
100
  }>;
101
+ export declare const getDiscountTimeUnavailableReason: (discount: Discount, useTime: string) => 'not_started' | 'time_limit' | 'outside_schedule' | undefined;
@@ -9,6 +9,11 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
9
9
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
10
  import Decimal from "decimal.js";
11
11
  import dayjs from "dayjs";
12
+ import isSameOrAfter from "dayjs/plugin/isSameOrAfter";
13
+ import isSameOrBefore from "dayjs/plugin/isSameOrBefore";
14
+ import { isEntitlementPass, isFullCoveragePass } from "../../modules/Discount/entitlementPass";
15
+ dayjs.extend(isSameOrAfter);
16
+ dayjs.extend(isSameOrBefore);
12
17
  export var uniqueById = function uniqueById(arr) {
13
18
  var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';
14
19
  var seen = new Set();
@@ -51,7 +56,7 @@ export var isAllNormalProduct = function isAllNormalProduct(items) {
51
56
  export var getDiscountAmount = function getDiscountAmount(discount, total, price) {
52
57
  var _discount$metadata;
53
58
  // 商品券
54
- if (discount.tag === 'good_pass') {
59
+ if (isFullCoveragePass(discount)) {
55
60
  return new Decimal(price).minus(new Decimal(price || 0)).toNumber();
56
61
  }
57
62
 
@@ -459,6 +464,7 @@ export var filterDiscountListByBookingTime = function filterDiscountListByBookin
459
464
  }
460
465
  return discountList.filter(function (discount) {
461
466
  var _discount$metadata2;
467
+ if (isEntitlementPass(discount)) return !getDiscountTimeUnavailableReason(discount, bookingTime);
462
468
  if ((discount === null || discount === void 0 || (_discount$metadata2 = discount.metadata) === null || _discount$metadata2 === void 0 ? void 0 : _discount$metadata2.validity_type) === "custom_schedule_validity") {
463
469
  var _discount$custom_sche;
464
470
  return getDateIsInSchedule(bookingTime, ((_discount$custom_sche = discount.custom_schedule_snapshot) === null || _discount$custom_sche === void 0 ? void 0 : _discount$custom_sche.data) || []);
@@ -605,4 +611,37 @@ export var calculateOrderLevelDiscountAllocation = function calculateOrderLevelD
605
611
  }
606
612
  }
607
613
  return result;
614
+ };
615
+ export var getDiscountTimeUnavailableReason = function getDiscountTimeUnavailableReason(discount, useTime) {
616
+ var useTimeDayjs = dayjs(useTime);
617
+ if (!useTimeDayjs.isValid()) return 'time_limit';
618
+ try {
619
+ var _discount$metadata5, _discount$extension_d, _discount$custom_sche3;
620
+ if ((discount === null || discount === void 0 || (_discount$metadata5 = discount.metadata) === null || _discount$metadata5 === void 0 ? void 0 : _discount$metadata5.validity_type) === "custom_schedule_validity") {
621
+ var _discount$custom_sche2;
622
+ return getDateIsInSchedule(useTime, ((_discount$custom_sche2 = discount.custom_schedule_snapshot) === null || _discount$custom_sche2 === void 0 ? void 0 : _discount$custom_sche2.data) || []) ? undefined : 'outside_schedule';
623
+ }
624
+ var isHasStart = !!discount.start_date && !!discount.start_time;
625
+ var startDate = dayjs("".concat(discount.start_date, " ").concat(discount.start_time));
626
+
627
+ // 开始时刻包含在有效期内。
628
+ if (isHasStart) {
629
+ if (!startDate.isValid()) return 'time_limit';
630
+ if (useTimeDayjs.isBefore(startDate)) return 'not_started';
631
+ }
632
+
633
+ // 到期时刻不再可用;expire_time 为空时为长期有效。
634
+ var expireTime = discount.expire_time ? dayjs(discount.expire_time) : null;
635
+ var isBeforeExpire = expireTime ? expireTime.isValid() && useTimeDayjs.isBefore(expireTime) : true;
636
+ if (!isBeforeExpire) return 'time_limit';
637
+ var validity = (_discount$extension_d = discount.extension_data) === null || _discount$extension_d === void 0 || (_discount$extension_d = _discount$extension_d.find(function (field) {
638
+ return field.field_key === 'valid_times';
639
+ })) === null || _discount$extension_d === void 0 ? void 0 : _discount$extension_d.value;
640
+ if ((validity === null || validity === void 0 ? void 0 : validity.restrict_use_by_schedule) === true && !getDateIsInSchedule(useTime, ((_discount$custom_sche3 = discount.custom_schedule_snapshot) === null || _discount$custom_sche3 === void 0 ? void 0 : _discount$custom_sche3.data) || [])) {
641
+ return 'outside_schedule';
642
+ }
643
+ return undefined;
644
+ } catch (error) {
645
+ return 'time_limit';
646
+ }
608
647
  };
@@ -55,7 +55,7 @@ export interface UnifiedBookingSalesStagePlannerProductsParams {
55
55
  rawProducts?: Record<string, any>[];
56
56
  }
57
57
  /** Ordinary retail product staging. No resource, time, or booking facts are required. */
58
- export declare type UnifiedBookingSalesStageRetailProductsParams = UnifiedBookingSalesStagePlannerProductsParams;
58
+ export type UnifiedBookingSalesStageRetailProductsParams = UnifiedBookingSalesStagePlannerProductsParams;
59
59
  /** Adds one ordinary retail product without replacing other retail lines already in the cart. */
60
60
  export interface UnifiedBookingSalesAddRetailProductParams {
61
61
  /** Prefer a supplied catalog record when the UI has already loaded it. */
@@ -11,7 +11,7 @@ export declare enum VenueBookingHooks {
11
11
  /** 登录客户的智能定价、营销配置与订单汇总已完成刷新 */
12
12
  onSmartPricingUpdated = "venueBooking:onSmartPricingUpdated"
13
13
  }
14
- export declare type VenueBookingStatus = 'idle' | 'initializing' | 'ready' | 'error';
14
+ export type VenueBookingStatus = 'idle' | 'initializing' | 'ready' | 'error';
15
15
  export interface VenueBookingEntryContext {
16
16
  biz: string;
17
17
  venueId?: string;
@@ -38,7 +38,7 @@ export interface ModuleOptions {
38
38
  initialState?: Record<string, any>;
39
39
  otherParams?: Record<string, any>;
40
40
  }
41
- export declare type EventHandler = (data?: any) => void;
41
+ export type EventHandler = (data?: any) => void;
42
42
  export interface PisellCore {
43
43
  registerPlugin: (plugin: Plugin, options?: PluginOptions) => void;
44
44
  getPlugin: <T extends Plugin>(name: string) => T | null;
@@ -1,5 +1,5 @@
1
- declare type Action = (...args: any[]) => Promise<any>;
2
- declare type Task = {
1
+ type Action = (...args: any[]) => Promise<any>;
2
+ type Task = {
3
3
  uuid: string;
4
4
  type: string;
5
5
  actionParams?: Record<string, any>;
@@ -2,8 +2,8 @@
2
2
  * 监听模块
3
3
  *
4
4
  */
5
- export declare type WatchEventCallback = (...args: any[]) => void;
6
- export declare type WatchEventItem = {
5
+ export type WatchEventCallback = (...args: any[]) => void;
6
+ export type WatchEventItem = {
7
7
  key: string;
8
8
  callback: WatchEventCallback;
9
9
  };
@@ -1,8 +1,8 @@
1
- declare type EffectCallback = (payload: any) => void | Promise<void | {
1
+ type EffectCallback = (payload: any) => void | Promise<void | {
2
2
  status: boolean;
3
3
  message?: string;
4
4
  }>;
5
- declare type UnsubscribeFunction = () => void;
5
+ type UnsubscribeFunction = () => void;
6
6
  declare class EffectsManager {
7
7
  private listeners;
8
8
  on(event: string, callback: EffectCallback): UnsubscribeFunction;