@hyper.software/common-helpers 2.10.35 → 2.10.37
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 +0 -44
- package/lib/services/bookingService/__tests__/bookingService.calculateDynamic.test.js.map +1 -1
- package/lib/services/dynamicPricingService/dynamicPricingService.d.ts +4 -5
- package/lib/services/dynamicPricingService/dynamicPricingService.js +29 -43
- package/lib/services/dynamicPricingService/dynamicPricingService.js.map +1 -1
- package/package.json +1 -1
|
@@ -19,28 +19,12 @@
|
|
|
19
19
|
// id: 'comp1',
|
|
20
20
|
// holidays: [],
|
|
21
21
|
// } as any
|
|
22
|
-
// const mockGetRoomTypesAvailability = (available: number, date: string) =>
|
|
23
|
-
// jest.fn().mockResolvedValue({
|
|
24
|
-
// roomType1: {
|
|
25
|
-
// availability: {
|
|
26
|
-
// [date]: available,
|
|
27
|
-
// },
|
|
28
|
-
// },
|
|
29
|
-
// })
|
|
30
|
-
// const mockGetRoomsByCompanyId = (count: number) =>
|
|
31
|
-
// jest.fn().mockResolvedValue({
|
|
32
|
-
// list: Array(count).fill({ roomTypeId: 'roomType1' }),
|
|
33
|
-
// })
|
|
34
22
|
// it('returns base price when dynamic pricing is inactive', async () => {
|
|
35
23
|
// const result = await calculateDynamicPricing({
|
|
36
24
|
// currentPricing: { [today.format('YYYY-MM-DD')]: 100 },
|
|
37
25
|
// dynamicPricing: baseDynamicPricing({ isActive: false }),
|
|
38
26
|
// existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 90 },
|
|
39
27
|
// company: mockCompany,
|
|
40
|
-
// roomTypeId: 'roomType1',
|
|
41
|
-
// companyId: 'comp1',
|
|
42
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(5, today.format('YYYY-MM-DD')),
|
|
43
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
44
28
|
// })
|
|
45
29
|
// expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(90)
|
|
46
30
|
// })
|
|
@@ -58,10 +42,6 @@
|
|
|
58
42
|
// dynamicPricing: baseDynamicPricing(),
|
|
59
43
|
// existingBasePriceMap: {},
|
|
60
44
|
// company: companyWithHoliday,
|
|
61
|
-
// roomTypeId: 'roomType1',
|
|
62
|
-
// companyId: 'comp1',
|
|
63
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(1, holidayDate),
|
|
64
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
65
45
|
// })
|
|
66
46
|
// expect(result.updatedPricing[holidayDate]).toBeGreaterThan(100)
|
|
67
47
|
// })
|
|
@@ -71,10 +51,6 @@
|
|
|
71
51
|
// dynamicPricing: baseDynamicPricing({ isActive: false }),
|
|
72
52
|
// existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 95 },
|
|
73
53
|
// company: mockCompany,
|
|
74
|
-
// roomTypeId: 'roomType1',
|
|
75
|
-
// companyId: 'comp1',
|
|
76
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(3, today.format('YYYY-MM-DD')),
|
|
77
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
78
54
|
// })
|
|
79
55
|
// expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(95)
|
|
80
56
|
// })
|
|
@@ -84,10 +60,6 @@
|
|
|
84
60
|
// dynamicPricing: baseDynamicPricing(),
|
|
85
61
|
// existingBasePriceMap: {},
|
|
86
62
|
// company: mockCompany,
|
|
87
|
-
// roomTypeId: 'roomType1',
|
|
88
|
-
// companyId: 'comp1',
|
|
89
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(10, farDate),
|
|
90
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
91
63
|
// })
|
|
92
64
|
// const price = result.updatedPricing[farDate]
|
|
93
65
|
// expect(price).toBeGreaterThanOrEqual(basePrice)
|
|
@@ -99,10 +71,6 @@
|
|
|
99
71
|
// dynamicPricing: baseDynamicPricing(),
|
|
100
72
|
// existingBasePriceMap: {},
|
|
101
73
|
// company: mockCompany,
|
|
102
|
-
// roomTypeId: 'roomType1',
|
|
103
|
-
// companyId: 'comp1',
|
|
104
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(5, farDate),
|
|
105
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
106
74
|
// })
|
|
107
75
|
// const price = result.updatedPricing[farDate]
|
|
108
76
|
// expect(price).toBeGreaterThanOrEqual(basePrice)
|
|
@@ -114,10 +82,6 @@
|
|
|
114
82
|
// dynamicPricing: baseDynamicPricing(),
|
|
115
83
|
// existingBasePriceMap: {},
|
|
116
84
|
// company: mockCompany,
|
|
117
|
-
// roomTypeId: 'roomType1',
|
|
118
|
-
// companyId: 'comp1',
|
|
119
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(1, farDate),
|
|
120
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(50),
|
|
121
85
|
// })
|
|
122
86
|
// const price = result.updatedPricing[farDate]
|
|
123
87
|
// expect(price).toBeGreaterThanOrEqual(basePrice)
|
|
@@ -129,10 +93,6 @@
|
|
|
129
93
|
// dynamicPricing: baseDynamicPricing(),
|
|
130
94
|
// existingBasePriceMap: {},
|
|
131
95
|
// company: mockCompany,
|
|
132
|
-
// roomTypeId: 'roomType1',
|
|
133
|
-
// companyId: 'comp1',
|
|
134
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(10, nearDate),
|
|
135
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
136
96
|
// })
|
|
137
97
|
// const price = result.updatedPricing[nearDate]
|
|
138
98
|
// expect(price).toBeGreaterThanOrEqual(basePrice)
|
|
@@ -144,10 +104,6 @@
|
|
|
144
104
|
// dynamicPricing: baseDynamicPricing(),
|
|
145
105
|
// existingBasePriceMap: {},
|
|
146
106
|
// company: mockCompany,
|
|
147
|
-
// roomTypeId: 'roomType1',
|
|
148
|
-
// companyId: 'comp1',
|
|
149
|
-
// getRoomTypesAvailability: mockGetRoomTypesAvailability(5, nearDate),
|
|
150
|
-
// getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
|
|
151
107
|
// })
|
|
152
108
|
// const price = result.updatedPricing[nearDate]
|
|
153
109
|
// expect(price).toBeGreaterThanOrEqual(basePrice)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,8FAA8F;AAC9F,8HAA8H;AAE9H,8CAA8C;AAC9C,0CAA0C;AAC1C,uEAAuE;AACvE,uEAAuE;AACvE,0BAA0B;AAE1B,iGAAiG;AACjG,sBAAsB;AACtB,qBAAqB;AACrB,6CAA6C;AAC7C,wBAAwB;AACxB,2CAA2C;AAC3C,kBAAkB;AAClB,oBAAoB;AACpB,OAAO;AAEP,oCAAoC;AACpC,mBAAmB;AACnB,oBAAoB;AACpB,aAAa;AAEb,
|
|
1
|
+
{"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,8FAA8F;AAC9F,8HAA8H;AAE9H,8CAA8C;AAC9C,0CAA0C;AAC1C,uEAAuE;AACvE,uEAAuE;AACvE,0BAA0B;AAE1B,iGAAiG;AACjG,sBAAsB;AACtB,qBAAqB;AACrB,6CAA6C;AAC7C,wBAAwB;AACxB,2CAA2C;AAC3C,kBAAkB;AAClB,oBAAoB;AACpB,OAAO;AAEP,oCAAoC;AACpC,mBAAmB;AACnB,oBAAoB;AACpB,aAAa;AAEb,4EAA4E;AAC5E,qDAAqD;AACrD,+DAA+D;AAC/D,iEAAiE;AACjE,oEAAoE;AACpE,8BAA8B;AAC9B,SAAS;AAET,yEAAyE;AACzE,OAAO;AAEP,gFAAgF;AAChF,2EAA2E;AAC3E,6CAA6C;AAC7C,qBAAqB;AACrB,uEAAuE;AACvE,eAAe;AAEf,8DAA8D;AAC9D,4BAA4B;AAC5B,QAAQ;AAER,qDAAqD;AACrD,iCAAiC;AACjC,8CAA8C;AAC9C,kCAAkC;AAClC,qCAAqC;AACrC,SAAS;AAET,sEAAsE;AACtE,OAAO;AAEP,8FAA8F;AAC9F,qDAAqD;AACrD,+DAA+D;AAC/D,iEAAiE;AACjE,oEAAoE;AACpE,8BAA8B;AAC9B,SAAS;AAET,yEAAyE;AACzE,OAAO;AAEP,wFAAwF;AACxF,qDAAqD;AACrD,kDAAkD;AAClD,8CAA8C;AAC9C,kCAAkC;AAClC,8BAA8B;AAC9B,SAAS;AAET,mDAAmD;AACnD,sDAAsD;AACtD,qEAAqE;AACrE,OAAO;AAEP,yFAAyF;AACzF,qDAAqD;AACrD,kDAAkD;AAClD,8CAA8C;AAC9C,kCAAkC;AAClC,8BAA8B;AAC9B,SAAS;AAET,mDAAmD;AACnD,sDAAsD;AACtD,qEAAqE;AACrE,OAAO;AAEP,yEAAyE;AACzE,qDAAqD;AACrD,kDAAkD;AAClD,8CAA8C;AAC9C,kCAAkC;AAClC,8BAA8B;AAC9B,SAAS;AAET,mDAAmD;AACnD,sDAAsD;AACtD,qEAAqE;AACrE,OAAO;AAEP,yFAAyF;AACzF,qDAAqD;AACrD,mDAAmD;AACnD,8CAA8C;AAC9C,kCAAkC;AAClC,8BAA8B;AAC9B,SAAS;AAET,oDAAoD;AACpD,sDAAsD;AACtD,qEAAqE;AACrE,OAAO;AAEP,wFAAwF;AACxF,qDAAqD;AACrD,mDAAmD;AACnD,8CAA8C;AAC9C,kCAAkC;AAClC,8BAA8B;AAC9B,SAAS;AAET,oDAAoD;AACpD,sDAAsD;AACtD,qEAAqE;AACrE,OAAO;AACP,KAAK"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing,
|
|
1
|
+
import { IRoomTypePricePlanPricingInformation, IDynamicPricing } from '../../interfaces';
|
|
2
|
+
export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, manualPricing, enabledHolidayDates, }: {
|
|
3
3
|
currentPricing: IRoomTypePricePlanPricingInformation;
|
|
4
4
|
dynamicPricing: IDynamicPricing;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
manualPricing: IRoomTypePricePlanPricingInformation;
|
|
6
|
+
enabledHolidayDates: string[];
|
|
7
7
|
}) => Promise<{
|
|
8
8
|
updatedPricing: IRoomTypePricePlanPricingInformation;
|
|
9
9
|
updatedBasePriceMap: Record<string, number>;
|
|
10
10
|
}>;
|
|
11
|
-
export declare const getSimpleDynamicMultiplier: (isNearFuture: boolean) => number;
|
|
@@ -50,61 +50,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.
|
|
53
|
+
exports.calculateDynamicPricing = void 0;
|
|
54
54
|
var moment_1 = __importDefault(require("moment"));
|
|
55
|
-
var dateService_1 = require("../dateService/dateService");
|
|
56
55
|
var calculateDynamicPricing = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing,
|
|
60
|
-
return __generator(this, function (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (!date
|
|
56
|
+
var updatedPricing, basePriceMap, affectedDates, _i, enabledHolidayDates_1, holiday, date, _c, _d, date, manualPrice, basePrice, multiplier;
|
|
57
|
+
var _e;
|
|
58
|
+
var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, manualPricing = _b.manualPricing, enabledHolidayDates = _b.enabledHolidayDates;
|
|
59
|
+
return __generator(this, function (_f) {
|
|
60
|
+
updatedPricing = {};
|
|
61
|
+
basePriceMap = __assign({}, dynamicPricing.basePrice);
|
|
62
|
+
affectedDates = new Set();
|
|
63
|
+
for (_i = 0, enabledHolidayDates_1 = enabledHolidayDates; _i < enabledHolidayDates_1.length; _i++) {
|
|
64
|
+
holiday = enabledHolidayDates_1[_i];
|
|
65
|
+
date = (0, moment_1.default)(holiday);
|
|
66
|
+
affectedDates.add(date.clone().subtract(1, 'day').format('YYYY-MM-DD'));
|
|
67
|
+
affectedDates.add(date.format('YYYY-MM-DD'));
|
|
68
|
+
affectedDates.add(date.clone().add(1, 'day').format('YYYY-MM-DD'));
|
|
69
|
+
}
|
|
70
|
+
for (_c = 0, _d = Object.keys(currentPricing); _c < _d.length; _c++) {
|
|
71
|
+
date = _d[_c];
|
|
72
|
+
manualPrice = manualPricing[date];
|
|
73
|
+
basePrice = (_e = basePriceMap[date]) !== null && _e !== void 0 ? _e : currentPricing[date];
|
|
74
|
+
if (!(date in basePriceMap)) {
|
|
75
|
+
basePriceMap[date] = basePrice;
|
|
76
|
+
}
|
|
77
|
+
if (manualPrice !== undefined) {
|
|
78
|
+
updatedPricing[date] = manualPrice;
|
|
76
79
|
continue;
|
|
77
|
-
current = currentPricing[dateStr];
|
|
78
|
-
base = (_c = basePriceMap[dateStr]) !== null && _c !== void 0 ? _c : current;
|
|
79
|
-
isAffectedHoliday = holidayDateSet.has(dateStr);
|
|
80
|
-
leadTimeDays = date.diff(today, 'days');
|
|
81
|
-
isNearFuture = leadTimeDays < 30;
|
|
82
|
-
if (isAffectedHoliday && dynamicPricing.isActive) {
|
|
83
|
-
if (!(dateStr in basePriceMap)) {
|
|
84
|
-
basePriceMap[dateStr] = base;
|
|
85
|
-
}
|
|
86
|
-
baseForToday = basePriceMap[dateStr];
|
|
87
|
-
leadTimeMultiplier = leadTimeDays >= 60 ? 1.0 : 1 + (60 - leadTimeDays) * 0.005;
|
|
88
|
-
rawPrice = baseForToday * (0, exports.getSimpleDynamicMultiplier)(isNearFuture) * leadTimeMultiplier;
|
|
89
|
-
cappedPrice = Math.min(rawPrice, baseForToday * 1.45);
|
|
90
|
-
resultPricing[dateStr] = Math.round(cappedPrice);
|
|
91
80
|
}
|
|
92
|
-
|
|
93
|
-
|
|
81
|
+
if (dynamicPricing.isActive && affectedDates.has(date)) {
|
|
82
|
+
multiplier = dynamicPricing.type === 'INCREASE' ? 1 + dynamicPricing.amount / 100 : 1 - dynamicPricing.amount / 100;
|
|
83
|
+
updatedPricing[date] = Math.round(basePrice * multiplier);
|
|
94
84
|
}
|
|
95
85
|
else {
|
|
96
|
-
|
|
86
|
+
updatedPricing[date] = basePrice;
|
|
97
87
|
}
|
|
98
88
|
}
|
|
99
89
|
return [2 /*return*/, {
|
|
100
|
-
updatedPricing:
|
|
90
|
+
updatedPricing: updatedPricing,
|
|
101
91
|
updatedBasePriceMap: basePriceMap,
|
|
102
92
|
}];
|
|
103
93
|
});
|
|
104
94
|
}); };
|
|
105
95
|
exports.calculateDynamicPricing = calculateDynamicPricing;
|
|
106
|
-
var getSimpleDynamicMultiplier = function (isNearFuture) {
|
|
107
|
-
return isNearFuture ? 1.2 : 1.1;
|
|
108
|
-
};
|
|
109
|
-
exports.getSimpleDynamicMultiplier = getSimpleDynamicMultiplier;
|
|
110
96
|
//# sourceMappingURL=dynamicPricingService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;
|
|
1
|
+
{"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;AAGpB,IAAM,uBAAuB,GAAG,iEAAO,EAU7C;;;QATC,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,aAAa,mBAAA,EACb,mBAAmB,yBAAA;;QAUb,cAAc,GAAyC,EAAE,CAAA;QACzD,YAAY,gBACb,cAAc,CAAC,SAAS,CAC5B,CAAA;QAEK,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,WAAyC,EAAnB,2CAAmB,EAAnB,iCAAmB,EAAnB,IAAmB,EAAE,CAAC;YAAjC,OAAO;YACV,IAAI,GAAG,IAAA,gBAAM,EAAC,OAAO,CAAC,CAAA;YAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;YACvE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;YAC5C,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,WAA8C,EAA3B,KAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAA3B,cAA2B,EAA3B,IAA2B,EAAE,CAAC;YAAtC,IAAI;YACP,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YACjC,SAAS,GAAG,MAAA,YAAY,CAAC,IAAI,CAAC,mCAAI,cAAc,CAAC,IAAI,CAAC,CAAA;YAE5D,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;YAChC,CAAC;YAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAA;gBAClC,SAAQ;YACV,CAAC;YAED,IAAI,cAAc,CAAC,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,UAAU,GACd,cAAc,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,GAAG,CAAA;gBAExG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;YAClC,CAAC;QACH,CAAC;QAED,sBAAO;gBACL,cAAc,gBAAA;gBACd,mBAAmB,EAAE,YAAY;aAClC,EAAA;;KACF,CAAA;AAtDY,QAAA,uBAAuB,2BAsDnC"}
|
package/package.json
CHANGED