heissepreise/site/model/categories.js
Mario Zechner 4be086ef70 Fix Billa
2023-10-22 00:31:26 +02:00

194 lines
6.6 KiB
JavaScript

// These are a match of the Billa categories, which are organized in a 2-level hierarchy.
// Each category in the top level gets a code from 1-Z, each sub category also gets a code.
// Together the two codes from a unique id for the category, which we store in the item.category
// field. E.g. "Obst & Gemüse > Salate" has the code "13", "Kühlwaren > Tofu" has the code "4C"
exports.categories = [
{
name: "🍌🥑 Obst & Gemüse",
subcategories: [
/*00*/ "Obst",
/*01*/ "Gemüse",
/*02*/ "Salate",
/*03*/ "Trockenfrüchte & Nüsse", // I don't know how to make formatting stop.
],
},
{
name: "🍞🥐 Brot & Gebäck",
subcategories: [
/*10*/ "Aufbackbrötchen & Toast",
/*11*/ "Brot & Gebäck",
/*12*/ "Knäckebrot & Zwieback",
/*13*/ "Kuchen & Co.",
/*14*/ "Semmelwürfel & Brösel", // I don't know how to make formatting stop.
],
},
{
name: "🥤🍺 Getränke",
subcategories: [
/*20*/ "Alkoholfreie Getränke",
/*21*/ "Bier & Radler",
/*22*/ "Kaffee, Tee & Co.",
/*23*/ "Sekt & Champagner",
/*24*/ "Spirituosen",
/*25*/ "Wein",
/*26*/ "Mineralwasser", // I don't know how to make formatting stop.
],
},
{
name: "🥚🥛🥩 Kühlwaren",
subcategories: [
/*30*/ "Fertiggerichte",
/*31*/ "Eier",
/*32*/ "Fleisch",
/*33*/ "Käse, Aufstriche & Salate",
/*34*/ "Milchprodukte",
/*35*/ "Feinkostplatten & Brötchen",
/*36*/ "Blätterteig, Strudelteig",
/*37*/ "Wurst, Schinken & Speck",
/*38*/ "Feinkost",
/*39*/ "Fisch",
/*3A*/ "Unbekannt", // Not available in Billa hierarchy, left blank
/*3B*/ "Vegetarisch, Tofu, Soja & Co",
],
},
{
name: "🧊🍦 Tiefkühl",
subcategories: [
/*40*/ "Eis",
/*41*/ "Unbekannt", // Not available in Billa hierarchy, left blank
/*42*/ "Fertiggerichte",
/*43*/ "Fisch & Garnelen",
/*44*/ "Gemüse, Kräuter & Obst",
/*45*/ "Pommes Frites & Co.",
/*46*/ "Pizza & Baguette",
/*47*/ "Desserts & Früchte",
],
},
{
name: "🌾 Grundnahrungsmittel",
subcategories: [
/*50*/ "Asia & Mexican Produkte",
/*51*/ "Baby",
/*52*/ "Backen",
/*53*/ "Essig & Öl",
/*54*/ "Fertiggerichte",
/*55*/ "Gewürze & Würzmittel",
/*56*/ "Honig, Marmelade & Co.",
/*57*/ "Konserven & Sauerwaren",
/*58*/ "Kuchen & Co.",
/*59*/ "Mehl & Getreideprodukte",
/*5A*/ "Müsli & Cerealien",
/*5B*/ "Reis, Teigwaren & Sugo",
/*5C*/ "Saucen & Dressings",
/*5D*/ "Spezielle Ernährung",
/*5E*/ "Zucker & Süßstoffe",
/*5F*/ "Fixprodukte",
],
},
{
name: "🍫🍿 Süßes & Salziges",
subcategories: [
/*60*/ "Biskotten & Eiswaffeln",
/*61*/ "Für kluge Naschkatzen",
/*62*/ "Müsliriegel",
/*63*/ "Chips & Co.",
/*64*/ "Süßes", // I don't know how to make formatting stop.
],
},
{
name: "👄👶 Pflege",
subcategories: [
/*70*/ "Baby",
/*71*/ "Damenhygiene",
/*72*/ "Deodorants",
/*73*/ "Haarpflege & Haarfarben",
/*74*/ "Pflaster & Verbandsmaterial",
/*75*/ "Haut- & Lippenpflege",
/*76*/ "Mund- & Zahnhygiene",
/*77*/ "Rasierbedarf",
/*78*/ "Seife & Duschbäder",
/*79*/ "Sonnen- & Gelsenschutzmittel",
/*7A*/ "Verhütungsmittel",
/*7B*/ "Fußpflege",
/*7C*/ "Strumpfhosen & Socken",
],
},
{
name: "🧹🧺 Haushalt",
subcategories: [
/*80*/ "Büro- & Schulartikel",
/*81*/ "Garten",
/*82*/ "Kleben & Befestigen",
/*83*/ "Küchenartikel",
/*84*/ "Küchenrollen & WC-Papier",
/*85*/ "Lampen & Batterien",
/*86*/ "Müllsäcke, Gefrierbeutel & Co.",
/*87*/ "Raumsprays & Kerzen",
/*88*/ "Reinigen & Pflegen",
/*89*/ "Taschentücher & Servietten",
/*8A*/ "Waschmittel & Weichspüler",
/*8B*/ "Schuhpflege",
/*8C*/ "Kunststoffbehälter",
/*8D*/ "Insektenschutz",
/*8E*/ "Spielwaren",
/*8F*/ "Hygiene-Schutzartikel",
],
},
{
name: "🐶🐱 Haustier",
subcategories: [
/*90*/ "Hunde",
/*91*/ "Katzen",
/*92*/ "Kleintiere",
/*93*/ "Vögel", // I don't know how to make formatting stop.
],
},
{
name: "Unbekannt",
subcategories: [/*A0*/ "Unbekannt"],
},
];
exports.categories.forEach((category, index) => (category.index = index));
exports.toCategoryCode = (i, j) => {
return (
(i < 10 ? "" + i : String.fromCharCode("A".charCodeAt(0) + (i - 10))) + (j < 10 ? "" + j : String.fromCharCode("A".charCodeAt(0) + (j - 10)))
);
};
exports.fromCategoryCode = (code) => {
if (!code || code.length != 2) return [exports.categories.length - 1, 0];
const codeI = code.charCodeAt(0);
const codeJ = code.charCodeAt(1);
return [
codeI - (codeI < "A".charCodeAt(0) ? "0".charCodeAt(0) : "A".charCodeAt(0) - 10),
codeJ - (codeJ < "A".charCodeAt(0) ? "0".charCodeAt(0) : "A".charCodeAt(0) - 10),
];
};
exports.isValidCode = (code) => {
const [i, j] = exports.fromCategoryCode(code);
if (i < 0 || i >= exports.categories.length) return false;
const category = exports.categories[i];
if (j < 0 || j >= exports.categories.subcategories) return false;
return true;
};
exports.getCategory = (code) => {
const [i, j] = exports.fromCategoryCode(code);
return [exports.categories[i], exports.categories[i].subcategories[j]];
};
exports.UNKNOWN_CATEGORY = exports.toCategoryCode(exports.categories.length - 1, 0);
if (require.main === module) {
const code = exports.toCategoryCode(10, 1);
console.log(code);
const [i, j] = exports.fromCategoryCode("A1");
console.log(i + ", " + j);
console.log(exports.isValidCode("F1"));
console.log(exports.isValidCode("11"));
console.log(exports.getCategory("A1"));
}