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.
Files changed (2) hide show
  1. package/index.js +34 -12
  2. 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: unit => doMap(unit, unitMap),
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(['hotel', 'utcCreatedAt']),
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]) => wildcardMatch(value, product[key]),
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
- // endDate,
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(startDate, dateFormat).format('YYYY-MM-DD');
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
- // endDate,
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(startDate, dateFormat).format('YYYY-MM-DD');
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
- const availability = (
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ti2-ventrata",
3
- "version": "1.0.6",
3
+ "version": "1.0.9",
4
4
  "description": "Ventrata's TI2 Plugin",
5
5
  "main": "index.js",
6
6
  "scripts": {