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.createRefundMessage = exports.createReturnOrderMessage = exports.createOrderItems = exports.createSendOrderMessage = void 0;
|
13 |
|
14 |
|
15 |
|
16 | const moment = require("moment-timezone");
|
17 | const pug = require("pug");
|
18 | const util = require("util");
|
19 | const factory = require("./factory");
|
20 | const templateDirectory = `${__dirname}/../emails`;
|
21 | const DEFAULT_SENDER_EMAIL = 'noreply@example.com';
|
22 | function createEmailMessageText(params) {
|
23 | return __awaiter(this, void 0, void 0, function* () {
|
24 | const emailTemplate = (params.email !== undefined) ? params.email.template : undefined;
|
25 | const emailText = (params.email !== undefined) ? params.email.text : undefined;
|
26 | let emailMessageText;
|
27 | if (typeof emailText === 'string') {
|
28 | emailMessageText = emailText;
|
29 | }
|
30 | else if (typeof emailTemplate === 'string') {
|
31 | emailMessageText = yield new Promise((resolve, reject) => {
|
32 | pug.render(emailTemplate, {
|
33 | order: params.order
|
34 | }, (err, message) => {
|
35 | if (err instanceof Error) {
|
36 | reject(new factory.errors.Argument('emailTemplate', err.message));
|
37 | return;
|
38 | }
|
39 | resolve(message);
|
40 | });
|
41 | });
|
42 | }
|
43 | else {
|
44 | emailMessageText = yield new Promise((resolve, reject) => {
|
45 | pug.renderFile(params.renderFilePath, params.renderFileOptions, (err, message) => {
|
46 | if (err instanceof Error) {
|
47 | reject(err);
|
48 | return;
|
49 | }
|
50 | resolve(message);
|
51 | });
|
52 | });
|
53 | }
|
54 | return emailMessageText;
|
55 | });
|
56 | }
|
57 | function createEmailMessageAbout(params) {
|
58 | return __awaiter(this, void 0, void 0, function* () {
|
59 | let about;
|
60 | if (params.email !== undefined && typeof params.email.about === 'string') {
|
61 | about = params.email.about;
|
62 | }
|
63 | else {
|
64 | about = yield new Promise((resolve, reject) => {
|
65 | pug.renderFile(params.renderFilePath, params.renderFileOptions, (err, defaultSubject) => {
|
66 | if (err instanceof Error) {
|
67 | reject(err);
|
68 | return;
|
69 | }
|
70 | resolve(defaultSubject);
|
71 | });
|
72 | });
|
73 | }
|
74 | return about;
|
75 | });
|
76 | }
|
77 | function createEmailMessageSender(params) {
|
78 | return {
|
79 | typeOf: params.order.seller.typeOf,
|
80 | name: (params.email !== undefined
|
81 | && params.email.sender !== undefined
|
82 | && typeof params.email.sender.name === 'string')
|
83 | ? params.email.sender.name
|
84 | : params.order.seller.name,
|
85 | email: (params.email !== undefined
|
86 | && params.email.sender !== undefined
|
87 | && typeof params.email.sender.email === 'string')
|
88 | ? params.email.sender.email
|
89 | : DEFAULT_SENDER_EMAIL
|
90 | };
|
91 | }
|
92 |
|
93 |
|
94 |
|
95 | function createSendOrderMessage(params) {
|
96 | return __awaiter(this, void 0, void 0, function* () {
|
97 | const emailMessageText = yield createEmailMessageText({
|
98 | order: params.order,
|
99 | email: params.email,
|
100 | renderFilePath: `${templateDirectory}/sendOrder/text.pug`,
|
101 | renderFileOptions: {
|
102 | order: params.order,
|
103 | orderItems: createOrderItems({ order: params.order })
|
104 | .join('\n')
|
105 | }
|
106 | });
|
107 | const about = yield createEmailMessageAbout({
|
108 | email: params.email,
|
109 | renderFilePath: `${templateDirectory}/sendOrder/subject.pug`,
|
110 | renderFileOptions: {
|
111 | sellerName: params.order.seller.name
|
112 | }
|
113 | });
|
114 | const defaultToRecipientEmail = params.order.customer.email;
|
115 | if (defaultToRecipientEmail === undefined) {
|
116 | throw new factory.errors.Argument('order', 'order.customer.email undefined');
|
117 | }
|
118 | const sender = createEmailMessageSender(params);
|
119 | const toRecipient = {
|
120 | typeOf: params.order.customer.typeOf,
|
121 | name: (params.email !== undefined
|
122 | && params.email.toRecipient !== undefined
|
123 | && typeof params.email.toRecipient.name === 'string')
|
124 | ? params.email.toRecipient.name
|
125 | : `${params.order.customer.familyName} ${params.order.customer.givenName}`,
|
126 | email: (params.email !== undefined
|
127 | && params.email.toRecipient !== undefined
|
128 | && typeof params.email.toRecipient.email === 'string')
|
129 | ? params.email.toRecipient.email
|
130 | : defaultToRecipientEmail
|
131 | };
|
132 | return {
|
133 | typeOf: factory.creativeWorkType.EmailMessage,
|
134 | identifier: `SendOrder-${params.order.orderNumber}`,
|
135 | name: `SendOrder-${params.order.orderNumber}`,
|
136 | sender: sender,
|
137 | toRecipient: toRecipient,
|
138 | about: about,
|
139 | text: emailMessageText
|
140 | };
|
141 | });
|
142 | }
|
143 | exports.createSendOrderMessage = createSendOrderMessage;
|
144 |
|
145 |
|
146 |
|
147 | function createOrderItems(params) {
|
148 | return params.order.acceptedOffers.map((o) => {
|
149 | var _a, _b, _c;
|
150 | if (o.itemOffered.typeOf === factory.chevre.reservationType.EventReservation) {
|
151 | const reservation = o.itemOffered;
|
152 | const event = reservation.reservationFor;
|
153 | const eventStartDate = util.format('%s - %s', moment(event.startDate)
|
154 | .toISOString(), moment(event.endDate)
|
155 | .toISOString());
|
156 | const locationName = util.format('%s %s%s', (_a = event.superEvent.location.name) === null || _a === void 0 ? void 0 : _a.ja, (_b = event.location.name) === null || _b === void 0 ? void 0 : _b.ja, (event.location.address !== undefined) ? `(${event.location.address.ja})` : '');
|
157 | let option = '';
|
158 | if (Array.isArray(reservation.reservationFor.superEvent.videoFormat)) {
|
159 | option += reservation.reservationFor.superEvent.videoFormat.map((format) => format.typeOf)
|
160 | .join(',');
|
161 | }
|
162 | let priceStr = '';
|
163 | let reservationPriceSpec;
|
164 | if (o.priceSpecification !== undefined && o.priceSpecification !== null) {
|
165 | if (typeof o.priceSpecification === 'number') {
|
166 |
|
167 | reservationPriceSpec = {
|
168 | project: { typeOf: params.order.project.typeOf, id: params.order.project.id },
|
169 | typeOf: factory.chevre.priceSpecificationType.CompoundPriceSpecification,
|
170 | priceCurrency: factory.chevre.priceCurrency.JPY,
|
171 | valueAddedTaxIncluded: true,
|
172 | priceComponent: [
|
173 | {
|
174 | project: { typeOf: params.order.project.typeOf, id: params.order.project.id },
|
175 | typeOf: factory.chevre.priceSpecificationType.UnitPriceSpecification,
|
176 | price: o.priceSpecification,
|
177 | priceCurrency: o.priceCurrency,
|
178 | valueAddedTaxIncluded: true
|
179 | }
|
180 | ]
|
181 | };
|
182 | }
|
183 | else {
|
184 | reservationPriceSpec = o.priceSpecification;
|
185 | }
|
186 | }
|
187 |
|
188 | if (reservationPriceSpec !== undefined) {
|
189 | const unitPriceSpec = reservationPriceSpec.priceComponent.find((spec) => spec.typeOf === factory.chevre.priceSpecificationType.UnitPriceSpecification);
|
190 | if (unitPriceSpec !== undefined) {
|
191 | priceStr = `${unitPriceSpec.price}/${unitPriceSpec.referenceQuantity.value}`;
|
192 | }
|
193 | }
|
194 | return util.format('%s %s @%s %s %s %s %s (%s)', event.name.ja, eventStartDate, locationName, (reservation.reservedTicket.ticketedSeat !== undefined)
|
195 | ? reservation.reservedTicket.ticketedSeat.seatNumber
|
196 | : 'Non-reserved Seat', (typeof reservation.reservedTicket.ticketType.name === 'string')
|
197 | ? reservation.reservedTicket.ticketType.name
|
198 | : (_c = reservation.reservedTicket.ticketType.name) === null || _c === void 0 ? void 0 : _c.ja, priceStr, o.priceCurrency, option);
|
199 | }
|
200 | else {
|
201 | return util.format('%s %s %s %s', o.itemOffered.typeOf, (typeof o.itemOffered.name === 'string') ? o.itemOffered.name : '', (typeof o.price === 'number') ? String(o.price) : '', o.priceCurrency);
|
202 | }
|
203 | });
|
204 | }
|
205 | exports.createOrderItems = createOrderItems;
|
206 |
|
207 |
|
208 |
|
209 | function createReturnOrderMessage(params) {
|
210 | return __awaiter(this, void 0, void 0, function* () {
|
211 | const emailMessageText = yield createEmailMessageText({
|
212 | order: params.order,
|
213 | email: params.email,
|
214 | renderFilePath: `${templateDirectory}/returnOrder/text.pug`,
|
215 | renderFileOptions: {
|
216 | order: params.order
|
217 | }
|
218 | });
|
219 | const about = yield createEmailMessageAbout({
|
220 | email: params.email,
|
221 | renderFilePath: `${templateDirectory}/returnOrder/subject.pug`,
|
222 | renderFileOptions: {
|
223 | sellerName: params.order.seller.name
|
224 | }
|
225 | });
|
226 | const defaultToRecipientEmail = params.order.customer.email;
|
227 | if (defaultToRecipientEmail === undefined) {
|
228 | throw new factory.errors.Argument('order', 'order.customer.email undefined');
|
229 | }
|
230 | const sender = createEmailMessageSender(params);
|
231 | const toRecipient = {
|
232 | typeOf: params.order.customer.typeOf,
|
233 | name: (params.email !== undefined
|
234 | && params.email.toRecipient !== undefined
|
235 | && typeof params.email.toRecipient.name === 'string')
|
236 | ? params.email.toRecipient.name
|
237 | : `${params.order.customer.familyName} ${params.order.customer.givenName}`,
|
238 | email: (params.email !== undefined
|
239 | && params.email.toRecipient !== undefined
|
240 | && typeof params.email.toRecipient.email === 'string')
|
241 | ? params.email.toRecipient.email
|
242 | : defaultToRecipientEmail
|
243 | };
|
244 | return {
|
245 | typeOf: factory.creativeWorkType.EmailMessage,
|
246 | identifier: `ReturnOrder-${params.order.orderNumber}`,
|
247 | name: `ReturnOrder-${params.order.orderNumber}`,
|
248 | sender: sender,
|
249 | toRecipient: toRecipient,
|
250 | about: about,
|
251 | text: emailMessageText
|
252 | };
|
253 | });
|
254 | }
|
255 | exports.createReturnOrderMessage = createReturnOrderMessage;
|
256 |
|
257 |
|
258 |
|
259 | function createRefundMessage(params) {
|
260 | return __awaiter(this, void 0, void 0, function* () {
|
261 | const emailMessageText = yield createEmailMessageText({
|
262 | order: params.order,
|
263 | email: params.email,
|
264 | renderFilePath: `${templateDirectory}/refundOrder/text.pug`,
|
265 | renderFileOptions: {
|
266 | order: params.order,
|
267 | paymentMethods: params.paymentMethods.map((p) => {
|
268 | return util.format('%s\n%s\n%s\n', p.typeOf, (p.accountId !== undefined) ? p.accountId : '', (p.totalPaymentDue !== undefined) ? `${p.totalPaymentDue.value} ${p.totalPaymentDue.currency}` : '');
|
269 | })
|
270 | .join('\n')
|
271 | }
|
272 | });
|
273 | const about = yield createEmailMessageAbout({
|
274 | email: params.email,
|
275 | renderFilePath: `${templateDirectory}/refundOrder/subject.pug`,
|
276 | renderFileOptions: {
|
277 | sellerName: params.order.seller.name
|
278 | }
|
279 | });
|
280 | const defaultToRecipientEmail = params.order.customer.email;
|
281 | if (defaultToRecipientEmail === undefined) {
|
282 | throw new factory.errors.Argument('order', 'order.customer.email undefined');
|
283 | }
|
284 | const sender = createEmailMessageSender(params);
|
285 | const toRecipient = {
|
286 | typeOf: params.order.customer.typeOf,
|
287 | name: (params.email !== undefined
|
288 | && params.email.toRecipient !== undefined
|
289 | && typeof params.email.toRecipient.name === 'string')
|
290 | ? params.email.toRecipient.name
|
291 | : `${params.order.customer.familyName} ${params.order.customer.givenName}`,
|
292 | email: (params.email !== undefined
|
293 | && params.email.toRecipient !== undefined
|
294 | && typeof params.email.toRecipient.email === 'string')
|
295 | ? params.email.toRecipient.email
|
296 | : defaultToRecipientEmail
|
297 | };
|
298 | return {
|
299 | typeOf: factory.creativeWorkType.EmailMessage,
|
300 | identifier: `RefundOrder-${params.order.orderNumber}`,
|
301 | name: `RefundOrder-${params.order.orderNumber}`,
|
302 | sender: sender,
|
303 | toRecipient: toRecipient,
|
304 | about: about,
|
305 | text: emailMessageText
|
306 | };
|
307 | });
|
308 | }
|
309 | exports.createRefundMessage = createRefundMessage;
|