Add basic view support for CORE trans archive
This commit is contained in:
		
							parent
							
								
									148b4ccc1a
								
							
						
					
					
						commit
						149f5be052
					
				
					 8 changed files with 288 additions and 95 deletions
				
			
		| 
						 | 
				
			
			@ -34,12 +34,11 @@ from tailbone.views import MasterView
 | 
			
		|||
from tailbone_corepos.db import CoreOfficeSession, ExtraCoreOfficeSessions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CoreOfficeMasterView(MasterView):
 | 
			
		||||
class CoreMasterView(MasterView):
 | 
			
		||||
    """
 | 
			
		||||
    Master base class for CORE-POS views
 | 
			
		||||
    Master base class for all CORE-POS views
 | 
			
		||||
    """
 | 
			
		||||
    supports_multiple_engines = True
 | 
			
		||||
    engine_type_key = 'corepos'
 | 
			
		||||
    has_local_times = True
 | 
			
		||||
    results_downloadable = True
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,41 +46,12 @@ class CoreOfficeMasterView(MasterView):
 | 
			
		|||
        'id': "ID",
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def get_db_engines(self):
 | 
			
		||||
        engines = OrderedDict()
 | 
			
		||||
        if self.rattail_config.corepos_engine:
 | 
			
		||||
            engines['default'] = self.rattail_config.corepos_engine
 | 
			
		||||
        for dbkey in sorted(self.rattail_config.corepos_engines):
 | 
			
		||||
            if dbkey != 'default':
 | 
			
		||||
                engines[dbkey] = self.rattail_config.corepos_engines[dbkey]
 | 
			
		||||
        return engines
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Session(self):
 | 
			
		||||
        """
 | 
			
		||||
        Which session we return will depend on user's "current" engine.
 | 
			
		||||
        """
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
 | 
			
		||||
        if dbkey != 'default' and dbkey in ExtraCoreOfficeSessions:
 | 
			
		||||
            return ExtraCoreOfficeSessions[dbkey]
 | 
			
		||||
 | 
			
		||||
        return CoreOfficeSession
 | 
			
		||||
 | 
			
		||||
    def make_isolated_session(self):
 | 
			
		||||
        from corepos.db.office_op import Session as CoreSession
 | 
			
		||||
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
        if dbkey != 'default' and dbkey in self.rattail_config.corepos_engines:
 | 
			
		||||
            return CoreSession(bind=self.rattail_config.corepos_engines[dbkey])
 | 
			
		||||
 | 
			
		||||
        return CoreSession()
 | 
			
		||||
 | 
			
		||||
    def render_local_date(self, obj, field):
 | 
			
		||||
        value = getattr(obj, field)
 | 
			
		||||
        if not value:
 | 
			
		||||
            return ""
 | 
			
		||||
        value = localtime(self.rattail_config, value)
 | 
			
		||||
        app = self.get_rattail_app()
 | 
			
		||||
        value = app.localtime(value)
 | 
			
		||||
        return str(value.date())
 | 
			
		||||
 | 
			
		||||
    def render_corepos_store(self, obj, field):
 | 
			
		||||
| 
						 | 
				
			
			@ -142,3 +112,40 @@ class CoreOfficeMasterView(MasterView):
 | 
			
		|||
        Subclass must define this logic; should return the "final" CORE Office
 | 
			
		||||
        URL for the given object.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CoreOfficeMasterView(CoreMasterView):
 | 
			
		||||
    """
 | 
			
		||||
    Master base class for CORE Office views
 | 
			
		||||
    """
 | 
			
		||||
    engine_type_key = 'corepos'
 | 
			
		||||
 | 
			
		||||
    def get_db_engines(self):
 | 
			
		||||
        engines = OrderedDict()
 | 
			
		||||
        if self.rattail_config.core_office_engine:
 | 
			
		||||
            engines['default'] = self.rattail_config.core_office_engine
 | 
			
		||||
        for dbkey in self.rattail_config.core_office_engines:
 | 
			
		||||
            if dbkey != 'default':
 | 
			
		||||
                engines[dbkey] = self.rattail_config.core_office_engines[dbkey]
 | 
			
		||||
        return engines
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Session(self):
 | 
			
		||||
        """
 | 
			
		||||
        Which session we return will depend on user's "current" engine.
 | 
			
		||||
        """
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
 | 
			
		||||
        if dbkey != 'default' and dbkey in ExtraCoreOfficeSessions:
 | 
			
		||||
            return ExtraCoreOfficeSessions[dbkey]
 | 
			
		||||
 | 
			
		||||
        return CoreOfficeSession
 | 
			
		||||
 | 
			
		||||
    def make_isolated_session(self):
 | 
			
		||||
        from corepos.db.office_op import Session as CoreSession
 | 
			
		||||
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
        if dbkey != 'default' and dbkey in self.rattail_config.corepos_engines:
 | 
			
		||||
            return CoreSession(bind=self.rattail_config.corepos_engines[dbkey])
 | 
			
		||||
 | 
			
		||||
        return CoreSession()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								tailbone_corepos/views/corepos/transactions/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								tailbone_corepos/views/corepos/transactions/__init__.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
