@chevre/domain 24.1.0-alpha.2 → 24.1.0-alpha.21

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 (69) hide show
  1. package/README.md +0 -2
  2. package/lib/chevre/repo/acceptedOffer.d.ts +22 -11
  3. package/lib/chevre/repo/acceptedOffer.js +199 -50
  4. package/lib/chevre/repo/accountingReport.d.ts +9 -2
  5. package/lib/chevre/repo/accountingReport.js +6 -34
  6. package/lib/chevre/repo/action/actionProcess.d.ts +1 -1
  7. package/lib/chevre/repo/aggregateReservation.d.ts +6 -0
  8. package/lib/chevre/repo/aggregateReservation.js +9 -0
  9. package/lib/chevre/repo/assetTransaction/reserve.d.ts +3 -1
  10. package/lib/chevre/repo/assetTransaction/reserve.js +3 -1
  11. package/lib/chevre/repo/event.js +12 -8
  12. package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.d.ts +9 -0
  13. package/lib/chevre/repo/factory/acceptedOffer/reserveTransaction2itemOffered.js +72 -0
  14. package/lib/chevre/repo/factory/reservation/createMongoConditions.js +155 -180
  15. package/lib/chevre/repo/mongoose/schemas/accountingReport.js +42 -42
  16. package/lib/chevre/repo/mongoose/schemas/order.js +108 -108
  17. package/lib/chevre/repo/mongoose/schemas/reservation.d.ts +3 -1
  18. package/lib/chevre/repo/mongoose/schemas/reservation.js +128 -146
  19. package/lib/chevre/repo/order.d.ts +2 -1
  20. package/lib/chevre/repo/order.js +171 -170
  21. package/lib/chevre/repo/orderInTransaction.d.ts +32 -2
  22. package/lib/chevre/repo/orderInTransaction.js +77 -0
  23. package/lib/chevre/repo/reservation.d.ts +20 -7
  24. package/lib/chevre/repo/reservation.js +14 -10
  25. package/lib/chevre/repo/role.d.ts +1 -15
  26. package/lib/chevre/repo/role.js +7 -14
  27. package/lib/chevre/repo/transaction.d.ts +6 -6
  28. package/lib/chevre/service/aggregation/event/aggregateOffers.js +22 -26
  29. package/lib/chevre/service/assetTransaction/cancelReservation/factory.js +14 -11
  30. package/lib/chevre/service/assetTransaction/cancelReservation/start.d.ts +1 -1
  31. package/lib/chevre/service/assetTransaction/cancelReservation/start.js +1 -1
  32. package/lib/chevre/service/assetTransaction/reserve/start/factory/createReservation.js +0 -12
  33. package/lib/chevre/service/assetTransaction/reserve/start/factory/price.d.ts +1 -1
  34. package/lib/chevre/service/offer/any.d.ts +3 -1
  35. package/lib/chevre/service/offer/event/authorize/factory.d.ts +2 -1
  36. package/lib/chevre/service/offer/event/authorize/factory.js +4 -7
  37. package/lib/chevre/service/offer/eventServiceByCOA/authorize/factory.d.ts +1 -0
  38. package/lib/chevre/service/order/createAccountingReportIfNotExist.d.ts +1 -3
  39. package/lib/chevre/service/order/createAccountingReportIfNotExist.js +67 -72
  40. package/lib/chevre/service/order/deleteOrder.js +21 -44
  41. package/lib/chevre/service/order/onAssetTransactionStatusChanged/paymentDue2Processing.js +9 -11
  42. package/lib/chevre/service/order/placeOrder/factory/orderedItem.d.ts +1 -1
  43. package/lib/chevre/service/order/placeOrder/factory/orderedItem.js +0 -5
  44. package/lib/chevre/service/order/placeOrder/factory.d.ts +1 -1
  45. package/lib/chevre/service/order/sendOrder.js +2 -4
  46. package/lib/chevre/service/reserve/confirmReservation.js +7 -7
  47. package/lib/chevre/service/reserve/factory.js +2 -1
  48. package/lib/chevre/service/reserve/findByCode.d.ts +1 -1
  49. package/lib/chevre/service/reserve/findByCode.js +2 -1
  50. package/lib/chevre/service/reserve/findReservations.d.ts +5 -2
  51. package/lib/chevre/service/reserve/findReservations.js +15 -9
  52. package/lib/chevre/service/reserve/potentialActions/onReservationConfirmed.d.ts +4 -3
  53. package/lib/chevre/service/reserve/potentialActions/onReservationConfirmed.js +1 -9
  54. package/lib/chevre/service/reserve/searchByOrder.js +8 -3
  55. package/lib/chevre/service/reserve/useReservation.d.ts +1 -1
  56. package/lib/chevre/service/reserve/useReservation.js +20 -24
  57. package/lib/chevre/service/task/confirmReserveTransaction.js +2 -1
  58. package/lib/chevre/service/task/createAccountingReport.js +7 -9
  59. package/lib/chevre/service/task/payment/payByTask.js +3 -2
  60. package/lib/chevre/service/task/useReservation.d.ts +2 -2
  61. package/lib/chevre/service/task/useReservation.js +6 -18
  62. package/lib/chevre/service/taskHandler.js +1 -0
  63. package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateInvoiceReferencesOrder.d.ts +1 -1
  64. package/lib/chevre/service/transaction/placeOrder/confirm/validation/validateMovieTicket.d.ts +1 -1
  65. package/lib/chevre/service/transaction/placeOrder/confirm/validation.d.ts +2 -2
  66. package/lib/chevre/service/transaction/placeOrder/confirm.js +5 -2
  67. package/lib/chevre/service/transaction/returnOrder/preStart.js +2 -4
  68. package/lib/chevre/service/validation/validateOrder.js +5 -79
  69. package/package.json +2 -2
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deleteOrder = deleteOrder;
4
- const factory_1 = require("../delivery/factory");
5
- const factory_2 = require("../../factory");
4
+ // import { createOwnershipInfosFromOrder } from '../delivery/factory';
5
+ const factory_1 = require("../../factory");
6
6
  /**
7
7
  * 注文に関わるリソースを削除する
8
8
  * 冪等性を確保すること
@@ -20,24 +20,24 @@ function deleteOrder(params) {
20
20
  return;
21
21
  }
22
22
  if (typeof order.id !== 'string') {
23
- throw new factory_2.factory.errors.Internal(`order.id undefined. orderNumber: ${params.object.orderNumber}`);
23
+ throw new factory_1.factory.errors.Internal(`order.id undefined. orderNumber: ${params.object.orderNumber}`);
24
24
  }
25
25
  // 注文アイテムの予約を削除
26
26
  await deleteReservationsByOrder(order)(repos);
27
- // 所有権削除
28
- try {
29
- await deleteOwnershipInfosByOrder(order)(repos);
30
- }
31
- catch (error) {
32
- console.error('deleteOwnershipInfosByOrder throws', error);
33
- }
27
+ // 所有権は所有期限でcleanされるので、注文削除時連動はひとまず廃止(2026-05-17~)
28
+ // // 所有権削除
29
+ // try {
30
+ // await deleteOwnershipInfosByOrder(order)(repos);
31
+ // } catch (error) {
32
+ // console.error('deleteOwnershipInfosByOrder throws', error);
33
+ // }
34
34
  // 経理レポート削除
35
35
  await repos.accountingReport.deleteByOrderNumber({ mainEntity: { orderNumber: order.orderNumber } });
36
36
  // メモ削除(2024-02-15~)
37
37
  await repos.note.deleteNotesByAbout({
38
38
  about: {
39
39
  id: order.id,
40
- typeOf: factory_2.factory.order.OrderType.Order
40
+ typeOf: factory_1.factory.order.OrderType.Order
41
41
  }
42
42
  });
43
43
  // 注文削除
@@ -49,7 +49,7 @@ function deleteOrder(params) {
49
49
  function deletePersonIfNecessary(order) {
50
50
  return async (repos) => {
51
51
  // 代理注文を除く
52
- const isCustomerPerson = order.customer.typeOf === factory_2.factory.personType.Person
52
+ const isCustomerPerson = order.customer.typeOf === factory_1.factory.personType.Person
53
53
  && typeof order.broker?.typeOf !== 'string';
54
54
  if (isCustomerPerson) {
55
55
  const ordersByPerson = await repos.order.projectFields({
@@ -60,12 +60,12 @@ function deletePersonIfNecessary(order) {
60
60
  if (ordersByPerson.length === 0) {
61
61
  const setting = await repos.setting.findOne({ project: { id: { $eq: '*' } } }, ['userPoolIdNew']);
62
62
  if (typeof setting?.userPoolIdNew !== 'string') {
63
- throw new factory_2.factory.errors.NotFound('setting.userPoolIdNew');
63
+ throw new factory_1.factory.errors.NotFound('setting.userPoolIdNew');
64
64
  }
65
65
  const deletePersonTask = {
66
- project: { typeOf: factory_2.factory.organizationType.Project, id: order.project.id },
67
- name: factory_2.factory.taskName.DeletePerson,
68
- status: factory_2.factory.taskStatus.Ready,
66
+ project: { typeOf: factory_1.factory.organizationType.Project, id: order.project.id },
67
+ name: factory_1.factory.taskName.DeletePerson,
68
+ status: factory_1.factory.taskStatus.Ready,
69
69
  runsAt: new Date(),
70
70
  remainingNumberOfTries: 10,
71
71
  numberOfTried: 0,
@@ -74,8 +74,8 @@ function deletePersonIfNecessary(order) {
74
74
  id: order.customer.id,
75
75
  agent: {
76
76
  id: order.project.id,
77
- typeOf: factory_2.factory.organizationType.Project,
78
- name: factory_2.factory.organizationType.Project
77
+ typeOf: factory_1.factory.organizationType.Project,
78
+ name: factory_1.factory.organizationType.Project
79
79
  },
80
80
  physically: true,
81
81
  userPoolId: setting.userPoolIdNew,
@@ -94,36 +94,13 @@ function deleteReservationsByOrder(order) {
94
94
  orderNumber: { $eq: order.orderNumber },
95
95
  project: { id: { $eq: order.project.id } },
96
96
  acceptedOffers: {
97
- itemOffered: { typeOf: { $in: [factory_2.factory.reservationType.EventReservation] } }
97
+ // itemOffered: { typeOf: { $in: [factory.reservationType.EventReservation] } }
98
98
  }
99
- });
99
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
100
+ );
100
101
  const reservationIds = acceptedOffers.map((o) => String(o.itemOffered.id));
101
102
  if (reservationIds.length > 0) {
102
103
  await repos.reservation.deleteByIds({ project: { id: order.project.id }, ids: reservationIds });
103
104
  }
104
105
  };
105
106
  }
106
- function deleteOwnershipInfosByOrder(order) {
107
- return async (repos) => {
108
- const now = new Date();
109
- const ownershipInfos = (0, factory_1.createOwnershipInfosFromOrder)({
110
- order: {
111
- ...order,
112
- acceptedOffers: await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
113
- orderNumber: { $eq: order.orderNumber },
114
- project: { id: { $eq: order.project.id } }
115
- })
116
- },
117
- offerIndexBase: 0
118
- });
119
- const ownershipIdentifiers = ownershipInfos.map((o) => String(o.identifier));
120
- if (ownershipIdentifiers.length > 0) {
121
- await repos.ownershipInfo.deleteExpiredByIdentifiers({
122
- project: { id: order.project.id },
123
- identifiers: ownershipIdentifiers,
124
- // 所有期限切れのもの(ownedThroughの存在しないものは削除してはいけない)
125
- ownedThrough: { $lte: now }
126
- });
127
- }
128
- };
129
- }
@@ -55,28 +55,26 @@ function paymentDue2Processing(params) {
55
55
  }
56
56
  }
57
57
  if (params.useOnOrderStatusChanged) {
58
- // 全acceptedOffersを検索(2023-12-08~)
59
- // const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber(
60
- // {
61
- // orderNumber: { $eq: order.orderNumber },
62
- // project: { id: { $eq: params.project.id } }
63
- // },
64
- // ['itemOffered', 'offeredThrough']
65
- // );
66
58
  const { numAcceptedOffers } = await repos.acceptedOffer.countByOrderNumber({
67
59
  orderNumber: { $eq: order.orderNumber },
68
60
  project: { id: { $eq: params.project.id } }
69
61
  });
70
- const itemOfferedTypeOfs = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.itemOffered.typeOf');
62
+ // const itemOfferedTypeOfs = await repos.acceptedOffer.distinctValues(
63
+ // { orderNumber: { $in: [params.orderNumber] } },
64
+ // 'acceptedOffers.itemOffered.typeOf'
65
+ // ) as factory.order.IItemOffered['typeOf'][];
71
66
  const serialNumbers = await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.serialNumber');
72
67
  const offeredThroughIdentifier = (await repos.acceptedOffer.distinctValues({ orderNumber: { $in: [params.orderNumber] } }, 'acceptedOffers.offeredThrough.identifier')).shift();
73
- debug('onAssetTransactionStatusChanged paymentDue2Processing: calling onOrderProcessing...', 'numAcceptedOffers:', numAcceptedOffers, 'itemOfferedTypeOfs:', itemOfferedTypeOfs, 'serialNumbers:', serialNumbers, 'offeredThroughIdentifier:', offeredThroughIdentifier);
68
+ debug('onAssetTransactionStatusChanged paymentDue2Processing: calling onOrderProcessing...', 'numAcceptedOffers:', numAcceptedOffers,
69
+ // 'itemOfferedTypeOfs:', itemOfferedTypeOfs,
70
+ 'serialNumbers:', serialNumbers, 'offeredThroughIdentifier:', offeredThroughIdentifier);
74
71
  await (0, onOrderStatusChanged_1.onOrderProcessing)({
75
72
  order: {
76
73
  ...order,
77
74
  // acceptedOffers,
78
75
  numAcceptedOffers,
79
- itemOfferedTypeOf: itemOfferedTypeOfs[0], // 1つしかない前提
76
+ // itemOfferedTypeOf: itemOfferedTypeOfs[0], // 1つしかない前提
77
+ itemOfferedTypeOf: factory_1.factory.reservationType.EventReservation, // EventReservationしか存在しないので固定でよし
80
78
  serialNumbers,
81
79
  offeredThroughIdentifier,
82
80
  orderStatus: factory_1.factory.orderStatus.OrderProcessing // 強制的にOrderProcessingとして処理する
@@ -3,6 +3,6 @@ import { factory } from '../../../../factory';
3
3
  * 受入オファーを注文アイテムに変換する
4
4
  */
