From 77102fb3ac031dce1e9bbfb7d7a5ff16c45c7569 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sun, 5 Jul 2020 22:23:04 -0500 Subject: [PATCH] Improve integration for Catapult somewhat custom schema, importers, web views --- theo/config.py | 13 ++++++--- theo/db/model_catapult.py | 31 +++++++++++++++++++++ theo/importing/__init__.py | 0 theo/importing/versions_catapult.py | 35 +++++++++++++++++++++++ theo/web/menus.py | 5 ++++ theo/web/views/__init__.py | 43 +++++++++++++++++++++-------- 6 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 theo/db/model_catapult.py create mode 100644 theo/importing/__init__.py create mode 100644 theo/importing/versions_catapult.py diff --git a/theo/config.py b/theo/config.py index 00668d5..5008293 100644 --- a/theo/config.py +++ b/theo/config.py @@ -38,13 +38,18 @@ class TheoConfig(ConfigExtension): # call the app "Theo" by default config.setdefault('rattail', 'app_title', "Theo") - # Theo may define a custom data model - if integrate_corepos(config): - config.setdefault('rattail', 'model', 'theo.db.model_corepos') - # Theo comes with its own menu for web app config.setdefault('tailbone', 'menus', 'theo.web.menus') + # do we integrate w/ Catapult? + if integrate_catapult(config): + config.setdefault('rattail', 'model', 'theo.db.model_catapult') + config.setdefault('rattail.importing', 'versions.handler', 'theo.importing.versions_catapult:FromTheoToTheoVersions') + + # do we integrate w/ CORE-POS? + elif integrate_corepos(config): + config.setdefault('rattail', 'model', 'theo.db.model_corepos') + def integrate_catapult(config): return config.getbool('theo', 'integrate_catapult', default=False, diff --git a/theo/db/model_catapult.py b/theo/db/model_catapult.py new file mode 100644 index 0000000..11f36d8 --- /dev/null +++ b/theo/db/model_catapult.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2020 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ +""" +Theo data model w/ Catapult integration +""" + +# bring in all the normal stuff from Rattail +from rattail.db.model import * + +# also bring in Catapult integration models +from rattail_onager.db.model import * diff --git a/theo/importing/__init__.py b/theo/importing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/theo/importing/versions_catapult.py b/theo/importing/versions_catapult.py new file mode 100644 index 0000000..663195d --- /dev/null +++ b/theo/importing/versions_catapult.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2020 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ +""" +Theo -> Theo "versions" data import, w/ Catapult integration +""" + +from rattail_onager.importing import versions as onager_base + + +class FromTheoToTheoVersions(onager_base.FromRattailToRattailVersions): + """ + Handler for Theo -> Theo "versions" data import + """ + host_title = "Theo" + local_title = "Theo (Versions)" diff --git a/theo/web/menus.py b/theo/web/menus.py index 480aec2..26dda61 100644 --- a/theo/web/menus.py +++ b/theo/web/menus.py @@ -112,6 +112,11 @@ def simple_menus(request): 'url': url('vendors'), 'perm': 'vendors.list', }, + { + 'title': "Taxes", + 'url': url('taxes'), + 'perm': 'taxes.list', + }, ], } diff --git a/theo/web/views/__init__.py b/theo/web/views/__init__.py index 9d87911..d36ca90 100644 --- a/theo/web/views/__init__.py +++ b/theo/web/views/__init__.py @@ -38,29 +38,48 @@ def includeme(config): config.include('tailbone.views.progress') # main table views - config.include('tailbone.views.brands') - config.include('tailbone.views.customers') config.include('tailbone.views.customergroups') config.include('tailbone.views.custorders') config.include('tailbone.views.datasync') - config.include('tailbone.views.departments') config.include('tailbone.views.email') - config.include('tailbone.views.employees') config.include('tailbone.views.messages') config.include('tailbone.views.people') - config.include('tailbone.views.products') config.include('tailbone.views.reportcodes') config.include('tailbone.views.roles') config.include('tailbone.views.settings') - config.include('tailbone.views.stores') config.include('tailbone.views.subdepartments') config.include('tailbone.views.users') - config.include('tailbone.views.vendors') - # catapult views + # do we integrate w/ Catapult? if integrate_catapult(rattail_config): - config.include('tailbone_onager.views') + config.include('tailbone_onager.views.stores') + config.include('tailbone_onager.views.customers') + config.include('tailbone_onager.views.employees') + config.include('tailbone_onager.views.taxes') + config.include('tailbone_onager.views.departments') + config.include('tailbone_onager.views.brands') + config.include('tailbone_onager.views.vendors') + config.include('tailbone_onager.views.products') + config.include('tailbone_onager.views.catapult') - # corepos views - if integrate_corepos(rattail_config): - config.include('tailbone_corepos.views') + # do we integrate w/ CORE-POS? + elif integrate_corepos(rattail_config): + config.include('tailbone.views.stores') + config.include('tailbone.views.customers') + config.include('tailbone.views.employees') + config.include('tailbone.views.taxes') + config.include('tailbone.views.departments') + config.include('tailbone.views.brands') + config.include('tailbone.views.vendors') + config.include('tailbone.views.products') + config.include('tailbone_corepos.views.corepos') + + else: # no POS integration + config.include('tailbone.views.stores') + config.include('tailbone.views.customers') + config.include('tailbone.views.employees') + config.include('tailbone.views.taxes') + config.include('tailbone.views.departments') + config.include('tailbone.views.brands') + config.include('tailbone.views.vendors') + config.include('tailbone.views.products')