# -*- coding: utf-8; -*-
 | 
			
		||||
################################################################################
 | 
			
		||||
#
 | 
			
		||||
#  Rattail -- Retail Software Framework
 | 
			
		||||
#  Copyright © 2010-2022 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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
################################################################################
 | 
			
		||||
"""
 | 
			
		||||
CORE POS Transaction views
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def includeme(config):
 | 
			
		||||
    config.include('tailbone_corepos.views.corepos.transactions.current')
 | 
			
		||||
    config.include('tailbone_corepos.views.corepos.transactions.archive')
 | 
			
		||||
							
								
								
									
										83
									
								
								tailbone_corepos/views/corepos/transactions/archive.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								tailbone_corepos/views/corepos/transactions/archive.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
# -*- coding: utf-8; -*-
 | 
			
		||||
################################################################################
 | 
			
		||||
#
 | 
			
		||||
#  Rattail -- Retail Software Framework
 | 
			
		||||
#  Copyright © 2010-2022 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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
################################################################################
 | 
			
		||||
"""
 | 
			
		||||
CORE-POS "archive" transaction views
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from corepos.db.office_trans_archive import model as corearch
 | 
			
		||||
 | 
			
		||||
from rattail.util import OrderedDict
 | 
			
		||||
 | 
			
		||||
from .base import TransactionDetailMasterView
 | 
			
		||||
from tailbone_corepos.db import CoreTransArchiveSession, ExtraCoreTransArchiveSessions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TransactionDetailView(TransactionDetailMasterView):
 | 
			
		||||
    """
 | 
			
		||||
    Master view for "archive" transaction details.
 | 
			
		||||
    """
 | 
			
		||||
    model_class = corearch.TransactionDetail
 | 
			
		||||
    model_title = "CORE-POS Archived Transaction Detail"
 | 
			
		||||
    url_prefix = '/corepos/transaction-details/archive'
 | 
			
		||||
    route_prefix = 'corepos.transaction_details_archive'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Session(self):
 | 
			
		||||
        """
 | 
			
		||||
        Which session we return will depend on user's "current" engine.
 | 
			
		||||
        """
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
 | 
			
		||||
        if dbkey != 'default' and dbkey in ExtraCoreTransArchiveSessions:
 | 
			
		||||
            return ExtraCoreTransArchiveSessions[dbkey]
 | 
			
		||||
 | 
			
		||||
        return CoreTransArchiveSession
 | 
			
		||||
 | 
			
		||||
    def get_db_engines(self):
 | 
			
		||||
        engines = OrderedDict()
 | 
			
		||||
        if self.rattail_config.core_office_trans_archive_engine:
 | 
			
		||||
            engines['default'] = self.rattail_config.core_office_trans_archive_engine
 | 
			
		||||
        for dbkey in self.rattail_config.core_office_trans_archive_engines:
 | 
			
		||||
            if dbkey != 'default':
 | 
			
		||||
                engines[dbkey] = self.rattail_config.core_office_trans_archive_engines[dbkey]
 | 
			
		||||
        return engines
 | 
			
		||||
 | 
			
		||||
    def make_isolated_session(self):
 | 
			
		||||
        from corepos.db.office_trans import Session as CoreTransArchiveSession
 | 
			
		||||
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
        if dbkey != 'default' and dbkey in self.rattail_config.core_office_trans_archive_engines:
 | 
			
		||||
            return CoreTransArchiveSession(bind=self.rattail_config.core_office_trans_archive_engines[dbkey])
 | 
			
		||||
 | 
			
		||||
        return CoreTransArchiveSession()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def defaults(config, **kwargs):
 | 
			
		||||
    base = globals()
 | 
			
		||||
 | 
			
		||||
    TransactionDetailView = kwargs.get('TransactionDetailView', base['TransactionDetailView'])
 | 
			
		||||
    TransactionDetailView.defaults(config)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def includeme(config):
 | 
			
		||||
    defaults(config)
 | 
			
		||||
							
								
								
									
										80
									
								
								tailbone_corepos/views/corepos/transactions/base.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								tailbone_corepos/views/corepos/transactions/base.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
