@hyper.software/common-helpers 2.2.56 → 2.2.57
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/lib/services/bookingService/__tests__/bookingService.calculateDynamic.test.js +98 -26
- package/lib/services/bookingService/__tests__/bookingService.calculateDynamic.test.js.map +1 -1
- package/lib/services/dynamicPricingService/dynamicPricingService.js +57 -33
- package/lib/services/dynamicPricingService/dynamicPricingService.js.map +1 -1
- package/package.json +1 -1
|
@@ -81,19 +81,6 @@ describe('calculateDynamicPricing', function () {
|
|
|
81
81
|
list: Array(count).fill({ roomTypeId: 'roomType1' }),
|
|
82
82
|
});
|
|
83
83
|
};
|
|
84
|
-
// it('returns base price when dynamic pricing is inactive', async () => {
|
|
85
|
-
// const result = await calculateDynamicPricing({
|
|
86
|
-
// currentPricing: { [today.format('YYYY-MM-DD')]: 100 },
|
|
87
|
-
// dynamicPricing: baseDynamicPricing({ isActive: false }),
|
|
88
|
-
// existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 90 },
|
|
89
|
-
// company: mockCompany,
|
|
90
|
-
// roomTypeId: 'roomType1',
|
|
91
|
-
// companyId: 'comp1',
|
|
92
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(5, today.format('YYYY-MM-DD')),
|
|
93
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
94
|
-
// })
|
|
95
|
-
// expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(90)
|
|
96
|
-
// })
|
|
97
84
|
it('applies holiday dynamic pricing if date is near holiday', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
98
85
|
var holidayDate, companyWithHoliday, pricing, result;
|
|
99
86
|
var _a;
|
|
@@ -125,19 +112,6 @@ describe('calculateDynamicPricing', function () {
|
|
|
125
112
|
}
|
|
126
113
|
});
|
|
127
114
|
}); });
|
|
128
|
-
// it('uses fallback pricing if base price exists and dynamic pricing is off', async () => {
|
|
129
|
-
// const result = await calculateDynamicPricing({
|
|
130
|
-
// currentPricing: { [today.format('YYYY-MM-DD')]: 100 },
|
|
131
|
-
// dynamicPricing: baseDynamicPricing({ isActive: false }),
|
|
132
|
-
// existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 95 },
|
|
133
|
-
// company: mockCompany,
|
|
134
|
-
// roomTypeId: 'roomType1',
|
|
135
|
-
// companyId: 'comp1',
|
|
136
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(3, today.format('YYYY-MM-DD')),
|
|
137
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
138
|
-
// })
|
|
139
|
-
// expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(95)
|
|
140
|
-
// })
|
|
141
115
|
it('keeps price near base when availability is 100% and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
142
116
|
var result, price;
|
|
143
117
|
var _a;
|
|
@@ -258,5 +232,103 @@ describe('calculateDynamicPricing', function () {
|
|
|
258
232
|
}
|
|
259
233
|
});
|
|
260
234
|
}); });
|
|
235
|
+
it('reverts to base price when dynamic pricing is turned off', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
236
|
+
var dateStr, result;
|
|
237
|
+
var _a, _b;
|
|
238
|
+
return __generator(this, function (_c) {
|
|
239
|
+
switch (_c.label) {
|
|
240
|
+
case 0:
|
|
241
|
+
dateStr = today.clone().add(1, 'day').format('YYYY-MM-DD');
|
|
242
|
+
return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
|
|
243
|
+
currentPricing: (_a = {}, _a[dateStr] = 130, _a),
|
|
244
|
+
dynamicPricing: baseDynamicPricing({ isActive: false }),
|
|
245
|
+
existingBasePriceMap: (_b = {}, _b[dateStr] = 100, _b),
|
|
246
|
+
company: {
|
|
247
|
+
id: 'comp1',
|
|
248
|
+
holidays: [{ date: dateStr, enableDynamicPricing: true }],
|
|
249
|
+
},
|
|
250
|
+
roomTypeId: 'roomType1',
|
|
251
|
+
companyId: 'comp1',
|
|
252
|
+
getRoomTypesAvailability: mockGetRoomTypesAvailability(3, dateStr),
|
|
253
|
+
getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
254
|
+
})];
|
|
255
|
+
case 1:
|
|
256
|
+
result = _c.sent();
|
|
257
|
+
expect(result.updatedPricing[dateStr]).toBe(100);
|
|
258
|
+
return [2 /*return*/];
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}); });
|
|
262
|
+
it('does not apply dynamic pricing if holiday has enableDynamicPricing: false', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
263
|
+
var holidayDate, companyWithHoliday, pricing, result;
|
|
264
|
+
var _a;
|
|
265
|
+
return __generator(this, function (_b) {
|
|
266
|
+
switch (_b.label) {
|
|
267
|
+
case 0:
|
|
268
|
+
holidayDate = today.clone().add(1, 'day').format('YYYY-MM-DD');
|
|
269
|
+
companyWithHoliday = {
|
|
270
|
+
id: 'comp1',
|
|
271
|
+
holidays: [{ date: holidayDate, enableDynamicPricing: false }],
|
|
272
|
+
};
|
|
273
|
+
pricing = (_a = {},
|
|
274
|
+
_a[holidayDate] = 100,
|
|
275
|
+
_a);
|
|
276
|
+
return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
|
|
277
|
+
currentPricing: pricing,
|
|
278
|
+
dynamicPricing: baseDynamicPricing(),
|
|
279
|
+
existingBasePriceMap: {},
|
|
280
|
+
company: companyWithHoliday,
|
|
281
|
+
roomTypeId: 'roomType1',
|
|
282
|
+
companyId: 'comp1',
|
|
283
|
+
getRoomTypesAvailability: mockGetRoomTypesAvailability(1, holidayDate),
|
|
284
|
+
getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
285
|
+
})];
|
|
286
|
+
case 1:
|
|
287
|
+
result = _b.sent();
|
|
288
|
+
expect(result.updatedPricing[holidayDate]).toBe(100);
|
|
289
|
+
return [2 /*return*/];
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}); });
|
|
293
|
+
it('only changes pricing for 3 days around enabled holiday', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
294
|
+
var holiday, dayBefore, dayOf, dayAfter, unrelated, pricing, result;
|
|
295
|
+
var _a;
|
|
296
|
+
return __generator(this, function (_b) {
|
|
297
|
+
switch (_b.label) {
|
|
298
|
+
case 0:
|
|
299
|
+
holiday = today.clone().add(10, 'days');
|
|
300
|
+
dayBefore = holiday.clone().subtract(1, 'day').format('YYYY-MM-DD');
|
|
301
|
+
dayOf = holiday.format('YYYY-MM-DD');
|
|
302
|
+
dayAfter = holiday.clone().add(1, 'day').format('YYYY-MM-DD');
|
|
303
|
+
unrelated = today.clone().add(20, 'days').format('YYYY-MM-DD');
|
|
304
|
+
pricing = (_a = {},
|
|
305
|
+
_a[dayBefore] = 100,
|
|
306
|
+
_a[dayOf] = 100,
|
|
307
|
+
_a[dayAfter] = 100,
|
|
308
|
+
_a[unrelated] = 100,
|
|
309
|
+
_a);
|
|
310
|
+
return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
|
|
311
|
+
currentPricing: pricing,
|
|
312
|
+
dynamicPricing: baseDynamicPricing(),
|
|
313
|
+
existingBasePriceMap: {},
|
|
314
|
+
company: {
|
|
315
|
+
id: 'comp1',
|
|
316
|
+
holidays: [{ date: dayOf, enableDynamicPricing: true }],
|
|
317
|
+
},
|
|
318
|
+
roomTypeId: 'roomType1',
|
|
319
|
+
companyId: 'comp1',
|
|
320
|
+
getRoomTypesAvailability: mockGetRoomTypesAvailability(1, dayOf),
|
|
321
|
+
getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
322
|
+
})];
|
|
323
|
+
case 1:
|
|
324
|
+
result = _b.sent();
|
|
325
|
+
expect(result.updatedPricing[unrelated]).toBe(100);
|
|
326
|
+
expect(result.updatedPricing[dayBefore]).toBeGreaterThan(100);
|
|
327
|
+
expect(result.updatedPricing[dayOf]).toBeGreaterThan(100);
|
|
328
|
+
expect(result.updatedPricing[dayAfter]).toBeGreaterThan(100);
|
|
329
|
+
return [2 /*return*/];
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
}); });
|
|
261
333
|
});
|
|
262
334
|
//# sourceMappingURL=bookingService.calculateDynamic.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;AAC3B,2FAA2F;AAC3F,kDAA2H;AAE3H,QAAQ,CAAC,yBAAyB,EAAE;IAClC,IAAM,KAAK,GAAG,IAAA,gBAAM,GAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAClE,IAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAClE,IAAM,SAAS,GAAG,GAAG,CAAA;IAErB,IAAM,kBAAkB,GAAG,UAAC,SAAwC;QAAxC,0BAAA,EAAA,cAAwC;QAAsB,OAAA,YACxF,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,EAAE,EACb,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,iCAAoB,CAAC,QAAQ,EACnC,MAAM,EAAE,EAAE,IACP,SAAS,EACZ;IARwF,CAQxF,CAAA;IAEF,IAAM,WAAW,GAAa;QAC5B,EAAE,EAAE,OAAO;QACX,QAAQ,EAAE,EAAE;KACN,CAAA;IAER,IAAM,4BAA4B,GAAG,UAAC,SAAiB,EAAE,IAAY;;QACnE,OAAA,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1B,SAAS,EAAE;gBACT,YAAY;oBACV,GAAC,IAAI,IAAG,SAAS;uBAClB;aACF;SACF,CAAC;IANF,CAME,CAAA;IAEJ,IAAM,uBAAuB,GAAG,UAAC,KAAa;QAC5C,OAAA,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;SACrD,CAAC;IAFF,CAEE,CAAA;IAEJ,
|
|
1
|
+
{"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,48 +54,72 @@ exports.calculateDynamicPricing = void 0;
|
|
|
54
54
|
var moment_1 = __importDefault(require("moment"));
|
|
55
55
|
var dateService_1 = require("../dateService/dateService");
|
|
56
56
|
var calculateDynamicPricing = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
57
|
-
var basePriceMap, resultPricing,
|
|
57
|
+
var basePriceMap, resultPricing, dynamicHolidays, affectedDates, _i, dynamicHolidays_1, holiday, date, finalDates, _c, finalDates_1, dateStr, revertedPricing, _d, finalDates_2, dateStr, _e, availabilityResult, roomsResult, totalRooms, roomAvailabilityMap, _f, finalDates_3, dateStr, basePrice, date, price, availableRooms, occupancy, isNearDate;
|
|
58
|
+
var _g, _h;
|
|
58
59
|
var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, existingBasePriceMap = _b.existingBasePriceMap, company = _b.company, roomTypeId = _b.roomTypeId, companyId = _b.companyId, getRoomTypesAvailability = _b.getRoomTypesAvailability, getRoomsByCompanyId = _b.getRoomsByCompanyId;
|
|
59
|
-
return __generator(this, function (
|
|
60
|
-
switch (
|
|
60
|
+
return __generator(this, function (_j) {
|
|
61
|
+
switch (_j.label) {
|
|
61
62
|
case 0:
|
|
62
|
-
basePriceMap = __assign(
|
|
63
|
+
basePriceMap = __assign({}, existingBasePriceMap);
|
|
63
64
|
resultPricing = {};
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
dynamicHolidays = (company.holidays || []).filter(function (h) { return h.enableDynamicPricing; });
|
|
66
|
+
affectedDates = new Set();
|
|
67
|
+
for (_i = 0, dynamicHolidays_1 = dynamicHolidays; _i < dynamicHolidays_1.length; _i++) {
|
|
68
|
+
holiday = dynamicHolidays_1[_i];
|
|
69
|
+
date = (0, moment_1.default)(holiday.date).startOf('day');
|
|
70
|
+
affectedDates.add(date.clone().subtract(1, 'day').format('YYYY-MM-DD'));
|
|
71
|
+
affectedDates.add(date.format('YYYY-MM-DD'));
|
|
72
|
+
affectedDates.add(date.clone().add(1, 'day').format('YYYY-MM-DD'));
|
|
73
|
+
}
|
|
74
|
+
finalDates = Array.from(affectedDates).filter(function (date) { return date in currentPricing; });
|
|
75
|
+
for (_c = 0, finalDates_1 = finalDates; _c < finalDates_1.length; _c++) {
|
|
76
|
+
dateStr = finalDates_1[_c];
|
|
77
|
+
if (!(dateStr in basePriceMap)) {
|
|
78
|
+
basePriceMap[dateStr] = currentPricing[dateStr];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!dynamicPricing.isActive) {
|
|
82
|
+
revertedPricing = __assign({}, currentPricing);
|
|
83
|
+
for (_d = 0, finalDates_2 = finalDates; _d < finalDates_2.length; _d++) {
|
|
84
|
+
dateStr = finalDates_2[_d];
|
|
85
|
+
revertedPricing[dateStr] = basePriceMap[dateStr];
|
|
86
|
+
}
|
|
87
|
+
return [2 /*return*/, {
|
|
88
|
+
updatedPricing: revertedPricing,
|
|
89
|
+
updatedBasePriceMap: basePriceMap,
|
|
90
|
+
}];
|
|
91
|
+
}
|
|
92
|
+
return [4 /*yield*/, Promise.all([
|
|
93
|
+
getRoomTypesAvailability(companyId, [roomTypeId], { period: finalDates }),
|
|
94
|
+
getRoomsByCompanyId(companyId),
|
|
95
|
+
])];
|
|
66
96
|
case 1:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
(0, moment_1.default)(h.date).add(1, 'day').format('YYYY-MM-DD'),
|
|
74
|
-
]; }));
|
|
75
|
-
for (_i = 0, period_1 = period; _i < period_1.length; _i++) {
|
|
76
|
-
dateStr = period_1[_i];
|
|
97
|
+
_e = _j.sent(), availabilityResult = _e[0], roomsResult = _e[1];
|
|
98
|
+
totalRooms = roomsResult.list.filter(function (r) { return r.roomTypeId === roomTypeId; }).length;
|
|
99
|
+
roomAvailabilityMap = ((_g = availabilityResult === null || availabilityResult === void 0 ? void 0 : availabilityResult[roomTypeId]) === null || _g === void 0 ? void 0 : _g.availability) || {};
|
|
100
|
+
for (_f = 0, finalDates_3 = finalDates; _f < finalDates_3.length; _f++) {
|
|
101
|
+
dateStr = finalDates_3[_f];
|
|
102
|
+
basePrice = basePriceMap[dateStr];
|
|
77
103
|
date = (0, moment_1.default)((0, dateService_1.normalizeDate)(dateStr));
|
|
78
104
|
if (!date.isValid())
|
|
79
105
|
continue;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
resultPricing[dateStr] = baseForToday;
|
|
95
|
-
}
|
|
106
|
+
price = basePrice;
|
|
107
|
+
availableRooms = (_h = roomAvailabilityMap[dateStr]) !== null && _h !== void 0 ? _h : totalRooms;
|
|
108
|
+
occupancy = totalRooms > 0 ? 1 - availableRooms / totalRooms : 0;
|
|
109
|
+
if (occupancy >= 0.95)
|
|
110
|
+
price += Math.round(basePrice * 0.5);
|
|
111
|
+
else if (occupancy >= 0.7)
|
|
112
|
+
price += Math.round(basePrice * 0.3);
|
|
113
|
+
else if (occupancy >= 0.4)
|
|
114
|
+
price += Math.round(basePrice * 0.15);
|
|
115
|
+
isNearDate = date.diff((0, moment_1.default)(), 'days') <= 14;
|
|
116
|
+
if (isNearDate)
|
|
117
|
+
price += Math.round(basePrice * 0.1);
|
|
118
|
+
price = Math.min(price, basePrice + 70);
|
|
119
|
+
resultPricing[dateStr] = Math.round(price);
|
|
96
120
|
}
|
|
97
121
|
return [2 /*return*/, {
|
|
98
|
-
updatedPricing: resultPricing,
|
|
122
|
+
updatedPricing: __assign(__assign({}, currentPricing), resultPricing),
|
|
99
123
|
updatedBasePriceMap: basePriceMap,
|
|
100
124
|
}];
|
|
101
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;AAE3B,0DAA0D;AAEnD,IAAM,uBAAuB,GAAG,iEAAO,EAkB7C
|
|
1
|
+
{"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":"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"}
|