5
5
  declare function acceptedOffers2orderedItem(params: {
6
- eventReservationAcceptedOffers: factory.order.IAcceptedOffer[];
6
+ eventReservationAcceptedOffers: Pick<factory.order.IAcceptedOffer, 'itemOffered'>[];
7
7
  }): factory.order.IOrderedItem[];
8
8
  export { acceptedOffers2orderedItem };
@@ -9,11 +9,6 @@ function acceptedOffers2orderedItem(params) {
9
9
  // 予約がある場合
10
10
  const { reservationOrderItems } = createReservationAcceptedOffers(params);
11
11
  // 通貨転送がある場合
12
- // const { moneyTransferOrderItems } = createMoneyTransferAcceptedOffers(params);
13
- // プロダクトがある場合
14
- // const { productOrderItems } = createProductItems(params);
15
- // return [...reservationOrderItems, ...moneyTransferOrderItems, ...productOrderItems];
16
- // return [...reservationOrderItems, ...productOrderItems];
17
12
  return reservationOrderItems;
18
13
  }
19
14
  function createReservationAcceptedOffers(params) {
@@ -1,7 +1,7 @@
1
1
  import type { IPlacingOrder } from '../../../repo/orderInTransaction';
2
2
  import { factory } from '../../../factory';
3
3
  type IPlaceOrderTransaction = Pick<factory.transaction.placeOrder.ITransaction, 'id' | 'project' | 'typeOf' | 'result' | 'object' | 'seller'>;
4
- type IOrderAcceptedOffer = factory.order.IAcceptedOffer;
4
+ type IOrderAcceptedOffer = Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>;
5
5
  declare function createPaymentMethods(params: {
6
6
  authorizePaymentActions: Pick<factory.action.authorize.paymentMethod.any.IAction, 'result'>[];
7
7
  }): {
@@ -94,10 +94,7 @@ function sendOrder(params) {
94
94
  case factory_2.factory.personType.Person:
95
95
  createOwnerships = true; // Personのみに限定(2026-03-15~)
96
96
  break;
97
- // case factory.creativeWorkType.WebApplication:
98
- // break;
99
97
  default:
100
- // createOwnerships = true;
101
98
  }
102
99
  try {
103
100
  const offerIndexBase = (limit * (page - 1));
@@ -105,7 +102,8 @@ function sendOrder(params) {
105
102
  $slice: [offerIndexBase, limit],
106
103
  orderNumber: { $eq: order.orderNumber },
107
104
  project: { id: { $eq: order.project.id } }
108
- });
105
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
106
+ );
109
107
  acceptedOffers = searchSlicedAcceptedOffersResult.acceptedOffers;
110
108
  debug('delivering...', order.orderNumber, acceptedOffers.map((offer) => `${offer.itemOffered.id}`), // eslint-disable-line @typescript-eslint/no-explicit-any
111
109
  params.object.acceptedOffers, 'offerIndexBase:', offerIndexBase);
@@ -61,7 +61,8 @@ function confirmReservation(params) {
61
61
  ...rawReservation.reservedTicket,
62
62
  ticketType: ticketTypeByTransaction
63
63
  },
64
- reservationFor: reserveTransaction.object.reservationFor // reservationForは予約取引から参照する(2026-04-05~)
64
+ reservationFor: reserveTransaction.object.reservationFor, // reservationForは予約取引から参照する(2026-04-05~)
65
+ issuedThrough: reserveTransaction.object.issuedThrough // issuedThroughは予約取引から補完する(2026-05-08~)
65
66
  };
66
67
  });
67
68
  confirmedReservations = confirmedReservations.map((r) => {
@@ -189,25 +190,24 @@ params, options) {
189
190
  if (reserveTransaction.object.disablePendingReservations === true) {
190
191
  const reservationFor = reserveTransaction.object.reservationFor;
191
192
  const subReservations = reserveTransaction.object.subReservation;
192
- const issuedThrough = reserveTransaction.object.issuedThrough;
193
+ // const issuedThrough = reserveTransaction.object.issuedThrough;
193
194
  if (Array.isArray(subReservations)
194
195
  && typeof reservationFor?.typeOf === 'string'
195
- && typeof issuedThrough?.typeOf === 'string') {
196
- // confirmManyに変更(2023-06-13~)
197
- const confirmManyIfNotExistResult = await repos.reservation.confirmManyIfNotExist({
196
+ // && typeof issuedThrough?.typeOf === 'string'
197
+ ) {
198
+ await repos.reservation.confirmManyIfNotExist({
198
199
  bookingTime: reserveTransaction.startDate, // startDateに設定(2024-04-08~)
199
200
  project: { id: reserveTransaction.project.id },
200
201
  provider: (typeof reserveTransaction.object.provider?.id === 'string')
201
202
  ? reserveTransaction.object.provider
202
203
  : { id: reserveTransaction.agent.id, typeOf: factory_1.factory.organizationType.Corporation },
203
204
  subReservation: subReservations,
204
- issuedThrough,
205
+ // issuedThrough,
205
206
  reservationFor,
206
207
  reservationNumber: reserveTransaction.object.reservationNumber,
207
208
  underName,
208
209
  broker: reserveTransaction.object.broker
209
210
  });
210
- debug('confirmManyIfNotExistResult:', confirmManyIfNotExistResult, 'reservationNumber:', reservationPackage.reservationNumber);
211
211
  }
212
212
  }
213
213
  else {
@@ -21,7 +21,8 @@ function createCancelPendingReservationAction(params) {
21
21
  const reservationPackage = {
22
22
  typeOf: factory_1.factory.reservationType.ReservationPackage,
23
23
  reservationNumber: transaction.transactionNumber,
24
- reservationFor: { typeOf: reservationFor.typeOf, id: String(reservationFor.id) },
24
+ // discontinue reservationFor(2026-05-09~)
25
+ // reservationFor: { typeOf: reservationFor.typeOf, id: String(reservationFor.id) },
25
26
  reservationStatus: (typeof params.transaction.object.reservationStatus === 'string')
26
27
  ? params.transaction.object.reservationStatus
27
28
  : factory_1.factory.reservationStatusType.ReservationPending
@@ -5,7 +5,7 @@ import type { OrderRepo } from '../../repo/order';
5
5
  import type { ReservationRepo } from '../../repo/reservation';
6
6
  type IReservationResult = Pick<factory.reservation.eventReservation.IReservation, 'id' | 'additionalTicketText' | 'checkedIn' | 'reservationStatus'> & {
7
7
  reservedTicket: {
8
- ticketType: Pick<factory.reservation.eventReservation.ITicketType, 'identifier'> & {
8
+ ticketType: Pick<factory.assetTransaction.reserve.ITicketType, 'identifier'> & {
9
9
  name: {
10
10
  ja?: string;
11
11
  };
@@ -39,7 +39,8 @@ function findByCode(params) {
39
39
  // typeOf?: { $in?: factory.order.IItemOffered['typeOf'][] };
40
40
  }
41
41
  }
42
- }, ['itemOffered'])).shift();
42
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
43
+ )).shift();
43
44
  if (acceptedOffer === undefined) {
44
45
  throw new factory_1.factory.errors.NotFound('acceptedOffer');
45
46
  }
@@ -5,11 +5,14 @@ import type { IDeprecatedField, IKeyOfProjection, ReservationRepo } from '../../
5
5
  * 予約検索レスポンスとしての予約
6
6
  * 予約ドキュメントに予約取引の情報を補完する
7
7
  */
8
- type IReservationAsFindResult = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName' | 'reservedTicket' | 'reservationFor'> & {
9
- price?: factory.reservation.eventReservation.IPrice;
8
+ type IReservationAsFindResult = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'priceCurrency' | 'underName' | 'reservedTicket' | 'reservationFor' | 'issuedThrough' | 'numSeats'> & {
9
+ price?: factory.assetTransaction.reserve.IPrice;
10
+ priceCurrency?: factory.priceCurrency.JPY;
10
11
  underName?: factory.assetTransaction.reserve.IUnderName;
11
12
  reservedTicket?: factory.assetTransaction.reserve.IObjectSubReservation['reservedTicket'];
12
13
  reservationFor?: factory.assetTransaction.reserve.IReservationFor;
14
+ issuedThrough?: factory.assetTransaction.reserve.IIssuedThrough;
15
+ numSeats?: number;
13
16
  };
14
17
  /**
15
18
  * 予約を検索する
@@ -1,11 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.findReservations = findReservations;
7
- const debug_1 = __importDefault(require("debug"));
8
- const debug = (0, debug_1.default)('chevre-domain:service:reserve:findReservations');
4
+ const factory_1 = require("../../factory");
9
5
  /**
10
6
  * 予約を検索する
11
7
  */
@@ -18,21 +14,24 @@ function findReservations(params, options) {
18
14
  }
19
15
  else {
20
16
  const requirePrice = Object.keys(inclusion).includes('price');
17
+ const requirePriceCurrency = Object.keys(inclusion).includes('priceCurrency');
21
18
  const requireUnderName = Object.keys(inclusion).includes('underName');
22
19
  const requireReservedTicket = Object.keys(inclusion).includes('reservedTicket');
23
20
  const requireReservationFor = Object.keys(inclusion).includes('reservationFor');
21
+ const requireIssuedThrough = Object.keys(inclusion).includes('issuedThrough');
22
+ const requireNumSeats = Object.keys(inclusion).includes('numSeats');
24
23
  const reservationIds = rawReservations.map(({ id }) => id);
25
24
  const subReservations = await repos.assetTransaction.reserve.findSubReservationsById({
26
25
  ids: reservationIds
27
26
  });
28
- // 予約取引から参照した予約数と同じはず
29
- debug('useReserveTransaction: true. reservations.length === subReservations.length?', rawReservations.length === subReservations.length);
30
27
  return rawReservations.map((reservation) => {
31
28
  const subReservationByTransaction = subReservations.find((s) => s.id === reservation.id);
32
29
  const priceByTransaction = subReservationByTransaction?.price;
33
30
  const underNameByTransaction = subReservationByTransaction?.underName;
34
31
  const ticketTypeByTransaction = subReservationByTransaction?.reservedTicket?.ticketType;
35
32
  const reservationForByTransaction = subReservationByTransaction?.reservationFor;
33
+ const issuedThroughByTransaction = subReservationByTransaction?.issuedThrough;
34
+ const numSeatsByTransaction = subReservationByTransaction?.numSeats;
36
35
  // 予約ドキュメントを最適化し始めたため、もう等しくない(2026-04-06~)
37
36
  // // 予約取引から参照した属性と全く等しいはず
38
37
  // if (requirePrice) {
@@ -48,10 +47,11 @@ function findReservations(params, options) {
48
47
  // console.error('reservationForMatched: false!!!', reservation.id);
49
48
  // }
50
49
  // }
51
- const { reservationFor, reservedTicket, ...rawReservation4result } = reservation; // eslint-disable-line @typescript-eslint/no-unused-vars
50
+ const { reservationFor: _reservationFor, issuedThrough: _issuedThrough, priceCurrency: _priceCurrency, numSeats: _numSeats, reservedTicket, ...rawReservation4result } = reservation;
52
51
  return {
53
52
  ...rawReservation4result, // 予約ドキュメントはそのまま返す
54
53
  ...(requirePrice && priceByTransaction !== undefined) ? { price: priceByTransaction } : undefined, // priceがあれば上書き
54
+ ...(requirePriceCurrency) ? { priceCurrency: factory_1.factory.priceCurrency.JPY } : undefined, // 必要あらば固定値を補完(2026-05-08~)
55
55
  ...(requireUnderName && underNameByTransaction !== undefined) ? { underName: underNameByTransaction } : undefined, // underNameがあれば上書き
56
56
  ...(requireReservedTicket && ticketTypeByTransaction !== undefined) // ticketTypeがあれば上書き
57
57
  ? {
@@ -63,7 +63,13 @@ function findReservations(params, options) {
63
63
  : undefined,
64
64
  ...(requireReservationFor && reservationForByTransaction !== undefined)
65
65
  ? { reservationFor: reservationForByTransaction }
66
- : undefined, // reservationForがあれば上書き(2026-04-06~)
66
+ : undefined, // reservationForがあれば上書き(2026-04-06~),
67
+ ...(requireIssuedThrough && issuedThroughByTransaction !== undefined)
68
+ ? { issuedThrough: issuedThroughByTransaction }
69
+ : undefined, // issuedThroughがあれば上書き(2026-05-09~)
70
+ ...(requireNumSeats && numSeatsByTransaction !== undefined)
71
+ ? { numSeats: numSeatsByTransaction }
72
+ : undefined, // issuedThroughがあれば上書き(2026-05-09~)
67
73
  };
68
74
  });
69
75
  }
@@ -5,13 +5,14 @@ import { factory } from '../../../factory';
5
5
  import { AuthorizationRepo } from '../../../repo/authorization';
6
6
  import type { SettingRepo } from '../../../repo/setting';
7
7
  import type { TaskRepo } from '../../../repo/task';
8
- export type IConfirmedReservation = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName' | 'reservedTicket' | 'reservationFor'> & {
9
- price?: factory.reservation.eventReservation.IPrice;
8
+ export type IConfirmedReservation = Omit<factory.reservation.eventReservation.IReservation, 'price' | 'underName' | 'reservedTicket' | 'reservationFor' | 'issuedThrough'> & {
9
+ price?: factory.assetTransaction.reserve.IPrice;
10
10
  underName?: Pick<factory.reservation.IUnderName, 'id' | 'typeOf'>;
11
11
  reservedTicket: Omit<factory.assetTransaction.reserve.ISubReservationReservedTicket, 'ticketType'> & {
12
- ticketType: factory.reservation.eventReservation.ITicketType;
12
+ ticketType: factory.assetTransaction.reserve.ITicketType;
13
13
  };
14
14
  reservationFor: factory.assetTransaction.reserve.IReservationFor;
15
+ issuedThrough: factory.assetTransaction.reserve.IIssuedThrough;
15
16
  };
16
17
  /**
17
18
  * 予約確定後のアクション
@@ -98,22 +98,14 @@ function onReservationConfirmed(confirmedReservations, reserveAction) {
98
98
  }
99
99
  }
100
100
  const subReservations4inform = confirmedReservations.map((r) => {
101
- const { additionalProperty, additionalTicketText,
102
- // attended, checkedIn,
103
- id, modifiedTime,
104
- // numSeats,
105
- price, programMembershipUsed, reservedTicket, subReservation, typeOf } = r;
101
+ const { additionalProperty, additionalTicketText, id, modifiedTime, price, programMembershipUsed, reservedTicket, subReservation, typeOf } = r;
106
102
  return {
107
- // bookingTime, // discontinue(2024-10-27~)
108
103
  id,
109
104
  typeOf,
110
105
  reservedTicket,
111
106
  ...(Array.isArray(additionalProperty)) ? { additionalProperty } : undefined,
112
107
  ...(typeof additionalTicketText === 'string') ? { additionalTicketText } : undefined,
113
- // ...(typeof attended === 'boolean') ? { attended } : undefined, // discontinue(2024-10-27~)
114
- // ...(typeof checkedIn === 'boolean') ? { checkedIn } : undefined, // discontinue(2024-10-27~)
115
108
  ...(modifiedTime instanceof Date) ? { modifiedTime } : undefined,
116
- // ...(typeof numSeats === 'number') ? { numSeats } : undefined, // discontinue(2024-10-27~)
117
109
  ...(price !== undefined) ? { price } : undefined,
118
110
  ...(programMembershipUsed !== undefined) ? { programMembershipUsed } : undefined,
119
111
  ...(Array.isArray(subReservation)) ? { subReservation } : undefined
@@ -11,14 +11,19 @@ function searchByOrder(params) {
11
11
  page: params.page,
12
12
  project: { id: { $eq: params.project.id } },
13
13
  orderNumber: { $eq: params.orderNumber },
14
- acceptedOffers: { itemOffered: { typeOf: { $in: [reservationType] } } }
15
- }, ['itemOffered']);
14
+ acceptedOffers: {
15
+ itemOffered: {
16
+ // typeOf: { $in: [reservationType] }
17
+ }
18
+ }
19
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
20
+ );
16
21
  const reservationIds = acceptedOffers.map((offer) => {
17
22
  if (offer.itemOffered.typeOf === reservationType) {
18
23
  return offer.itemOffered.id;
19
24
  }
20
25
  else {
21
- // 検索条件にreservationTypeを含めているので、ありえないケース
26
+ // EventReservationしか存在しないので、ありえないケース
22
27
  throw new factory_1.factory.errors.Internal(`unexpected itemOffered.typeOf ${offer.itemOffered.typeOf}`);
23
28
  }
24
29
  });
@@ -20,7 +20,7 @@ export declare function useReservation(params: {
20
20
  */
21
21
  id: string;
22
22
  };
23
- instrument?: Pick<factory.action.consume.use.reservation.ITicketAsInstrument, 'ticketToken'> | factory.action.consume.use.reservation.IInstrument[];
23
+ instrument: factory.action.consume.use.reservation.IInstrument[];
24
24
  location?: {
25
25
  identifier?: string;
26
26
  };
@@ -16,7 +16,6 @@ function useReservation(params) {
16
16
  return async (repos) => {
17
17
  const reservationId = params.object.id;
18
18
  let ticketToken;
19
- // const ticketToken = params?.instrument?.ticketToken;
20
19
  if (Array.isArray(params.instrument)) {
21
20
  for (const eachInstrument of params.instrument) {
22
21
  if (eachInstrument.typeOf === 'Ticket' && typeof eachInstrument.ticketToken === 'string') {
@@ -24,9 +23,8 @@ function useReservation(params) {
24
23
  break;
25
24
  }
26
25
  }
27
- }
28
- else {
29
- ticketToken = params?.instrument?.ticketToken;
26
+ // } else {
27
+ // ticketToken = params?.instrument?.ticketToken;
30
28
  }
31
29
  // if (params.verifyToken === true) {} // タスク作成前に検証済なので検証不要
32
30
  // confirmReservationが間に合わない可能性を考慮する(2023-06-01~)
@@ -34,36 +32,34 @@ function useReservation(params) {
34
32
  // 予約検索
35
33
  const reservation = await repos.reservation.findReservationById({
36
34
  id: reservationId,
37
- inclusion: ['issuedThrough', 'project', 'reservationFor', 'reservationNumber', 'reservedTicket', 'typeOf']
35
+ inclusion: [
36
+ // 'issuedThrough',
37
+ // 'reservedTicket',
38
+ 'project', 'reservationFor', 'reservationNumber', 'typeOf'
39
+ ]
38
40
  });
39
- if (typeof reservation.issuedThrough.id !== 'string') {
40
- // COA予約では予約使用アクションを想定していないので、興行idは必ず存在するはず
41
- throw new factory_1.factory.errors.Internal('reservation.issuedThrough.id must be string');
42
- }
43
- const { reservedTicket } = reservation;
44
- // optimize(2024-05-07~)
41
+ // if (typeof reservation.issuedThrough.id !== 'string') {
42
+ // // COA予約では予約使用アクションを想定していないので、興行idは必ず存在するはず
43
+ // throw new factory.errors.Internal('reservation.issuedThrough.id must be string');
44
+ // }
45
+ // const { reservedTicket } = reservation;
46
+ // optimize(2026-05-06~)
45
47
  const reservationAsObject = {
46
48
  id: reservation.id,
47
49
  reservationNumber: reservation.reservationNumber,
48
50
  typeOf: reservation.typeOf,
49
- issuedThrough: { id: reservation.issuedThrough.id, typeOf: reservation.issuedThrough.typeOf },
50
51
  reservationFor: { id: reservation.reservationFor.id, typeOf: reservation.reservationFor.typeOf },
51
- reservedTicket: {
52
- typeOf: reservedTicket.typeOf,
53
- // discontinue ticketType(2026-03-25~)
54
- // ticketType: {
55
- // identifier: reservedTicket.ticketType.identifier,
56
- // typeOf: reservedTicket.ticketType.typeOf,
57
- // ...(typeof reservedTicket.ticketType.id === 'string') ? { id: reservedTicket.ticketType.id } : undefined
58
- // },
59
- ...(typeof reservedTicket.identifier === 'string') ? { identifier: reservedTicket.identifier } : undefined,
60
- ...(typeof reservedTicket.ticketedSeat?.typeOf === 'string') ? { ticketedSeat: reservedTicket.ticketedSeat } : undefined
61
- }
52
+ // discontinue issuedThrough,reservedTicket(2026-05-06~)
53
+ // issuedThrough: { id: reservation.issuedThrough.id, typeOf: reservation.issuedThrough.typeOf },
54
+ // reservedTicket: {
55
+ // typeOf: reservedTicket.typeOf,
56
+ // ...(typeof reservedTicket.identifier === 'string') ? { identifier: reservedTicket.identifier } : undefined,
57
+ // ...(typeof reservedTicket.ticketedSeat?.typeOf === 'string') ? { ticketedSeat: reservedTicket.ticketedSeat } : undefined
58
+ // }
62
59
  };
63
60
  // extend instrument to array(2025-02-18~)
64
61
  const instrument = [
65
62
  {
66
- // ...(typeof token === 'string') ? { token } : undefined, // discontinue token(2024-10-03~)
67
63
  ...(typeof ticketToken === 'string') ? { ticketToken } : undefined,
68
64
  typeOf: 'Ticket'
69
65
  },
@@ -137,7 +137,8 @@ function fixOrderAsPurpose(params) {
137
137
  const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
138
138
  orderNumber: { $eq: order.orderNumber },
139
139
  project: { id: { $eq: params.project.id } }
140
- }, ['itemOffered', 'offeredThrough']);
140
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
141
+ );
141
142
  return {
142
143
  ...order,
143
144
  acceptedOffers
@@ -27,9 +27,12 @@ function createAccountingReport(params) {
27
27
  orderNumber: data.object.mainEntity.orderNumber,
28
28
  project: { id: params.project.id },
29
29
  inclusion: [
30
- 'orderNumber', 'project', 'customer', 'confirmationNumber',
31
- 'paymentMethods', 'orderedItem', 'price', 'priceCurrency', 'seller', 'broker', 'typeOf', 'orderDate'
32
- ] // explicit projection(2024-07-25~)
30
+ 'orderNumber', 'project', 'paymentMethods', 'seller', 'typeOf', 'orderDate'
31
+ // 'customer', 'confirmationNumber',
32
+ // 'orderedItem',
33
+ // 'broker',
34
+ // 'price', 'priceCurrency',
35
+ ]
33
36
  });
34
37
  const simpleOrder = {
35
38
  typeOf: order.typeOf,
@@ -37,7 +40,6 @@ function createAccountingReport(params) {
37
40
  orderDate: order.orderDate
38
41
  };
39
42
  const actionObject = {
40
- // ...params,
41
43
  mainEntity: { orderNumber: simpleOrder.orderNumber },
42
44
  typeOf: 'Report'
43
45
  };
@@ -51,13 +53,9 @@ function createAccountingReport(params) {
51
53
  };
52
54
  const action = await repos.action.start(actionAttributes);
53
55
  try {
54
- const acceptedOffers = await repos.acceptedOffer.searchAcceptedOffersByOrderNumber({
55
- orderNumber: { $eq: data.object.mainEntity.orderNumber },
56
- project: { id: { $eq: params.project.id } }
57
- });
58
56
  await (0, createAccountingReportIfNotExist_1.createAccountingReportIfNotExist)({
59
57
  ...order,
60
- acceptedOffers
58
+ // acceptedOffers
61
59
  })(repos);
62
60
  }
63
61
  catch (error) {
@@ -71,13 +71,14 @@ function fixOrderAsPurpose(params, transaction) {
71
71
  project: { id: { $eq: transaction.project.id } },
72
72
  acceptedOffers: {
73
73
  itemOffered: {
74
- typeOf: { $in: [factory_1.factory.reservationType.EventReservation] },
74
+ // typeOf: { $in: [factory.reservationType.EventReservation] }, // EventReservationしか存在しないので不要(2026-05-12~)
75
75
  // movieTicketsに結合されたイベントID,座席コードで絞る
76
76
  reservationFor: { id: { $in: [reservationForId] } },
77
77
  reservedTicket: { ticketedSeat: { seatNumber: { $in: seatNumbers } } }
78
78
  }
79
79
  }
80
- }, ['itemOffered', 'priceSpecification']);
80
+ }, { useReserveTransaction: true } // 予約取引参照(2026-05-18~)
81
+ );
81
82
  }
82
83
  return {
83
84
  ...orderWithoutAcceptedOffers,
@@ -1,6 +1,6 @@
1
+ import type { IExecutableTaskKeys, IOperationExecute } from '../taskHandler';
1
2
  import { factory } from '../../factory';
2
- import type { IOperationExecute } from '../taskHandler';
3
3
  /**
4
4
  * タスク実行関数
5
5
  */
6
- export declare function call(data: factory.task.useReservation.IData): IOperationExecute<void>;
6
+ export declare function call(params: Pick<factory.task.useReservation.ITask, IExecutableTaskKeys>): IOperationExecute<void>;