# -*- coding: utf-8; -*-
 | 
			
		||||
################################################################################
 | 
			
		||||
#
 | 
			
		||||
#  Rattail -- Retail Software Framework
 | 
			
		||||
#  Copyright © 2010-2022 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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
################################################################################
 | 
			
		||||
"""
 | 
			
		||||
CORE-POS transaction views (base)
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from tailbone_corepos.views.corepos.master import CoreMasterView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TransactionDetailMasterView(CoreMasterView):
 | 
			
		||||
    """
 | 
			
		||||
    Master view for "current" transaction details.
 | 
			
		||||
    """
 | 
			
		||||
    labels = {
 | 
			
		||||
        'store_row_id': "Store Row ID",
 | 
			
		||||
        'store_id': "Store ID",
 | 
			
		||||
        'pos_row_id': "POS Row ID",
 | 
			
		||||
        'transaction_id': "Transaction ID",
 | 
			
		||||
        'upc': "UPC",
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    grid_columns = [
 | 
			
		||||
        'date_time',
 | 
			
		||||
        'register_number',
 | 
			
		||||
        'transaction_number',
 | 
			
		||||
        'card_number',
 | 
			
		||||
        'store_row_id',
 | 
			
		||||
        'upc',
 | 
			
		||||
        'description',
 | 
			
		||||
        'quantity',
 | 
			
		||||
        'unit_price',
 | 
			
		||||
        'discount',
 | 
			
		||||
        'total',
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    def configure_grid(self, g):
 | 
			
		||||
        super(TransactionDetailMasterView, self).configure_grid(g)
 | 
			
		||||
 | 
			
		||||
        g.set_type('quantity', 'quantity')
 | 
			
		||||
        g.set_type('unit_price', 'currency')
 | 
			
		||||
        g.set_type('discount', 'currency')
 | 
			
		||||
        g.set_type('total', 'currency')
 | 
			
		||||
 | 
			
		||||
        g.set_sort_defaults('date_time', 'desc')
 | 
			
		||||
 | 
			
		||||
        g.set_label('register_number', "Register")
 | 
			
		||||
        g.set_label('transaction_number', "Trans. No.")
 | 
			
		||||
        g.set_label('card_number', "Card No.")
 | 
			
		||||
        g.set_label('department_number', "Dept. No.")
 | 
			
		||||
 | 
			
		||||
        g.set_link('upc')
 | 
			
		||||
        g.set_link('description')
 | 
			
		||||
 | 
			
		||||
    def configure_form(self, f):
 | 
			
		||||
        super(TransactionDetailMasterView, self).configure_form(f)
 | 
			
		||||
 | 
			
		||||
        f.set_type('quantity', 'quantity')
 | 
			
		||||
        f.set_type('unit_price', 'currency')
 | 
			
		||||
        f.set_type('discount', 'currency')
 | 
			
		||||
        f.set_type('total', 'currency')
 | 
			
		||||
| 
						 | 
				
			
			@ -26,46 +26,24 @@ CORE-POS transaction views
 | 
			
		|||
 | 
			
		||||
from corepos.db.office_trans import model as coretrans
 | 
			
		||||
 | 
			
		||||
from rattail.util import OrderedDict
 | 
			
		||||
from rattail_corepos.corepos.importing.db.square import FromSquareToCoreTrans
 | 
			
		||||
 | 
			
		||||
from .master import CoreOfficeMasterView
 | 
			
		||||
from .base import TransactionDetailMasterView
 | 
			
		||||
from tailbone_corepos.db import CoreTransSession, ExtraCoreTransSessions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TransactionDetailView(CoreOfficeMasterView):
 | 
			
		||||
class TransactionDetailView(TransactionDetailMasterView):
 | 
			
		||||
    """
 | 
			
		||||
    Master view for transaction details.
 | 
			
		||||
    Master view for "current" transaction details.
 | 
			
		||||
    """
 | 
			
		||||
    model_class = coretrans.TransactionDetail
 | 
			
		||||
    model_title = "CORE-POS Transaction Detail"
 | 
			
		||||
    url_prefix = '/corepos/transaction-details'
 | 
			
		||||
    model_title = "CORE-POS Current Transaction Detail"
 | 
			
		||||
    url_prefix = '/corepos/transaction-details/current'
 | 
			
		||||
    route_prefix = 'corepos.transaction_details'
 | 
			
		||||
    deletable = True
 | 
			
		||||
    bulk_deletable = True
 | 
			
		||||
    supports_import_batch_from_file = True
 | 
			
		||||
 | 
			
		||||
    labels = {
 | 
			
		||||
        'store_row_id': "Store Row ID",
 | 
			
		||||
        'store_id': "Store ID",
 | 
			
		||||
        'pos_row_id': "POS Row ID",
 | 
			
		||||
        'transaction_id': "Transaction ID",
 | 
			
		||||
        'upc': "UPC",
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    grid_columns = [
 | 
			
		||||
        'date_time',
 | 
			
		||||
        'register_number',
 | 
			
		||||
        'transaction_number',
 | 
			
		||||
        'card_number',
 | 
			
		||||
        'store_row_id',
 | 
			
		||||
        'upc',
 | 
			
		||||
        'description',
 | 
			
		||||
        'quantity',
 | 
			
		||||
        'unit_price',
 | 
			
		||||
        'discount',
 | 
			
		||||
        'total',
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def Session(self):
 | 
			
		||||
        """
 | 
			
		||||
