diff --git a/CHANGELOG.md b/CHANGELOG.md index 225501c..6bfb5bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,24 +5,6 @@ All notable changes to tailbone-corepos will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## v0.3.2 (2024-11-18) - -### Fix - -- add startup workaround for CORE model imports, to avoid error - -## v0.3.1 (2024-08-18) - -### Fix - -- refactory grid usage per wuttaweb - -## v0.3.0 (2024-08-06) - -### Feat - -- add view for CORE Custom Receipt Lines (`op.customReceipt`) - ## v0.2.1 (2024-07-05) ### Fix diff --git a/README.md b/README.md deleted file mode 100644 index 2af4798..0000000 --- a/README.md +++ /dev/null @@ -1,12 +0,0 @@ - -# tailbone-corepos - -Rattail is a retail software framework, released under the GNU General -Public License. - -This package contains software interfaces for the [CORE -POS](https://www.core-pos.com/) system, which is open source and -freely available. - -Please see Rattail's [home page](https://rattailproject.org/) for more -information. diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..3a6860d --- /dev/null +++ b/README.rst @@ -0,0 +1,15 @@ + +tailbone-corepos +================ + +Rattail is a retail software framework, released under the GNU General Public +License. + +This package contains software interfaces for the `CORE POS`_ system, which is +open source and freely available. + +.. _`CORE POS`: https://www.core-pos.com/ + +Please see Rattail's `home page`_ for more information. + +.. _`home page`: https://rattailproject.org/ diff --git a/pyproject.toml b/pyproject.toml index 8ef8cf8..8df35d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,9 +6,9 @@ build-backend = "hatchling.build" [project] name = "tailbone-corepos" -version = "0.3.2" +version = "0.2.1" description = "Tailbone interfaces for CORE POS" -readme = "README.md" +readme = "README.rst" authors = [{name = "Lance Edgar", email = "lance@edbob.org"}] license = {text = "GNU GPL v3+"} classifiers = [ @@ -33,10 +33,10 @@ dependencies = [ [project.urls] -Homepage = "https://rattailproject.org" -Repository = "https://forgejo.wuttaproject.org/rattail/tailbone-corepos" -Issues = "https://forgejo.wuttaproject.org/rattail/tailbone-corepos/issues" -Changelog = "https://forgejo.wuttaproject.org/rattail/tailbone-corepos/src/branch/master/CHANGELOG.md" +Homepage = "https://redmine.rattailproject.org/projects/corepos-integration" +Repository = "https://kallithea.rattailproject.org/rattail-project/tailbone-corepos" +Issues = "https://redmine.rattailproject.org/projects/corepos-integration/issues" +Changelog = "https://kallithea.rattailproject.org/rattail-project/tailbone-corepos/files/master/CHANGELOG.md" [project.entry-points."tailbone.providers"] diff --git a/tailbone_corepos/menus.py b/tailbone_corepos/menus.py index 9bb61a3..afa4ebc 100644 --- a/tailbone_corepos/menus.py +++ b/tailbone_corepos/menus.py @@ -71,11 +71,6 @@ def make_corepos_menu(request): 'route': 'corepos.member_types', 'perm': 'corepos.member_types.list', }, - { - 'title': "Member Contact Preferences", - 'route': 'corepos.member_contact_prefs', - 'perm': 'corepos.member_contact_prefs.list', - }, { 'title': "Employees", 'route': 'corepos.employees', @@ -207,11 +202,6 @@ def make_corepos_menu(request): 'route': 'corepos.tenders', 'perm': 'corepos.tenders.list', }, - { - 'title': "Custom Receipt Lines", - 'route': 'corepos.custom_receipt_lines', - 'perm': 'corepos.custom_receipt_lines.list', - }, ], }, { diff --git a/tailbone_corepos/provider.py b/tailbone_corepos/provider.py index 043b30e..c128a18 100644 --- a/tailbone_corepos/provider.py +++ b/tailbone_corepos/provider.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,7 +24,6 @@ Tailbone Provider for CORE-POS Integration """ -import sqlalchemy as sa from sqlalchemy.orm import sessionmaker, scoped_session from zope.sqlalchemy import register @@ -72,37 +71,6 @@ class TailboneCorePosProvider(TailboneProvider): register(Session) ExtraCoreTransArchiveSessions[key] = Session - # must import all sqlalchemy models before things get rolling, - # otherwise can have errors about continuum TransactionMeta class - # not yet mapped, when relevant pages are first requested... - # cf. https://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/database/sqlalchemy.html#importing-all-sqlalchemy-models - # hat tip to https://stackoverflow.com/a/59241485 - if rattail_config.core_office_op_engine: - app = rattail_config.get_app() - corepos = app.get_corepos_handler() - - # nb. use fake db to avoid true cxn errors, since the only - # point of this is to load the models - engine = sa.create_engine('sqlite://') - - # office_op - core_model = corepos.get_model_office_op() - core_session = corepos.make_session_office_op(bind=engine) - try: - core_session.query(core_model.Store).first() - except sa.exc.OperationalError: - pass - core_session.close() - - # office_trans - core_model = corepos.get_model_office_trans() - core_session = corepos.make_session_office_trans(bind=engine) - try: - core_session.query(core_model.TransactionDetail).first() - except sa.exc.OperationalError: - pass - core_session.close() - def get_provided_views(self): return { diff --git a/tailbone_corepos/views/corepos/__init__.py b/tailbone_corepos/views/corepos/__init__.py index 4ccef2c..60531e7 100644 --- a/tailbone_corepos/views/corepos/__init__.py +++ b/tailbone_corepos/views/corepos/__init__.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -48,7 +48,6 @@ def defaults(config, **kwargs): config.include(mod('tailbone_corepos.views.corepos.customers')) config.include(mod('tailbone_corepos.views.corepos.employees')) config.include(mod('tailbone_corepos.views.corepos.coupons')) - config.include(mod('tailbone_corepos.views.corepos.receipts')) config.include(mod('tailbone_corepos.views.corepos.tenders')) config.include(mod('tailbone_corepos.views.corepos.stockpurchases')) config.include(mod('tailbone_corepos.views.corepos.taxrates')) diff --git a/tailbone_corepos/views/corepos/groups.py b/tailbone_corepos/views/corepos/groups.py index 84e87c8..3648dbb 100644 --- a/tailbone_corepos/views/corepos/groups.py +++ b/tailbone_corepos/views/corepos/groups.py @@ -125,8 +125,7 @@ class UserGroupView(CoreOfficeMasterView): permission_prefix = self.get_permission_prefix() factory = self.get_grid_factory() g = factory( - self.request, - key=f'{route_prefix}.users', + key='{}.users'.format(route_prefix), data=[], columns=[ 'username', diff --git a/tailbone_corepos/views/corepos/members.py b/tailbone_corepos/views/corepos/members.py index efbd437..5de9e45 100644 --- a/tailbone_corepos/views/corepos/members.py +++ b/tailbone_corepos/views/corepos/members.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -26,8 +26,8 @@ CORE-POS member views from sqlalchemy import orm -from corepos.db.office_op.model import MemberType, MemberContactPreference, MemberInfo -from corepos.db.office_trans.model import StockPurchase +from corepos.db.office_op import model as corepos +from corepos.db.office_trans import model as coretrans from webhelpers2.html import HTML, tags @@ -39,7 +39,7 @@ class MemberTypeView(CoreOfficeMasterView): """ Master view for member types """ - model_class = MemberType + model_class = corepos.MemberType model_title = "CORE-POS Member Type" url_prefix = '/core-pos/member-types' route_prefix = 'corepos.member_types' @@ -56,29 +56,11 @@ class MemberTypeView(CoreOfficeMasterView): g.set_link('description') -class MemberContactPreferenceView(CoreOfficeMasterView): - """ - Master view for member contact preferences - """ - model_class = MemberContactPreference - model_title = "CORE-POS Member Contact Preference" - url_prefix = '/core-pos/member-contact-prefs' - route_prefix = 'corepos.member_contact_prefs' - - def configure_grid(self, g): - super().configure_grid(g) - - g.set_sort_defaults('id') - g.set_link('id') - - g.set_link('description') - - class MemberView(CoreOfficeMasterView): """ Master view for members """ - model_class = MemberInfo + model_class = corepos.MemberInfo model_title = "CORE-POS Member (classic)" model_title_plural = "CORE-POS Members (classic)" url_prefix = '/core-pos/members' @@ -125,7 +107,7 @@ class MemberView(CoreOfficeMasterView): ] has_rows = True - model_row_class = StockPurchase + model_row_class = coretrans.StockPurchase rows_title = "Stock Purchases" row_labels = { @@ -214,9 +196,6 @@ class MemberView(CoreOfficeMasterView): return tags.link_to(text, url) def render_equity_live_balance(self, member, field): - app = self.get_rattail_app() - corepos = app.get_corepos_handler() - coretrans = corepos.get_model_office_trans() try: balance = CoreTransSession.query(coretrans.EquityLiveBalance)\ .filter(coretrans.EquityLiveBalance.member_number == member.card_number)\ @@ -235,14 +214,11 @@ class MemberView(CoreOfficeMasterView): return [self.make_xref_button(url=url, text="View in CORE Office")] def get_row_data(self, member): - app = self.get_rattail_app() - corepos = app.get_corepos_handler() - coretrans = corepos.get_model_office_trans() return CoreTransSession.query(coretrans.StockPurchase)\ .filter(coretrans.StockPurchase.card_number == member.card_number) def get_parent(self, stock_purchase): - return self.Session.get(MemberInfo, stock_purchase.card_number) + return self.Session.get(corepos.MemberInfo, stock_purchase.card_number) def configure_row_grid(self, g): super().configure_row_grid(g) @@ -265,9 +241,6 @@ def defaults(config, **kwargs): MemberTypeView = kwargs.get('MemberTypeView', base['MemberTypeView']) MemberTypeView.defaults(config) - MemberContactPreferenceView = kwargs.get('MemberContactPreferenceView', base['MemberContactPreferenceView']) - MemberContactPreferenceView.defaults(config) - MemberView = kwargs.get('MemberView', base['MemberView']) MemberView.defaults(config) diff --git a/tailbone_corepos/views/corepos/products.py b/tailbone_corepos/views/corepos/products.py index 823da2d..70697e2 100644 --- a/tailbone_corepos/views/corepos/products.py +++ b/tailbone_corepos/views/corepos/products.py @@ -248,8 +248,7 @@ class ProductView(CoreOfficeMasterView): factory = self.get_grid_factory() g = factory( - self.request, - key=f'{route_prefix}.vendor_items', + key='{}.vendor_items'.format(route_prefix), data=[], columns=[ 'vendor_name', diff --git a/tailbone_corepos/views/corepos/receipts.py b/tailbone_corepos/views/corepos/receipts.py deleted file mode 100644 index 04d97d9..0000000 --- a/tailbone_corepos/views/corepos/receipts.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8; -*- -################################################################################ -# -# Rattail -- Retail Software Framework -# Copyright © 2010-2024 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 . -# -################################################################################ -""" -CORE POS receipt views -""" - -from corepos.db.office_op.model import CustomReceiptLine - -from .master import CoreOfficeMasterView - - -class CustomReceiptLineView(CoreOfficeMasterView): - """ - Master view for custom receipt text - """ - model_class = CustomReceiptLine - model_title = "CORE-POS Custom Receipt Line" - route_prefix = 'corepos.custom_receipt_lines' - url_prefix = '/core-pos/custom-receipt-lines' - - -def defaults(config, **kwargs): - base = globals() - - CustomReceiptLineView = kwargs.get('CustomReceiptLineView', base['CustomReceiptLineView']) - CustomReceiptLineView.defaults(config) - - -def includeme(config): - defaults(config)