From 95f8ae318a00be95d6414bcb12ea7fe12f835edf Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Mon, 1 Jul 2024 13:25:31 -0500 Subject: [PATCH] fix: refactor custom menu builder, to inherit some menus also rename config extension, per conventions --- pyproject.toml | 2 +- rattail_tutorial/config.py | 8 +- rattail_tutorial/web/menus.py | 147 ++++++++++++++-------------------- 3 files changed, 65 insertions(+), 92 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 52aae87..9a33e70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ main = "rattail_tutorial.web.app:main" [project.entry-points."rattail.config.extensions"] -rattail_tutorial = "rattail_tutorial.config:Rattail_tutorialConfig" +rattail_tutorial = "rattail_tutorial.config:RattailTutorialConfig" [project.urls] diff --git a/rattail_tutorial/config.py b/rattail_tutorial/config.py index 1415ea1..eeb6944 100644 --- a/rattail_tutorial/config.py +++ b/rattail_tutorial/config.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2019 Lance Edgar +# Copyright © 2010-2024 Lance Edgar # # This file is part of Rattail. # @@ -27,7 +27,7 @@ Custom config from rattail.config import ConfigExtension -class Rattail_tutorialConfig(ConfigExtension): +class RattailTutorialConfig(ConfigExtension): """ Rattail config extension for Rattail Tutorial """ @@ -36,5 +36,5 @@ class Rattail_tutorialConfig(ConfigExtension): def configure(self, config): # set some default config values - config.setdefault('rattail.mail', 'emails', 'rattail_tutorial.emails') - config.setdefault('tailbone', 'menus', 'rattail_tutorial.web.menus') + config.setdefault('rattail.mail.emails', 'rattail_tutorial.emails') + config.setdefault('tailbone.menus.handler', 'rattail_tutorial.web.menus:TutorialMenuHandler') diff --git a/rattail_tutorial/web/menus.py b/rattail_tutorial/web/menus.py index b9b6d40..402ca8a 100644 --- a/rattail_tutorial/web/menus.py +++ b/rattail_tutorial/web/menus.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2019 Lance Edgar +# Copyright © 2010-2024 Lance Edgar # # This file is part of Rattail. # @@ -24,166 +24,139 @@ Web Menus """ +from tailbone import menus as base -def simple_menus(request): - url = request.route_url - menus = [ - { +class TutorialMenuHandler(base.MenuHandler): + """ + Demo menu handler + """ + + def make_menus(self, request, **kwargs): + + products_menu = self.make_products_menu(request) + + vendors_menu = self.make_vendors_menu(request) + + company_menu = self.make_company_menu(request) + + batches_menu = self.make_batches_menu(request) + + admin_menu = self.make_admin_menu(request, + include_stores=False, + include_tenders=False) + + menus = [ + products_menu, + vendors_menu, + company_menu, + batches_menu, + admin_menu, + ] + + return menus + + def make_products_menu(self, request, **kwargs): + return { 'title': "Products", 'type': 'menu', 'items': [ { 'title': "Products", - 'url': url('products'), + 'route': 'products', 'perm': 'products.list', }, { 'title': "Brands", - 'url': url('brands'), + 'route': 'brands', 'perm': 'brands.list', }, { 'title': "Report Codes", - 'url': url('reportcodes'), + 'route': 'reportcodes', 'perm': 'reportcodes.list', }, ], - }, - { + } + + def make_vendors_menu(self, request, **kwargs): + return { 'title': "Vendors", 'type': 'menu', 'items': [ { 'title': "Vendors", - 'url': url('vendors'), + 'route': 'vendors', 'perm': 'vendors.list', }, {'type': 'sep'}, { 'title': "Catalogs", - 'url': url('vendorcatalogs'), + 'route': 'vendorcatalogs', 'perm': 'vendorcatalogs.list', }, { 'title': "Upload New Catalog", - 'url': url('vendorcatalogs.create'), + 'route': 'vendorcatalogs.create', 'perm': 'vendorcatalogs.create', }, ], - }, - { + } + + def make_company_menu(self, request, **kwargs): + return { 'title': "Company", 'type': 'menu', 'items': [ { 'title': "Stores", - 'url': url('stores'), + 'route': 'stores', 'perm': 'stores.list', }, { 'title': "Departments", - 'url': url('departments'), + 'route': 'departments', 'perm': 'departments.list', }, { 'title': "Subdepartments", - 'url': url('subdepartments'), + 'route': 'subdepartments', 'perm': 'subdepartments.list', }, {'type': 'sep'}, { 'title': "Employees", - 'url': url('employees'), + 'route': 'employees', 'perm': 'employees.list', }, {'type': 'sep'}, { 'title': "Customers", - 'url': url('customers'), + 'route': 'customers', 'perm': 'customers.list', }, { 'title': "Customer Groups", - 'url': url('customergroups'), + 'route': 'customergroups', 'perm': 'customergroups.list', }, ], - }, - { + } + + def make_batches_menu(self, request, **kwargs): + return { 'title': "Batches", 'type': 'menu', 'items': [ { 'title': "Handheld", - 'url': url('batch.handheld'), + 'route': 'batch.handheld', 'perm': 'batch.handheld.list', }, { 'title': "Inventory", - 'url': url('batch.inventory'), + 'route': 'batch.inventory', 'perm': 'batch.inventory.list', }, ], - }, - { - 'title': "Admin", - 'type': 'menu', - 'items': [ - { - 'title': "Users", - 'url': url('users'), - 'perm': 'users.list', - }, - { - 'title': "User Events", - 'url': url('userevents'), - 'perm': 'userevents.list', - }, - { - 'title': "Roles", - 'url': url('roles'), - 'perm': 'roles.list', - }, - {'type': 'sep'}, - { - 'title': "App Settings", - 'url': url('appsettings'), - 'perm': 'settings.list', - }, - { - 'title': "Email Settings", - 'url': url('emailprofiles'), - 'perm': 'emailprofiles.list', - }, - { - 'title': "Email Attempts", - 'url': url('email_attempts'), - 'perm': 'email_attempts.list', - }, - { - 'title': "Raw Settings", - 'url': url('settings'), - 'perm': 'settings.list', - }, - {'type': 'sep'}, - { - 'title': "DataSync Changes", - 'url': url('datasyncchanges'), - 'perm': 'datasync.list', - }, - { - 'title': "Tables", - 'url': url('tables'), - 'perm': 'tables.list', - }, - { - 'title': "Rattail Tutorial Upgrades", - 'url': url('upgrades'), - 'perm': 'upgrades.list', - }, - ], - }, - ] - - return menus + }