diff --git a/custom_components/shopping_list_manager/config_flow.py b/custom_components/shopping_list_manager/config_flow.py index 3d21b57..63d5928 100644 --- a/custom_components/shopping_list_manager/config_flow.py +++ b/custom_components/shopping_list_manager/config_flow.py @@ -50,7 +50,7 @@ class OptionsFlowHandler(config_entries.OptionsFlow): def __init__(self, config_entry): """Initialize options flow.""" - self.config_entry = config_entry + self._config_entry = config_entry async def async_step_init(self, user_input=None): """Manage the options.""" @@ -59,9 +59,9 @@ class OptionsFlowHandler(config_entries.OptionsFlow): return self.async_create_entry(title="", data=user_input) # Get current settings - current_country = self.config_entry.options.get( + current_country = self._config_entry.options.get( "country", - self.config_entry.data.get("country", "NZ") + self._config_entry.data.get("country", "NZ") ) return self.async_show_form( @@ -73,18 +73,19 @@ class OptionsFlowHandler(config_entries.OptionsFlow): "US": "United States", "GB": "United Kingdom", "CA": "Canada", + "BE": "Belgium (Dutch)", }), vol.Optional( "enable_price_tracking", - default=self.config_entry.options.get("enable_price_tracking", True) + default=self._config_entry.options.get("enable_price_tracking", True) ): bool, vol.Optional( "enable_image_search", - default=self.config_entry.options.get("enable_image_search", True) + default=self._config_entry.options.get("enable_image_search", True) ): bool, vol.Optional( "metric_units_only", - default=self.config_entry.options.get("metric_units_only", True) + default=self._config_entry.options.get("metric_units_only", True) ): bool, }), description_placeholders={ diff --git a/custom_components/shopping_list_manager/data/categories_be.json b/custom_components/shopping_list_manager/data/categories_be.json new file mode 100644 index 0000000..754ecb6 --- /dev/null +++ b/custom_components/shopping_list_manager/data/categories_be.json @@ -0,0 +1,111 @@ +{ + "version": "1.0.0", + "region": "BE", + "language": "nl-BE", + "categories": [ + { + "id": "produce", + "name": "Groenten & Fruit", + "icon": "mdi:fruit-cherries", + "color": "#4CAF50", + "sort_order": 1, + "system": true + }, + { + "id": "dairy", + "name": "Zuivel & Eieren", + "icon": "mdi:cheese", + "color": "#FFC107", + "sort_order": 2, + "system": true + }, + { + "id": "meat", + "name": "Vlees, Vis & Gevogelte", + "icon": "mdi:food-steak", + "color": "#F44336", + "sort_order": 3, + "system": true + }, + { + "id": "bakery", + "name": "Bakkerij", + "icon": "mdi:bread-slice", + "color": "#FF9800", + "sort_order": 4, + "system": true + }, + { + "id": "frozen", + "name": "Diepvries", + "icon": "mdi:snowflake", + "color": "#2196F3", + "sort_order": 5, + "system": true + }, + { + "id": "pantry", + "name": "Voorraadkast", + "icon": "mdi:package-variant", + "color": "#795548", + "sort_order": 6, + "system": true + }, + { + "id": "beverages", + "name": "Dranken", + "icon": "mdi:cup", + "color": "#00BCD4", + "sort_order": 7, + "system": true + }, + { + "id": "snacks", + "name": "Snacks & Koekjes", + "icon": "mdi:food-apple", + "color": "#E91E63", + "sort_order": 8, + "system": true + }, + { + "id": "household", + "name": "Huishouden", + "icon": "mdi:spray-bottle", + "color": "#9C27B0", + "sort_order": 9, + "system": true + }, + { + "id": "health", + "name": "Verzorging", + "icon": "mdi:heart-pulse", + "color": "#009688", + "sort_order": 10, + "system": true + }, + { + "id": "pet", + "name": "Dieren", + "icon": "mdi:paw", + "color": "#FF5722", + "sort_order": 11, + "system": true + }, + { + "id": "baby", + "name": "Baby", + "icon": "mdi:baby-face", + "color": "#F48FB1", + "sort_order": 12, + "system": true + }, + { + "id": "other", + "name": "Overig", + "icon": "mdi:dots-horizontal", + "color": "#9E9E9E", + "sort_order": 99, + "system": true + } + ] +} diff --git a/custom_components/shopping_list_manager/data/products_catalog_be.json b/custom_components/shopping_list_manager/data/products_catalog_be.json new file mode 100644 index 0000000..96d6342 --- /dev/null +++ b/custom_components/shopping_list_manager/data/products_catalog_be.json @@ -0,0 +1,941 @@ +{ + "version": "1.0.0", + "region": "BE", + "language": "nl-BE", + "currency": "EUR", + "last_updated": "2026-06-14", + "description": "Belgium Dutch grocery catalog with common Belgian supermarket products and local brands", + "products": [ + { + "id": "prod_be_halfvolle_melk", + "name": "Halfvolle melk", + "category_id": "dairy", + "aliases": ["melk", "halfvolle melk", "halfvol"], + "default_unit": "L", + "default_quantity": 1, + "price": 1.15, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "halfvolle_melk", + "tags": ["basis"], + "allergens": ["milk"], + "substitution_group": "milk_group", + "priority_level": 5 + }, + { + "id": "prod_be_volle_melk", + "name": "Volle melk", + "category_id": "dairy", + "aliases": ["melk", "volle melk", "vollemelk"], + "default_unit": "L", + "default_quantity": 1, + "price": 1.25, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "volle_melk", + "tags": ["basis"], + "allergens": ["milk"], + "substitution_group": "milk_group", + "priority_level": 5 + }, + { + "id": "prod_be_havermelk", + "name": "Havermelk", + "category_id": "dairy", + "aliases": ["haverdrink", "havermelk", "plantaardige melk"], + "default_unit": "L", + "default_quantity": 1, + "price": 2.29, + "brands": ["Alpro", "Boni", "Oatly"], + "image_hint": "havermelk", + "tags": ["plantaardig"], + "allergens": ["gluten"], + "substitution_group": "milk_group", + "priority_level": 4 + }, + { + "id": "prod_be_boter", + "name": "Boter", + "category_id": "dairy", + "aliases": ["boter", "hoeveboter", "roomboter"], + "default_unit": "g", + "default_quantity": 250, + "price": 2.85, + "brands": ["Boni", "Balade", "Carlsbourg"], + "image_hint": "boter", + "tags": ["basis"], + "allergens": ["milk"], + "substitution_group": "butter_group", + "priority_level": 4 + }, + { + "id": "prod_be_eieren", + "name": "Eieren", + "category_id": "dairy", + "aliases": ["eieren", "eitjes", "vrije uitloop eieren"], + "default_unit": "stuks", + "default_quantity": 10, + "price": 3.25, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "eieren", + "tags": ["basis"], + "allergens": ["egg"], + "substitution_group": "eggs_group", + "priority_level": 5 + }, + { + "id": "prod_be_jonge_kaas", + "name": "Jonge kaas", + "category_id": "dairy", + "aliases": ["kaas", "jonge kaas", "sneetjes kaas"], + "default_unit": "g", + "default_quantity": 300, + "price": 3.79, + "brands": ["Boni", "Maredsous", "Passendale"], + "image_hint": "jonge_kaas", + "tags": ["broodbeleg"], + "allergens": ["milk"], + "substitution_group": "cheese_group", + "priority_level": 4 + }, + { + "id": "prod_be_yoghurt_natuur", + "name": "Yoghurt natuur", + "category_id": "dairy", + "aliases": ["yoghurt", "natuuryoghurt", "yoghurt natuur"], + "default_unit": "g", + "default_quantity": 500, + "price": 1.89, + "brands": ["Boni", "Danone", "Delhaize"], + "image_hint": "yoghurt_natuur", + "tags": [], + "allergens": ["milk"], + "substitution_group": "yoghurt_group", + "priority_level": 4 + }, + { + "id": "prod_be_griekse_yoghurt", + "name": "Griekse yoghurt", + "category_id": "dairy", + "aliases": ["griekse yoghurt", "yoghurt grieks"], + "default_unit": "g", + "default_quantity": 500, + "price": 2.65, + "brands": ["Boni", "Oikos", "Delhaize"], + "image_hint": "griekse_yoghurt", + "tags": [], + "allergens": ["milk"], + "substitution_group": "yoghurt_group", + "priority_level": 3 + }, + { + "id": "prod_be_appels", + "name": "Appels", + "category_id": "produce", + "aliases": ["appels", "jonagold", "elstar"], + "default_unit": "kg", + "default_quantity": 1, + "price": 2.49, + "brands": ["BelOrta", "Boni"], + "image_hint": "appels", + "tags": ["fruit"], + "allergens": [], + "substitution_group": "apple_group", + "priority_level": 5 + }, + { + "id": "prod_be_bananen", + "name": "Bananen", + "category_id": "produce", + "aliases": ["bananen", "banaan"], + "default_unit": "kg", + "default_quantity": 1, + "price": 1.89, + "brands": ["Chiquita", "Boni", "Delhaize"], + "image_hint": "bananen", + "tags": ["fruit"], + "allergens": [], + "substitution_group": "banana_group", + "priority_level": 5 + }, + { + "id": "prod_be_peren", + "name": "Peren", + "category_id": "produce", + "aliases": ["peren", "conference peer", "conference peren"], + "default_unit": "kg", + "default_quantity": 1, + "price": 2.59, + "brands": ["BelOrta", "Boni"], + "image_hint": "peren", + "tags": ["fruit"], + "allergens": [], + "substitution_group": "pear_group", + "priority_level": 4 + }, + { + "id": "prod_be_aardbeien", + "name": "Aardbeien", + "category_id": "produce", + "aliases": ["aardbeien", "belgische aardbeien"], + "default_unit": "g", + "default_quantity": 500, + "price": 4.49, + "brands": ["BelOrta", "Hoogstraten"], + "image_hint": "aardbeien", + "tags": ["fruit", "seizoen"], + "allergens": [], + "substitution_group": "berry_group", + "priority_level": 4 + }, + { + "id": "prod_be_aardappelen", + "name": "Aardappelen", + "category_id": "produce", + "aliases": ["aardappelen", "patatten", "vastkokende aardappelen"], + "default_unit": "kg", + "default_quantity": 2.5, + "price": 3.25, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "aardappelen", + "tags": ["groenten", "basis"], + "allergens": [], + "substitution_group": "potato_group", + "priority_level": 5 + }, + { + "id": "prod_be_tomaten", + "name": "Tomaten", + "category_id": "produce", + "aliases": ["tomaten", "trostomaten", "tomaat"], + "default_unit": "g", + "default_quantity": 500, + "price": 2.49, + "brands": ["BelOrta", "Boni", "Delhaize"], + "image_hint": "tomaten", + "tags": ["groenten"], + "allergens": [], + "substitution_group": "tomato_group", + "priority_level": 5 + }, + { + "id": "prod_be_witloof", + "name": "Witloof", + "category_id": "produce", + "aliases": ["witloof", "witlof", "grondwitloof"], + "default_unit": "g", + "default_quantity": 500, + "price": 2.99, + "brands": ["BelOrta", "Boni"], + "image_hint": "witloof", + "tags": ["groenten", "belgisch"], + "allergens": [], + "substitution_group": "chicory_group", + "priority_level": 4 + }, + { + "id": "prod_be_preien", + "name": "Prei", + "category_id": "produce", + "aliases": ["prei", "preien"], + "default_unit": "stuks", + "default_quantity": 3, + "price": 1.99, + "brands": ["Boni", "Delhaize"], + "image_hint": "prei", + "tags": ["groenten"], + "allergens": [], + "substitution_group": "leek_group", + "priority_level": 3 + }, + { + "id": "prod_be_wortelen", + "name": "Wortelen", + "category_id": "produce", + "aliases": ["wortelen", "peen", "wortels"], + "default_unit": "kg", + "default_quantity": 1, + "price": 1.49, + "brands": ["Boni", "Carrefour"], + "image_hint": "wortelen", + "tags": ["groenten"], + "allergens": [], + "substitution_group": "carrot_group", + "priority_level": 4 + }, + { + "id": "prod_be_uien", + "name": "Uien", + "category_id": "produce", + "aliases": ["uien", "ajuin", "gele uien"], + "default_unit": "kg", + "default_quantity": 1, + "price": 1.39, + "brands": ["Boni", "Delhaize"], + "image_hint": "uien", + "tags": ["groenten", "basis"], + "allergens": [], + "substitution_group": "onion_group", + "priority_level": 5 + }, + { + "id": "prod_be_sla", + "name": "Sla", + "category_id": "produce", + "aliases": ["sla", "kropsla", "salade"], + "default_unit": "stuks", + "default_quantity": 1, + "price": 1.59, + "brands": ["Boni", "Delhaize"], + "image_hint": "sla", + "tags": ["groenten"], + "allergens": [], + "substitution_group": "lettuce_group", + "priority_level": 3 + }, + { + "id": "prod_be_brood_wit", + "name": "Wit brood", + "category_id": "bakery", + "aliases": ["wit brood", "brood", "gesneden wit brood"], + "default_unit": "stuks", + "default_quantity": 1, + "price": 2.39, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "wit_brood", + "tags": ["basis"], + "allergens": ["gluten"], + "substitution_group": "bread_group", + "priority_level": 5 + }, + { + "id": "prod_be_brood_grijs", + "name": "Grijs brood", + "category_id": "bakery", + "aliases": ["grijs brood", "bruin brood", "tarwebrood"], + "default_unit": "stuks", + "default_quantity": 1, + "price": 2.49, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "grijs_brood", + "tags": ["basis"], + "allergens": ["gluten"], + "substitution_group": "bread_group", + "priority_level": 5 + }, + { + "id": "prod_be_pistolets", + "name": "Pistolets", + "category_id": "bakery", + "aliases": ["pistolets", "broodjes", "witte pistolets"], + "default_unit": "stuks", + "default_quantity": 6, + "price": 2.19, + "brands": ["Delhaize", "Carrefour", "Boni"], + "image_hint": "pistolets", + "tags": ["belgisch"], + "allergens": ["gluten"], + "substitution_group": "rolls_group", + "priority_level": 4 + }, + { + "id": "prod_be_sandwiches", + "name": "Sandwiches", + "category_id": "bakery", + "aliases": ["sandwiches", "melkbroodjes", "zachte broodjes"], + "default_unit": "stuks", + "default_quantity": 6, + "price": 2.69, + "brands": ["Boni", "Delhaize"], + "image_hint": "sandwiches", + "tags": ["belgisch"], + "allergens": ["gluten", "milk", "egg"], + "substitution_group": "rolls_group", + "priority_level": 3 + }, + { + "id": "prod_be_luikse_wafels", + "name": "Luikse wafels", + "category_id": "bakery", + "aliases": ["luikse wafels", "suikerwafels", "wafels"], + "default_unit": "stuks", + "default_quantity": 6, + "price": 3.49, + "brands": ["Lotus", "Boni", "Milcamps"], + "image_hint": "luikse_wafels", + "tags": ["belgisch"], + "allergens": ["gluten", "milk", "egg"], + "substitution_group": "waffle_group", + "priority_level": 3 + }, + { + "id": "prod_be_kipfilet", + "name": "Kipfilet", + "category_id": "meat", + "aliases": ["kipfilet", "kip", "kippenfilet"], + "default_unit": "g", + "default_quantity": 600, + "price": 7.49, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "kipfilet", + "tags": [], + "allergens": [], + "substitution_group": "chicken_group", + "priority_level": 5 + }, + { + "id": "prod_be_gehakt", + "name": "Gemengd gehakt", + "category_id": "meat", + "aliases": ["gehakt", "gemengd gehakt", "varkens runds gehakt"], + "default_unit": "g", + "default_quantity": 500, + "price": 4.99, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "gehakt", + "tags": [], + "allergens": [], + "substitution_group": "mince_group", + "priority_level": 4 + }, + { + "id": "prod_be_spekblokjes", + "name": "Spekblokjes", + "category_id": "meat", + "aliases": ["spekblokjes", "spekreepjes", "spek"], + "default_unit": "g", + "default_quantity": 200, + "price": 2.99, + "brands": ["Herta", "Boni", "Delhaize"], + "image_hint": "spekblokjes", + "tags": [], + "allergens": [], + "substitution_group": "bacon_group", + "priority_level": 3 + }, + { + "id": "prod_be_hesp", + "name": "Hesp", + "category_id": "meat", + "aliases": ["hesp", "ham", "gekookte hesp"], + "default_unit": "g", + "default_quantity": 150, + "price": 2.89, + "brands": ["Boni", "Aoste", "Delhaize"], + "image_hint": "hesp", + "tags": ["broodbeleg"], + "allergens": [], + "substitution_group": "ham_group", + "priority_level": 4 + }, + { + "id": "prod_be_zalmfilet", + "name": "Zalmfilet", + "category_id": "meat", + "aliases": ["zalm", "zalmfilet", "verse zalm"], + "default_unit": "g", + "default_quantity": 250, + "price": 6.99, + "brands": ["Delhaize", "Carrefour", "Boni"], + "image_hint": "zalmfilet", + "tags": ["vis"], + "allergens": ["fish"], + "substitution_group": "salmon_group", + "priority_level": 3 + }, + { + "id": "prod_be_frietjes_dieprvries", + "name": "Diepvriesfrieten", + "category_id": "frozen", + "aliases": ["diepvriesfrieten", "frieten", "frietjes", "frites"], + "default_unit": "kg", + "default_quantity": 1, + "price": 2.39, + "brands": ["Boni", "Lutosa", "McCain"], + "image_hint": "diepvriesfrieten", + "tags": ["belgisch"], + "allergens": [], + "substitution_group": "fries_group", + "priority_level": 5 + }, + { + "id": "prod_be_groentenmix_dieprvries", + "name": "Diepvriesgroenten", + "category_id": "frozen", + "aliases": ["diepvriesgroenten", "groentenmix", "diepvries groentemix"], + "default_unit": "g", + "default_quantity": 600, + "price": 2.49, + "brands": ["Boni", "Delhaize", "Carrefour"], + "image_hint": "diepvriesgroenten", + "tags": ["groenten"], + "allergens": [], + "substitution_group": "frozen_vegetables_group", + "priority_level": 4 + }, + { + "id": "prod_be_vanille_ijs", + "name": "Vanille-ijs", + "category_id": "frozen", + "aliases": ["vanille ijs", "vanille-ijs", "roomijs"], + "default_unit": "L", + "default_quantity": 1, + "price": 3.49, + "brands": ["Boni", "Ijsboerke", "Delhaize"], + "image_hint": "vanille_ijs", + "tags": [], + "allergens": ["milk", "egg"], + "substitution_group": "ice_cream_group", + "priority_level": 2 + }, + { + "id": "prod_be_pasta", + "name": "Pasta", + "category_id": "pantry", + "aliases": ["pasta", "spaghetti", "penne"], + "default_unit": "g", + "default_quantity": 500, + "price": 1.39, + "brands": ["Boni", "Barilla", "Delhaize"], + "image_hint": "pasta", + "tags": ["basis"], + "allergens": ["gluten"], + "substitution_group": "pasta_group", + "priority_level": 5 + }, + { + "id": "prod_be_rijst", + "name": "Rijst", + "category_id": "pantry", + "aliases": ["rijst", "basmatirijst", "lange korrel rijst"], + "default_unit": "kg", + "default_quantity": 1, + "price": 2.19, + "brands": ["Boni", "Uncle Ben's", "Delhaize"], + "image_hint": "rijst", + "tags": ["basis"], + "allergens": [], + "substitution_group": "rice_group", + "priority_level": 5 + }, + { + "id": "prod_be_bloem", + "name": "Bloem", + "category_id": "pantry", + "aliases": ["bloem", "tarwebloem", "zelfrijzende bloem"], + "default_unit": "kg", + "default_quantity": 1, + "price": 0.99, + "brands": ["Boni", "Anco", "Delhaize"], + "image_hint": "bloem", + "tags": ["bakken", "basis"], + "allergens": ["gluten"], + "substitution_group": "flour_group", + "priority_level": 4 + }, + { + "id": "prod_be_suiker", + "name": "Suiker", + "category_id": "pantry", + "aliases": ["suiker", "kristalsuiker", "witte suiker"], + "default_unit": "kg", + "default_quantity": 1, + "price": 1.29, + "brands": ["Tienen-Tirlemont", "Boni", "Delhaize"], + "image_hint": "suiker", + "tags": ["bakken", "basis"], + "allergens": [], + "substitution_group": "sugar_group", + "priority_level": 4 + }, + { + "id": "prod_be_koffie", + "name": "Koffie", + "category_id": "pantry", + "aliases": ["koffie", "gemalen koffie", "koffiebonen"], + "default_unit": "g", + "default_quantity": 500, + "price": 5.49, + "brands": ["Douwe Egberts", "Rombouts", "Boni"], + "image_hint": "koffie", + "tags": ["ontbijt"], + "allergens": [], + "substitution_group": "coffee_group", + "priority_level": 5 + }, + { + "id": "prod_be_choco", + "name": "Choco", + "category_id": "pantry", + "aliases": ["choco", "chocopasta", "hazelnootpasta"], + "default_unit": "g", + "default_quantity": 400, + "price": 2.99, + "brands": ["Nutella", "Boni", "Kwatta"], + "image_hint": "choco", + "tags": ["broodbeleg"], + "allergens": ["milk", "nuts"], + "substitution_group": "spread_group", + "priority_level": 4 + }, + { + "id": "prod_be_confituur", + "name": "Confituur", + "category_id": "pantry", + "aliases": ["confituur", "jam", "aardbeienconfituur"], + "default_unit": "g", + "default_quantity": 450, + "price": 2.39, + "brands": ["Materne", "Boni", "Delhaize"], + "image_hint": "confituur", + "tags": ["broodbeleg"], + "allergens": [], + "substitution_group": "jam_group", + "priority_level": 3 + }, + { + "id": "prod_be_mayonaise", + "name": "Mayonaise", + "category_id": "pantry", + "aliases": ["mayonaise", "mayo", "fritessaus"], + "default_unit": "ml", + "default_quantity": 500, + "price": 2.89, + "brands": ["Devos Lemmens", "Boni", "Delhaize"], + "image_hint": "mayonaise", + "tags": ["belgisch"], + "allergens": ["egg", "mustard"], + "substitution_group": "mayonnaise_group", + "priority_level": 5 + }, + { + "id": "prod_be_pickles", + "name": "Pickles", + "category_id": "pantry", + "aliases": ["pickles", "belgische pickles", "piccalilly"], + "default_unit": "g", + "default_quantity": 350, + "price": 2.49, + "brands": ["Devos Lemmens", "Bister", "Boni"], + "image_hint": "pickles", + "tags": ["belgisch"], + "allergens": ["mustard"], + "substitution_group": "sauce_group", + "priority_level": 3 + }, + { + "id": "prod_be_olijfolie", + "name": "Olijfolie", + "category_id": "pantry", + "aliases": ["olijfolie", "extra vierge olijfolie"], + "default_unit": "ml", + "default_quantity": 750, + "price": 6.49, + "brands": ["Boni", "Bertolli", "Delhaize"], + "image_hint": "olijfolie", + "tags": ["basis"], + "allergens": [], + "substitution_group": "oil_group", + "priority_level": 4 + }, + { + "id": "prod_be_zout", + "name": "Zout", + "category_id": "pantry", + "aliases": ["zout", "keukenzout", "zeezout"], + "default_unit": "g", + "default_quantity": 500, + "price": 0.79, + "brands": ["Boni", "Jozo", "Delhaize"], + "image_hint": "zout", + "tags": ["basis"], + "allergens": [], + "substitution_group": "salt_group", + "priority_level": 3 + }, + { + "id": "prod_be_peper", + "name": "Peper", + "category_id": "pantry", + "aliases": ["peper", "zwarte peper", "pepermolen"], + "default_unit": "g", + "default_quantity": 50, + "price": 2.29, + "brands": ["Boni", "Ducros", "Delhaize"], + "image_hint": "peper", + "tags": ["basis"], + "allergens": [], + "substitution_group": "spice_group", + "priority_level": 3 + }, + { + "id": "prod_be_spa_bruis", + "name": "Bruiswater", + "category_id": "beverages", + "aliases": ["bruiswater", "spuitwater", "water bruis"], + "default_unit": "L", + "default_quantity": 1.5, + "price": 0.89, + "brands": ["Spa", "Chaudfontaine", "Boni"], + "image_hint": "bruiswater", + "tags": [], + "allergens": [], + "substitution_group": "water_group", + "priority_level": 5 + }, + { + "id": "prod_be_plat_water", + "name": "Plat water", + "category_id": "beverages", + "aliases": ["plat water", "mineraalwater", "water"], + "default_unit": "L", + "default_quantity": 1.5, + "price": 0.75, + "brands": ["Spa", "Chaudfontaine", "Boni"], + "image_hint": "plat_water", + "tags": [], + "allergens": [], + "substitution_group": "water_group", + "priority_level": 5 + }, + { + "id": "prod_be_sinaasappelsap", + "name": "Sinaasappelsap", + "category_id": "beverages", + "aliases": ["sinaasappelsap", "appelsiensap", "fruitsap"], + "default_unit": "L", + "default_quantity": 1, + "price": 2.19, + "brands": ["Minute Maid", "Boni", "Delhaize"], + "image_hint": "sinaasappelsap", + "tags": [], + "allergens": [], + "substitution_group": "juice_group", + "priority_level": 3 + }, + { + "id": "prod_be_pils", + "name": "Pils", + "category_id": "beverages", + "aliases": ["pils", "bier", "pintjes"], + "default_unit": "stuks", + "default_quantity": 6, + "price": 5.99, + "brands": ["Jupiler", "Stella Artois", "Maes"], + "image_hint": "pils", + "tags": ["belgisch", "alcohol"], + "allergens": ["gluten"], + "substitution_group": "beer_group", + "priority_level": 3 + }, + { + "id": "prod_be_coladrank", + "name": "Cola", + "category_id": "beverages", + "aliases": ["cola", "coca cola", "frisdrank"], + "default_unit": "L", + "default_quantity": 1.5, + "price": 2.19, + "brands": ["Coca-Cola", "Pepsi", "Boni"], + "image_hint": "cola", + "tags": [], + "allergens": [], + "substitution_group": "soft_drink_group", + "priority_level": 3 + }, + { + "id": "prod_be_speculoos", + "name": "Speculoos", + "category_id": "snacks", + "aliases": ["speculoos", "speculaas", "lotus koekjes"], + "default_unit": "g", + "default_quantity": 250, + "price": 2.29, + "brands": ["Lotus", "Boni", "Delhaize"], + "image_hint": "speculoos", + "tags": ["belgisch"], + "allergens": ["gluten"], + "substitution_group": "biscuit_group", + "priority_level": 4 + }, + { + "id": "prod_be_chocolade", + "name": "Chocolade", + "category_id": "snacks", + "aliases": ["chocolade", "tablet chocolade", "melkchocolade"], + "default_unit": "g", + "default_quantity": 200, + "price": 2.49, + "brands": ["Cote d'Or", "Jacques", "Boni"], + "image_hint": "chocolade", + "tags": ["belgisch"], + "allergens": ["milk", "soy", "nuts"], + "substitution_group": "chocolate_group", + "priority_level": 4 + }, + { + "id": "prod_be_chips_paprika", + "name": "Paprikachips", + "category_id": "snacks", + "aliases": ["paprikachips", "chips paprika", "chips"], + "default_unit": "g", + "default_quantity": 200, + "price": 1.79, + "brands": ["Lay's", "Boni", "Croky"], + "image_hint": "paprikachips", + "tags": [], + "allergens": [], + "substitution_group": "chips_group", + "priority_level": 3 + }, + { + "id": "prod_be_wasmiddel", + "name": "Wasmiddel", + "category_id": "household", + "aliases": ["wasmiddel", "vloeibaar wasmiddel", "waspoeder"], + "default_unit": "L", + "default_quantity": 1.5, + "price": 8.49, + "brands": ["Dash", "Ariel", "Boni"], + "image_hint": "wasmiddel", + "tags": [], + "allergens": [], + "substitution_group": "laundry_group", + "priority_level": 3 + }, + { + "id": "prod_be_afwasmiddel", + "name": "Afwasmiddel", + "category_id": "household", + "aliases": ["afwasmiddel", "dreft", "vaatwasmiddel handwas"], + "default_unit": "ml", + "default_quantity": 500, + "price": 1.99, + "brands": ["Dreft", "Boni", "Delhaize"], + "image_hint": "afwasmiddel", + "tags": [], + "allergens": [], + "substitution_group": "dish_soap_group", + "priority_level": 4 + }, + { + "id": "prod_be_wc_papier", + "name": "Toiletpapier", + "category_id": "household", + "aliases": ["toiletpapier", "wc papier", "wc-papier"], + "default_unit": "rollen", + "default_quantity": 12, + "price": 4.99, + "brands": ["Page", "Boni", "Delhaize"], + "image_hint": "toiletpapier", + "tags": ["basis"], + "allergens": [], + "substitution_group": "toilet_paper_group", + "priority_level": 5 + }, + { + "id": "prod_be_keukenpapier", + "name": "Keukenpapier", + "category_id": "household", + "aliases": ["keukenpapier", "keukenrol", "huishoudpapier"], + "default_unit": "rollen", + "default_quantity": 2, + "price": 2.29, + "brands": ["Boni", "Page", "Delhaize"], + "image_hint": "keukenpapier", + "tags": [], + "allergens": [], + "substitution_group": "paper_towel_group", + "priority_level": 3 + }, + { + "id": "prod_be_tandpasta", + "name": "Tandpasta", + "category_id": "health", + "aliases": ["tandpasta", "fluoride tandpasta"], + "default_unit": "ml", + "default_quantity": 75, + "price": 2.49, + "brands": ["Colgate", "Signal", "Oral-B"], + "image_hint": "tandpasta", + "tags": [], + "allergens": [], + "substitution_group": "toothpaste_group", + "priority_level": 3 + }, + { + "id": "prod_be_shampoo", + "name": "Shampoo", + "category_id": "health", + "aliases": ["shampoo", "haarshampoo"], + "default_unit": "ml", + "default_quantity": 300, + "price": 3.99, + "brands": ["Nivea", "Dove", "Garnier"], + "image_hint": "shampoo", + "tags": [], + "allergens": [], + "substitution_group": "shampoo_group", + "priority_level": 2 + }, + { + "id": "prod_be_luiers", + "name": "Luiers", + "category_id": "baby", + "aliases": ["luiers", "pamper", "pampers"], + "default_unit": "stuks", + "default_quantity": 36, + "price": 9.99, + "brands": ["Pampers", "Boni", "Delhaize"], + "image_hint": "luiers", + "tags": [], + "allergens": [], + "substitution_group": "diaper_group", + "priority_level": 4 + }, + { + "id": "prod_be_babydoekjes", + "name": "Babydoekjes", + "category_id": "baby", + "aliases": ["babydoekjes", "vochtige doekjes", "billendoekjes"], + "default_unit": "stuks", + "default_quantity": 64, + "price": 1.99, + "brands": ["Pampers", "Boni", "Zwitsal"], + "image_hint": "babydoekjes", + "tags": [], + "allergens": [], + "substitution_group": "baby_wipes_group", + "priority_level": 3 + }, + { + "id": "prod_be_kattenvoer", + "name": "Kattenvoer", + "category_id": "pet", + "aliases": ["kattenvoer", "kattenbrokken", "kat voeding"], + "default_unit": "kg", + "default_quantity": 1.5, + "price": 5.99, + "brands": ["Whiskas", "Felix", "Boni"], + "image_hint": "kattenvoer", + "tags": [], + "allergens": [], + "substitution_group": "cat_food_group", + "priority_level": 3 + }, + { + "id": "prod_be_hondenvoer", + "name": "Hondenvoer", + "category_id": "pet", + "aliases": ["hondenvoer", "hondenbrokken", "hond voeding"], + "default_unit": "kg", + "default_quantity": 3, + "price": 8.49, + "brands": ["Pedigree", "Cesar", "Boni"], + "image_hint": "hondenvoer", + "tags": [], + "allergens": [], + "substitution_group": "dog_food_group", + "priority_level": 3 + } + ], + "country": "Belgium" +} diff --git a/custom_components/shopping_list_manager/websocket/handlers.py b/custom_components/shopping_list_manager/websocket/handlers.py index ceb0c9c..d3c0061 100644 --- a/custom_components/shopping_list_manager/websocket/handlers.py +++ b/custom_components/shopping_list_manager/websocket/handlers.py @@ -1194,12 +1194,13 @@ def websocket_get_integration_settings( "US": "United States", "GB": "United Kingdom", "CA": "Canada", + "BE": "Belgium (Dutch)", }, } ) -_VALID_COUNTRIES = ["NZ", "AU", "US", "GB", "CA"] +_VALID_COUNTRIES = ["NZ", "AU", "US", "GB", "CA", "BE"] @websocket_api.websocket_command( {