ti2-ventrata 1.0.6 → 1.0.9
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/index.js +34 -12
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -37,6 +37,8 @@ const doMapCurry = mapObj => item => doMap(item, mapObj);
|
|
|
37
37
|
const productMapIn = {
|
|
38
38
|
productId: R.path(['id']),
|
|
39
39
|
productName: R.path(['title']),
|
|
40
|
+
availableCurrencies: R.path(['availableCurrencies']),
|
|
41
|
+
defaultCurrency: R.path(['defaultCurrency']),
|
|
40
42
|
options: e => R.pathOr(undefined, ['options'], e).map(option => doMap(option, optionMapIn, ['id', 'title'])),
|
|
41
43
|
};
|
|
42
44
|
|
|
@@ -53,10 +55,11 @@ const rateMap = {
|
|
|
53
55
|
};
|
|
54
56
|
|
|
55
57
|
const availabilityMap = {
|
|
56
|
-
dateTimeStart: R.path(['localDateTimeStart']),
|
|
57
|
-
dateTimeEnd: R.path(['localDateTimeEnd']),
|
|
58
|
+
dateTimeStart: root => R.path(['localDateTimeStart'], root) || R.path(['localDate'], root),
|
|
59
|
+
dateTimeEnd: root => R.path(['localDateTimeEnd']) || R.path(['localDate'], root),
|
|
58
60
|
allDay: R.path(['allDay']),
|
|
59
|
-
pricing: R.path(['pricing']),
|
|
61
|
+
pricing: root => R.path(['pricing'], root) || R.path(['pricingFrom'], root),
|
|
62
|
+
unitPricing: root => R.path(['unitPricing'], root) || R.path(['unitPricingFrom'], root),
|
|
60
63
|
offer: avail => (avail.offerCode ? doMap(avail, {
|
|
61
64
|
offerId: R.path(['offerCode']),
|
|
62
65
|
title: R.pathOr(undefined, ['offerTitle']),
|
|
@@ -81,8 +84,9 @@ const capitalize = sParam => {
|
|
|
81
84
|
const unitMap = {
|
|
82
85
|
unitId: R.path(['id']),
|
|
83
86
|
unitName: R.path(['title']),
|
|
87
|
+
subtitle: R.path(['subtitle']),
|
|
84
88
|
restrictions: R.path(['restrictions']),
|
|
85
|
-
pricing: R.path(['pricing']),
|
|
89
|
+
pricing: root => R.path(['pricing'], root) || R.path(['pricingFrom'], root),
|
|
86
90
|
};
|
|
87
91
|
|
|
88
92
|
const itineraryMap = {
|
|
@@ -103,11 +107,13 @@ const itineraryMap = {
|
|
|
103
107
|
|
|
104
108
|
const unitItemMap = {
|
|
105
109
|
unitItemId: R.path(['uuid']),
|
|
110
|
+
unitId: R.path(['unitId']),
|
|
111
|
+
unitName: R.path(['unit', 'title']),
|
|
106
112
|
supplierId: R.path(['supplierReference']),
|
|
107
113
|
status: e => capitalize(R.path(['status'], e)),
|
|
108
114
|
contact: R.path(['contact']),
|
|
109
115
|
pricing: R.path(['pricing']),
|
|
110
|
-
unit:
|
|
116
|
+
unit: root => doMap(root.unit, unitMap),
|
|
111
117
|
};
|
|
112
118
|
|
|
113
119
|
const contactMapOut = {
|
|
@@ -123,11 +129,14 @@ const contactMapOut = {
|
|
|
123
129
|
|
|
124
130
|
const bookingMap = {
|
|
125
131
|
id: R.path(['id']),
|
|
132
|
+
orderId: R.path(['orderReference']),
|
|
133
|
+
bookingId: R.path(['supplierReference']),
|
|
126
134
|
supplierId: R.path(['supplierReference']),
|
|
127
135
|
status: e => capitalize(R.path(['status'], e)),
|
|
128
136
|
productId: R.path(['product', 'id']),
|
|
129
137
|
productName: R.path(['product', 'title']),
|
|
130
138
|
optionId: R.path(['option', 'id']),
|
|
139
|
+
optionName: R.path(['option', 'title']),
|
|
131
140
|
itinerary: ({ option: { itinerary } = {} }) =>
|
|
132
141
|
(isNilOrEmptyArray(itinerary) ? undefined : itinerary.map(doMapCurry(itineraryMap))),
|
|
133
142
|
duration: booking => doMap(booking, {
|
|
@@ -141,7 +150,7 @@ const bookingMap = {
|
|
|
141
150
|
start: R.path(['availability', 'localDateTimeStart']),
|
|
142
151
|
end: R.path(['availability', 'localDateTimeEnd']),
|
|
143
152
|
allDay: R.path(['availability', 'allDay']),
|
|
144
|
-
bookingDate: R.path(['
|
|
153
|
+
bookingDate: R.path(['utcCreatedAt']),
|
|
145
154
|
holder: booking => doMap(R.path(['contact'], booking), contactMapOut),
|
|
146
155
|
telephone: R.pathOr(undefined, ['contact', 'phoneNumber']),
|
|
147
156
|
notes: R.pathOr(undefined, ['notes']),
|
|
@@ -210,7 +219,10 @@ class Plugin {
|
|
|
210
219
|
if (Object.keys(extraFilters).length > 0) {
|
|
211
220
|
products = products.filter(
|
|
212
221
|
product => Object.entries(extraFilters).every(
|
|
213
|
-
([key, value]) =>
|
|
222
|
+
([key, value]) => {
|
|
223
|
+
if (typeof value === 'string') return wildcardMatch(value, product[key]);
|
|
224
|
+
return true;
|
|
225
|
+
},
|
|
214
226
|
),
|
|
215
227
|
);
|
|
216
228
|
}
|
|
@@ -276,8 +288,9 @@ class Plugin {
|
|
|
276
288
|
optionIds,
|
|
277
289
|
occupancies,
|
|
278
290
|
startDate,
|
|
279
|
-
|
|
291
|
+
endDate,
|
|
280
292
|
dateFormat,
|
|
293
|
+
currency,
|
|
281
294
|
},
|
|
282
295
|
}) {
|
|
283
296
|
assert(this.jwtKey, 'JWT secret should be set');
|
|
@@ -294,7 +307,7 @@ class Plugin {
|
|
|
294
307
|
assert(optionIds.every(Boolean), 'some invalid optionId(s)');
|
|
295
308
|
assert(occupancies.every(Boolean), 'some invalid occupacies(s)');
|
|
296
309
|
const localDateStart = moment(startDate, dateFormat).format('YYYY-MM-DD');
|
|
297
|
-
const localDateEnd = moment(
|
|
310
|
+
const localDateEnd = moment(endDate, dateFormat).format('YYYY-MM-DD');
|
|
298
311
|
// obtain the rates
|
|
299
312
|
const { quote } = await this.searchQuote({
|
|
300
313
|
token,
|
|
@@ -320,6 +333,7 @@ class Plugin {
|
|
|
320
333
|
optionId: optionIds[rateIx],
|
|
321
334
|
localDateStart,
|
|
322
335
|
localDateEnd,
|
|
336
|
+
currency,
|
|
323
337
|
units: Object.entries(qtys).map(([id, quantity]) => ({
|
|
324
338
|
id, quantity,
|
|
325
339
|
})),
|
|
@@ -339,6 +353,7 @@ class Plugin {
|
|
|
339
353
|
productId: productIds[availsIx],
|
|
340
354
|
optionId: optionIds[availsIx],
|
|
341
355
|
availabilityId: avail.id,
|
|
356
|
+
currency,
|
|
342
357
|
unitItems: rates[availsIx].map(rate => ({ unitId: rate })),
|
|
343
358
|
}), this.jwtKey),
|
|
344
359
|
...doMap(avail, availabilityMap),
|
|
@@ -364,7 +379,8 @@ class Plugin {
|
|
|
364
379
|
optionIds,
|
|
365
380
|
occupancies,
|
|
366
381
|
startDate,
|
|
367
|
-
|
|
382
|
+
endDate,
|
|
383
|
+
currency,
|
|
368
384
|
dateFormat,
|
|
369
385
|
},
|
|
370
386
|
}) {
|
|
@@ -382,7 +398,7 @@ class Plugin {
|
|
|
382
398
|
assert(optionIds.every(Boolean), 'some invalid optionId(s)');
|
|
383
399
|
assert(occupancies.every(Boolean), 'some invalid occupacies(s)');
|
|
384
400
|
const localDateStart = moment(startDate, dateFormat).format('YYYY-MM-DD');
|
|
385
|
-
const localDateEnd = moment(
|
|
401
|
+
const localDateEnd = moment(endDate, dateFormat).format('YYYY-MM-DD');
|
|
386
402
|
// obtain the rates
|
|
387
403
|
const { quote } = await this.searchQuote({
|
|
388
404
|
token,
|
|
@@ -400,7 +416,7 @@ class Plugin {
|
|
|
400
416
|
acceptLanguage,
|
|
401
417
|
});
|
|
402
418
|
const url = `${endpoint || this.endpoint}/availability/calendar`;
|
|
403
|
-
|
|
419
|
+
let availability = (
|
|
404
420
|
await Promise.map(rates, async (rate, rateIx) => {
|
|
405
421
|
const qtys = R.countBy(x => x)(rate);
|
|
406
422
|
const data = {
|
|
@@ -408,6 +424,7 @@ class Plugin {
|
|
|
408
424
|
optionId: optionIds[rateIx],
|
|
409
425
|
localDateStart,
|
|
410
426
|
localDateEnd,
|
|
427
|
+
currency,
|
|
411
428
|
units: Object.entries(qtys).map(([id, quantity]) => ({
|
|
412
429
|
id, quantity,
|
|
413
430
|
})),
|
|
@@ -420,6 +437,11 @@ class Plugin {
|
|
|
420
437
|
});
|
|
421
438
|
}, { concurrency: CONCURRENCY })
|
|
422
439
|
).map(({ data }) => data);
|
|
440
|
+
availability = availability.map(
|
|
441
|
+
(avails, availsIx) => (avails.map(
|
|
442
|
+
avail => doMap(avail, availabilityMap),
|
|
443
|
+
)),
|
|
444
|
+
);
|
|
423
445
|
return { availability };
|
|
424
446
|
}
|
|
425
447
|
|