db-vendo-client/p/db/loyalty-cards.js

84 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

import {deepStrictEqual as eql} from 'node:assert';
2020-03-18 21:35:43 +01:00
// todo: generate from https://reiseauskunft.bahn.de/addons/fachkonfig-utf8.cfg ?
2017-11-12 23:51:39 +01:00
const c = {
NONE: Symbol('no loyalty card'),
2017-11-12 23:51:39 +01:00
BAHNCARD: Symbol('Bahncard'),
VORTEILSCARD: Symbol('VorteilsCard'),
HALBTAXABO: Symbol('HalbtaxAbo'),
VOORDEELURENABO: Symbol('Voordeelurenabo'),
SHCARD: Symbol('SH-Card'),
GENERALABONNEMENT: Symbol('General-Abonnement'),
};
2017-11-12 23:51:39 +01:00
// see https://gist.github.com/juliuste/202bb04f450a79f8fa12a2ec3abcd72d
const formatLoyaltyCard = (data) => {
if (data.type === c.BAHNCARD) {
if (data.discount === 25) {
return data.class === 1
? 1
: 2;
}
if (data.discount === 50) {
return data.class === 1
? 3
: 4;
}
2017-11-12 23:51:39 +01:00
}
if (data.type === c.VORTEILSCARD) {
return 9;
}
if (data.type === c.HALBTAXABO) {
return data.railplus
? 10
: 11;
}
if (data.type === c.VOORDEELURENABO) {
return data.railplus
? 12
: 13;
}
if (data.type === c.SHCARD) {
return 14;
}
if (data.type === c.GENERALABONNEMENT) {
return 15;
}
return 0;
};
2017-11-12 23:51:39 +01:00
const parseLoyaltyCard = (cardId) => {
switch (cardId) {
case 1:
case 2: return {type: c.BAHNCARD, discount: 25, class: cardId === 1 ? 1 : 2};
case 3:
case 4: return {type: c.BAHNCARD, discount: 50, class: cardId === 3 ? 1 : 2};
case 9: return {type: c.VORTEILSCARD};
case 10:
case 11: return {type: c.HALBTAXABO, railplus: cardId === 10};
case 12:
case 13: return {type: c.VOORDEELURENABO, railplus: cardId === 12};
case 14: return {type: c.SHCARD};
case 15: return {type: c.GENERALABONNEMENT};
default: return {type: c.NONE};
}
};
const bcFirst50 = {
type: c.BAHNCARD,
class: 1,
discount: 50,
};
eql(parseLoyaltyCard(formatLoyaltyCard(bcFirst50)), bcFirst50);
const halbtaxRailplus = {
type: c.HALBTAXABO,
railplus: true,
};
eql(parseLoyaltyCard(formatLoyaltyCard(halbtaxRailplus)), halbtaxRailplus);
2022-05-07 16:17:37 +02:00
export {
c as data,
formatLoyaltyCard,
parseLoyaltyCard,
};