@chevre/domain 23.2.0-alpha.2 → 23.2.0-alpha.20
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.
- package/example/src/chevre/actions/checkAuthorizePaymentActions.ts +55 -0
- package/example/src/chevre/event/importEventsFromCOAByTitle.ts +1 -1
- package/example/src/chevre/eventSeries/migrateEventSeriesOffers.ts +75 -0
- package/example/src/chevre/eventSeries/migrateEventSeriesVideoFormat.ts +80 -0
- package/example/src/chevre/place/adminEntranceGates.ts +68 -0
- package/example/src/chevre/place/checkEntranceGatesCount.ts +82 -0
- package/example/src/chevre/place/findRooms.ts +24 -0
- package/example/src/chevre/place/findSections.ts +28 -0
- package/example/src/chevre/place/migrateSectionIdentifier.ts +92 -0
- package/example/src/chevre/place/seatsJson2csv.ts +63 -0
- package/example/src/chevre/place/upsertSeatsByBranchCode.ts +72 -0
- package/example/src/chevre/reIndex.ts +1 -1
- package/example/src/chevre/roles/addAdminEventSeriesReadPermissionIfNotExists.ts +49 -0
- package/example/src/chevre/roles/addAdminMovieReadPermissionIfNotExists.ts +49 -0
- package/example/src/chevre/roles/addAdminMovieTheaterReadPermissionIfNotExists.ts +34 -0
- package/example/src/chevre/roles/addAdminMovieTheaterWritePermissionIfNotExists.ts +34 -0
- package/example/src/chevre/roles/addAdminRoomReadPermissionIfNotExists.ts +34 -0
- package/example/src/chevre/roles/addAdminRoomWritePermissionIfNotExists.ts +34 -0
- package/lib/chevre/repo/acceptedPaymentMethod.js +14 -10
- package/lib/chevre/repo/aggregateOrder.js +0 -93
- package/lib/chevre/repo/aggregateReservation.d.ts +0 -1
- package/lib/chevre/repo/aggregateReservation.js +0 -2
- package/lib/chevre/repo/creativeWork.js +9 -5
- package/lib/chevre/repo/eventSeries.js +16 -12
- package/lib/chevre/repo/mongoose/schemas/aggregateReservation.js +0 -1
- package/lib/chevre/repo/mongoose/schemas/creativeWork.js +10 -9
- package/lib/chevre/repo/mongoose/schemas/eventSeries.js +10 -0
- package/lib/chevre/repo/place/entranceGate.d.ts +58 -0
- package/lib/chevre/repo/place/entranceGate.js +159 -0
- package/lib/chevre/repo/place/movieTheater.d.ts +5 -2
- package/lib/chevre/repo/place/movieTheater.js +3 -1
- package/lib/chevre/repo/place/screeningRoom.d.ts +38 -31
- package/lib/chevre/repo/place/screeningRoom.js +166 -135
- package/lib/chevre/repo/place/seat.d.ts +47 -45
- package/lib/chevre/repo/place/seat.js +175 -45
- package/lib/chevre/repo/place/section.d.ts +36 -30
- package/lib/chevre/repo/place/section.js +214 -130
- package/lib/chevre/repository.d.ts +8 -0
- package/lib/chevre/repository.js +16 -0
- package/lib/chevre/service/assetTransaction/pay/validateAcceptedPaymentMethodIfNeeded.d.ts +6 -1
- package/lib/chevre/service/assetTransaction/pay/validateAcceptedPaymentMethodIfNeeded.js +26 -4
- package/lib/chevre/service/assetTransaction/pay.d.ts +3 -0
- package/lib/chevre/service/event/processUpdateMovieTheater.d.ts +1 -1
- package/lib/chevre/service/event/processUpdateMovieTheater.js +1 -1
- package/lib/chevre/service/event/saveScreeningEvents.d.ts +1 -1
- package/lib/chevre/service/event/saveScreeningEvents.js +1 -1
- package/lib/chevre/service/offer/event/searchEventTicketOffers.js +7 -4
- package/lib/chevre/service/offer/event/searchOfferAppliesToMovieTicket.js +9 -6
- package/lib/chevre/service/offer/event/searchOffersByIds.js +7 -4
- package/lib/chevre/service/offer/onEventChanged.js +7 -5
- package/lib/chevre/service/payment/any/factory.d.ts +5 -0
- package/lib/chevre/service/payment/any/factory.js +11 -2
- package/lib/chevre/service/payment/any.d.ts +8 -0
- package/lib/chevre/service/payment/any.js +3 -2
- package/lib/chevre/service/task/authorizePayment.js +3 -1
- package/lib/chevre/service/task/createEvent/createEventBySchedule/factory.d.ts +1 -1
- package/lib/chevre/service/task/createEvent/createEventBySchedule/factory.js +2 -2
- package/lib/chevre/service/task/createEvent/createEventBySchedule/schedule2events.js +1 -1
- package/lib/chevre/service/task/onResourceUpdated.js +2 -2
- package/lib/chevre/service/task/publishPaymentUrl.js +3 -1
- package/lib/chevre/service/task/syncResourcesFromCOA.js +1 -1
- package/lib/chevre/service/transaction/placeOrder/confirm/validation/factory.d.ts +2 -2
- package/lib/chevre/service/transaction/placeOrder/confirm/validation.js +3 -1
- package/lib/chevre/service/transaction/placeOrder/confirm.js +3 -1
- package/package.json +3 -2
- package/lib/chevre/service/eventOld.d.ts +0 -60
- package/lib/chevre/service/eventOld.js +0 -864
|
@@ -1,864 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.importFromCOA = importFromCOA;
|
|
13
|
-
exports.createScreeningEventIdFromCOA = createScreeningEventIdFromCOA;
|
|
14
|
-
const createDebug = require("debug");
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
const difference = require("lodash.difference");
|
|
17
|
-
// import { google } from 'googleapis';
|
|
18
|
-
const moment = require("moment-timezone");
|
|
19
|
-
const factory = require("../factory");
|
|
20
|
-
const debug = createDebug('chevre-domain:service:event');
|
|
21
|
-
/**
|
|
22
|
-
* イベントをインポートする
|
|
23
|
-
*/
|
|
24
|
-
function importFromCOA(params) {
|
|
25
|
-
// tslint:disable-next-line:max-func-body-length
|
|
26
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
// 施設更新アクションを分離(2024-04-26~)
|
|
28
|
-
const { seller, movieTheater, screeningRooms } = yield processUpdateMovieTheater(params)(repos);
|
|
29
|
-
// const targetImportFrom = moment(`${moment(params.importFrom)
|
|
30
|
-
// .tz('Asia/Tokyo')
|
|
31
|
-
// .format('YYYY-MM-DD')}T00:00:00+09:00`);
|
|
32
|
-
// const targetImportThrough = moment(`${moment(params.importThrough)
|
|
33
|
-
// .tz('Asia/Tokyo')
|
|
34
|
-
// .format('YYYY-MM-DD')}T00:00:00+09:00`)
|
|
35
|
-
// .add(1, 'day');
|
|
36
|
-
const targetImportFrom = moment(params.importFrom)
|
|
37
|
-
.tz('Asia/Tokyo')
|
|
38
|
-
.startOf('day');
|
|
39
|
-
const targetImportThrough = moment(params.importThrough)
|
|
40
|
-
.tz('Asia/Tokyo')
|
|
41
|
-
.endOf('day');
|
|
42
|
-
const begin = moment(targetImportFrom)
|
|
43
|
-
.add(-1, 'day') // 深夜帯スケジュールが前日検索の結果に含まれるため
|
|
44
|
-
.tz('Asia/Tokyo')
|
|
45
|
-
.format('YYYYMMDD'); // COAは日本時間で判断
|
|
46
|
-
const end = moment(targetImportThrough)
|
|
47
|
-
// .add(-1, 'day')
|
|
48
|
-
.tz('Asia/Tokyo')
|
|
49
|
-
.format('YYYYMMDD'); // COAは日本時間で判断
|
|
50
|
-
debug('importing screening events...', targetImportFrom, targetImportThrough, begin, end);
|
|
51
|
-
const instrument = {
|
|
52
|
-
theaterCode: params.locationBranchCode, // debug(2024-04-26~)
|
|
53
|
-
begin, // debug(2024-04-24~)
|
|
54
|
-
end, // debug(2024-04-24~)
|
|
55
|
-
typeOf: 'WebAPI',
|
|
56
|
-
identifier: factory.service.webAPI.Identifier.COA
|
|
57
|
-
};
|
|
58
|
-
const actionAttributes = {
|
|
59
|
-
project: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
60
|
-
// typeOf: factory.actionType.UpdateAction,
|
|
61
|
-
typeOf: factory.actionType.ReplaceAction, // Replaceに変更(2024-04-26~)
|
|
62
|
-
agent: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
63
|
-
object: Object.assign(Object.assign({}, params), { startDate: `${moment(targetImportFrom) // debug(2024-04-26~)
|
|
64
|
-
.toISOString()}/${moment(targetImportThrough)
|
|
65
|
-
.toISOString()}`, superEvent: { location: { branchCode: params.locationBranchCode } }, typeOf: factory.eventType.ScreeningEvent }),
|
|
66
|
-
instrument,
|
|
67
|
-
targetCollection: { typeOf: factory.eventType.ScreeningEvent }
|
|
68
|
-
};
|
|
69
|
-
const action = yield repos.action.start(actionAttributes);
|
|
70
|
-
let savedScreeningEventsCount = 0;
|
|
71
|
-
let savedScreeningEventSeriesCount = 0;
|
|
72
|
-
let cancelledIds = [];
|
|
73
|
-
let processTime;
|
|
74
|
-
try {
|
|
75
|
-
let screeningEventSerieses;
|
|
76
|
-
if (params.saveScreeningEventSeries === true) {
|
|
77
|
-
const saveScreeningEventSeriesResult = yield saveScreeningEventSeries({
|
|
78
|
-
locationBranchCode: params.locationBranchCode,
|
|
79
|
-
movieTheater,
|
|
80
|
-
project: params.project,
|
|
81
|
-
saveScreeningEventSeries: params.saveScreeningEventSeries,
|
|
82
|
-
saveScreeningEventSeriesPeriodInMonth: params.saveScreeningEventSeriesPeriodInMonth,
|
|
83
|
-
seller: { id: seller.id }
|
|
84
|
-
})(repos);
|
|
85
|
-
screeningEventSerieses = saveScreeningEventSeriesResult.screeningEventSerieses;
|
|
86
|
-
savedScreeningEventSeriesCount = saveScreeningEventSeriesResult.savedEventsCount;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
// 施設コンテンツを保管しない場合、DBから施設コンテンツを検索するので、ここでは何もしない(2024-09-09~)
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
// イベント永続化
|
|
93
|
-
const processStart = process.hrtime.bigint();
|
|
94
|
-
const screeningEvents = yield saveScreeningEvents(Object.assign({ movieTheater,
|
|
95
|
-
screeningRooms, project: params.project, targetImportFrom: targetImportFrom.toDate(), targetImportThrough: targetImportThrough.toDate(), seller: { id: seller.id }, instrument }, (Array.isArray(screeningEventSerieses)) ? { screeningEventSerieses } : undefined))(repos);
|
|
96
|
-
savedScreeningEventsCount = screeningEvents.length;
|
|
97
|
-
// COAから削除されたイベントをキャンセル済ステータスへ変更
|
|
98
|
-
cancelledIds = yield cancelDeletedEvents({
|
|
99
|
-
project: params.project,
|
|
100
|
-
locationBranchCode: params.locationBranchCode,
|
|
101
|
-
targetImportFrom: targetImportFrom.toDate(),
|
|
102
|
-
targetImportThrough: targetImportThrough.toDate(),
|
|
103
|
-
idsShouldBe: screeningEvents.map((e) => e.id)
|
|
104
|
-
})(repos);
|
|
105
|
-
const processEnd = process.hrtime.bigint();
|
|
106
|
-
processTime = processEnd - processStart;
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
let throwsError = true;
|
|
110
|
-
if (error.name === 'AbortError') {
|
|
111
|
-
// tslint:disable-next-line:no-console
|
|
112
|
-
console.error('saveScreeningEvents throwed an error', error.name, error.message);
|
|
113
|
-
throwsError = false;
|
|
114
|
-
}
|
|
115
|
-
if (error.name === 'COAServiceError') {
|
|
116
|
-
if (error.message === 'ESOCKETTIMEDOUT') {
|
|
117
|
-
// tslint:disable-next-line:no-console
|
|
118
|
-
console.error('saveScreeningEvents throwed an error', error.name, error.message);
|
|
119
|
-
throwsError = false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
if (throwsError) {
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
try {
|
|
129
|
-
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error });
|
|
130
|
-
}
|
|
131
|
-
catch (__) {
|
|
132
|
-
// 失敗したら仕方ない
|
|
133
|
-
}
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
136
|
-
const actionResult = Object.assign({ cancelledIds, // キャンセルイベント保管(2024-04-26~)
|
|
137
|
-
savedScreeningEventsCount,
|
|
138
|
-
savedScreeningEventSeriesCount }, (processTime !== undefined) ? { processTime } : undefined);
|
|
139
|
-
yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
// tslint:disable-next-line:max-func-body-length
|
|
143
|
-
function processUpdateMovieTheater(params) {
|
|
144
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
const actionAttributes = {
|
|
146
|
-
project: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
147
|
-
typeOf: factory.actionType.ReplaceAction,
|
|
148
|
-
agent: { typeOf: factory.organizationType.Project, id: params.project.id },
|
|
149
|
-
object: Object.assign(Object.assign({}, params), { branchCode: params.locationBranchCode, typeOf: factory.placeType.MovieTheater }),
|
|
150
|
-
instrument: {
|
|
151
|
-
theaterCode: params.locationBranchCode,
|
|
152
|
-
typeOf: 'WebAPI',
|
|
153
|
-
identifier: factory.service.webAPI.Identifier.COA
|
|
154
|
-
},
|
|
155
|
-
targetCollection: { typeOf: factory.placeType.MovieTheater }
|
|
156
|
-
};
|
|
157
|
-
const action = yield repos.action.start(actionAttributes);
|
|
158
|
-
let seller;
|
|
159
|
-
let movieTheater;
|
|
160
|
-
let screeningRooms;
|
|
161
|
-
let processTime;
|
|
162
|
-
try {
|
|
163
|
-
// 同ブランチコードの販売者を検索する
|
|
164
|
-
const sellersWithSameBranchCode = yield repos.seller.projectFields({
|
|
165
|
-
limit: 1,
|
|
166
|
-
page: 1,
|
|
167
|
-
project: { id: { $eq: params.project.id } },
|
|
168
|
-
branchCode: { $eq: params.locationBranchCode }
|
|
169
|
-
}, ['id']);
|
|
170
|
-
const sellerWithSameBranchCode = sellersWithSameBranchCode.shift();
|
|
171
|
-
if (typeof (sellerWithSameBranchCode === null || sellerWithSameBranchCode === void 0 ? void 0 : sellerWithSameBranchCode.id) !== 'string') {
|
|
172
|
-
throw new factory.errors.NotFound('Seller', `Seller with branchCode '${params.locationBranchCode}' not found`);
|
|
173
|
-
}
|
|
174
|
-
seller = { id: sellerWithSameBranchCode.id };
|
|
175
|
-
// saveMovieTheater:trueの場合のみ、施設保管(2022-10-10~)
|
|
176
|
-
if (params.saveMovieTheater === true) {
|
|
177
|
-
const processStart = process.hrtime.bigint();
|
|
178
|
-
const savingMovieTheater = createMovieTheaterFromCOA(params.project, { id: seller.id }, yield repos.masterService.theater({ theaterCode: params.locationBranchCode }), yield repos.masterService.screen({ theaterCode: params.locationBranchCode }));
|
|
179
|
-
yield repos.movieTheater.saveMovieTheaterByBranchCode4coa(savingMovieTheater);
|
|
180
|
-
yield repos.screeningRoom.saveScreeningRooms4coa(savingMovieTheater);
|
|
181
|
-
const processEnd = process.hrtime.bigint();
|
|
182
|
-
processTime = processEnd - processStart;
|
|
183
|
-
}
|
|
184
|
-
const movieTheaters = yield repos.movieTheater.projectFields({
|
|
185
|
-
limit: 1,
|
|
186
|
-
page: 1,
|
|
187
|
-
project: { id: { $eq: params.project.id } },
|
|
188
|
-
branchCode: { $eq: params.locationBranchCode }
|
|
189
|
-
}, ['id', 'typeOf', 'branchCode', 'name', 'kanaName']
|
|
190
|
-
// []
|
|
191
|
-
);
|
|
192
|
-
movieTheater = movieTheaters.shift();
|
|
193
|
-
if (movieTheater === undefined) {
|
|
194
|
-
throw new factory.errors.NotFound(factory.placeType.MovieTheater);
|
|
195
|
-
}
|
|
196
|
-
screeningRooms = yield repos.screeningRoom.searchScreeningRooms({
|
|
197
|
-
project: { id: { $eq: params.project.id } },
|
|
198
|
-
containedInPlace: { branchCode: { $eq: movieTheater.branchCode } }
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
try {
|
|
203
|
-
yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error });
|
|
204
|
-
}
|
|
205
|
-
catch (__) {
|
|
206
|
-
// 失敗したら仕方ない
|
|
207
|
-
}
|
|
208
|
-
throw error;
|
|
209
|
-
}
|
|
210
|
-
const actionResult = Object.assign({ screeningRoomsCount: screeningRooms.length }, (processTime !== undefined) ? { processTime } : undefined);
|
|
211
|
-
yield repos.action.completeWithVoid({ typeOf: action.typeOf, id: action.id, result: actionResult });
|
|
212
|
-
return { seller, movieTheater, screeningRooms };
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
function saveScreeningEventSeries(params) {
|
|
216
|
-
// tslint:disable-next-line:max-func-body-length
|
|
217
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
218
|
-
const { importingIds } = params;
|
|
219
|
-
const project = params.project;
|
|
220
|
-
// COAから作品取得
|
|
221
|
-
const filmsFromCOA = yield repos.masterService.title({
|
|
222
|
-
theaterCode: params.locationBranchCode
|
|
223
|
-
});
|
|
224
|
-
// COAから区分マスター抽出
|
|
225
|
-
const eirinKubuns = yield repos.masterService.kubunName({
|
|
226
|
-
theaterCode: params.locationBranchCode,
|
|
227
|
-
kubunClass: '044'
|
|
228
|
-
});
|
|
229
|
-
const eizouKubuns = yield repos.masterService.kubunName({
|
|
230
|
-
theaterCode: params.locationBranchCode,
|
|
231
|
-
kubunClass: '042'
|
|
232
|
-
});
|
|
233
|
-
const joueihousikiKubuns = yield repos.masterService.kubunName({
|
|
234
|
-
theaterCode: params.locationBranchCode,
|
|
235
|
-
kubunClass: '045'
|
|
236
|
-
});
|
|
237
|
-
const jimakufukikaeKubuns = yield repos.masterService.kubunName({
|
|
238
|
-
theaterCode: params.locationBranchCode,
|
|
239
|
-
kubunClass: '043'
|
|
240
|
-
});
|
|
241
|
-
debug('kubunNames found.');
|
|
242
|
-
const availablePaymentMethodTypes = yield repos.categoryCode.projectCategoryCodeFields({
|
|
243
|
-
project: { id: { $eq: params.project.id } },
|
|
244
|
-
inCodeSet: { identifier: { $eq: factory.categoryCode.CategorySetIdentifier.PaymentMethodType } }
|
|
245
|
-
}, ['additionalProperty', 'codeValue']);
|
|
246
|
-
const screeningEventSerieses = filmsFromCOA.map((filmFromCOA) => {
|
|
247
|
-
return createScreeningEventSeriesFromCOA({
|
|
248
|
-
project: project,
|
|
249
|
-
filmFromCOA: filmFromCOA,
|
|
250
|
-
movieTheater: params.movieTheater,
|
|
251
|
-
eirinKubuns: eirinKubuns,
|
|
252
|
-
eizouKubuns: eizouKubuns,
|
|
253
|
-
joueihousikiKubuns: joueihousikiKubuns,
|
|
254
|
-
jimakufukikaeKubuns: jimakufukikaeKubuns,
|
|
255
|
-
availablePaymentMethodTypes,
|
|
256
|
-
seller: params.seller
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
const COA_IMPORT_SCREENING_EVENT_SERIES_PERIOD_IN_MONTH = (typeof params.saveScreeningEventSeriesPeriodInMonth === 'number')
|
|
260
|
-
? params.saveScreeningEventSeriesPeriodInMonth
|
|
261
|
-
// tslint:disable-next-line:no-magic-numbers
|
|
262
|
-
: 3;
|
|
263
|
-
let savedEventsCount = 0;
|
|
264
|
-
// saveScreeningEventSeries:trueの場合のみ保管(2022-10-10~)
|
|
265
|
-
if (params.saveScreeningEventSeries === true) {
|
|
266
|
-
let saveParams;
|
|
267
|
-
if (Array.isArray(importingIds) && importingIds.length > 0) {
|
|
268
|
-
saveParams = screeningEventSerieses
|
|
269
|
-
.filter((screeningEventSeries) => importingIds.includes(screeningEventSeries.id))
|
|
270
|
-
.map((screeningEventSeries) => {
|
|
271
|
-
return {
|
|
272
|
-
id: screeningEventSeries.id,
|
|
273
|
-
attributes: screeningEventSeries,
|
|
274
|
-
upsert: true
|
|
275
|
-
};
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
// 更新対象が無限に増えるのを防ぐためにstartDateでフィルター
|
|
280
|
-
const someMonthsAgo = moment()
|
|
281
|
-
.add(-COA_IMPORT_SCREENING_EVENT_SERIES_PERIOD_IN_MONTH, 'months');
|
|
282
|
-
saveParams = screeningEventSerieses
|
|
283
|
-
.filter((screeningEventSeries) => {
|
|
284
|
-
return moment(screeningEventSeries.startDate)
|
|
285
|
-
.isAfter(someMonthsAgo);
|
|
286
|
-
})
|
|
287
|
-
.map((screeningEventSeries) => {
|
|
288
|
-
return {
|
|
289
|
-
id: screeningEventSeries.id,
|
|
290
|
-
attributes: screeningEventSeries,
|
|
291
|
-
upsert: true
|
|
292
|
-
};
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
debug('saving', saveParams.length, 'ScreeningEventSeries...');
|
|
296
|
-
yield repos.eventSeries.upsertManyEventSeriesById4sskts(saveParams);
|
|
297
|
-
debug('saved', saveParams.length, 'ScreeningEventSeries');
|
|
298
|
-
savedEventsCount = saveParams.length;
|
|
299
|
-
// コンテンツ永続化(2023-10-23~)
|
|
300
|
-
try {
|
|
301
|
-
debug('saving', saveParams.length, 'movies...');
|
|
302
|
-
yield repos.creativeWork.upsertMoviesByIdentifier(saveParams.map((saveScreeningEventSeriesParams) => {
|
|
303
|
-
var _a;
|
|
304
|
-
return {
|
|
305
|
-
$set: Object.assign(Object.assign({ typeOf: factory.creativeWorkType.Movie, project: params.project, identifier: saveScreeningEventSeriesParams.attributes.workPerformed.identifier, name: { ja: (_a = saveScreeningEventSeriesParams.attributes.workPerformed.name) === null || _a === void 0 ? void 0 : _a.ja }, offers: { typeOf: factory.offerType.Offer } }, (typeof saveScreeningEventSeriesParams.attributes.workPerformed.contentRating === 'string')
|
|
306
|
-
? { contentRating: saveScreeningEventSeriesParams.attributes.workPerformed.contentRating }
|
|
307
|
-
: undefined), (typeof saveScreeningEventSeriesParams.attributes.workPerformed.duration === 'string')
|
|
308
|
-
? { duration: saveScreeningEventSeriesParams.attributes.workPerformed.duration }
|
|
309
|
-
: undefined)
|
|
310
|
-
};
|
|
311
|
-
}));
|
|
312
|
-
debug('saved', saveParams.length, 'movies');
|
|
313
|
-
}
|
|
314
|
-
catch (error) {
|
|
315
|
-
// tslint:disable-next-line:no-console
|
|
316
|
-
console.error('failed in upsertMoviesByIdentifier', error);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return { screeningEventSerieses, savedEventsCount };
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
function saveScreeningEvents(params) {
|
|
323
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
324
|
-
const screeningEvents = yield createScreeningEvents(params)(repos);
|
|
325
|
-
// 永続化
|
|
326
|
-
debug(`storing ${screeningEvents.length} screeningEvents...`);
|
|
327
|
-
const saveParams = [];
|
|
328
|
-
for (const screeningEvent of screeningEvents) {
|
|
329
|
-
try {
|
|
330
|
-
const attributes = screeningEvent;
|
|
331
|
-
saveParams.push({
|
|
332
|
-
id: screeningEvent.id,
|
|
333
|
-
attributes: attributes,
|
|
334
|
-
upsert: true
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
// no op
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
yield repos.event.saveManyEvents(saveParams);
|
|
342
|
-
debug(`${screeningEvents.length} screeningEvents stored.`);
|
|
343
|
-
return screeningEvents;
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
function createScreeningEvents(params) {
|
|
347
|
-
// tslint:disable-next-line:max-func-body-length
|
|
348
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
349
|
-
const project = params.project;
|
|
350
|
-
if (typeof params.instrument.begin !== 'string') {
|
|
351
|
-
throw new factory.errors.ArgumentNull('instrument.begin');
|
|
352
|
-
}
|
|
353
|
-
if (typeof params.instrument.end !== 'string') {
|
|
354
|
-
throw new factory.errors.ArgumentNull('instrument.end');
|
|
355
|
-
}
|
|
356
|
-
// COAからイベント取得;
|
|
357
|
-
const schedulesFromCOA = yield repos.masterService.schedule({
|
|
358
|
-
theaterCode: params.instrument.theaterCode,
|
|
359
|
-
begin: params.instrument.begin, // COAは日本時間で判断
|
|
360
|
-
end: params.instrument.end // COAは日本時間で判断
|
|
361
|
-
});
|
|
362
|
-
// COAから区分マスター抽出
|
|
363
|
-
const serviceKubuns = yield repos.masterService.kubunName({
|
|
364
|
-
theaterCode: params.instrument.theaterCode,
|
|
365
|
-
kubunClass: '009'
|
|
366
|
-
});
|
|
367
|
-
const acousticKubuns = yield repos.masterService.kubunName({
|
|
368
|
-
theaterCode: params.instrument.theaterCode,
|
|
369
|
-
kubunClass: '046'
|
|
370
|
-
});
|
|
371
|
-
let screeningEventSerieses;
|
|
372
|
-
if (Array.isArray(params.screeningEventSerieses)) {
|
|
373
|
-
screeningEventSerieses = params.screeningEventSerieses;
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
// 指定がなければDBから検索する(2024-09-09~)
|
|
377
|
-
const importingEventSeriesIds = [...new Set(schedulesFromCOA.map((scheduleFromCOA) => {
|
|
378
|
-
return createScreeningEventSeriesId({
|
|
379
|
-
theaterCode: params.instrument.theaterCode,
|
|
380
|
-
titleCode: scheduleFromCOA.titleCode,
|
|
381
|
-
titleBranchNum: scheduleFromCOA.titleBranchNum
|
|
382
|
-
});
|
|
383
|
-
}))];
|
|
384
|
-
debug('searching eventSeries... importingEventSeriesIds:', importingEventSeriesIds);
|
|
385
|
-
if (importingEventSeriesIds.length > 0) {
|
|
386
|
-
screeningEventSerieses = yield repos.eventSeries.projectEventSeriesFields({
|
|
387
|
-
id: { $in: importingEventSeriesIds },
|
|
388
|
-
project: { id: { $eq: params.project.id } }
|
|
389
|
-
}, [
|
|
390
|
-
'project', 'typeOf', 'eventStatus', 'identifier',
|
|
391
|
-
'name', 'kanaName', 'alternativeHeadline', 'location',
|
|
392
|
-
'organizer', 'videoFormat', 'soundFormat', 'workPerformed',
|
|
393
|
-
'duration', 'endDate', 'startDate', 'coaInfo',
|
|
394
|
-
'offers', 'additionalProperty'
|
|
395
|
-
]);
|
|
396
|
-
debug(screeningEventSerieses.length, 'screeningEventSerieses for importing events found.');
|
|
397
|
-
// 万が一未インポートの施設コンテンツがあれば強制的にインポート(2024-09-09~)
|
|
398
|
-
if (screeningEventSerieses.length < importingEventSeriesIds.length) {
|
|
399
|
-
const saveScreeningEventSeriesResult = yield saveScreeningEventSeries({
|
|
400
|
-
locationBranchCode: params.instrument.theaterCode,
|
|
401
|
-
movieTheater: params.movieTheater,
|
|
402
|
-
project: params.project,
|
|
403
|
-
saveScreeningEventSeries: true,
|
|
404
|
-
saveScreeningEventSeriesPeriodInMonth: 0, // importingIds指定するので0でok
|
|
405
|
-
seller: { id: params.seller.id },
|
|
406
|
-
importingIds: importingEventSeriesIds
|
|
407
|
-
})(repos);
|
|
408
|
-
screeningEventSerieses = saveScreeningEventSeriesResult.screeningEventSerieses;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
screeningEventSerieses = [];
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
// イベントごとに永続化トライ
|
|
416
|
-
const screeningEvents = [];
|
|
417
|
-
schedulesFromCOA.forEach((scheduleFromCOA) => {
|
|
418
|
-
const screeningEventSeriesId = createScreeningEventSeriesId({
|
|
419
|
-
theaterCode: params.instrument.theaterCode,
|
|
420
|
-
titleCode: scheduleFromCOA.titleCode,
|
|
421
|
-
titleBranchNum: scheduleFromCOA.titleBranchNum
|
|
422
|
-
});
|
|
423
|
-
// ルーム存在チェック
|
|
424
|
-
const screenRoom = params.screeningRooms.find((place) => place.branchCode === scheduleFromCOA.screenCode);
|
|
425
|
-
// const screenRoom = <factory.place.screeningRoom.IPlace | undefined>movieTheater.containsPlace.find(
|
|
426
|
-
// (place) => place.branchCode === scheduleFromCOA.screenCode
|
|
427
|
-
// );
|
|
428
|
-
if (screenRoom === undefined) {
|
|
429
|
-
// tslint:disable-next-line:no-console
|
|
430
|
-
console.error('screenRoom not found.', scheduleFromCOA.screenCode);
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
// イベントシリーズ取得
|
|
434
|
-
const screeningEventSeries = screeningEventSerieses.find((e) => e.id === screeningEventSeriesId);
|
|
435
|
-
if (screeningEventSeries === undefined) {
|
|
436
|
-
// tslint:disable-next-line:no-console
|
|
437
|
-
console.error('screeningEventSeries not found.', screeningEventSeriesId);
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
const screeningEvent = createScreeningEventFromCOA({
|
|
441
|
-
project: project,
|
|
442
|
-
performanceFromCOA: scheduleFromCOA,
|
|
443
|
-
screenRoom: screenRoom,
|
|
444
|
-
superEvent: screeningEventSeries,
|
|
445
|
-
serviceKubuns: serviceKubuns,
|
|
446
|
-
acousticKubuns: acousticKubuns,
|
|
447
|
-
seller: params.seller
|
|
448
|
-
});
|
|
449
|
-
// インポート期間で確実に絞る(2024-04-25~)
|
|
450
|
-
const isStartDateInTarget = moment(screeningEvent.startDate)
|
|
451
|
-
.isBetween(params.targetImportFrom, params.targetImportThrough, 'second', '[]');
|
|
452
|
-
if (isStartDateInTarget) {
|
|
453
|
-
screeningEvents.push(screeningEvent);
|
|
454
|
-
}
|
|
455
|
-
});
|
|
456
|
-
debug('createScreeningEvents processed', params.targetImportFrom, params.targetImportThrough, params.instrument.begin, params.instrument.end, 'schedulesFromCOA.length:', schedulesFromCOA.length, 'screeningEvents.length:', screeningEvents.length);
|
|
457
|
-
return screeningEvents;
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
function cancelDeletedEvents(params) {
|
|
461
|
-
return (repos) => __awaiter(this, void 0, void 0, function* () {
|
|
462
|
-
// distinctでidのみ取得(2023-01-25~)
|
|
463
|
-
// COAから削除されたイベントをキャンセル済ステータスへ変更
|
|
464
|
-
const ids = yield repos.event.searchEventIds({
|
|
465
|
-
project: { id: { $eq: params.project.id } },
|
|
466
|
-
typeOf: factory.eventType.ScreeningEvent,
|
|
467
|
-
superEvent: {
|
|
468
|
-
locationBranchCodes: [params.locationBranchCode]
|
|
469
|
-
},
|
|
470
|
-
startFrom: params.targetImportFrom,
|
|
471
|
-
startThrough: params.targetImportThrough
|
|
472
|
-
});
|
|
473
|
-
const idsShouldBe = params.idsShouldBe;
|
|
474
|
-
const cancelledIds = difference(ids, idsShouldBe);
|
|
475
|
-
debug(`cancelling ${cancelledIds.length} events...`);
|
|
476
|
-
for (const cancelledId of cancelledIds) {
|
|
477
|
-
try {
|
|
478
|
-
yield repos.event.cancelEvent({
|
|
479
|
-
id: cancelledId,
|
|
480
|
-
project: { id: params.project.id }
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
catch (error) {
|
|
484
|
-
// no op
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
debug(`${cancelledIds.length} events cancelled.`);
|
|
488
|
-
return cancelledIds;
|
|
489
|
-
});
|
|
490
|
-
}
|
|
491
|
-
function minimizeSuperEvent(params) {
|
|
492
|
-
const { workPerformed, videoFormat, startDate, soundFormat, name, location, kanaName, identifier, endDate, duration, coaInfo, alternativeHeadline,
|
|
493
|
-
// additionalProperty,
|
|
494
|
-
typeOf, id
|
|
495
|
-
// project,
|
|
496
|
-
// organizer,
|
|
497
|
-
// offers,
|
|
498
|
-
// eventStatus
|
|
499
|
-
} = params.superEvent;
|
|
500
|
-
return {
|
|
501
|
-
workPerformed, videoFormat, startDate, soundFormat,
|
|
502
|
-
name, location, kanaName, identifier,
|
|
503
|
-
endDate, duration, coaInfo, alternativeHeadline,
|
|
504
|
-
// additionalProperty,
|
|
505
|
-
typeOf, id
|
|
506
|
-
};
|
|
507
|
-
}
|
|
508
|
-
/**
|
|
509
|
-
* コアデータからイベントを作成する
|
|
510
|
-
*/
|
|
511
|
-
function createScreeningEventFromCOA(params) {
|
|
512
|
-
const id = createScreeningEventIdFromCOA({
|
|
513
|
-
theaterCode: params.superEvent.location.branchCode,
|
|
514
|
-
titleCode: params.superEvent.workPerformed.identifier,
|
|
515
|
-
titleBranchNum: params.performanceFromCOA.titleBranchNum,
|
|
516
|
-
dateJouei: params.performanceFromCOA.dateJouei,
|
|
517
|
-
screenCode: params.performanceFromCOA.screenCode,
|
|
518
|
-
timeBegin: params.performanceFromCOA.timeBegin
|
|
519
|
-
});
|
|
520
|
-
// COA情報を整形して開始日時と終了日時を作成('2500'のような日またぎの時刻入力に対応)
|
|
521
|
-
const DAY = 2400;
|
|
522
|
-
let timeBegin = params.performanceFromCOA.timeBegin;
|
|
523
|
-
let timeEnd = params.performanceFromCOA.timeEnd;
|
|
524
|
-
let addDay4startDate = 0;
|
|
525
|
-
let addDay4endDate = 0;
|
|
526
|
-
try {
|
|
527
|
-
addDay4startDate += Math.floor(Number(timeBegin) / DAY);
|
|
528
|
-
// tslint:disable-next-line:no-magic-numbers
|
|
529
|
-
timeBegin = `0000${Number(timeBegin) % DAY}`.slice(-4);
|
|
530
|
-
addDay4endDate += Math.floor(Number(timeEnd) / DAY);
|
|
531
|
-
// tslint:disable-next-line:no-magic-numbers
|
|
532
|
-
timeEnd = `0000${Number(timeEnd) % DAY}`.slice(-4);
|
|
533
|
-
}
|
|
534
|
-
catch (error) {
|
|
535
|
-
// no op
|
|
536
|
-
}
|
|
537
|
-
let endDate = moment(`${params.performanceFromCOA.dateJouei} ${timeEnd} +09:00`, 'YYYYMMDD HHmm Z')
|
|
538
|
-
.add(addDay4endDate, 'days')
|
|
539
|
-
.toDate();
|
|
540
|
-
const startDate = moment(`${params.performanceFromCOA.dateJouei} ${timeBegin} +09:00`, 'YYYYMMDD HHmm Z')
|
|
541
|
-
.add(addDay4startDate, 'days')
|
|
542
|
-
.toDate();
|
|
543
|
-
// startDateの方が大きければ日またぎイベントなので調整
|
|
544
|
-
// tslint:disable-next-line:no-single-line-block-comment
|
|
545
|
-
/* istanbul ignore if */
|
|
546
|
-
if (moment(startDate)
|
|
547
|
-
.isAfter(moment(endDate))) {
|
|
548
|
-
endDate = moment(endDate)
|
|
549
|
-
.add(1, 'day')
|
|
550
|
-
.toDate();
|
|
551
|
-
}
|
|
552
|
-
const offers = {
|
|
553
|
-
typeOf: factory.offerType.Offer,
|
|
554
|
-
offeredThrough: {
|
|
555
|
-
typeOf: 'WebAPI',
|
|
556
|
-
identifier: factory.service.webAPI.Identifier.COA
|
|
557
|
-
},
|
|
558
|
-
eligibleQuantity: {
|
|
559
|
-
typeOf: 'QuantitativeValue',
|
|
560
|
-
unitCode: factory.unitCode.C62,
|
|
561
|
-
maxValue: Number(params.performanceFromCOA.availableNum)
|
|
562
|
-
},
|
|
563
|
-
itemOffered: {
|
|
564
|
-
serviceOutput: {
|
|
565
|
-
reservedTicket: {
|
|
566
|
-
typeOf: 'Ticket',
|
|
567
|
-
ticketedSeat: { typeOf: factory.placeType.Seat } // 必ず指定席
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
},
|
|
571
|
-
seller: {
|
|
572
|
-
typeOf: factory.organizationType.Corporation,
|
|
573
|
-
id: params.seller.id,
|
|
574
|
-
// name: params.sellerFromDB.name,
|
|
575
|
-
makesOffer: []
|
|
576
|
-
}
|
|
577
|
-
};
|
|
578
|
-
const { additionalProperty, coaInfo } = createScreeningEventAdditionalPropertyFromCOA(params);
|
|
579
|
-
const superEvent = minimizeSuperEvent({ superEvent: params.superEvent }); // optimize superEvent(2024-09-10~)
|
|
580
|
-
return {
|
|
581
|
-
project: { typeOf: params.project.typeOf, id: params.project.id },
|
|
582
|
-
typeOf: factory.eventType.ScreeningEvent,
|
|
583
|
-
id: id,
|
|
584
|
-
identifier: id,
|
|
585
|
-
name: params.superEvent.name,
|
|
586
|
-
eventStatus: factory.eventStatusType.EventScheduled,
|
|
587
|
-
location: {
|
|
588
|
-
typeOf: params.screenRoom.typeOf,
|
|
589
|
-
branchCode: params.screenRoom.branchCode,
|
|
590
|
-
name: params.screenRoom.name
|
|
591
|
-
},
|
|
592
|
-
endDate: endDate,
|
|
593
|
-
startDate: startDate,
|
|
594
|
-
superEvent,
|
|
595
|
-
coaInfo,
|
|
596
|
-
offers: offers,
|
|
597
|
-
checkInCount: 0,
|
|
598
|
-
attendeeCount: 0,
|
|
599
|
-
maximumAttendeeCapacity: params.screenRoom.maximumAttendeeCapacity,
|
|
600
|
-
remainingAttendeeCapacity: params.screenRoom.maximumAttendeeCapacity,
|
|
601
|
-
additionalProperty,
|
|
602
|
-
organizer: { id: params.seller.id }
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
function createScreeningEventAdditionalPropertyFromCOA(params) {
|
|
606
|
-
const coaInfo = {
|
|
607
|
-
theaterCode: params.superEvent.location.branchCode,
|
|
608
|
-
dateJouei: params.performanceFromCOA.dateJouei,
|
|
609
|
-
titleCode: params.performanceFromCOA.titleCode,
|
|
610
|
-
titleBranchNum: params.performanceFromCOA.titleBranchNum,
|
|
611
|
-
timeBegin: params.performanceFromCOA.timeBegin,
|
|
612
|
-
timeEnd: params.performanceFromCOA.timeEnd,
|
|
613
|
-
screenCode: params.performanceFromCOA.screenCode,
|
|
614
|
-
trailerTime: params.performanceFromCOA.trailerTime,
|
|
615
|
-
kbnService: params.serviceKubuns.filter((kubun) => kubun.kubunCode === params.performanceFromCOA.kbnService)[0],
|
|
616
|
-
kbnAcoustic: params.acousticKubuns.filter((kubun) => kubun.kubunCode === params.performanceFromCOA.kbnAcoustic)[0],
|
|
617
|
-
nameServiceDay: params.performanceFromCOA.nameServiceDay,
|
|
618
|
-
availableNum: params.performanceFromCOA.availableNum,
|
|
619
|
-
rsvStartDate: params.performanceFromCOA.rsvStartDate,
|
|
620
|
-
rsvEndDate: params.performanceFromCOA.rsvEndDate,
|
|
621
|
-
flgEarlyBooking: params.performanceFromCOA.flgEarlyBooking
|
|
622
|
-
};
|
|
623
|
-
return {
|
|
624
|
-
coaInfo,
|
|
625
|
-
additionalProperty: [
|
|
626
|
-
{ name: 'coaInfo', value: JSON.stringify(coaInfo) }
|
|
627
|
-
]
|
|
628
|
-
};
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* 作品抽出結果から施設コンテンツを作成する
|
|
632
|
-
*/
|
|
633
|
-
function createScreeningEventSeriesFromCOA(params) {
|
|
634
|
-
const endDate = (moment(`${params.filmFromCOA.dateEnd} +09:00`, 'YYYYMMDD Z')
|
|
635
|
-
.isValid())
|
|
636
|
-
? moment(`${params.filmFromCOA.dateEnd} +09:00`, 'YYYYMMDD Z')
|
|
637
|
-
.toDate()
|
|
638
|
-
: moment('2118-01-01T00:00:00+09:00') // 値がない場合、十分に長く
|
|
639
|
-
.toDate();
|
|
640
|
-
const startDate = (moment(`${params.filmFromCOA.dateBegin} +09:00`, 'YYYYMMDD Z')
|
|
641
|
-
.isValid())
|
|
642
|
-
? moment(`${params.filmFromCOA.dateBegin} +09:00`, 'YYYYMMDD Z')
|
|
643
|
-
.toDate()
|
|
644
|
-
: moment('2018-01-01T00:00:00+09:00') // 値がない場合、十分に長く
|
|
645
|
-
.toDate();
|
|
646
|
-
// title_codeは施設をまたいで共有、title_branch_numは施設毎に管理
|
|
647
|
-
const id = createScreeningEventSeriesId({
|
|
648
|
-
theaterCode: params.movieTheater.branchCode,
|
|
649
|
-
titleCode: params.filmFromCOA.titleCode,
|
|
650
|
-
titleBranchNum: params.filmFromCOA.titleBranchNum
|
|
651
|
-
});
|
|
652
|
-
const { additionalProperty, coaInfo } = createScreeningEventSeriesAdditionalPropertyFromCOA(params);
|
|
653
|
-
const { unacceptedPaymentMethod } = createScreeningEventSeriesUnacceptedPaymentMethodFromCOA(params);
|
|
654
|
-
const workPerformed = Object.assign({
|
|
655
|
-
// id: `${params.movieTheater.branchCode}-${params.filmFromCOA.titleCode}`, // discontinue(2025-01-03~)
|
|
656
|
-
identifier: params.filmFromCOA.titleCode, name: {
|
|
657
|
-
ja: params.filmFromCOA.titleNameOrig
|
|
658
|
-
}, duration: moment.duration(params.filmFromCOA.showTime, 'm')
|
|
659
|
-
.toISOString(), contentRating: params.eirinKubuns.filter((kubun) => kubun.kubunCode === params.filmFromCOA.kbnEirin)[0], typeOf: factory.creativeWorkType.Movie }, (typeof params.filmFromCOA.titleBranchNum === 'string' && params.filmFromCOA.titleBranchNum.length > 0)
|
|
660
|
-
? { version: params.filmFromCOA.titleBranchNum } // add version(2024-01-31~)
|
|
661
|
-
: undefined);
|
|
662
|
-
// redefine videoFormat(2024-09-18~)
|
|
663
|
-
// const videoFormat: factory.event.screeningEventSeries.ICOAKubun =
|
|
664
|
-
// params.eizouKubuns.filter((kubun) => kubun.kubunCode === params.filmFromCOA.kbnEizou)[0];
|
|
665
|
-
const videoFormat = params.joueihousikiKubuns.filter(({ kubunCode }) => kubunCode === params.filmFromCOA.kbnJoueihousiki)
|
|
666
|
-
.map(({ kubunCode }) => ({ typeOf: kubunCode, name: kubunCode }));
|
|
667
|
-
return {
|
|
668
|
-
project: { typeOf: params.project.typeOf, id: params.project.id },
|
|
669
|
-
typeOf: factory.eventType.ScreeningEventSeries,
|
|
670
|
-
eventStatus: factory.eventStatusType.EventScheduled,
|
|
671
|
-
id: id,
|
|
672
|
-
identifier: id,
|
|
673
|
-
name: {
|
|
674
|
-
ja: params.filmFromCOA.titleName,
|
|
675
|
-
en: params.filmFromCOA.titleNameEng
|
|
676
|
-
},
|
|
677
|
-
kanaName: params.filmFromCOA.titleNameKana,
|
|
678
|
-
alternativeHeadline: params.filmFromCOA.titleNameShort,
|
|
679
|
-
location: {
|
|
680
|
-
id: (params.movieTheater.id !== undefined) ? params.movieTheater.id : '',
|
|
681
|
-
branchCode: params.movieTheater.branchCode,
|
|
682
|
-
name: params.movieTheater.name,
|
|
683
|
-
// 廃止(2024-03-05~)
|
|
684
|
-
// kanaName: params.movieTheater.kanaName,
|
|
685
|
-
typeOf: params.movieTheater.typeOf
|
|
686
|
-
},
|
|
687
|
-
// 必須化(2023-07-12~)
|
|
688
|
-
organizer: { id: params.seller.id },
|
|
689
|
-
videoFormat,
|
|
690
|
-
soundFormat: [],
|
|
691
|
-
workPerformed,
|
|
692
|
-
duration: moment.duration(params.filmFromCOA.showTime, 'm')
|
|
693
|
-
.toISOString(),
|
|
694
|
-
endDate: endDate,
|
|
695
|
-
startDate: startDate,
|
|
696
|
-
coaInfo,
|
|
697
|
-
offers: Object.assign({ typeOf: factory.offerType.Offer }, (Array.isArray(unacceptedPaymentMethod)) ? { unacceptedPaymentMethod: unacceptedPaymentMethod } : undefined),
|
|
698
|
-
additionalProperty
|
|
699
|
-
};
|
|
700
|
-
}
|
|
701
|
-
function createScreeningEventSeriesAdditionalPropertyFromCOA(params) {
|
|
702
|
-
const coaInfo = Object.assign(Object.assign(Object.assign({ titleBranchNum: params.filmFromCOA.titleBranchNum, kbnEirin: params.eirinKubuns.filter((k) => k.kubunCode === params.filmFromCOA.kbnEirin)[0], kbnEizou: params.eizouKubuns.filter((k) => k.kubunCode === params.filmFromCOA.kbnEizou)[0], kbnJoueihousiki: params.joueihousikiKubuns.filter((k) => k.kubunCode === params.filmFromCOA.kbnJoueihousiki)[0], kbnJimakufukikae: params.jimakufukikaeKubuns.filter((k) => k.kubunCode === params.filmFromCOA.kbnJimakufukikae)[0], flgMvtkUse: params.filmFromCOA.flgMvtkUse, dateMvtkBegin: params.filmFromCOA.dateMvtkBegin }, (typeof params.filmFromCOA.flgMgtkUse === 'string') ? { flgMgtkUse: params.filmFromCOA.flgMgtkUse } : undefined), (typeof params.filmFromCOA.dateMgtkBegin === 'string') ? { dateMgtkBegin: params.filmFromCOA.dateMgtkBegin } : undefined), (typeof params.filmFromCOA.flgNotDiscount === 'string') ? { flgNotDiscount: params.filmFromCOA.flgNotDiscount } : undefined);
|
|
703
|
-
return {
|
|
704
|
-
coaInfo,
|
|
705
|
-
additionalProperty: [
|
|
706
|
-
// { name: 'coaInfo', value: JSON.stringify(coaInfo) } // discontinue(2024-09-13~)
|
|
707
|
-
]
|
|
708
|
-
};
|
|
709
|
-
}
|
|
710
|
-
function createScreeningEventSeriesUnacceptedPaymentMethodFromCOA(params) {
|
|
711
|
-
let unacceptedPaymentMethod;
|
|
712
|
-
// flgMvtkUseはムビチケ、MGチケットの両方に適用される(<-flgMgtkUseが追加されるまで)(~2024-03-05)
|
|
713
|
-
if (params.filmFromCOA.flgMvtkUse === '1') {
|
|
714
|
-
// no op
|
|
715
|
-
}
|
|
716
|
-
else {
|
|
717
|
-
if (!Array.isArray(unacceptedPaymentMethod)) {
|
|
718
|
-
unacceptedPaymentMethod = [];
|
|
719
|
-
}
|
|
720
|
-
// flgMvtkUseで決済方法区分から動的に
|
|
721
|
-
unacceptedPaymentMethod.push(...params.availablePaymentMethodTypes.filter(({ additionalProperty }) => { var _a; return ((_a = additionalProperty === null || additionalProperty === void 0 ? void 0 : additionalProperty.find(({ name }) => name === 'flgMvtkUse')) === null || _a === void 0 ? void 0 : _a.value) === '1'; })
|
|
722
|
-
.map(({ codeValue }) => codeValue));
|
|
723
|
-
}
|
|
724
|
-
if (params.filmFromCOA.flgMgtkUse === '0') {
|
|
725
|
-
if (!Array.isArray(unacceptedPaymentMethod)) {
|
|
726
|
-
unacceptedPaymentMethod = [];
|
|
727
|
-
}
|
|
728
|
-
// flgMgtkUseで決済方法区分から動的に
|
|
729
|
-
unacceptedPaymentMethod.push(...params.availablePaymentMethodTypes.filter(({ additionalProperty }) => { var _a; return ((_a = additionalProperty === null || additionalProperty === void 0 ? void 0 : additionalProperty.find(({ name }) => name === 'flgMgtkUse')) === null || _a === void 0 ? void 0 : _a.value) === '1'; })
|
|
730
|
-
.map(({ codeValue }) => codeValue));
|
|
731
|
-
}
|
|
732
|
-
if (Array.isArray(unacceptedPaymentMethod)) {
|
|
733
|
-
// 重複排除
|
|
734
|
-
unacceptedPaymentMethod = [...new Set(unacceptedPaymentMethod)];
|
|
735
|
-
}
|
|
736
|
-
return { unacceptedPaymentMethod };
|
|
737
|
-
}
|
|
738
|
-
/**
|
|
739
|
-
* COA情報からイベントIDを作成する
|
|
740
|
-
*/
|
|
741
|
-
function createScreeningEventIdFromCOA(params) {
|
|
742
|
-
return [
|
|
743
|
-
createScreeningEventSeriesId(params),
|
|
744
|
-
params.dateJouei,
|
|
745
|
-
params.screenCode,
|
|
746
|
-
params.timeBegin
|
|
747
|
-
].join('');
|
|
748
|
-
}
|
|
749
|
-
/**
|
|
750
|
-
* COA情報からイベント識別子を作成する
|
|
751
|
-
*/
|
|
752
|
-
// tslint:disable-next-line:no-single-line-block-comment
|
|
753
|
-
/* istanbul ignore next */
|
|
754
|
-
function createScreeningEventSeriesId(params) {
|
|
755
|
-
return [
|
|
756
|
-
params.theaterCode,
|
|
757
|
-
params.titleCode,
|
|
758
|
-
params.titleBranchNum
|
|
759
|
-
].join('');
|
|
760
|
-
}
|
|
761
|
-
/**
|
|
762
|
-
* コアマスター抽出結果から作成する
|
|
763
|
-
*/
|
|
764
|
-
// tslint:disable-next-line:no-single-line-block-comment
|
|
765
|
-
/* istanbul ignore next */
|
|
766
|
-
function createMovieTheaterFromCOA(project, seller, theaterFromCOA, screensFromCOA) {
|
|
767
|
-
// const id = `MovieTheater-${theaterFromCOA.theaterCode}`;
|
|
768
|
-
return {
|
|
769
|
-
project: { typeOf: project.typeOf, id: project.id },
|
|
770
|
-
// id: id,
|
|
771
|
-
// screenCount: screensFromCOA.length,
|
|
772
|
-
branchCode: theaterFromCOA.theaterCode,
|
|
773
|
-
name: {
|
|
774
|
-
ja: theaterFromCOA.theaterName,
|
|
775
|
-
en: theaterFromCOA.theaterNameEng
|
|
776
|
-
},
|
|
777
|
-
kanaName: theaterFromCOA.theaterNameKana,
|
|
778
|
-
containsPlace: screensFromCOA.map((screenFromCOA) => {
|
|
779
|
-
return createScreeningRoomFromCOA(project, seller, screenFromCOA);
|
|
780
|
-
}),
|
|
781
|
-
typeOf: factory.placeType.MovieTheater,
|
|
782
|
-
telephone: theaterFromCOA.theaterTelNum,
|
|
783
|
-
offers: {
|
|
784
|
-
// project: { typeOf: project.typeOf, id: project.id }, // optimize(2023-11-06~)
|
|
785
|
-
// priceCurrency: factory.priceCurrency.JPY, // optimize(2023-11-06~)
|
|
786
|
-
typeOf: factory.offerType.Offer,
|
|
787
|
-
eligibleQuantity: {
|
|
788
|
-
typeOf: 'QuantitativeValue',
|
|
789
|
-
maxValue: 6,
|
|
790
|
-
unitCode: factory.unitCode.C62
|
|
791
|
-
},
|
|
792
|
-
availabilityStartsGraceTime: {
|
|
793
|
-
typeOf: 'QuantitativeValue',
|
|
794
|
-
value: -2,
|
|
795
|
-
unitCode: factory.unitCode.Day
|
|
796
|
-
},
|
|
797
|
-
availabilityEndsGraceTime: {
|
|
798
|
-
typeOf: 'QuantitativeValue',
|
|
799
|
-
value: 1200,
|
|
800
|
-
unitCode: factory.unitCode.Sec
|
|
801
|
-
},
|
|
802
|
-
availabilityStartsGraceTimeOnPOS: {
|
|
803
|
-
typeOf: 'QuantitativeValue',
|
|
804
|
-
value: -93,
|
|
805
|
-
unitCode: factory.unitCode.Day
|
|
806
|
-
},
|
|
807
|
-
availabilityEndsGraceTimeOnPOS: {
|
|
808
|
-
typeOf: 'QuantitativeValue',
|
|
809
|
-
value: 2678400,
|
|
810
|
-
unitCode: factory.unitCode.Sec
|
|
811
|
-
}
|
|
812
|
-
},
|
|
813
|
-
parentOrganization: { id: seller.id, typeOf: factory.organizationType.Corporation }
|
|
814
|
-
};
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* コアスクリーン抽出結果からルームを作成する
|
|
818
|
-
*/
|
|
819
|
-
// tslint:disable-next-line:no-single-line-block-comment
|
|
820
|
-
/* istanbul ignore next */
|
|
821
|
-
function createScreeningRoomFromCOA(project, seller, screenFromCOA) {
|
|
822
|
-
const sections = [];
|
|
823
|
-
const sectionCodes = [];
|
|
824
|
-
screenFromCOA.listSeat.forEach((seat) => {
|
|
825
|
-
if (sectionCodes.indexOf(seat.seatSection) < 0) {
|
|
826
|
-
sectionCodes.push(seat.seatSection);
|
|
827
|
-
sections.push({
|
|
828
|
-
project: { typeOf: project.typeOf, id: project.id },
|
|
829
|
-
branchCode: seat.seatSection,
|
|
830
|
-
name: {
|
|
831
|
-
ja: `セクション${seat.seatSection}`,
|
|
832
|
-
en: `section${seat.seatSection}`
|
|
833
|
-
},
|
|
834
|
-
containsPlace: [],
|
|
835
|
-
typeOf: factory.placeType.ScreeningRoomSection
|
|
836
|
-
});
|
|
837
|
-
}
|
|
838
|
-
sections[sectionCodes.indexOf(seat.seatSection)].containsPlace.push({
|
|
839
|
-
project: { typeOf: project.typeOf, id: project.id },
|
|
840
|
-
branchCode: seat.seatNum,
|
|
841
|
-
typeOf: factory.placeType.Seat,
|
|
842
|
-
additionalProperty: [
|
|
843
|
-
{ name: 'flgFree', value: String(seat.flgFree) },
|
|
844
|
-
{ name: 'flgHc', value: String(seat.flgHc) },
|
|
845
|
-
{ name: 'flgPair', value: String(seat.flgPair) },
|
|
846
|
-
{ name: 'flgSpare', value: String(seat.flgSpare) },
|
|
847
|
-
{ name: 'flgSpecial', value: String(seat.flgSpecial) }
|
|
848
|
-
]
|
|
849
|
-
});
|
|
850
|
-
});
|
|
851
|
-
return {
|
|
852
|
-
project: { typeOf: project.typeOf, id: project.id },
|
|
853
|
-
containsPlace: sections,
|
|
854
|
-
branchCode: screenFromCOA.screenCode,
|
|
855
|
-
name: {
|
|
856
|
-
ja: screenFromCOA.screenName,
|
|
857
|
-
en: screenFromCOA.screenNameEng
|
|
858
|
-
},
|
|
859
|
-
typeOf: factory.placeType.ScreeningRoom,
|
|
860
|
-
maximumAttendeeCapacity: sections[0].containsPlace.length,
|
|
861
|
-
// 必須化(2023-07-14~)
|
|
862
|
-
parentOrganization: { id: seller.id, typeOf: factory.organizationType.Corporation }
|
|
863
|
-
};
|
|
864
|
-
}
|