@pisell/pisellos 0.10.59 → 0.10.60

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 (58) hide show
  1. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  2. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +25 -2
  3. package/dist/modules/Order/holderRelations.d.ts +14 -0
  4. package/dist/modules/Order/holderRelations.js +154 -0
  5. package/dist/modules/Order/index.d.ts +2 -2
  6. package/dist/modules/Order/index.js +92 -47
  7. package/dist/modules/Order/types.d.ts +19 -1
  8. package/dist/modules/Order/types.js +2 -0
  9. package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  10. package/dist/modules/Order/utils/discountProductLineIdentity.js +142 -7
  11. package/dist/modules/Order/utils/orderCollectionIdentity.js +24 -10
  12. package/dist/modules/Order/utils.d.ts +1 -1
  13. package/dist/modules/Order/utils.js +35 -9
  14. package/dist/server/index.js +18 -12
  15. package/dist/server/modules/order/index.d.ts +4 -0
  16. package/dist/server/modules/order/index.js +255 -190
  17. package/dist/server/modules/order/types.d.ts +3 -0
  18. package/dist/shared/receipt/small-ticket.js +17 -0
  19. package/dist/shared/sales/loadSalesOrderSnapshot.js +1 -1
  20. package/dist/solution/BaseSales/index.js +97 -27
  21. package/dist/solution/BaseSales/types.d.ts +2 -1
  22. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  23. package/dist/solution/BaseSales/utils/parseSalesResponse.js +7 -3
  24. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +12 -3
  25. package/dist/solution/BookingByStep/index.d.ts +1 -1
  26. package/dist/solution/BookingTicket/index.d.ts +1 -13
  27. package/dist/solution/BookingTicket/index.js +7 -4
  28. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +6 -2
  29. package/lib/model/strategy/adapter/promotion/index.js +46 -1
  30. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  31. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +16 -1
  32. package/lib/modules/Order/holderRelations.d.ts +14 -0
  33. package/lib/modules/Order/holderRelations.js +98 -0
  34. package/lib/modules/Order/index.d.ts +2 -2
  35. package/lib/modules/Order/index.js +44 -12
  36. package/lib/modules/Order/types.d.ts +19 -1
  37. package/lib/modules/Order/types.js +1 -0
  38. package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  39. package/lib/modules/Order/utils/discountProductLineIdentity.js +51 -2
  40. package/lib/modules/Order/utils/orderCollectionIdentity.js +5 -0
  41. package/lib/modules/Order/utils.d.ts +1 -1
  42. package/lib/modules/Order/utils.js +27 -6
  43. package/lib/server/index.js +6 -0
  44. package/lib/server/modules/order/index.d.ts +4 -0
  45. package/lib/server/modules/order/index.js +46 -4
  46. package/lib/server/modules/order/types.d.ts +3 -0
  47. package/lib/shared/receipt/small-ticket.js +15 -0
  48. package/lib/shared/sales/loadSalesOrderSnapshot.js +1 -1
  49. package/lib/solution/BaseSales/index.js +39 -2
  50. package/lib/solution/BaseSales/types.d.ts +2 -1
  51. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  52. package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -0
  53. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -0
  54. package/lib/solution/BookingByStep/index.d.ts +1 -1
  55. package/lib/solution/BookingTicket/index.d.ts +1 -13
  56. package/lib/solution/BookingTicket/index.js +4 -1
  57. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +7 -1
  58. package/package.json +1 -1
@@ -33,8 +33,9 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
33
33
  import { loadSalesOrderSnapshot } from "../../shared/sales/loadSalesOrderSnapshot";
34
34
  import { BaseModule } from "../BaseModule";
35
35
  import { OrderHooks } from "./types";
36
- 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";
36
+ 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";
37
37
  import { isNormalProduct } from "../Product/utils";
