@pisell/pisellos 0.0.501 → 0.0.502

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 (42) hide show
  1. package/dist/modules/Order/index.d.ts +4 -0
  2. package/dist/modules/Order/index.js +23 -3
  3. package/dist/modules/Order/types.d.ts +9 -1
  4. package/dist/modules/Order/utils.d.ts +8 -1
  5. package/dist/modules/Order/utils.js +28 -12
  6. package/dist/solution/BookingByStep/index.d.ts +2 -2
  7. package/dist/solution/ScanOrder/index.d.ts +15 -0
  8. package/dist/solution/ScanOrder/index.js +652 -375
  9. package/dist/solution/ScanOrder/types.d.ts +9 -3
  10. package/dist/solution/VenueBooking/index.d.ts +28 -5
  11. package/dist/solution/VenueBooking/index.js +472 -234
  12. package/dist/solution/VenueBooking/types.d.ts +23 -0
  13. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +1 -1
  14. package/dist/solution/VenueBooking/utils/dateSummary.js +1 -1
  15. package/dist/solution/VenueBooking/utils/resource.d.ts +11 -1
  16. package/dist/solution/VenueBooking/utils/resource.js +57 -21
  17. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +5 -0
  18. package/dist/solution/VenueBooking/utils/slotMerge.js +33 -12
  19. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +1 -1
  20. package/dist/solution/VenueBooking/utils/timeSlot.js +259 -62
  21. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  22. package/lib/modules/Order/index.d.ts +4 -0
  23. package/lib/modules/Order/index.js +21 -8
  24. package/lib/modules/Order/types.d.ts +9 -1
  25. package/lib/modules/Order/utils.d.ts +8 -1
  26. package/lib/modules/Order/utils.js +23 -13
  27. package/lib/solution/BookingByStep/index.d.ts +2 -2
  28. package/lib/solution/ScanOrder/index.d.ts +15 -0
  29. package/lib/solution/ScanOrder/index.js +221 -10
  30. package/lib/solution/ScanOrder/types.d.ts +9 -3
  31. package/lib/solution/VenueBooking/index.d.ts +28 -5
  32. package/lib/solution/VenueBooking/index.js +204 -58
  33. package/lib/solution/VenueBooking/types.d.ts +23 -0
  34. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +1 -1
  35. package/lib/solution/VenueBooking/utils/dateSummary.js +1 -1
  36. package/lib/solution/VenueBooking/utils/resource.d.ts +11 -1
  37. package/lib/solution/VenueBooking/utils/resource.js +15 -4
  38. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +5 -0
  39. package/lib/solution/VenueBooking/utils/slotMerge.js +29 -12
  40. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +1 -1
  41. package/lib/solution/VenueBooking/utils/timeSlot.js +182 -43
  42. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { Module, PisellCore, ModuleOptions } from '../../types';
2
2
  import { BaseModule } from '../BaseModule';
3
3
  import { OrderModuleAPI, CommitOrderParams, SubmitScanOrderParams, ScanOrderMoreParams, CheckoutOrderParams } from './types';
4
4
  import { CartItem } from '../Cart/types';
5
+ import { type SubmitPayloadEnhancer } from './utils';
5
6
  import type { ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderSummary, ScanOrderTempOrder } from '../../solution/ScanOrder/types';
6
7
  import type { Discount } from '../Discount/types';
7
8
  import { UnavailableReason } from '../Rules/types';
@@ -57,6 +58,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
57
58
  persistTempOrder(): void;
58
59
  private createDefaultTempOrderInstance;
59
60
  ensureTempOrder(): ScanOrderTempOrder;
61
+ restoreOrder(): ScanOrderTempOrder;
60
62
  getTempOrder(): ScanOrderTempOrder | null;
61
63
  addNewOrder(): Promise<ScanOrderTempOrder>;
62
64
  getOrderProducts(): ScanOrderOrderProduct[];
@@ -66,6 +68,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
66
68
  }): Promise<ScanOrderSummary | null>;
