@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
@@ -1,4 +1,5 @@
1
1
  import type { ScheduleEventResource } from '../resource/types';
2
+ import type { OrderHolderRelation } from '../../../modules/Order/types';
2
3
  /**
3
4
  * Order 模块主键类型(对齐标准 Sales 协议的 order_id)
4
5
  */
@@ -448,6 +449,8 @@ export interface OrderData {
448
449
  contacts_info?: unknown[];
449
450
  /** 订单级主体参数 */
450
451
  holder?: Record<string, unknown> | null;
452
+ /** 非预约商品 Holder 关系完整快照;缺席表示本次回包未提供 */
453
+ holder_relations?: OrderHolderRelation[];
451
454
  /** 订单前端扩展快照 */
452
455
  order_meta_list?: {
453
456
  point_cards_snapshot?: Array<{
@@ -29,6 +29,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
29
29
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
30
30
  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); }
31
31
  import { BaseModule } from "../../../modules/BaseModule";
32
+ import { resolveProductHolderConfig } from "../../../modules/Holder/utils";
32
33
  import { QuotationModule as ClientQuotationModule } from "../../../modules/Quotation";
33
34
  import { ProductsHooks } from "./types";
34
35
  import { applyDetailValueToProducts, applyPriceDataToProducts, applyI18nToProducts, perfMark } from "../../utils/product";
@@ -1444,7 +1445,7 @@ export var ProductsModule = /*#__PURE__*/function (_BaseModule) {
1444
1445
  key: "getProductSnapshotsByIds",
1445
1446
  value: (function () {
1446
1447
  var _getProductSnapshotsByIds = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(ids) {
1447
- var snapshots, seen, _iterator6, _step6, id, product;
1448
+ var snapshots, seen, _iterator6, _step6, _resolveProductHolder, id, product;
1448
1449
  return _regeneratorRuntime().wrap(function _callee13$(_context13) {
1449
1450
  while (1) switch (_context13.prev = _context13.next) {
1450
1451
  case 0:
@@ -1475,7 +1476,7 @@ export var ProductsModule = /*#__PURE__*/function (_BaseModule) {
1475
1476
  case 13:
1476
1477
  snapshots[String(id)] = {
1477
1478
  cover: product.cover,
1478
- holder_config: product.holder_config
1479
+ holder_config: (_resolveProductHolder = resolveProductHolderConfig(product)) !== null && _resolveProductHolder !== void 0 ? _resolveProductHolder : undefined
1479
1480
  };
1480
1481
  case 14:
1481
1482
  _context13.next = 5;
@@ -20,6 +20,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
20
  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); }
21
21
  import dayjs from 'dayjs';
22
22
  import Decimal from 'decimal.js';
23
+ import { getProductHolderRelations, hasProductBooking } from "../../modules/Order/holderRelations";
23
24
  import { isFulfillmentTimingBooking } from "../../modules/Order/pickupTiming";
24
25
  import { resolveInvoiceDataVisibility } from "./templateVisibility";
25
26
  var DEFAULT_LOCALES = ['en', 'zh_CN'];
@@ -115,6 +116,7 @@ var LABELS = {
115
116
  bookingDateTime: 'Date & time',
116
117
  bookingResource: 'Resource',
117
118
  bookingHolder: 'Holder',
119
+ productHolder: 'Holder',
118
120
  orderDiscount: 'Order discount',
119
121
  manualDiscount: 'Manual discount',
120
122
  manualMarkup: 'Manual markup',
@@ -160,6 +162,7 @@ var LABELS = {
160
162
  bookingDateTime: '日期和时间',
161
163
  bookingResource: '资源',
162
164
  bookingHolder: '预约人',
165
+ productHolder: '持有人',
163
166
  orderDiscount: '整单折扣',
164
167
  manualDiscount: '手动折扣',
165
168
  manualMarkup: '手动加价',
@@ -205,6 +208,7 @@ var LABELS = {
205
208
  bookingDateTime: '日期和時間',
206
209
  bookingResource: '資源',
207
210
  bookingHolder: '預約人',
211
+ productHolder: '持有人',
208
212
  orderDiscount: '整單折扣',
209
213
  manualDiscount: '手動折扣',
210
214
  manualMarkup: '手動加價',
@@ -248,6 +252,7 @@ var LABELS = {
248
252
  bookingDateTime: '日時',
249
253
  bookingResource: 'リソース',
250
254
  bookingHolder: '予約者',
255
+ productHolder: '利用者',
251
256
  orderDiscount: '注文割引',
252
257
  manualDiscount: '手動割引',
253
258
  manualMarkup: '手動値上げ',
@@ -292,6 +297,7 @@ var LABELS = {
292
297
  bookingDateTime: 'Data e hora',
293
298
  bookingResource: 'Recurso',
294
299
  bookingHolder: 'Titular',
300
+ productHolder: 'Titular',
295
301
  orderDiscount: 'Desconto do pedido',
296
302
  manualDiscount: 'Desconto manual',
297
303
  manualMarkup: 'Acréscimo manual',
@@ -461,6 +467,17 @@ function buildProducts(order, locale, productMap) {
461
467
  quantity: quantity,
462
468
  originalPrice: originalPrice
463
469
  });
470
+ var holderName = hasProductBooking(product) ? '' : getProductHolderRelations(order, product).map(function (relation) {
471
+ var _relation$metadata;
472
+ return getLocalizedValue((_relation$metadata = relation.metadata) === null || _relation$metadata === void 0 ? void 0 : _relation$metadata.name, locale).trim();
473
+ }).filter(Boolean).join(', ');
474
+ if (holderName) {
475
+ // 复用 Web Invoice / 原生均支持的文本扩展行,不混入金额或商品备注。
476
+ extensionList.push(_objectSpread(_objectSpread({}, receiptKey(rawProduct, 'product-holder')), {}, {
477
+ item: "".concat(label(locale, 'productHolder'), ": ").concat(holderName),
478
+ value: ''
479
+ }));
480
+ }
464
481
  var productNote = resolveProductNote(product, locale);
465
482
  var allergy = isPresentId(productUid) ? allergyByProductUid.get(String(productUid).trim()) || '' : '';
466
483
  var basePrice = resolveProductBasePrice(product);
@@ -1222,12 +1239,6 @@ function buildFees(params) {
1222
1239
  var isPriceIncludeTax = firstPresentValue(summary.is_price_include_tax, order.is_price_include_tax, shopInfo.is_price_include_tax);
1223
1240
  var roundingAmount = firstPresentValue(summary.rounding_amount, order.rounding_amount);
1224
1241
  var payProcessingFee = financials.payProcessingFee;
1225
- if (isNonZero(payProcessingFee)) {
1226
- fees.push(_objectSpread(_objectSpread({}, receiptKey(order, 'payment-processing-fee')), {}, {
1227
- item: label(locale, 'payProcessingFee'),
1228
- value: formatMoney(payProcessingFee, currencySymbol)
1229
- }));
1230
- }
1231
1242
  var productExpectAmount = firstPresentValue(summary.product_expect_amount, summary.product_amount, order.product_expect_amount);
1232
1243
  var productOriginalAmount = (_firstPresentValue2 = firstPresentValue(summary.product_original_amount, order.product_original_amount)) !== null && _firstPresentValue2 !== void 0 ? _firstPresentValue2 : calculateProductOriginalAmount(order);
1233
1244
  var totalSavingsAmount = new Decimal(toMoneyNumber(productOriginalAmount)).minus(toMoneyNumber(productExpectAmount)).plus(toMoneyNumber(discountAmount));
@@ -4,7 +4,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
4
4
  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; }
5
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
6
  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); }
7
- export var SALES_ORDER_RELATIONS = ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info', 'order_meta_list', 'refunds', 'notes'];
7
+ export var SALES_ORDER_RELATIONS = ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info', 'order_meta_list', 'refunds', 'notes', 'holder_relations'];
8
8
 
9
9
  /** Shared transport contract; remote callers use their host's /h5 prefix. */
10
10
  export function loadSalesOrderSnapshot(request, params) {
@@ -5,6 +5,7 @@ import { BaseSalesOrderProduct, BaseSalesOrderProductIdentity, BaseSalesPaymentS
5
5
  import { OrderModule } from '../../modules/Order';
6
6
  import { type PickupTimingBookingInput } from '../../modules/Order/pickupTiming';
7
7
  import type { PickupTimingAvailability, PickupTimingSelection, PickupTimingValidationResult } from '../../modules/FulfillmentTiming';
8
+ import { type ContactInfoConfig } from '../../modules/OpenData/contactInfo';
8
9
  import type { AddProductBookingInput, AddProductToOrderOptions, LoadSalesDetailParams, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, OrderPaymentSource, SendCustomerPayLinkParams, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, UpdateTempOrderCustomerInput, UpdateOrderBookingParams, UpdateOrderProductParams, OrderTempOrder, OrderSummary, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, ReplaceTempOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, ShopServiceData, ShopServiceType } from '../../modules/Order/types';
9
10
  import type { SubmitPayloadEnhancer } from '../../modules/Order/utils';
10
11
  import type { Discount, VirtualCurrencyAsset } from '../../modules/Discount/types';
@@ -281,6 +282,9 @@ export declare class BaseSalesImpl extends BaseModule implements Module {
281
282
  setPickupTimingBooking(input: PickupTimingBookingInput): import("../../modules/Order").PickupTimingBooking;
282
283
  clearPickupTimingBooking(): void;
283
284
  updateTempOrderContactsInfo(contactsInfo: Record<string, any> | null): Record<string, any> | null;
285
+ protected loadContactInfoOpenData(): Promise<OpenDataConfig | null>;
286
+ getContactInfoConfig(): Promise<ContactInfoConfig>;
287
+ validateContactInfo(): Promise<void>;
284
288
  /** @deprecated OrderModule 不再负责 tempOrder localStorage 持久化。 */
285
289
  setEnableTempOrderPersist(enabled: boolean): void;
286
290
  /** 是否允许 saveDraft 写入 IndexedDB 草稿。 */