38
+ import { ensureHolderRelationUuids, getProductHolderRelations, hasProductBooking, removeProductHolderRelations, replaceProductHolderRelations, restoreLegacyHolderRelations } from "./holderRelations";
38
39
  import { getWeighedProductPriceFingerprint, resolveWeighedSourcePrice, withOriginalBundleOptionPrices } from "./utils/weighedProduct";
39
40
  import { buildPickupTimingBooking, isFulfillmentTimingBooking } from "./pickupTiming";
40
41
  import dayjs from 'dayjs';
@@ -776,6 +777,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
776
777
  return createDefaultOrderRulesHooks(function () {
777
778
  var _this5$store$tempOrde;
778
779
  return ((_this5$store$tempOrde = _this5.store.tempOrder) === null || _this5$store$tempOrde === void 0 ? void 0 : _this5$store$tempOrde.bookings) || [];
780
+ }, function () {
781
+ var _this5$store$tempOrde2;
782
+ return (_this5$store$tempOrde2 = _this5.store.tempOrder) === null || _this5$store$tempOrde2 === void 0 ? void 0 : _this5$store$tempOrde2.holder_relations;
779
783
  });
780
784
  }
781
785
 
@@ -1296,7 +1300,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1296
1300
  discount_list: normalizeOrderProductDiscountList(syncManualProductDiscountProductNum(mergedProduct.discount_list, mergedProduct.num))
1297
1301
  });
1298
1302
  }));
1299
- ensureUniqueProductLineUids(tempOrder);
1303
+ ensureUniqueProductLineUids(tempOrder, discountList);
1300
1304
  consolidateDiscountFreeProductLines(tempOrder);
1301
1305
  }
1302
1306
  if (result !== null && result !== void 0 && result.discountList) {
@@ -1777,7 +1781,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1777
1781
  }, {
1778
1782
  key: "persistTempOrder",
1779
1783
  value: function persistTempOrder() {
1780
- if (!this.sessionStoragePersistEnabled || !this.store.tempOrder) return;
1784
+ if (!this.store.tempOrder) return;
1785
+ ensureHolderRelationUuids(this.store.tempOrder);
1786
+ if (!this.sessionStoragePersistEnabled) return;
1781
1787
  this.checkSaveCache({
1782
1788
  cacheId: this.cacheId,
1783
1789
  fatherModule: this.fatherModule,
@@ -2697,12 +2703,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2697
2703
  selling_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.selling_price),
2698
2704
  original_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.original_price),
2699
2705
  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),
2700
- metadata: {
2706
+ metadata: _objectSpread({
2701
2707
  source_product_price: this.normalizeFingerprintMoney(metadata.source_product_price),
2702
2708
  main_product_selling_price: this.normalizeFingerprintMoney(metadata.main_product_selling_price),
2703
2709
  main_product_original_price: this.normalizeFingerprintMoney(metadata.main_product_original_price),
2704
2710
  product_discount_difference: this.normalizeFingerprintMoney(metadata.product_discount_difference)
2705
- },
2711
+ }, !hasProductBooking(product) ? {
2712
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(this.store.tempOrder || {}, product))
2713
+ } : {}),
2706
2714
  product_sku: this.normalizeFingerprintValue({
2707
2715
  code: (_sku$code = sku.code) !== null && _sku$code !== void 0 ? _sku$code : '',
2708
2716
  barcode: (_sku$barcode = sku.barcode) !== null && _sku$barcode !== void 0 ? _sku$barcode : '',
@@ -2769,6 +2777,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2769
2777
  _ref37,
2770
2778
  _sku$variant_id2,
2771
2779
  _this19 = this;
2780
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2772
2781
  var sku = (product === null || product === void 0 ? void 0 : product.product_sku) || {};
2773
2782
  var metadata = (product === null || product === void 0 ? void 0 : product.metadata) || {};
2774
2783
  var discountTypes = ((product === null || product === void 0 ? void 0 : product.discount_list) || []).map(function (discount) {
@@ -2784,12 +2793,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2784
2793
  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,
2785
2794
  extension_type: extensionType,
2786
2795
  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),
2787
- metadata: {
2796
+ metadata: _objectSpread({
2788
2797
  unique_identification_number: (_ref36 = (_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 && _ref36 !== void 0 ? _ref36 : '',
2789
2798
  price_override: (_metadata$price_overr = metadata.price_override) !== null && _metadata$price_overr !== void 0 ? _metadata$price_overr : '',
2790
2799
  is_manual_discount: (_metadata$is_manual_d = metadata.is_manual_discount) !== null && _metadata$is_manual_d !== void 0 ? _metadata$is_manual_d : '',
2791
2800
  product_discount_reason: (_metadata$product_dis = metadata.product_discount_reason) !== null && _metadata$product_dis !== void 0 ? _metadata$product_dis : ''
2792
- },
2801
+ }, !hasProductBooking(product) ? {
2802
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(order, product))
2803
+ } : {}),
2793
2804
  product_sku: this.normalizeFingerprintValue({
2794
2805
  code: (_sku$code2 = sku.code) !== null && _sku$code2 !== void 0 ? _sku$code2 : '',
2795
2806
  barcode: (_sku$barcode2 = sku.barcode) !== null && _sku$barcode2 !== void 0 ? _sku$barcode2 : '',
@@ -2842,8 +2853,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2842
2853
  key: "buildOrderProductsStructuralFingerprint",
2843
2854
  value: function buildOrderProductsStructuralFingerprint(products) {
2844
2855
  var _this20 = this;
2856
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2845
2857
  var items = (products || []).map(function (product) {
2846
- return _this20.buildProductStructuralFingerprintItem(product);
2858
+ return _this20.buildProductStructuralFingerprintItem(product, order);
2847
2859
  });
2848
2860
  items.sort(function (left, right) {
2849
2861
  return JSON.stringify(left).localeCompare(JSON.stringify(right));
@@ -2929,7 +2941,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2929
2941
  var manualDepositOverride = this.getManualDepositOverride(tempOrder);
2930
2942
  if (currentFingerprint !== snapshot.productFingerprint) {
2931
2943
  var currentStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(tempOrder.products);
2932
- var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : []);
2944
+ var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : [], snapshot);
2933
2945
  if (currentStructuralFingerprint !== snapshotStructuralFingerprint) return null;
2934
2946
  }
2935
2947
  var summary = _objectSpread(_objectSpread({}, createEmptySummary()), cloneDeep(snapshot.summary || {}));
@@ -3287,8 +3299,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3287
3299
  }, {
3288
3300
  key: "sanitizeOrderProductForTempOrder",
3289
3301
  value: function sanitizeOrderProductForTempOrder(product) {
3302
+ var _product$_extend;
3303
+ var deferHolderCleanup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3290
3304
  if (product.metadata && _typeof(product.metadata) === 'object') {
3291
3305
  delete product.metadata.origin;
3306
+ if (!deferHolderCleanup && !hasProductBooking(product)) {
3307
+ delete product.metadata.holder;
3308
+ delete product.metadata.holder_id;
3309
+ }
3310
+ }
3311
+ if (((_product$_extend = product._extend) === null || _product$_extend === void 0 ? void 0 : _product$_extend.holder_relations) !== undefined) {
3312
+ delete product._extend.holder_relations;
3292
3313
  }
3293
3314
  return product;
3294
3315
  }
@@ -4364,6 +4385,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4364
4385
  var nextCustomerId = (_tempOrder$customer_i4 = tempOrder.customer_id) !== null && _tempOrder$customer_i4 !== void 0 ? _tempOrder$customer_i4 : null;
4365
4386
  if (String(previousCustomerId !== null && previousCustomerId !== void 0 ? previousCustomerId : '') !== String(nextCustomerId !== null && nextCustomerId !== void 0 ? nextCustomerId : '')) {
4366
4387
  this.clearCustomerWalletState(tempOrder);
4388
+ removeProductHolderRelations(tempOrder, tempOrder.products.filter(function (product) {
4389
+ return !hasProductBooking(product);
4390
+ }));
4367
4391
  }
4368
4392
  this.persistTempOrder();
4369
4393
  return {
@@ -5088,6 +5112,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5088
5112
  _normalizedIncoming$p2,
5089
5113
  _booking_uid,
5090
5114
  _metadata,
5115
+ _productToAdd$_extend,
5091
5116
  _productToAdd$metadat,
5092
5117
  _origin,
5093
5118
  _this35 = this;
@@ -5122,10 +5147,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5122
5147
  var hasIncomingProductNote = this.hasOrderProductLineNote(normalizedIncoming);
5123
5148
  var hasIncomingManualProductDiscount = isManualProductDiscountProduct(normalizedIncoming);
5124
5149
  var hasIncomingBookingUid = this.hasLinkedBookingUid(productToAdd) || this.hasLinkedBookingUid(normalizedIncoming);
5150
+ var holderRelationsPatch = !hasIncomingBookingUid ? (_productToAdd$_extend = productToAdd._extend) === null || _productToAdd$_extend === void 0 ? void 0 : _productToAdd$_extend.holder_relations : undefined;
5151
+ var hasIncomingHolder = Array.isArray(holderRelationsPatch) && holderRelationsPatch.length > 0;
5125
5152
  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;
5126
- var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || isIncomingCustomItem || isWeighingProduct;
5153
+ var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || hasIncomingHolder || isIncomingCustomItem || isWeighingProduct;
5127
5154
  var matchedIndex = shouldForceNewLine ? -1 : tempOrder.products.findIndex(function (item) {
5155
+ var _item$metadata4;
5128
5156
  if (_this35.hasGoodPassDiscount(item)) return false;
5157
+ if (getProductHolderRelations(tempOrder, item).length > 0 || hasAssignedHolderId((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.holder_id)) return false;
5129
5158
  var isRuntimeEntitlementPass = _this35.isRuntimeEntitlementAppend(item, tempOrder);
5130
5159
  if (isIncomingEntitlementAppend !== isRuntimeEntitlementPass) {
5131
5160
  return false;
@@ -5209,6 +5238,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5209
5238
  if (linked) {
5210
5239
  tempOrder.bookings = [].concat(_toConsumableArray(tempOrder.bookings || []), [linked.booking]);
5211
5240
  }
5241
+ replaceProductHolderRelations(tempOrder, committedProduct, holderRelationsPatch);
5212
5242
  return committedProduct;
5213
5243
  };
5214
5244
  if (!matchedProduct) {
@@ -5350,6 +5380,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5350
5380
  });
5351
5381
  mutationSnapshot = salesNoteDrafts.length > 0 ? {
5352
5382
  products: cloneDeep(tempOrder.products || []),
5383
+ holder_relations: cloneDeep(tempOrder.holder_relations),
5353
5384
  bookings: cloneDeep(tempOrder.bookings || []),
5354
5385
  notes: cloneDeep(tempOrder.notes || []),
5355
5386
  extend: cloneDeep(tempOrder._extend || {})
@@ -5375,6 +5406,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5375
5406
  rollbackProductAndNotesMutation = function rollbackProductAndNotesMutation() {
5376
5407
  if (!mutationSnapshot) return;
5377
5408
  tempOrder.products = mutationSnapshot.products;
5409
+ if (mutationSnapshot.holder_relations === undefined) delete tempOrder.holder_relations;else tempOrder.holder_relations = mutationSnapshot.holder_relations;
5378
5410
  tempOrder.bookings = mutationSnapshot.bookings;
5379
5411
  tempOrder.notes = mutationSnapshot.notes;
5380
5412
  tempOrder._extend = mutationSnapshot.extend;
@@ -5646,12 +5678,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5646
5678
  }, {
5647
5679
  key: "getFullCoveragePassDiscounts",
5648
5680
  value: function getFullCoveragePassDiscounts(product) {
5649
- var _product$_extend;
5681
+ var _product$_extend2;
5650
5682
  var discountList = _toConsumableArray(product.discount_list || []);
5651
5683
  (product.product_bundle || []).forEach(function (item) {
5652
5684
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5653
5685
  });
5654
- ((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) {
5686
+ ((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) {
5655
5687
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5656
5688
  });
5657
5689
  return discountList.filter(function (item) {
@@ -5763,15 +5795,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5763
5795
  if (((_params$updates = params.updates) === null || _params$updates === void 0 ? void 0 : _params$updates.num) === undefined) return false;
5764
5796
  var uid = params.unique_identification_number;
5765
5797
  var product = uid !== undefined ? tempOrder.products.find(function (item) {
5766
- var _item$metadata4;
5767
- return String(((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.unique_identification_number) || item.unique_identification_number || '') === String(uid);
5798
+ var _item$metadata5;
5799
+ return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === String(uid);
5768
5800
  }) : tempOrder.products[getProductIdentityIndex(tempOrder.products, params)];
5769
5801
  return !product || getSafeProductNum(params.updates.num) > product.num;
5770
5802
  }
5771
5803
  }, {
5772
5804
  key: "applyOrderProductUpdateToTempOrder",
5773
5805
  value: function applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids) {
5774
- var _targetProduct$metada2, _product_sku, _metadata2, _metadata3, _metadata4, _metadata5, _metadata6, _metadata7, _metadata8, _metadata9, _metadata10, _nextProduct$metadata2, _targetProduct$metada20, _tempOrder$products$p, _tempOrder$products$p2;
5806
+ 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;
5775
5807
  var product_id = params.product_id,
5776
5808
  product_variant_id = params.product_variant_id,
5777
5809
  updates = params.updates,
@@ -5799,8 +5831,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5799
5831
  if (unique_identification_number !== undefined) {
5800
5832
  var targetUid = String(unique_identification_number);
5801
5833
  productIndex = tempOrder.products.findIndex(function (item) {
5802
- var _item$metadata5;
5803
- return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5834
+ var _item$metadata6;
5835
+ return String(((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5804
5836
  });
5805
5837
  }
5806
5838
  if (productIndex === -1) {
@@ -6000,6 +6032,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6000
6032
  if (uid) reapplyWeighedDiscountProductUids === null || reapplyWeighedDiscountProductUids === void 0 || reapplyWeighedDiscountProductUids.push(String(uid));
6001
6033
  }
6002
6034
  tempOrder.products[productIndex] = normalizedProduct;
6035
+ replaceProductHolderRelations(tempOrder, normalizedProduct, (_updates$_extend = updates._extend) === null || _updates$_extend === void 0 ? void 0 : _updates$_extend.holder_relations);
6003
6036
  this.syncTempOrderHolderFromBookings(tempOrder);
6004
6037
  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);
6005
6038
  return (_tempOrder$products$p2 = tempOrder.products[productIndex].metadata) === null || _tempOrder$products$p2 === void 0 ? void 0 : _tempOrder$products$p2.unique_identification_number;
@@ -6214,8 +6247,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6214
6247
  if (unique_identification_number !== undefined) {
6215
6248
  targetUid = String(unique_identification_number);
6216
6249
  productIndex = tempOrder.products.findIndex(function (item) {
6217
- var _item$metadata6;
6218
- return String(((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number || '') === targetUid;
6250
+ var _item$metadata7;
6251
+ return String(((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number || '') === targetUid;
6219
6252
  });
6220
6253
  }
6221
6254
  if (productIndex === -1) {
@@ -6439,8 +6472,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6439
6472
  bookingsBeforeRemove = tempOrder.bookings || [];
6440
6473
  preserveDisplayPosition = options === null || options === void 0 ? void 0 : options.preserveDisplayPosition;
6441
6474
  anchorIndex = preserveDisplayPosition ? productsBeforeRemove.findIndex(function (item) {
6442
- var _item$metadata7;
6443
- var uid = ((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number;
6475
+ var _item$metadata8;
6476
+ var uid = ((_item$metadata8 = item.metadata) === null || _item$metadata8 === void 0 ? void 0 : _item$metadata8.unique_identification_number) || item.unique_identification_number;
6444
6477
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.anchorProductUid);
6445
6478
  }) : -1;
6446
6479
  productsAfterAnchor = anchorIndex >= 0 ? productsBeforeRemove.slice(anchorIndex + 1) : [];
@@ -6536,8 +6569,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6536
6569
  }
6537
6570
  if (preserveDisplayPosition && anchorIndex >= 0) {
6538
6571
  remainingProductIndex = tempOrder.products.findIndex(function (item) {
6539
- var _item$metadata8;
6540
- var uid = ((_item$metadata8 = item.metadata) === null || _item$metadata8 === void 0 ? void 0 : _item$metadata8.unique_identification_number) || item.unique_identification_number;
6572
+ var _item$metadata9;
6573
+ var uid = ((_item$metadata9 = item.metadata) === null || _item$metadata9 === void 0 ? void 0 : _item$metadata9.unique_identification_number) || item.unique_identification_number;
6541
6574
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.remainingProductUid);
6542
6575
  });
6543
6576
  if (remainingProductIndex >= 0) {
@@ -6550,24 +6583,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6550
6583
  tempOrder.products = nextProductIndex >= 0 ? [].concat(_toConsumableArray(productsWithoutRemaining.slice(0, nextProductIndex)), [remainingProduct], _toConsumableArray(productsWithoutRemaining.slice(nextProductIndex))) : [].concat(_toConsumableArray(productsWithoutRemaining), [remainingProduct]);
6551
6584
  }
6552
6585
  }
6586
+ removeProductHolderRelations(tempOrder, productsBeforeRemove.filter(function (product) {
6587
+ return !tempOrder.products.includes(product);
6588
+ }));
6553
6589
  this.removeSalesNotesForMissingProductLines(tempOrder);
6554
6590
  if (!mutation.commit) {
6555
- _context41.next = 41;
6591
+ _context41.next = 42;
6556
6592
  break;
6557
6593
  }
6558
- _context41.next = 40;
6594
+ _context41.next = 41;
6559
6595
  return mutation.commit();
6560
- case 40:
6561
- tempOrder = _context41.sent;
6562
6596
  case 41:
6563
- _context41.next = 43;
6597
+ tempOrder = _context41.sent;
6598
+ case 42:
6599
+ _context41.next = 44;
6564
6600
  return this.finalizeAfterProductsMutation(tempOrder);
6565
- case 43:
6601
+ case 44:
6566
6602
  this.logInfo('removeProductsFromOrder success', {
6567
6603
  identities: identities
6568
6604
  });
6569
6605
  return _context41.abrupt("return", tempOrder.products);
6570
- case 45:
6606
+ case 46:
6571
6607
  case "end":
6572
6608
  return _context41.stop();
6573
6609
  }
@@ -6634,6 +6670,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6634
6670
  mutation = this.beginCartMutation();
6635
6671
  tempOrder = mutation.draft;
6636
6672
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6673
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6637
6674
  tempOrder.products = [];
6638
6675
  tempOrder.bookings = [];
6639
6676
  releaseTempOrderSettlementState(tempOrder);
@@ -6645,30 +6682,30 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6645
6682
  });
6646
6683
  }
6647
6684
  if (!mutation.commit) {
6648
- _context44.next = 13;
6685
+ _context44.next = 14;
6649
6686
  break;
6650
6687
  }
6651
- _context44.next = 12;
6688
+ _context44.next = 13;
6652
6689
  return mutation.commit();
6653
- case 12:
6654
- tempOrder = _context44.sent;
6655
6690
  case 13:
6656
- _context44.next = 15;
6691
+ tempOrder = _context44.sent;
6692
+ case 14:
6693
+ _context44.next = 16;
6657
6694
  return this.evaluatePromotion();
6658
- case 15:
6695
+ case 16:
6659
6696
  promotionPayload = _context44.sent;
6660
6697
  this.applyDiscount();
6661
6698
  this.sanitizeTempOrderProducts(tempOrder);
6662
- _context44.next = 20;
6699
+ _context44.next = 21;
6663
6700
  return this.recalculateSummary({
6664
6701
  createIfMissing: true
6665
6702
  });
6666
- case 20:
6703
+ case 21:
6667
6704
  this.persistTempOrder();
6668
6705
  this.emitPromotionApplied(promotionPayload);
6669
6706
  this.logInfo('clearOrderCartLines success', {});
6670
6707
  return _context44.abrupt("return", tempOrder);
6671
- case 24:
6708
+ case 25:
6672
6709
  case "end":
6673
6710
  return _context44.stop();
6674
6711
  }
@@ -6693,6 +6730,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6693
6730
  case 0:
6694
6731
  tempOrder = this.ensureTempOrder();
6695
6732
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6733
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6696
6734
  tempOrder.products = [];
6697
6735
  tempOrder.bookings = [];
6698
6736
  this.removeSalesNotesForMissingProductLines(tempOrder);
@@ -6708,24 +6746,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6708
6746
  productsByUid: {}
6709
6747
  });
6710
6748
  }
6711
- _context45.next = 15;
6749
+ _context45.next = 16;
6712
6750
  return (_this$store$discount22 = this.store.discount) === null || _this$store$discount22 === void 0 ? void 0 : _this$store$discount22.setDiscountList([]);
6713
- case 15:
6714
- _context45.next = 17;
6751
+ case 16:
6752
+ _context45.next = 18;
6715
6753
  return (_this$store$discount23 = this.store.discount) === null || _this$store$discount23 === void 0 ? void 0 : _this$store$discount23.setOriginalDiscountList([]);
6716
- case 17:
6754
+ case 18:
6717
6755
  this.hasActiveCustomerBoundDiscount = false;
6718
6756
  this.lastUnfulfilledPromotions = [];
6719
6757
  this.lastGiftActions = null;
6720
- _context45.next = 22;
6758
+ _context45.next = 23;
6721
6759
  return this.recalculateSummary({
6722
6760
  createIfMissing: true
6723
6761
  });
6724
- case 22:
6762
+ case 23:
6725
6763
  this.persistTempOrder();
6726
6764
  this.logInfo('clearOrderForSettlementSwitch success', {});
6727
6765
  return _context45.abrupt("return", tempOrder);
6728
- case 25:
6766
+ case 26:
6729
6767
  case "end":
6730
6768
  return _context45.stop();
6731
6769
  }
@@ -7853,6 +7891,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7853
7891
  originalSalesSnapshot: _objectSpread(_objectSpread({
7854
7892
  summary: cloneDeep(this.store.summary),
7855
7893
  products: cloneDeep(nextTempOrder.products || []),
7894
+ holder_relations: cloneDeep(nextTempOrder.holder_relations),
7856
7895
  bookings: cloneDeep(nextTempOrder.bookings || []),
7857
7896
  payments: cloneDeep(nextTempOrder.payments || []),
7858
7897
  surcharges: cloneDeep(nextTempOrder.surcharges || []),
@@ -8047,6 +8086,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
8047
8086
  delete nextTempOrder.total_refund_amount;
8048
8087
  delete nextTempOrder.holder_id;
8049
8088
  nextTempOrder.metadata = raw.metadata && _typeof(raw.metadata) === 'object' ? _objectSpread({}, raw.metadata) : {};
8089
+ var holderRelations = restoreLegacyHolderRelations(raw);
8090
+ if (holderRelations === undefined) delete nextTempOrder.holder_relations;else nextTempOrder.holder_relations = cloneDeep(holderRelations);
8091
+ ensureHolderRelationUuids(nextTempOrder);
8050
8092
  nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
8051
8093
  var rawProducts = Array.isArray(raw.products) ? raw.products : [];
8052
8094
  nextTempOrder.products = rawProducts.length > 0 ? rawProducts.map(function (p) {
@@ -8135,6 +8177,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
8135
8177
  }
8136
8178
  tempOrderExtend.productsByUid = productsByUid;
8137
8179
  this.hydrateLinkedBookingIdentity(nextTempOrder);
8180
+ nextTempOrder.products.forEach(function (product) {
8181
+ return _this51.sanitizeOrderProductForTempOrder(product);
8182
+ });
8138
8183
  if ((options === null || options === void 0 ? void 0 : options.ensureIdentity) !== false) {
8139
8184
  this.ensureExternalSaleNumber(nextTempOrder);
8140
8185
  }
@@ -8319,7 +8364,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
8319
8364
  });
8320
8365
  if (result.metadata) delete result.metadata.price_schema_version;
8321
8366
  var restored = restoreHydratedBundleDiscounts(result, normalizeOrderProductDiscountList);
8322
- return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored));
8367
+ return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored), true);
8323
8368
  }
8324
8369
  }, {
8325
8370
  key: "getLastOrderInfo",
@@ -242,6 +242,11 @@ export interface OrderProduct extends OrderProductIdentity {
242
242
  product_cover?: string;
243
243
  metadata: Record<string, any>;
244
244
  note?: string;
245
+ /** 仅作按行更新输入;正式数据保存于订单顶层。 */
246
+ _extend?: {
247
+ holder_relations?: OrderHolderRelation[];
248
+ [key: string]: any;
249
+ };
245
250
  }
246
251
  export interface OrderSummary {
247
252
  product_quantity: number;
@@ -339,6 +344,17 @@ export interface SalesNotesMutationSnapshot {
339
344
  }
340
345
  export type SalesNoteProtocolRelation = SalesNoteRelation;
341
346
  export type SalesNoteProtocol = SalesNote;
347
+ /** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
348
+ export interface OrderHolderRelation {
349
+ /** 关系自身的 UUID;新选择/旧草稿可缺省,入单与提交时由 OS 补齐。 */
350
+ uuid?: string;
351
+ relation_model: string;
352
+ relation_uuid: string;
353
+ holder_type: 'form' | 'customer';
354
+ holder_id: number;
355
+ metadata?: Record<string, any>;
356
+ [key: string]: any;
357
+ }
342
358
  export interface OrderTempOrder {
343
359
  order_id: number | null;
344
360
  external_sale_number: string;
@@ -378,6 +394,7 @@ export interface OrderTempOrder {
378
394
  created_at: string | undefined;
379
395
  request_unique_idempotency_token?: string;
380
396
  products: OrderProduct[];
397
+ holder_relations?: OrderHolderRelation[];
381
398
  notes: SalesNote[];
382
399
  bookings: any[];
383
400
  payments: any[];
@@ -397,7 +414,7 @@ export interface OrderTempOrder {
397
414
  [key: string]: any;
398
415
  };
399
416
  }
400
- export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num'> {
417
+ export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num' | '_extend'> {
401
418
  product_quantity: number;
402
419
  payment_price: string;
403
420
  product_sku: OrderProductSku;
@@ -598,6 +615,7 @@ export interface SubmitSalesOrderParams {
598
615
  schedule_date: string;
599
616
  created_at?: string | undefined;
600
617
  products: OrderSubmitProduct[];
618
+ holder_relations?: OrderHolderRelation[];
601
619
  bookings: OrderSubmitBooking[];
602
620
  payments: any[];
603
621
  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
  *