@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
@@ -1,8 +1,10 @@
1
- import type { OrderProduct } from '../../Order/types';
1
+ import type { OrderHolderRelation, OrderProduct } from '../../Order/types';
2
2
  export interface BuildNormalProductCacheItemFromOrderLineInput {
3
3
  /** tempOrder.products 中的一行(普通商品,无关联 booking) */
4
4
  product: OrderProduct;
5
5
  /** 商品 catalog / 详情,用于 variant / option / bundle 模板字段 */
6
6
  sourceProduct?: Record<string, any> | null;
7
+ /** 整单关系集合,按商品行 UID 回填。 */
8
+ holder_relations?: OrderHolderRelation[];
7
9
  }
8
10
  export declare function buildNormalProductCacheItemFromOrderLine(input: BuildNormalProductCacheItemFromOrderLineInput): Record<string, any>;
@@ -7,13 +7,15 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
7
7
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
8
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
9
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
+ import { cloneDeep } from 'lodash-es';
11
+ import { getProductHolderRelations } from "../../Order/holderRelations";
10
12
  import { getProductSkuOptions } from "../../Order/utils";
11
13
  import { isEntitlementPass } from "../../Discount/entitlementPass";
12
14
  import { buildProductOptionStringFromOrderLine } from "./orderLineDisplay";
13
15
  /**
14
16
  * 从已加车的普通商品 order line 反查 SkuDetailModal edit 所需的 cacheItem。
15
17
  *
16
- * 与 `buildCacheItemFromOrderLine`(预约行 + booking)并列;不含 resource / duration / holder 等预约字段。
18
+ * 与 `buildCacheItemFromOrderLine`(预约行 + booking)并列;Holder 从订单关系回填,不生成预约字段。
17
19
  */
18
20
  /**
19
21
  * 解析 v2 主商品 source 价(不含 option、不含 bundle),供 SkuDetailModal / transform 使用。
@@ -85,7 +87,7 @@ function mapOrderBundleToOtherBundle(bundle) {
85
87
  });
86
88
  }
87
89
  export function buildNormalProductCacheItemFromOrderLine(input) {
88
- var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$metadata3, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata4, _originExtend$priceOv, _product$metadata5, _ref7, _title2, _ref8, _cover, _price3, _product$order_detail, _product$product_sku;
90
+ var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$metadata3, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata4, _originExtend$priceOv, _product$metadata5, _product$metadata6, _ref7, _title2, _ref8, _cover, _price3, _product$order_detail, _product$product_sku;
89
91
  var product = input.product,
90
92
  sourceProduct = input.sourceProduct;
91
93
  var resolvedId = (_product$product_id = product.product_id) !== null && _product$product_id !== void 0 ? _product$product_id : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.id;
@@ -94,6 +96,23 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
94
96
  var original = Number((_product$original_pri = product.original_price) !== null && _product$original_pri !== void 0 ? _product$original_pri : selling);
95
97
  var uid = (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.unique_identification_number;
96
98
  var originExtend = (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 || (_product$metadata2 = _product$metadata2.origin) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2._extend;
99
+ var holderRelations = cloneDeep(getProductHolderRelations(input, product));
100
+ var formRelations = holderRelations.filter(function (relation) {
101
+ return relation.holder_type === 'form';
102
+ });
103
+ var holderIds = formRelations.map(function (relation) {
104
+ return relation.holder_id;
105
+ });
106
+ var holderNames = formRelations.map(function (relation) {
107
+ var _relation$metadata;
108
+ return (_relation$metadata = relation.metadata) === null || _relation$metadata === void 0 ? void 0 : _relation$metadata.name;
109
+ }).filter(function (name) {
110
+ return typeof name === 'string' && name.length > 0;
111
+ });
112
+ var holder = formRelations.length > 0 ? _objectSpread(_objectSpread({}, formRelations[0].metadata || {}), {}, {
113
+ form_record: holderIds,
114
+ name: holderNames.join(',')
115
+ }) : null;
97
116
  var shouldPreserveEntitlementPriceOverride = hasEntitlementPassDiscount(product) && ((originExtend === null || originExtend === void 0 ? void 0 : originExtend.priceOverride) !== undefined || ((_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.price_override) != null);
98
117
  var hasPriceOverride = (originExtend === null || originExtend === void 0 ? void 0 : originExtend.priceOverride) !== undefined || shouldPreserveEntitlementPriceOverride;
99
118
  var option = getProductSkuOptions(product);
@@ -125,6 +144,9 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
125
144
  skuValue: JSON.parse(JSON.stringify(skuValue)),
126
145
  _skuValue: JSON.parse(JSON.stringify(skuValue)),
127
146
  isNormalProduct: true,
147
+ holder_relations: holderRelations,
148
+ holder: holder,
149
+ holder_id: holderIds,
128
150
  metadata: {
129
151
  product_add_schedule_time: (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.product_add_schedule_time
130
152
  }
@@ -140,6 +162,7 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
140
162
  extend._skuValue = JSON.parse(JSON.stringify(extend.skuValue));
141
163
  }
142
164
  return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
165
+ holder_config: (sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.holder_config) !== undefined ? sourceProduct.holder_config : (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.holder_config,
143
166
  id: resolvedId,
144
167
  product_id: resolvedId,
145
168
  _id: uid,
@@ -0,0 +1,14 @@
1
+ import type { OrderHolderRelation, OrderTempOrder } from './types';
2
+ /** 在原订单上补齐关系身份,让缓存、提交和重试共用同一个 UUID。 */
3
+ export declare function ensureHolderRelationUuids(order: {
4
+ holder_relations?: OrderHolderRelation[];
5
+ }): void;
6
+ export declare function hasProductBooking(product: Record<string, any>): boolean;
7
+ export declare function getProductHolderRelations(order: {
8
+ holder_relations?: OrderHolderRelation[];
9
+ }, product: Record<string, any>): OrderHolderRelation[];
10
+ export declare function replaceProductHolderRelations(order: OrderTempOrder, product: Record<string, any>, patch: OrderHolderRelation[] | undefined): void;
11
+ /** 只删除明确被用户删除的行,不从稀疏远端快照推断删除。 */
12
+ export declare function removeProductHolderRelations(order: OrderTempOrder, products: Array<Record<string, any>>): void;
13
+ /** 仅兼容尚无新字段的旧测试草稿;显式 [] 永远不恢复旧 product 数据。 */
14
+ export declare function restoreLegacyHolderRelations(order: Record<string, any>): OrderHolderRelation[] | undefined;
@@ -0,0 +1,154 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
7
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
9
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
10
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
11
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
12
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
+ 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; }
14
+ import { createUuidV4 } from "./utils/orderCollectionIdentity";
15
+ function getHolderRelationUuid(relation) {
16
+ return typeof (relation === null || relation === void 0 ? void 0 : relation.uuid) === 'string' && relation.uuid.trim() ? relation.uuid : undefined;
17
+ }
18
+
19
+ /** 在原订单上补齐关系身份,让缓存、提交和重试共用同一个 UUID。 */
20
+ export function ensureHolderRelationUuids(order) {
21
+ if (!Array.isArray(order.holder_relations)) return;
22
+ var _iterator = _createForOfIteratorHelper(order.holder_relations),
23
+ _step;
24
+ try {
25
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
26
+ var relation = _step.value;
27
+ if (relation && _typeof(relation) === 'object' && !getHolderRelationUuid(relation)) {
28
+ relation.uuid = createUuidV4();
29
+ }
30
+ }
31
+ } catch (err) {
32
+ _iterator.e(err);
33
+ } finally {
34
+ _iterator.f();
35
+ }
36
+ }
37
+ export function hasProductBooking(product) {
38
+ var _product$metadata, _product$metadata2;
39
+ var bookingIds = [product.booking_id, (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.booking_id, product.schedule_event_id];
40
+ return Boolean(product.booking_uid || ((_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.booking_uid)) || bookingIds.some(function (id) {
41
+ return id !== undefined && id !== null && String(id) !== '' && String(id) !== '0';
42
+ });
43
+ }
44
+ export function getProductHolderRelations(order, product) {
45
+ var _product$metadata$uni, _product$metadata3;
46
+ var uid = (_product$metadata$uni = (_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number;
47
+ if (uid === undefined || uid === null || uid === '') return [];
48
+ return (order.holder_relations || []).filter(function (relation) {
49
+ return relation.relation_model === 'order_detail' && String(relation.relation_uuid) === String(uid);
50
+ });
51
+ }
52
+ export function replaceProductHolderRelations(order, product, patch) {
53
+ var _product$metadata$uni2, _product$metadata4;
54
+ if (patch === undefined || hasProductBooking(product)) return;
55
+ var uid = (_product$metadata$uni2 = (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.unique_identification_number) !== null && _product$metadata$uni2 !== void 0 ? _product$metadata$uni2 : product.unique_identification_number;
56
+ if (uid === undefined || uid === null || uid === '') return;
57
+ var existing = getProductHolderRelations(order, product);
58
+ var next = new Map();
59
+ var _iterator2 = _createForOfIteratorHelper(patch),
60
+ _step2;
61
+ try {
62
+ var _loop = function _loop() {
63
+ var relation = _step2.value;
64
+ var key = "".concat(relation.holder_type, ":").concat(relation.holder_id);
65
+ var previous = existing.find(function (item) {
66
+ return item.holder_type === relation.holder_type && String(item.holder_id) === String(relation.holder_id);
67
+ });
68
+ next.set(key, _objectSpread(_objectSpread(_objectSpread({}, previous), relation), {}, {
69
+ uuid: getHolderRelationUuid(previous) || getHolderRelationUuid(relation) || createUuidV4(),
70
+ relation_model: 'order_detail',
71
+ relation_uuid: String(uid)
72
+ }, previous !== null && previous !== void 0 && previous.metadata || relation.metadata ? {
73
+ metadata: _objectSpread(_objectSpread({}, previous === null || previous === void 0 ? void 0 : previous.metadata), relation.metadata)
74
+ } : {}));
75
+ };
76
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
77
+ _loop();
78
+ }
79
+ } catch (err) {
80
+ _iterator2.e(err);
81
+ } finally {
82
+ _iterator2.f();
83
+ }
84
+ order.holder_relations = [].concat(_toConsumableArray((order.holder_relations || []).filter(function (relation) {
85
+ return relation.relation_model !== 'order_detail' || String(relation.relation_uuid) !== String(uid);
86
+ })), _toConsumableArray(next.values()));
87
+ }
88
+
89
+ /** 只删除明确被用户删除的行,不从稀疏远端快照推断删除。 */
90
+ export function removeProductHolderRelations(order, products) {
91
+ if (!Array.isArray(order.holder_relations)) return;
92
+ var removedUids = new Set(products.map(function (product) {
93
+ var _ref, _product$metadata$uni3, _product$metadata5;
94
+ return String((_ref = (_product$metadata$uni3 = (_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.unique_identification_number) !== null && _product$metadata$uni3 !== void 0 ? _product$metadata$uni3 : product.unique_identification_number) !== null && _ref !== void 0 ? _ref : '');
95
+ }));
96
+ order.holder_relations = order.holder_relations.filter(function (relation) {
97
+ return relation.relation_model !== 'order_detail' || !removedUids.has(String(relation.relation_uuid));
98
+ });
99
+ }
100
+
101
+ /** 仅兼容尚无新字段的旧测试草稿;显式 [] 永远不恢复旧 product 数据。 */
102
+ export function restoreLegacyHolderRelations(order) {
103
+ if (Object.prototype.hasOwnProperty.call(order, 'holder_relations')) {
104
+ return Array.isArray(order.holder_relations) ? order.holder_relations : undefined;
105
+ }
106
+ var relations = [];
107
+ var bookingProductUids = new Set((order.bookings || []).map(function (booking) {
108
+ var _ref2, _booking$product_uid, _booking$metadata;
109
+ return String((_ref2 = (_booking$product_uid = booking.product_uid) !== null && _booking$product_uid !== void 0 ? _booking$product_uid : (_booking$metadata = booking.metadata) === null || _booking$metadata === void 0 ? void 0 : _booking$metadata.product_uid) !== null && _ref2 !== void 0 ? _ref2 : '');
110
+ }));
111
+ var _iterator3 = _createForOfIteratorHelper(order.products || []),
112
+ _step3;
113
+ try {
114
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
115
+ var _product$metadata$uni4, _product$metadata6, _product$metadata7, _product$metadata$hol, _product$metadata8;
116
+ var product = _step3.value;
117
+ if (hasProductBooking(product)) continue;
118
+ var uid = (_product$metadata$uni4 = (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.unique_identification_number) !== null && _product$metadata$uni4 !== void 0 ? _product$metadata$uni4 : product.unique_identification_number;
119
+ if (uid === undefined || uid === null || uid === '' || bookingProductUids.has(String(uid))) continue;
120
+ var holder = ((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7.holder) || {};
121
+ var rawIds = (_product$metadata$hol = (_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8.holder_id) !== null && _product$metadata$hol !== void 0 ? _product$metadata$hol : holder.form_record;
122
+ var ids = (Array.isArray(rawIds) ? rawIds : [rawIds]).filter(function (id) {
123
+ return id !== undefined && id !== null && id !== '' && Number.isInteger(Number(id)) && Number(id) >= 0;
124
+ });
125
+ var _iterator4 = _createForOfIteratorHelper(ids),
126
+ _step4;
127
+ try {
128
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
129
+ var id = _step4.value;
130
+ var metadata = _objectSpread(_objectSpread({}, holder), {}, {
131
+ form_record: [Number(id)]
132
+ });
133
+ if (ids.length !== 1) delete metadata.name;
134
+ relations.push({
135
+ relation_model: 'order_detail',
136
+ relation_uuid: String(uid),
137
+ holder_type: 'form',
138
+ holder_id: Number(id),
139
+ metadata: metadata
140
+ });
141
+ }
142
+ } catch (err) {
143
+ _iterator4.e(err);
144
+ } finally {
145
+ _iterator4.f();
146
+ }
147
+ }
148
+ } catch (err) {
149
+ _iterator3.e(err);
150
+ } finally {
151
+ _iterator3.f();
152
+ }
153
+ return relations.length ? relations : undefined;
154
+ }
@@ -609,7 +609,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
609
609
  generateIdempotencyToken(): string;
610
610
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
611
611
  createOrder(params: CommitOrderParams['query']): {
612
- type: "appointment_booking" | "virtual";
612
+ type: "virtual" | "appointment_booking";
613
613
  platform: string;
614
614
  sales_channel: string;
615
615
  order_sales_channel: string;
@@ -687,6 +687,6 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
687
687
  getOrderInfo(order_id: number): Promise<any>;
688
688
  getVouchers(): any[];
689
689
  }
690
- export type { AddProductToOrderOptions, OrderMetaList, PointCardSnapshotItem, VirtualCurrencySnapshotItem, RemoveProductsFromOrderOptions, SalesNote, SalesNoteDraftInput, SalesNoteLocalizedSelection, SalesNoteLocalizedText, SalesNoteRelation, SalesNoteTextInput, SetSalesNoteInput, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
690
+ export type { OrderHolderRelation, AddProductToOrderOptions, OrderMetaList, PointCardSnapshotItem, VirtualCurrencySnapshotItem, RemoveProductsFromOrderOptions, SalesNote, SalesNoteDraftInput, SalesNoteLocalizedSelection, SalesNoteLocalizedText, SalesNoteRelation, SalesNoteTextInput, SetSalesNoteInput, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
691
691
  export { isFulfillmentTimingBooking } from './pickupTiming';
692
692
  export type { PickupTimingBooking, PickupTimingBookingInput, PickupTimingBookingMetadata, PickupTimingSelectionMode, PickupTimingSource, } from './pickupTiming';