| 
						 | 
				
			
			@ -78,37 +56,24 @@ class TransactionDetailView(CoreOfficeMasterView):
 | 
			
		|||
 | 
			
		||||
        return CoreTransSession
 | 
			
		||||
 | 
			
		||||
    def get_bulk_delete_session(self):
 | 
			
		||||
        from corepos.trans.db import Session as CoreTransSession
 | 
			
		||||
    def get_db_engines(self):
 | 
			
		||||
        engines = OrderedDict()
 | 
			
		||||
        if self.rattail_config.core_office_trans_engine:
 | 
			
		||||
            engines['default'] = self.rattail_config.core_office_trans_engine
 | 
			
		||||
        for dbkey in self.rattail_config.core_office_trans_engines:
 | 
			
		||||
            if dbkey != 'default':
 | 
			
		||||
                engines[dbkey] = self.rattail_config.core_office_trans_engines[dbkey]
 | 
			
		||||
        return engines
 | 
			
		||||
 | 
			
		||||
    def make_isolated_session(self):
 | 
			
		||||
        from corepos.db.office_trans import Session as CoreTransSession
 | 
			
		||||
 | 
			
		||||
        dbkey = self.get_current_engine_dbkey()
 | 
			
		||||
        if dbkey != 'default' and dbkey in self.rattail_config.core_office_trans_engines:
 | 
			
		||||
            return CoreTransSession(bind=self.rattail_config.core_office_trans_engines[dbkey])
 | 
			
		||||
 | 
			
		||||
        return CoreTransSession()
 | 
			
		||||
 | 
			
		||||
    def configure_grid(self, g):
 | 
			
		||||
        super(TransactionDetailView, self).configure_grid(g)
 | 
			
		||||
 | 
			
		||||
        g.set_type('quantity', 'quantity')
 | 
			
		||||
        g.set_type('unit_price', 'currency')
 | 
			
		||||
        g.set_type('discount', 'currency')
 | 
			
		||||
        g.set_type('total', 'currency')
 | 
			
		||||
 | 
			
		||||
        g.set_sort_defaults('date_time', 'desc')
 | 
			
		||||
 | 
			
		||||
        g.set_label('register_number', "Register")
 | 
			
		||||
        g.set_label('transaction_number', "Trans. No.")
 | 
			
		||||
        g.set_label('card_number', "Card No.")
 | 
			
		||||
        g.set_label('department_number', "Dept. No.")
 | 
			
		||||
 | 
			
		||||
        g.set_link('upc')
 | 
			
		||||
        g.set_link('description')
 | 
			
		||||
 | 
			
		||||
    def configure_form(self, f):
 | 
			
		||||
        super(TransactionDetailView, self).configure_form(f)
 | 
			
		||||
 | 
			
		||||
        f.set_type('quantity', 'quantity')
 | 
			
		||||
        f.set_type('unit_price', 'currency')
 | 
			
		||||
        f.set_type('discount', 'currency')
 | 
			
		||||
        f.set_type('total', 'currency')
 | 
			
		||||
 | 
			
		||||
    def import_square(self):
 | 
			
		||||
        return self.import_batch_from_file(FromSquareToCoreTrans, 'TransactionDetail',
 | 
			
		||||
                                           importer_host_title="Square CSV")
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue