@pisell/pisellos 2.3.164 → 2.3.166

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 (77) hide show
  1. package/dist/model/strategy/adapter/promotion/evaluator.js +89 -104
  2. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  3. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +28 -4
  4. package/dist/modules/Holder/utils.d.ts +2 -0
  5. package/dist/modules/Holder/utils.js +32 -2
  6. package/dist/modules/OpenData/contactInfo.d.ts +20 -0
  7. package/dist/modules/OpenData/contactInfo.js +70 -0
  8. package/dist/modules/OpenData/index.d.ts +1 -0
  9. package/dist/modules/OpenData/index.js +1 -0
  10. package/dist/modules/OpenData/types.d.ts +9 -0
  11. package/dist/modules/Order/holderRelations.d.ts +14 -0
  12. package/dist/modules/Order/holderRelations.js +154 -0
  13. package/dist/modules/Order/index.d.ts +1 -1
  14. package/dist/modules/Order/index.js +89 -44
  15. package/dist/modules/Order/types.d.ts +19 -1
  16. package/dist/modules/Order/types.js +2 -0
  17. package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  18. package/dist/modules/Order/utils/discountProductLineIdentity.js +142 -7
  19. package/dist/modules/Order/utils/orderCollectionIdentity.js +24 -10
  20. package/dist/modules/Order/utils.d.ts +1 -1
  21. package/dist/modules/Order/utils.js +35 -9
  22. package/dist/modules/Rules/index.js +62 -61
  23. package/dist/server/index.js +18 -12
  24. package/dist/server/modules/order/index.d.ts +4 -0
  25. package/dist/server/modules/order/index.js +255 -190
  26. package/dist/server/modules/order/types.d.ts +3 -0
  27. package/dist/server/modules/products/index.js +3 -2
  28. package/dist/shared/receipt/small-ticket.js +17 -6
  29. package/dist/shared/sales/loadSalesOrderSnapshot.js +1 -1
  30. package/dist/solution/BaseSales/index.d.ts +4 -0
  31. package/dist/solution/BaseSales/index.js +1116 -935
  32. package/dist/solution/BaseSales/types.d.ts +2 -1
  33. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  34. package/dist/solution/BaseSales/utils/parseSalesResponse.js +7 -3
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +14 -4
  36. package/dist/solution/BookingTicket/index.d.ts +15 -1
  37. package/dist/solution/BookingTicket/index.js +784 -501
  38. package/dist/solution/UnifiedBookingSales/index.js +1 -1
  39. package/lib/model/strategy/adapter/promotion/evaluator.js +9 -14
  40. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  41. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +17 -1
  42. package/lib/modules/Holder/utils.d.ts +2 -0
  43. package/lib/modules/Holder/utils.js +27 -1
  44. package/lib/modules/OpenData/contactInfo.d.ts +20 -0
  45. package/lib/modules/OpenData/contactInfo.js +56 -0
  46. package/lib/modules/OpenData/index.d.ts +1 -0
  47. package/lib/modules/OpenData/index.js +12 -0
  48. package/lib/modules/OpenData/types.d.ts +9 -0
  49. package/lib/modules/Order/holderRelations.d.ts +14 -0
  50. package/lib/modules/Order/holderRelations.js +98 -0
  51. package/lib/modules/Order/index.d.ts +1 -1
  52. package/lib/modules/Order/index.js +44 -12
  53. package/lib/modules/Order/types.d.ts +19 -1
  54. package/lib/modules/Order/types.js +1 -0
  55. package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  56. package/lib/modules/Order/utils/discountProductLineIdentity.js +51 -2
  57. package/lib/modules/Order/utils/orderCollectionIdentity.js +5 -0
  58. package/lib/modules/Order/utils.d.ts +1 -1
  59. package/lib/modules/Order/utils.js +27 -6
  60. package/lib/modules/Rules/index.js +2 -1
  61. package/lib/server/index.js +6 -0
  62. package/lib/server/modules/order/index.d.ts +4 -0
  63. package/lib/server/modules/order/index.js +46 -4
  64. package/lib/server/modules/order/types.d.ts +3 -0
  65. package/lib/server/modules/products/index.js +2 -1
  66. package/lib/shared/receipt/small-ticket.js +15 -7
  67. package/lib/shared/sales/loadSalesOrderSnapshot.js +1 -1
  68. package/lib/solution/BaseSales/index.d.ts +4 -0
  69. package/lib/solution/BaseSales/index.js +68 -2
  70. package/lib/solution/BaseSales/types.d.ts +2 -1
  71. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  72. package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -0
  73. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +16 -8
  74. package/lib/solution/BookingTicket/index.d.ts +15 -1
  75. package/lib/solution/BookingTicket/index.js +132 -3
  76. package/lib/solution/UnifiedBookingSales/index.js +1 -1
  77. package/package.json +1 -1
@@ -34,8 +34,9 @@ import { loadSalesOrderSnapshot } from "../../shared/sales/loadSalesOrderSnapsho
34
34
  import { PAYMENT_REFRESH_MESSAGE, requiresLocalPaymentRefresh, stripLocalEftposState } from "./localEftposState";
35
35
  import { BaseModule } from "../BaseModule";
36
36
  import { OrderHooks } from "./types";
37
- import { composeLinePrice, generateDuration, getAllDiscountList, mergeRelationForms, ensureCartItemOriginHolder, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeOrderMetaList, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList, resolveEffectivePerUnitDiscount, ensureProductSku, getProductSkuOptions, normalizeProductSkuOptions, sumOptionUnitPrice, clearTempOrderHolderAssignments, getOrderProductLineUid, indexOrderProductsByUid, calculateOrderProductsDeposit, collectPointCardSnapshotCodeCandidates, mergePointCardSnapshotCodes as _mergePointCardSnapshotCodes, buildVirtualCurrencySnapshotFromList, mergeOrderProductDisplayFields, resolveIsFormSubject, isMarkdownBundle } from "./utils";
37
+ import { composeLinePrice, generateDuration, getAllDiscountList, mergeRelationForms, ensureCartItemOriginHolder, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeOrderMetaList, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList, resolveEffectivePerUnitDiscount, ensureProductSku, getProductSkuOptions, normalizeProductSkuOptions, sumOptionUnitPrice, clearTempOrderHolderAssignments, hasAssignedHolderId, getOrderProductLineUid, indexOrderProductsByUid, calculateOrderProductsDeposit, collectPointCardSnapshotCodeCandidates, mergePointCardSnapshotCodes as _mergePointCardSnapshotCodes, buildVirtualCurrencySnapshotFromList, mergeOrderProductDisplayFields, resolveIsFormSubject, isMarkdownBundle } from "./utils";
38
38
  import { isNormalProduct } from "../Product/utils";
39
+ import { ensureHolderRelationUuids, getProductHolderRelations, hasProductBooking, removeProductHolderRelations, replaceProductHolderRelations, restoreLegacyHolderRelations } from "./holderRelations";
39
40
  import { getWeighedProductPriceFingerprint, resolveWeighedSourcePrice, withOriginalBundleOptionPrices } from "./utils/weighedProduct";
40
41
  import { buildPickupTimingBooking, isFulfillmentTimingBooking } from "./pickupTiming";
41
42
  import dayjs from 'dayjs';
@@ -648,6 +649,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
648
649
  return createDefaultOrderRulesHooks(function () {
649
650
  var _this3$store$tempOrde;
650
651
  return ((_this3$store$tempOrde = _this3.store.tempOrder) === null || _this3$store$tempOrde === void 0 ? void 0 : _this3$store$tempOrde.bookings) || [];
652
+ }, function () {
653
+ var _this3$store$tempOrde2;
654
+ return (_this3$store$tempOrde2 = _this3.store.tempOrder) === null || _this3$store$tempOrde2 === void 0 ? void 0 : _this3$store$tempOrde2.holder_relations;
651
655
  });
652
656
  }
653
657
 
@@ -1168,7 +1172,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1168
1172
  discount_list: normalizeOrderProductDiscountList(syncManualProductDiscountProductNum(mergedProduct.discount_list, mergedProduct.num))
1169
1173
  });
1170
1174
  }));
1171
- ensureUniqueProductLineUids(tempOrder);
1175
+ ensureUniqueProductLineUids(tempOrder, discountList);
1172
1176
  consolidateDiscountFreeProductLines(tempOrder);
1173
1177
  }
1174
1178
  if (result !== null && result !== void 0 && result.discountList) {
@@ -1710,7 +1714,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1710
1714
  }, {
1711
1715
  key: "persistTempOrder",
1712
1716
  value: function persistTempOrder() {
1713
- if (!this.sessionStoragePersistEnabled || !this.store.tempOrder) return;
1717
+ if (!this.store.tempOrder) return;
1718
+ ensureHolderRelationUuids(this.store.tempOrder);
1719
+ if (!this.sessionStoragePersistEnabled) return;
1714
1720
  this.checkSaveCache({
1715
1721
  cacheId: this.cacheId,
1716
1722
  fatherModule: this.fatherModule,
@@ -2630,12 +2636,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2630
2636
  selling_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.selling_price),
2631
2637
  original_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.original_price),
2632
2638
  payment_price: this.normalizeFingerprintMoney((_product$payment_pric = product === null || product === void 0 ? void 0 : product.payment_price) !== null && _product$payment_pric !== void 0 ? _product$payment_pric : product === null || product === void 0 ? void 0 : product.selling_price),
2633
- metadata: {
2639
+ metadata: _objectSpread({
2634
2640
  source_product_price: this.normalizeFingerprintMoney(metadata.source_product_price),
2635
2641
  main_product_selling_price: this.normalizeFingerprintMoney(metadata.main_product_selling_price),
2636
2642
  main_product_original_price: this.normalizeFingerprintMoney(metadata.main_product_original_price),
2637
2643
  product_discount_difference: this.normalizeFingerprintMoney(metadata.product_discount_difference)
2638
- },
2644
+ }, !hasProductBooking(product) ? {
2645
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(this.store.tempOrder || {}, product))
2646
+ } : {}),
2639
2647
  product_sku: this.normalizeFingerprintValue({
2640
2648
  code: (_sku$code = sku.code) !== null && _sku$code !== void 0 ? _sku$code : '',
2641
2649
  barcode: (_sku$barcode = sku.barcode) !== null && _sku$barcode !== void 0 ? _sku$barcode : '',
@@ -2702,6 +2710,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2702
2710
  _ref36,
2703
2711
  _sku$variant_id2,
2704
2712
  _this17 = this;
2713
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2705
2714
  var sku = (product === null || product === void 0 ? void 0 : product.product_sku) || {};
2706
2715
  var metadata = (product === null || product === void 0 ? void 0 : product.metadata) || {};
2707
2716
  var discountTypes = ((product === null || product === void 0 ? void 0 : product.discount_list) || []).map(function (discount) {
@@ -2717,12 +2726,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2717
2726
  product_variant_id: (_product$product_vari2 = product === null || product === void 0 ? void 0 : product.product_variant_id) !== null && _product$product_vari2 !== void 0 ? _product$product_vari2 : null,
2718
2727
  extension_type: extensionType,
2719
2728
  num: getSafeProductNum((_product$num2 = product === null || product === void 0 ? void 0 : product.num) !== null && _product$num2 !== void 0 ? _product$num2 : product === null || product === void 0 ? void 0 : product.product_quantity),
2720
- metadata: {
2729
+ metadata: _objectSpread({
2721
2730
  unique_identification_number: (_ref35 = (_metadata$unique_iden = metadata.unique_identification_number) !== null && _metadata$unique_iden !== void 0 ? _metadata$unique_iden : product === null || product === void 0 ? void 0 : product.unique_identification_number) !== null && _ref35 !== void 0 ? _ref35 : '',
2722
2731
  price_override: (_metadata$price_overr = metadata.price_override) !== null && _metadata$price_overr !== void 0 ? _metadata$price_overr : '',
2723
2732
  is_manual_discount: (_metadata$is_manual_d = metadata.is_manual_discount) !== null && _metadata$is_manual_d !== void 0 ? _metadata$is_manual_d : '',
2724
2733
  product_discount_reason: (_metadata$product_dis = metadata.product_discount_reason) !== null && _metadata$product_dis !== void 0 ? _metadata$product_dis : ''
2725
- },
2734
+ }, !hasProductBooking(product) ? {
2735
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(order, product))
2736
+ } : {}),
2726
2737
  product_sku: this.normalizeFingerprintValue({
2727
2738
  code: (_sku$code2 = sku.code) !== null && _sku$code2 !== void 0 ? _sku$code2 : '',
2728
2739
  barcode: (_sku$barcode2 = sku.barcode) !== null && _sku$barcode2 !== void 0 ? _sku$barcode2 : '',
@@ -2775,8 +2786,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2775
2786
  key: "buildOrderProductsStructuralFingerprint",
2776
2787
  value: function buildOrderProductsStructuralFingerprint(products) {
2777
2788
  var _this18 = this;
2789
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2778
2790
  var items = (products || []).map(function (product) {
2779
- return _this18.buildProductStructuralFingerprintItem(product);
2791
+ return _this18.buildProductStructuralFingerprintItem(product, order);
2780
2792
  });
2781
2793
  items.sort(function (left, right) {
2782
2794
  return JSON.stringify(left).localeCompare(JSON.stringify(right));
@@ -2862,7 +2874,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2862
2874
  var manualDepositOverride = this.getManualDepositOverride(tempOrder);
2863
2875
  if (currentFingerprint !== snapshot.productFingerprint) {
2864
2876
  var currentStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(tempOrder.products);
2865
- var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : []);
2877
+ var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : [], snapshot);
2866
2878
  if (currentStructuralFingerprint !== snapshotStructuralFingerprint) return null;
2867
2879
  }
2868
2880
  var summary = _objectSpread(_objectSpread({}, createEmptySummary()), cloneDeep(snapshot.summary || {}));
@@ -3220,8 +3232,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3220
3232
  }, {
3221
3233
  key: "sanitizeOrderProductForTempOrder",
3222
3234
  value: function sanitizeOrderProductForTempOrder(product) {
3235
+ var _product$_extend;
3236
+ var deferHolderCleanup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3223
3237
  if (product.metadata && _typeof(product.metadata) === 'object') {
3224
3238
  delete product.metadata.origin;
3239
+ if (!deferHolderCleanup && !hasProductBooking(product)) {
3240
+ delete product.metadata.holder;
3241
+ delete product.metadata.holder_id;
3242
+ }
3243
+ }
3244
+ if (((_product$_extend = product._extend) === null || _product$_extend === void 0 ? void 0 : _product$_extend.holder_relations) !== undefined) {
3245
+ delete product._extend.holder_relations;
3225
3246
  }
3226
3247
  return product;
3227
3248
  }
@@ -4322,6 +4343,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4322
4343
  var nextCustomerId = (_tempOrder$customer_i4 = tempOrder.customer_id) !== null && _tempOrder$customer_i4 !== void 0 ? _tempOrder$customer_i4 : null;
4323
4344
  if (String(previousCustomerId !== null && previousCustomerId !== void 0 ? previousCustomerId : '') !== String(nextCustomerId !== null && nextCustomerId !== void 0 ? nextCustomerId : '')) {
4324
4345
  this.clearCustomerWalletState(tempOrder);
4346
+ removeProductHolderRelations(tempOrder, tempOrder.products.filter(function (product) {
4347
+ return !hasProductBooking(product);
4348
+ }));
4325
4349
  }
4326
4350
  this.persistTempOrder();
4327
4351
  return {
@@ -5092,6 +5116,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5092
5116
  _normalizedIncoming$p2,
5093
5117
  _booking_uid,
5094
5118
  _metadata,
5119
+ _productToAdd$_extend,
5095
5120
  _productToAdd$metadat,
5096
5121
  _origin,
5097
5122
  _this33 = this;
@@ -5126,10 +5151,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5126
5151
  var hasIncomingProductNote = this.hasOrderProductLineNote(normalizedIncoming);
5127
5152
  var hasIncomingManualProductDiscount = isManualProductDiscountProduct(normalizedIncoming);
5128
5153
  var hasIncomingBookingUid = this.hasLinkedBookingUid(productToAdd) || this.hasLinkedBookingUid(normalizedIncoming);
5154
+ var holderRelationsPatch = !hasIncomingBookingUid ? (_productToAdd$_extend = productToAdd._extend) === null || _productToAdd$_extend === void 0 ? void 0 : _productToAdd$_extend.holder_relations : undefined;
5155
+ var hasIncomingHolder = Array.isArray(holderRelationsPatch) && holderRelationsPatch.length > 0;
5129
5156
  var isIncomingCustomItem = ((_productToAdd$metadat = productToAdd.metadata) === null || _productToAdd$metadat === void 0 || (_productToAdd$metadat = _productToAdd$metadat.origin) === null || _productToAdd$metadat === void 0 ? void 0 : _productToAdd$metadat.isCustomItem) === true || ((_origin = productToAdd._origin) === null || _origin === void 0 ? void 0 : _origin.isCustomItem) === true;
5130
- var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || isIncomingCustomItem || isWeighingProduct;
5157
+ var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || hasIncomingHolder || isIncomingCustomItem || isWeighingProduct;
5131
5158
  var matchedIndex = shouldForceNewLine ? -1 : tempOrder.products.findIndex(function (item) {
5159
+ var _item$metadata4;
5132
5160
  if (_this33.hasGoodPassDiscount(item)) return false;
5161
+ if (getProductHolderRelations(tempOrder, item).length > 0 || hasAssignedHolderId((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.holder_id)) return false;
5133
5162
  var isRuntimeEntitlementPass = _this33.isRuntimeEntitlementAppend(item, tempOrder);
5134
5163
  if (isIncomingEntitlementAppend !== isRuntimeEntitlementPass) {
5135
5164
  return false;
@@ -5213,6 +5242,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5213
5242
  if (linked) {
5214
5243
  tempOrder.bookings = [].concat(_toConsumableArray(tempOrder.bookings || []), [linked.booking]);
5215
5244
  }
5245
+ replaceProductHolderRelations(tempOrder, committedProduct, holderRelationsPatch);
5216
5246
  return committedProduct;
5217
5247
  };
5218
5248
  if (!matchedProduct) {
@@ -5342,6 +5372,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5342
5372
  });
5343
5373
  mutationSnapshot = salesNoteDrafts.length > 0 ? {
5344
5374
  products: cloneDeep(tempOrder.products || []),
5375
+ holder_relations: cloneDeep(tempOrder.holder_relations),
5345
5376
  bookings: cloneDeep(tempOrder.bookings || []),
5346
5377
  notes: cloneDeep(tempOrder.notes || []),
5347
5378
  extend: cloneDeep(tempOrder._extend || {})
@@ -5367,6 +5398,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5367
5398
  rollbackProductAndNotesMutation = function rollbackProductAndNotesMutation() {
5368
5399
  if (!mutationSnapshot) return;
5369
5400
  tempOrder.products = mutationSnapshot.products;
5401
+ if (mutationSnapshot.holder_relations === undefined) delete tempOrder.holder_relations;else tempOrder.holder_relations = mutationSnapshot.holder_relations;
5370
5402
  tempOrder.bookings = mutationSnapshot.bookings;
5371
5403
  tempOrder.notes = mutationSnapshot.notes;
5372
5404
  tempOrder._extend = mutationSnapshot.extend;
@@ -5653,12 +5685,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5653
5685
  }, {
5654
5686
  key: "getFullCoveragePassDiscounts",
5655
5687
  value: function getFullCoveragePassDiscounts(product) {
5656
- var _product$_extend;
5688
+ var _product$_extend2;
5657
5689
  var discountList = _toConsumableArray(product.discount_list || []);
5658
5690
  (product.product_bundle || []).forEach(function (item) {
5659
5691
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5660
5692
  });
5661
- ((product === null || product === void 0 || (_product$_extend = product._extend) === null || _product$_extend === void 0 || (_product$_extend = _product$_extend.other) === null || _product$_extend === void 0 ? void 0 : _product$_extend.bundle) || []).forEach(function (item) {
5693
+ ((product === null || product === void 0 || (_product$_extend2 = product._extend) === null || _product$_extend2 === void 0 || (_product$_extend2 = _product$_extend2.other) === null || _product$_extend2 === void 0 ? void 0 : _product$_extend2.bundle) || []).forEach(function (item) {
5662
5694
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5663
5695
  });
5664
5696
  return discountList.filter(function (item) {
@@ -5770,15 +5802,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5770
5802
  if (((_params$updates = params.updates) === null || _params$updates === void 0 ? void 0 : _params$updates.num) === undefined) return false;
5771
5803
  var uid = params.unique_identification_number;
5772
5804
  var product = uid !== undefined ? tempOrder.products.find(function (item) {
5773
- var _item$metadata4;
5774
- return String(((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.unique_identification_number) || item.unique_identification_number || '') === String(uid);
5805
+ var _item$metadata5;
5806
+ return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === String(uid);
5775
5807
  }) : tempOrder.products[getProductIdentityIndex(tempOrder.products, params)];
5776
5808
  return !product || getSafeProductNum(params.updates.num) > product.num;
5777
5809
  }
5778
5810
  }, {
5779
5811
  key: "applyOrderProductUpdateToTempOrder",
5780
5812
  value: function applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids) {
5781
- var _targetProduct$metada2, _product_sku, _metadata2, _metadata3, _metadata4, _metadata5, _metadata6, _metadata7, _metadata8, _metadata9, _metadata10, _nextProduct$metadata2, _targetProduct$metada20, _tempOrder$products$p, _tempOrder$products$p2;
5813
+ var _targetProduct$metada2, _product_sku, _metadata2, _metadata3, _metadata4, _metadata5, _metadata6, _metadata7, _metadata8, _metadata9, _metadata10, _nextProduct$metadata2, _targetProduct$metada20, _updates$_extend, _tempOrder$products$p, _tempOrder$products$p2;
5782
5814
  var product_id = params.product_id,
5783
5815
  product_variant_id = params.product_variant_id,
5784
5816
  updates = params.updates,
@@ -5806,8 +5838,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5806
5838
  if (unique_identification_number !== undefined) {
5807
5839
  var targetUid = String(unique_identification_number);
5808
5840
  productIndex = tempOrder.products.findIndex(function (item) {
5809
- var _item$metadata5;
5810
- return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5841
+ var _item$metadata6;
5842
+ return String(((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5811
5843
  });
5812
5844
  }
5813
5845
  if (productIndex === -1) {
@@ -6007,6 +6039,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6007
6039
  if (uid) reapplyWeighedDiscountProductUids === null || reapplyWeighedDiscountProductUids === void 0 || reapplyWeighedDiscountProductUids.push(String(uid));
6008
6040
  }
6009
6041
  tempOrder.products[productIndex] = normalizedProduct;
6042
+ replaceProductHolderRelations(tempOrder, normalizedProduct, (_updates$_extend = updates._extend) === null || _updates$_extend === void 0 ? void 0 : _updates$_extend.holder_relations);
6010
6043
  this.syncTempOrderHolderFromBookings(tempOrder);
6011
6044
  this.captureProductRuntime(tempOrder, updates, tempOrder.products[productIndex], (_tempOrder$products$p = tempOrder.products[productIndex].metadata) === null || _tempOrder$products$p === void 0 ? void 0 : _tempOrder$products$p.unique_identification_number);
6012
6045
  return (_tempOrder$products$p2 = tempOrder.products[productIndex].metadata) === null || _tempOrder$products$p2 === void 0 ? void 0 : _tempOrder$products$p2.unique_identification_number;
@@ -6143,8 +6176,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6143
6176
  if (unique_identification_number !== undefined) {
6144
6177
  targetUid = String(unique_identification_number);
6145
6178
  productIndex = tempOrder.products.findIndex(function (item) {
6146
- var _item$metadata6;
6147
- return String(((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number || '') === targetUid;
6179
+ var _item$metadata7;
6180
+ return String(((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number || '') === targetUid;
6148
6181
  });
6149
6182
  }
6150
6183
  if (productIndex === -1) {
@@ -6365,8 +6398,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6365
6398
  bookingsBeforeRemove = tempOrder.bookings || [];
6366
6399
  preserveDisplayPosition = options === null || options === void 0 ? void 0 : options.preserveDisplayPosition;
6367
6400
  anchorIndex = preserveDisplayPosition ? productsBeforeRemove.findIndex(function (item) {
6368
- var _item$metadata7;
6369
- var uid = ((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number;
6401
+ var _item$metadata8;
6402
+ var uid = ((_item$metadata8 = item.metadata) === null || _item$metadata8 === void 0 ? void 0 : _item$metadata8.unique_identification_number) || item.unique_identification_number;
6370
6403
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.anchorProductUid);
6371
6404
  }) : -1;
6372
6405
  productsAfterAnchor = anchorIndex >= 0 ? productsBeforeRemove.slice(anchorIndex + 1) : [];
@@ -6462,8 +6495,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6462
6495
  }
6463
6496
  if (preserveDisplayPosition && anchorIndex >= 0) {
6464
6497
  remainingProductIndex = tempOrder.products.findIndex(function (item) {
6465
- var _item$metadata8;
6466
- var uid = ((_item$metadata8 = item.metadata) === null || _item$metadata8 === void 0 ? void 0 : _item$metadata8.unique_identification_number) || item.unique_identification_number;
6498
+ var _item$metadata9;
6499
+ var uid = ((_item$metadata9 = item.metadata) === null || _item$metadata9 === void 0 ? void 0 : _item$metadata9.unique_identification_number) || item.unique_identification_number;
6467
6500
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.remainingProductUid);
6468
6501
  });
6469
6502
  if (remainingProductIndex >= 0) {
@@ -6476,28 +6509,31 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6476
6509
  tempOrder.products = nextProductIndex >= 0 ? [].concat(_toConsumableArray(productsWithoutRemaining.slice(0, nextProductIndex)), [remainingProduct], _toConsumableArray(productsWithoutRemaining.slice(nextProductIndex))) : [].concat(_toConsumableArray(productsWithoutRemaining), [remainingProduct]);
6477
6510
  }
6478
6511
  }
6512
+ removeProductHolderRelations(tempOrder, productsBeforeRemove.filter(function (product) {
6513
+ return !tempOrder.products.includes(product);
6514
+ }));
6479
6515
  this.removeSalesNotesForMissingProductLines(tempOrder);
6480
6516
  if (!isCurrentOrder) {
6481
- _context32.next = 44;
6517
+ _context32.next = 45;
6482
6518
  break;
6483
6519
  }
6484
- _context32.next = 42;
6520
+ _context32.next = 43;
6485
6521
  return this.finalizeProductOrderMutation(tempOrder, {
6486
6522
  skipEditDiscountConfigRefresh: true,
6487
6523
  isCurrentOrder: isCurrentOrder
6488
6524
  });
6489
- case 42:
6490
- _context32.next = 46;
6525
+ case 43:
6526
+ _context32.next = 47;
6491
6527
  break;
6492
- case 44:
6493
- _context32.next = 46;
6528
+ case 45:
6529
+ _context32.next = 47;
6494
6530
  return this.finalizeAfterProductsMutation(tempOrder);
6495
- case 46:
6531
+ case 47:
6496
6532
  this.logInfo('removeProductsFromOrder success', {
6497
6533
  identities: identities
6498
6534
  });
6499
6535
  return _context32.abrupt("return", tempOrder.products);
6500
- case 48:
6536
+ case 49:
6501
6537
  case "end":
6502
6538
  return _context32.stop();
6503
6539
  }
@@ -6541,6 +6577,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6541
6577
  case 0:
6542
6578
  tempOrder = this.ensureTempOrder();
6543
6579
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6580
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6544
6581
  tempOrder.products = [];
6545
6582
  tempOrder.bookings = [];
6546
6583
  releaseTempOrderSettlementState(tempOrder);
@@ -6551,22 +6588,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6551
6588
  productsByUid: {}
6552
6589
  });
6553
6590
  }
6554
- _context34.next = 10;
6591
+ _context34.next = 11;
6555
6592
  return this.evaluatePromotion();
6556
- case 10:
6593
+ case 11:
6557
6594
  promotionPayload = _context34.sent;
6558
6595
  this.applyDiscount();
6559
6596
  this.sanitizeTempOrderProducts(tempOrder);
6560
- _context34.next = 15;
6597
+ _context34.next = 16;
6561
6598
  return this.recalculateSummary({
6562
6599
  createIfMissing: true
6563
6600
  });
6564
- case 15:
6601
+ case 16:
6565
6602
  this.persistTempOrder();
6566
6603
  this.emitPromotionApplied(promotionPayload);
6567
6604
  this.logInfo('clearOrderCartLines success', {});
6568
6605
  return _context34.abrupt("return", tempOrder);
6569
- case 19:
6606
+ case 20:
6570
6607
  case "end":
6571
6608
  return _context34.stop();
6572
6609
  }
@@ -6592,6 +6629,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6592
6629
  case 0:
6593
6630
  tempOrder = this.ensureTempOrder();
6594
6631
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6632
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6595
6633
  tempOrder.products = [];
6596
6634
  tempOrder.bookings = [];
6597
6635
  this.removeSalesNotesForMissingProductLines(tempOrder);
@@ -6607,24 +6645,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6607
6645
  productsByUid: {}
6608
6646
  });
6609
6647
  }
6610
- _context35.next = 15;
6648
+ _context35.next = 16;
6611
6649
  return (_this$store$discount22 = this.store.discount) === null || _this$store$discount22 === void 0 ? void 0 : _this$store$discount22.setDiscountList([]);
6612
- case 15:
6613
- _context35.next = 17;
6650
+ case 16:
6651
+ _context35.next = 18;
6614
6652
  return (_this$store$discount23 = this.store.discount) === null || _this$store$discount23 === void 0 ? void 0 : _this$store$discount23.setOriginalDiscountList([]);
6615
- case 17:
6653
+ case 18:
6616
6654
  this.hasActiveCustomerBoundDiscount = false;
6617
6655
  this.lastUnfulfilledPromotions = [];
6618
6656
  this.lastGiftActions = null;
6619
- _context35.next = 22;
6657
+ _context35.next = 23;
6620
6658
  return this.recalculateSummary({
6621
6659
  createIfMissing: true
6622
6660
  });
6623
- case 22:
6661
+ case 23:
6624
6662
  this.persistTempOrder();
6625
6663
  this.logInfo('clearOrderForSettlementSwitch success', {});
6626
6664
  return _context35.abrupt("return", tempOrder);
6627
- case 25:
6665
+ case 26:
6628
6666
  case "end":
6629
6667
  return _context35.stop();
6630
6668
  }
@@ -7758,6 +7796,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7758
7796
  originalSalesSnapshot: _objectSpread(_objectSpread({
7759
7797
  summary: cloneDeep(this.store.summary),
7760
7798
  products: cloneDeep(nextTempOrder.products || []),
7799
+ holder_relations: cloneDeep(nextTempOrder.holder_relations),
7761
7800
  bookings: cloneDeep(nextTempOrder.bookings || []),
7762
7801
  payments: cloneDeep(nextTempOrder.payments || []),
7763
7802
  surcharges: cloneDeep(nextTempOrder.surcharges || []),
@@ -7952,6 +7991,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7952
7991
  delete nextTempOrder.total_refund_amount;
7953
7992
  delete nextTempOrder.holder_id;
7954
7993
  nextTempOrder.metadata = raw.metadata && _typeof(raw.metadata) === 'object' ? _objectSpread({}, raw.metadata) : {};
7994
+ var holderRelations = restoreLegacyHolderRelations(raw);
7995
+ if (holderRelations === undefined) delete nextTempOrder.holder_relations;else nextTempOrder.holder_relations = cloneDeep(holderRelations);
7996
+ ensureHolderRelationUuids(nextTempOrder);
7955
7997
  nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
7956
7998
  var rawProducts = Array.isArray(raw.products) ? raw.products : [];
7957
7999
  nextTempOrder.products = rawProducts.length > 0 ? rawProducts.map(function (p) {
@@ -8040,6 +8082,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
8040
8082
  }
8041
8083
  tempOrderExtend.productsByUid = productsByUid;
8042
8084
  this.hydrateLinkedBookingIdentity(nextTempOrder);
8085
+ nextTempOrder.products.forEach(function (product) {
8086
+ return _this42.sanitizeOrderProductForTempOrder(product);
8087
+ });
8043
8088
  if ((options === null || options === void 0 ? void 0 : options.ensureIdentity) !== false) {
8044
8089
  this.ensureExternalSaleNumber(nextTempOrder);
8045
8090
  }
@@ -8224,7 +8269,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
8224
8269
  });
8225
8270
  if (result.metadata) delete result.metadata.price_schema_version;
8226
8271
  var restored = restoreHydratedBundleDiscounts(result, normalizeOrderProductDiscountList);
8227
- return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored));
8272
+ return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored), true);
8228
8273
  }
8229
8274
  }, {
8230
8275
  key: "getLastOrderInfo",
@@ -243,6 +243,11 @@ export interface OrderProduct extends OrderProductIdentity {
243
243
  product_cover?: string;
244
244
  metadata: Record<string, any>;
245
245
  note?: string;
246
+ /** 仅作按行更新输入;正式数据保存于订单顶层。 */
247
+ _extend?: {
248
+ holder_relations?: OrderHolderRelation[];
249
+ [key: string]: any;
250
+ };
246
251
  }
247
252
  export interface OrderSummary {
248
253
  product_quantity: number;
@@ -340,6 +345,17 @@ export interface SalesNotesMutationSnapshot {
340
345
  }
341
346
  export type SalesNoteProtocolRelation = SalesNoteRelation;
342
347
  export type SalesNoteProtocol = SalesNote;
348
+ /** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
349
+ export interface OrderHolderRelation {
350
+ /** 关系自身的 UUID;新选择/旧草稿可缺省,入单与提交时由 OS 补齐。 */
351
+ uuid?: string;
352
+ relation_model: string;
353
+ relation_uuid: string;
354
+ holder_type: 'form' | 'customer';
355
+ holder_id: number;
356
+ metadata?: Record<string, any>;
357
+ [key: string]: any;
358
+ }
343
359
  export interface OrderTempOrder {
344
360
  order_id: number | null;
345
361
  external_sale_number: string;
@@ -379,6 +395,7 @@ export interface OrderTempOrder {
379
395
  created_at: string | undefined;
380
396
  request_unique_idempotency_token?: string;
381
397
  products: OrderProduct[];
398
+ holder_relations?: OrderHolderRelation[];
382
399
  notes: SalesNote[];
383
400
  bookings: any[];
384
401
  payments: any[];
@@ -398,7 +415,7 @@ export interface OrderTempOrder {
398
415
  [key: string]: any;
399
416
  };
400
417
  }
401
- export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num'> {
418
+ export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num' | '_extend'> {
402
419
  product_quantity: number;
403
420
  payment_price: string;
404
421
  product_sku: OrderProductSku;
@@ -607,6 +624,7 @@ export interface SubmitSalesOrderParams {
607
624
  schedule_date: string;
608
625
  created_at?: string | undefined;
609
626
  products: OrderSubmitProduct[];
627
+ holder_relations?: OrderHolderRelation[];
610
628
  bookings: OrderSubmitBooking[];
611
629
  payments: any[];
612
630
  vouchers: any[];
@@ -69,6 +69,8 @@ export var OrderHooks = /*#__PURE__*/function (OrderHooks) {
69
69
  * 该对象应视为 opaque token,只用于原样传回 restoreSalesNotesMutationSnapshot。
70
70
  */
71
71
 
72
+ /** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
73
+
72
74
  /**
73
75
  * 添加商品行时的顺序控制。
74
76
  * 默认追加到 products 尾部;预约数量同步可插入到既有预约组的最新行之后,
@@ -31,7 +31,7 @@ export declare const DISCOUNT_SPLIT_ORIGIN_UID_KEY = "discountSplitOriginUid";
31
31
  * 没有 UID 的裸商品不会被补写 UID。这是为了兼容 Rules/mock 的历史协议形状;
32
32
  * 正常 Order 写路径会在 normalize 阶段提前创建 UID。
33
33
  */
34
- export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder): void;
34
+ export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder, discounts?: Array<Record<string, any>>): void;
35
35
  /**
36
36
  * 把券移除后已经恢复原价的同源折扣拆分行重新合并。
37
37
  *