@escapenavigator/utils 2.0.48 → 2.0.49
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/dist/reduced-price.d.ts +13 -8
- package/dist/reduced-price.js +14 -4
- package/dist/reduced-price.spec.js +14 -0
- package/package.json +3 -3
package/dist/reduced-price.d.ts
CHANGED
|
@@ -2,11 +2,10 @@ import { TariffReducedRateModeEnum } from '@escapenavigator/types/dist/tariff/en
|
|
|
2
2
|
/**
|
|
3
3
|
* Льготные места внутри одной брони (школьники, студенты) и пол выручки.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* льготных цен: только ставка и минимум.
|
|
5
|
+
* Льготное место — скидка от групповой цены состава, не отдельный билет.
|
|
6
|
+
* Выбрать можно любое число до размера группы; если скидка пробивает
|
|
7
|
+
* минимум, итог остаётся на полу, выбор не блокируется. Отдельной таблицы
|
|
8
|
+
* льготных цен и лимитов по составам нет: только ставка и минимум.
|
|
10
9
|
*/
|
|
11
10
|
export type ReducedPricingConfig = {
|
|
12
11
|
/** `null` — тариф без льготных мест. */
|
|
@@ -52,9 +51,8 @@ export declare const getPerPersonAmount: (level: PriceLevel) => number;
|
|
|
52
51
|
*/
|
|
53
52
|
export declare const getReducedSeatDiscount: (args: ReducedArgs) => number;
|
|
54
53
|
/**
|
|
55
|
-
* Сколько мест
|
|
56
|
-
*
|
|
57
|
-
* минимальной группе.
|
|
54
|
+
* Сколько мест реально меняют сумму, не упираясь в пол. Это не лимит
|
|
55
|
+
* выбора — гость может отметить больше, цена просто перестанет падать.
|
|
58
56
|
*/
|
|
59
57
|
export declare const getMaxReducedPlayers: (args: ReducedArgs) => number;
|
|
60
58
|
/**
|
|
@@ -65,4 +63,11 @@ export declare const getMaxReducedPlayers: (args: ReducedArgs) => number;
|
|
|
65
63
|
export declare const getGroupPriceWithReduced: (args: ReducedArgs & {
|
|
66
64
|
reducedPlayers?: number | null;
|
|
67
65
|
}) => number;
|
|
66
|
+
/**
|
|
67
|
+
* Сколько фактически сняли со состава после пола. Меньше номинала
|
|
68
|
+
* `места × ставка`, если итог уже на минимуме.
|
|
69
|
+
*/
|
|
70
|
+
export declare const getAppliedReducedDiscount: (args: ReducedArgs & {
|
|
71
|
+
reducedPlayers?: number | null;
|
|
72
|
+
}) => number;
|
|
68
73
|
export {};
|
package/dist/reduced-price.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getGroupPriceWithReduced = exports.getMaxReducedPlayers = exports.getReducedSeatDiscount = exports.getPerPersonAmount = exports.applyMinGameAmount = exports.getMinGameAmount = exports.tariffGameSnapshot = void 0;
|
|
3
|
+
exports.getAppliedReducedDiscount = exports.getGroupPriceWithReduced = exports.getMaxReducedPlayers = exports.getReducedSeatDiscount = exports.getPerPersonAmount = exports.applyMinGameAmount = exports.getMinGameAmount = exports.tariffGameSnapshot = void 0;
|
|
4
4
|
const tariff_reduced_rate_mode_enum_1 = require("@escapenavigator/types/dist/tariff/enum/tariff-reduced-rate-mode.enum");
|
|
5
5
|
/**
|
|
6
6
|
* Достаёт из тарифа поля, влияющие на цену игры. Хранить их на заказе нужно по
|
|
@@ -58,9 +58,8 @@ const getReducedSeatDiscount = (args) => {
|
|
|
58
58
|
};
|
|
59
59
|
exports.getReducedSeatDiscount = getReducedSeatDiscount;
|
|
60
60
|
/**
|
|
61
|
-
* Сколько мест
|
|
62
|
-
*
|
|
63
|
-
* минимальной группе.
|
|
61
|
+
* Сколько мест реально меняют сумму, не упираясь в пол. Это не лимит
|
|
62
|
+
* выбора — гость может отметить больше, цена просто перестанет падать.
|
|
64
63
|
*/
|
|
65
64
|
const getMaxReducedPlayers = (args) => {
|
|
66
65
|
const seatDiscount = (0, exports.getReducedSeatDiscount)(args);
|
|
@@ -88,3 +87,14 @@ const getGroupPriceWithReduced = (args) => {
|
|
|
88
87
|
return (0, exports.applyMinGameAmount)(amount - seats * (0, exports.getReducedSeatDiscount)(args), args);
|
|
89
88
|
};
|
|
90
89
|
exports.getGroupPriceWithReduced = getGroupPriceWithReduced;
|
|
90
|
+
/**
|
|
91
|
+
* Сколько фактически сняли со состава после пола. Меньше номинала
|
|
92
|
+
* `места × ставка`, если итог уже на минимуме.
|
|
93
|
+
*/
|
|
94
|
+
const getAppliedReducedDiscount = (args) => {
|
|
95
|
+
const amount = groupAmount(args);
|
|
96
|
+
if (!amount)
|
|
97
|
+
return 0;
|
|
98
|
+
return Math.max(0, amount - (0, exports.getGroupPriceWithReduced)(args));
|
|
99
|
+
};
|
|
100
|
+
exports.getAppliedReducedDiscount = getAppliedReducedDiscount;
|
|
@@ -134,6 +134,20 @@ describe('края', () => {
|
|
|
134
134
|
...PARIS_REDUCED,
|
|
135
135
|
})).toBe(10500);
|
|
136
136
|
});
|
|
137
|
+
it('лишние льготные места можно выбрать — скидка упирается в пол, а не режет выбор', () => {
|
|
138
|
+
expect((0, reduced_price_1.getAppliedReducedDiscount)({
|
|
139
|
+
price: PARIS,
|
|
140
|
+
players: 2,
|
|
141
|
+
reducedPlayers: 2,
|
|
142
|
+
...PARIS_REDUCED,
|
|
143
|
+
})).toBe(0);
|
|
144
|
+
expect((0, reduced_price_1.getGroupPriceWithReduced)({
|
|
145
|
+
price: PARIS,
|
|
146
|
+
players: 2,
|
|
147
|
+
reducedPlayers: 2,
|
|
148
|
+
...PARIS_REDUCED,
|
|
149
|
+
})).toBe(9800);
|
|
150
|
+
});
|
|
137
151
|
it('мусор в минимуме игнорируется', () => {
|
|
138
152
|
expect((0, reduced_price_1.applyMinGameAmount)(5000, { minGameAmount: null })).toBe(5000);
|
|
139
153
|
expect((0, reduced_price_1.applyMinGameAmount)(5000, { minGameAmount: -100 })).toBe(5000);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@escapenavigator/utils",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.49",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"test": "jest"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@escapenavigator/types": "^2.0.
|
|
17
|
+
"@escapenavigator/types": "^2.0.47",
|
|
18
18
|
"axios": "^0.21.4",
|
|
19
19
|
"class-transformer": "^0.5.1",
|
|
20
20
|
"class-validator": "^0.13.2",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"ts-jest": "^29.1.1",
|
|
30
30
|
"typescript": "^5.6"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "9eaab88a1509930c7715945ce519eaeba879f550"
|
|
33
33
|
}
|