67
69
  getScanOrderSummary(): Promise<ScanOrderSummary>;
68
70
  updateTempOrderNote(note: string): string;
71
+ updateTempOrderBuzzer(buzzer: string): string;
69
72
  updateTempOrderContactsInfo(contactsInfo: any[]): any[];
70
73
  addProductToOrder(product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity): Promise<ScanOrderOrderProduct[]>;
71
74
  updateProductInOrder(params: {
@@ -80,6 +83,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
80
83
  businessCode?: string;
81
84
  channel?: string;
82
85
  type?: string;
86
+ enhancePayload?: SubmitPayloadEnhancer;
83
87
  }): Promise<T>;
84
88
  createOrder(params: CommitOrderParams['query']): {
85
89
  type: "virtual" | "appointment_booking";
@@ -325,9 +325,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
325
325
  }, {
326
326
  key: "applyDiscount",
327
327
  value: function applyDiscount() {
328
- var _tempOrder$products, _this$store$discount6, _tempOrder$holder3, _tempOrder$holder4, _tempOrder$summary2;
328
+ var _this$store$discount6, _tempOrder$holder3, _tempOrder$holder4, _tempOrder$summary2;
329
329
  var tempOrder = this.store.tempOrder;
330
- if (!(tempOrder !== null && tempOrder !== void 0 && (_tempOrder$products = tempOrder.products) !== null && _tempOrder$products !== void 0 && _tempOrder$products.length)) return;
330
+ // 任意 products CRUD 后都应当重算 discount 状态;即使 products 为空,
331
+ // 也需要让 Rules.calcDiscount 把 DiscountModule 的 isSelected / isAvailable /
332
+ // appliedProductDetails / savedAmount 以及 tempOrder.discount_list 复位。
333
+ if (!tempOrder) return;
331
334
  var rulesModule = this.store.rules;
332
335
  if (!rulesModule) return;
333
336
  var discountList = ((_this$store$discount6 = this.store.discount) === null || _this$store$discount6 === void 0 ? void 0 : _this$store$discount6.getDiscountList()) || [];
@@ -417,6 +420,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
417
420
  this.persistTempOrder();
418
421
  return newOrder;
419
422
  }
423
+ }, {
424
+ key: "restoreOrder",
425
+ value: function restoreOrder() {
426
+ var freshTempOrder = this.createDefaultTempOrderInstance();
427
+ this.store.tempOrder = freshTempOrder;
428
+ this.persistTempOrder();
429
+ return freshTempOrder;
430
+ }
420
431
  }, {
421
432
  key: "getTempOrder",
422
433
  value: function getTempOrder() {
@@ -558,6 +569,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
558
569
  this.persistTempOrder();
559
570
  return tempOrder.note;
560
571
  }
572
+ }, {
573
+ key: "updateTempOrderBuzzer",
574
+ value: function updateTempOrderBuzzer(buzzer) {
575
+ var tempOrder = this.ensureTempOrder();
576
+ tempOrder.buzzer = String(buzzer || '');
577
+ this.persistTempOrder();
578
+ return tempOrder.buzzer;
579
+ }
561
580
  }, {
562
581
  key: "updateTempOrderContactsInfo",
563
582
  value: function updateTempOrderContactsInfo(contactsInfo) {
@@ -711,7 +730,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
711
730
  platform: params === null || params === void 0 ? void 0 : params.platform,
712
731
  businessCode: params === null || params === void 0 ? void 0 : params.businessCode,
713
732
  channel: params === null || params === void 0 ? void 0 : params.channel,
714
- type: params === null || params === void 0 ? void 0 : params.type
733
+ type: params === null || params === void 0 ? void 0 : params.type,
734
+ enhance: params === null || params === void 0 ? void 0 : params.enhancePayload
715
735
  });
716
736
  if (!tempOrder.order_id) {
717
737
  _context10.next = 12;
@@ -3,6 +3,7 @@ import type { ScanOrderTempOrder, ScanOrderOrderProduct, ScanOrderOrderProductId
3
3
  import type { DiscountModule } from '../Discount';
4
4
  import type { RulesModule } from '../Rules';
5
5
  import type { Discount } from '../Discount/types';
6
+ import type { SubmitPayloadEnhancer } from './utils';
6
7
  export declare enum OrderHooks {
7
8
  OnOrderCreate = "order:onOrderCreate",
8
9
  OnOrderUpdate = "order:onOrderUpdate",
@@ -68,10 +69,12 @@ export interface SubmitScanOrderBooking {
68
69
  start_time?: string;
69
70
  end_time?: string;
70
71
  metadata?: Record<string, any>;
72
+ resources?: Array<Record<string, any>>;
73
+ product_uid?: string;
71
74
  }
72
75
  export interface SubmitScanOrderFormRecord {
73
76
  form_id: number | string;
74
- form_record_ids: Array<number | string>;
77
+ form_record_id: number | string;
75
78
  }
76
79
  export interface SubmitScanOrderParams {
77
80
  url?: string;
@@ -107,6 +110,8 @@ export interface SubmitScanOrderParams {
107
110
  shop_discount: string;
108
111
  surcharge_fee: string;
109
112
  note: string;
113
+ delivery_type?: string;
114
+ table_number?: Record<string, any>;
110
115
  schedule_date: string;
111
116
  created_at?: string;
112
117
  products: SubmitScanOrderProduct[];
@@ -195,12 +200,14 @@ export interface OrderModuleAPI {
195
200
  getTempOrder: () => ScanOrderTempOrder | null;
196
201
  ensureTempOrder: () => ScanOrderTempOrder;
197
202
  addNewOrder: () => Promise<ScanOrderTempOrder>;
203
+ restoreOrder: () => ScanOrderTempOrder;
198
204
  getOrderProducts: () => ScanOrderOrderProduct[];
199
205
  getScanOrderSummary: () => Promise<ScanOrderSummary>;
200
206
  recalculateSummary: (options?: {
201
207
  createIfMissing?: boolean;
202
208
  }) => Promise<ScanOrderSummary | null>;
203
209
  updateTempOrderNote: (note: string) => string;
210
+ updateTempOrderBuzzer: (buzzer: string) => string;
204
211
  updateTempOrderContactsInfo: (contactsInfo: any[]) => any[];
205
212
  addProductToOrder: (product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity) => Promise<ScanOrderOrderProduct[]>;
206
213
  updateProductInOrder: (params: {
@@ -216,6 +223,7 @@ export interface OrderModuleAPI {
216
223
  businessCode?: string;
217
224
  channel?: string;
218
225
  type?: string;
226
+ enhancePayload?: SubmitPayloadEnhancer;
219
227
  }) => Promise<T>;
220
228
  loadDiscountConfig: (params: {
221
229
  customerId: number;
@@ -56,6 +56,12 @@ export declare function createDefaultTempOrder(params: {
56
56
  now: string;
57
57
  summary?: ScanOrderSummary;
58
58
  }): ScanOrderTempOrder;
59
+ export interface SubmitPayloadEnhancerContext {
60
+ tempOrder: ScanOrderTempOrder;
61
+ bookingUuid: string;
62
+ now: Date;
63
+ }
64
+ export type SubmitPayloadEnhancer = (payload: ScanOrderSubmitPayload, ctx: SubmitPayloadEnhancerContext) => ScanOrderSubmitPayload;
59
65
  export declare function buildSubmitPayload(params: {
60
66
  tempOrder: ScanOrderTempOrder;
61
67
  cacheId?: string;
@@ -64,6 +70,7 @@ export declare function buildSubmitPayload(params: {
64
70
  businessCode?: string;
65
71
  channel?: string;
66
72
  type?: string;
73
+ enhance?: SubmitPayloadEnhancer;
67
74
  }): ScanOrderSubmitPayload;
68
75
  export declare function formatV1Product(products: ScanOrderSubmitProduct[]): {
69
76
  bundle: any[];
@@ -71,7 +78,7 @@ export declare function formatV1Product(products: ScanOrderSubmitProduct[]): {
71
78
  option: any[];
72
79
  product_id: number | null;
73
80
  product_variant_id: number;
74
- quantity: number;
81
+ num: number;
75
82
  rowKey: number | null;
76
83
  session: null;
77
84
  unique: string;
@@ -1,5 +1,6 @@
1
1
  var _excluded = ["_origin", "identity_key"],
2
- _excluded2 = ["created_at", "summary", "surcharges"];
2
+ _excluded2 = ["created_at", "summary", "surcharges"],
3
+ _excluded3 = ["collect_pax", "table_occupancy_duration"];
3
4
  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; } } }; }
4
5
  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; }
5
6
  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; }
@@ -187,6 +188,9 @@ function normalizeSubmitProduct(product) {
187
188
  if (rawMetadata.price_breakdown) {
188
189
  cleanMetadata.price_breakdown = rawMetadata.price_breakdown;
189
190
  }
191
+ if (rawMetadata.is_rule !== undefined) {
192
+ cleanMetadata.is_rule = rawMetadata.is_rule;
193
+ }
190
194
  return _objectSpread(_objectSpread(_objectSpread({}, submitProduct), bookingUid ? {
191
195
  booking_uid: bookingUid
192
196
  } : {}), {}, {
@@ -303,7 +307,8 @@ export function buildSubmitPayload(params) {
303
307
  platform = params.platform,
304
308
  businessCode = params.businessCode,
305
309
  channel = params.channel,
306
- type = params.type;
310
+ type = params.type,
311
+ enhance = params.enhance;
307
312
  var scheduleDate = tempOrder.schedule_date || tempOrder.created_at || formatDateTime(now);
308
313
  var summary = tempOrder.summary || createEmptySummary();
309
314
  var relationId = tempOrder.relation_id;
@@ -313,8 +318,8 @@ export function buildSubmitPayload(params) {
313
318
  var bookingDuration = resolveTableOccupancyDuration(tempOrder);
314
319
  var bookingEnd = bookingStart.add(bookingDuration, 'minute');
315
320
  var bookings = relationId && tableFormId ? [{
316
- relation_id: relationId,
317
- form_id: tableFormId,
321
+ relation_id: 0,
322
+ form_id: 0,
318
323
  start_time: bookingStart.format('HH:mm'),
319
324
  start_date: bookingStart.format('YYYY-MM-DD'),
320
325
  end_time: bookingEnd.format('HH:mm'),
@@ -326,20 +331,20 @@ export function buildSubmitPayload(params) {
326
331
  },
327
332
  select_date: bookingStart.format('YYYY-MM-DD'),
328
333
  is_all: false,
329
- "like_status": "common",
330
- "schedule_id": 0,
331
- "relation_type": "form",
332
- "number": 1
334
+ like_status: 'common',
335
+ schedule_id: 0,
336
+ relation_type: '',
337
+ number: 1
333
338
  }] : tempOrder.bookings || [];
334
339
  var formRecordIds = relationId && tableFormId ? [{
335
340
  form_id: tableFormId,
336
- form_record_ids: [relationId]
341
+ form_record_id: relationId
337
342
  }] : undefined;
338
343
  var _createdAt = tempOrder.created_at,
339
344
  _summary = tempOrder.summary,
340
345
  _surcharges = tempOrder.surcharges,
341
346
  tempOrderRest = _objectWithoutProperties(tempOrder, _excluded2);
342
- return _objectSpread(_objectSpread({}, tempOrderRest), {}, {
347
+ var payload = _objectSpread(_objectSpread({}, tempOrderRest), {}, {
343
348
  platform: normalizeSubmitPlatform(platform !== null && platform !== void 0 ? platform : tempOrder.platform),
344
349
  request_unique_idempotency_token: cacheId,
345
350
  type: (_ref2 = type !== null && type !== void 0 ? type : tempOrder.type) !== null && _ref2 !== void 0 ? _ref2 : 'table-order',
@@ -368,11 +373,22 @@ export function buildSubmitPayload(params) {
368
373
  contacts_info: tempOrder.contacts_info || [],
369
374
  // holder: tempOrder.holder || null,
370
375
  // summary,
371
- metadata: _objectSpread({}, tempOrder.metadata),
376
+ metadata: function () {
377
+ var _ref5 = tempOrder.metadata || {},
378
+ _collectPax = _ref5.collect_pax,
379
+ _tableOccupancyDuration = _ref5.table_occupancy_duration,
380
+ rest = _objectWithoutProperties(_ref5, _excluded3);
381
+ return _objectSpread({}, rest);
382
+ }(),
372
383
  products: (tempOrder.products || []).map(function (product) {
373
384
  return normalizeSubmitProduct(product);
374
385
  })
375
386
  });
387
+ return enhance ? enhance(payload, {
388
+ tempOrder: tempOrder,
389
+ bookingUuid: bookingUuid,
390
+ now: now
391
+ }) : payload;
376
392
  }
377
393
  export function formatV1Product(products) {
378
394
  return products.map(function (product) {
@@ -382,7 +398,7 @@ export function formatV1Product(products) {
382
398
  option: product.product_option_item,
383
399
  product_id: product.product_id,
384
400
  product_variant_id: product.product_variant_id,
385
- quantity: product.num,
401
+ num: product.num,
386
402
  rowKey: product.product_id,
387
403
  session: null,
388
404
  unique: createUuidV4()
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
311
311
  date: string;
312
312
  status: string;
313
313
  week: string;
314
- weekNum: 0 | 5 | 1 | 4 | 2 | 3 | 6;
314
+ weekNum: 0 | 1 | 2 | 3 | 4 | 5 | 6;
315
315
  }[]>;
316
316
  submitTimeSlot(timeSlots: TimeSliceItem): void;
317
317
  private getScheduleDataByIds;
@@ -330,7 +330,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
330
330
  count: number;
331
331
  left: number;
332
332
  summaryCount: number;
333
- status: "sold_out" | "lots_of_space" | "filling_up_fast";
333
+ status: "lots_of_space" | "filling_up_fast" | "sold_out";
334
334
  }[];
335
335
  /**
336
336
  * 找到多个资源的公共可用时间段
@@ -52,10 +52,17 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
52
52
  };
53
53
  getTempOrder(): import("./types").ScanOrderTempOrder | null;
54
54
  updateTempOrderNote(note: string): string;
55
+ setPickupReferenceMode(mode: 'counter_pickup' | 'table_service'): {
56
+ service_type: 'dine_in';
57
+ pickup_reference_mode: 'counter_pickup' | 'table_service';
58
+ };
59
+ setPickupRef(buzzer: string): string;
55
60
  private ensureTempOrder;
56
61
  addNewOrder(): Promise<import("./types").ScanOrderTempOrder>;
62
+ restoreOrder(): Promise<import("./types").ScanOrderTempOrder>;
57
63
  getOrderProducts(): ScanOrderOrderProduct[];
58
64
  getSummary(): Promise<import("./types").ScanOrderSummary>;
65
+ private buildReservationRuleEnhancer;
59
66
  submitScanOrder<T = any>(): Promise<T>;
60
67
  addProductToOrder(product: Partial<ScanOrderOrderProduct> & ScanOrderOrderProductIdentity): Promise<ScanOrderOrderProduct[]>;
61
68
  updateProductInOrder(params: {
@@ -94,4 +101,12 @@ export declare class ScanOrderImpl extends BaseModule implements Module {
94
101
  }): Promise<void>;
95
102
  setEntryPaxNumber(number: number): Promise<void>;
96
103
  getEntryPaxNumber(): number | null;
104
+ getFulfillmentModes(): {
105
+ enablePickup: boolean;
106
+ enableTableService: boolean;
107
+ };
108
+ checkManualPickupRef(): {
109
+ enabled: boolean;
110
+ manualInputType?: string;
111
+ };
97
112
  }