Add rattail provider for CORE-POS Integration
and use it to generate CORE Office URLs
This commit is contained in:
parent
4bff0832e8
commit
271895fa83
106
rattail_corepos/app.py
Normal file
106
rattail_corepos/app.py
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
# -*- coding: utf-8; -*-
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Rattail -- Retail Software Framework
|
||||||
|
# Copyright © 2010-2023 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/>.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
"""
|
||||||
|
App Handler supplement
|
||||||
|
"""
|
||||||
|
|
||||||
|
from rattail.app import RattailProvider, GenericHandler
|
||||||
|
|
||||||
|
|
||||||
|
class CoreProvider(RattailProvider):
|
||||||
|
"""
|
||||||
|
App provider for CORE-POS integration.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_corepos_handler(self, **kwargs):
|
||||||
|
if not hasattr(self, 'corepos_handler'):
|
||||||
|
spec = self.config.get('rattail', 'corepos.handler',
|
||||||
|
default='rattail_corepos.app:CoreHandler')
|
||||||
|
factory = self.load_object(spec)
|
||||||
|
self.corepos_handler = factory(self.config, **kwargs)
|
||||||
|
return self.corepos_handler
|
||||||
|
|
||||||
|
|
||||||
|
class CoreHandler(GenericHandler):
|
||||||
|
"""
|
||||||
|
Handler for CORE-POS integration.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_office_url(
|
||||||
|
self,
|
||||||
|
require=False,
|
||||||
|
**kwargs):
|
||||||
|
"""
|
||||||
|
Returns the base URL for the CORE Office web app.
|
||||||
|
"""
|
||||||
|
getter = self.config.require if require else self.config.get
|
||||||
|
url = getter('corepos', 'office.url')
|
||||||
|
if url:
|
||||||
|
return url.rstrip('/')
|
||||||
|
|
||||||
|
def get_office_member_url(
|
||||||
|
self,
|
||||||
|
card_number,
|
||||||
|
office_url=None,
|
||||||
|
require=False,
|
||||||
|
**kwargs):
|
||||||
|
"""
|
||||||
|
Returns the CORE Office URL for the customer account with the
|
||||||
|
given card number.
|
||||||
|
"""
|
||||||
|
if not office_url:
|
||||||
|
office_url = self.get_office_url(require=require)
|
||||||
|
if office_url:
|
||||||
|
return f'{office_url}/mem/MemberEditor.php?memNum={card_number}'
|
||||||
|
|
||||||
|
# TODO: deprecate / remove this
|
||||||
|
get_office_customer_account_url = get_office_member_url
|
||||||
|
|
||||||
|
def get_office_product_url(
|
||||||
|
self,
|
||||||
|
upc,
|
||||||
|
office_url=None,
|
||||||
|
require=False,
|
||||||
|
**kwargs):
|
||||||
|
"""
|
||||||
|
Returns the CORE Office URL for the product with the given
|
||||||
|
UPC.
|
||||||
|
"""
|
||||||
|
if not office_url:
|
||||||
|
office_url = self.get_office_url(require=require)
|
||||||
|
if office_url:
|
||||||
|
return f'{office_url}/item/ItemEditorPage.php?searchupc={upc}'
|
||||||
|
|
||||||
|
def get_office_vendor_url(
|
||||||
|
self,
|
||||||
|
id,
|
||||||
|
office_url=None,
|
||||||
|
require=False,
|
||||||
|
**kwargs):
|
||||||
|
"""
|
||||||
|
Returns the CORE Office URL for the vendor with the given ID.
|
||||||
|
"""
|
||||||
|
if not office_url:
|
||||||
|
office_url = self.get_office_url(require=require)
|
||||||
|
if office_url:
|
||||||
|
return f'{office_url}/item/vendors/VendorIndexPage.php?vid={id}'
|
|
@ -125,7 +125,6 @@ class CoreEquityImportBatchHandler(BatchHandler):
|
||||||
def get_next_timestamp(self, row):
|
def get_next_timestamp(self, row):
|
||||||
dt = self.next_timestamp
|
dt = self.next_timestamp
|
||||||
self.next_timestamp += datetime.timedelta(seconds=1)
|
self.next_timestamp += datetime.timedelta(seconds=1)
|
||||||
# import ipdb; ipdb.set_trace()
|
|
||||||
return self.app.localtime(dt, tzinfo=False).replace(microsecond=0)
|
return self.app.localtime(dt, tzinfo=False).replace(microsecond=0)
|
||||||
|
|
||||||
def get_transaction_status(self, row):
|
def get_transaction_status(self, row):
|
||||||
|
|
|
@ -183,26 +183,22 @@ class RattailCOREPOSExtension(ConfigExtension):
|
||||||
|
|
||||||
|
|
||||||
def core_office_url(config, require=False, **kwargs):
|
def core_office_url(config, require=False, **kwargs):
|
||||||
"""
|
""" DEPRECATED """
|
||||||
Returns the base URL for the CORE Office web app. Note that this URL will
|
warnings.warn("core_office_url() function is deprecated; please use "
|
||||||
*not* have a trailing slash.
|
"corepos_handler.get_office_url() instead",
|
||||||
"""
|
DeprecationWarning, stacklevel=2)
|
||||||
args = ['corepos', 'office.url']
|
|
||||||
if require:
|
app = config.get_app()
|
||||||
url = config.require(*args, **kwargs)
|
corepos = app.get_corepos_handler()
|
||||||
return url.rstrip('/')
|
return corepos.get_office_url(require=require, **kwargs)
|
||||||
else:
|
|
||||||
url = config.get(*args, **kwargs)
|
|
||||||
if url:
|
|
||||||
return url.rstrip('/')
|
|
||||||
|
|
||||||
|
|
||||||
def core_office_customer_account_url(config, card_number, office_url=None):
|
def core_office_customer_account_url(config, card_number, office_url=None):
|
||||||
"""
|
""" DEPRECATED """
|
||||||
Returns the CORE Office URL for the customer account with the given card
|
warnings.warn("core_office_customer_account_url() function is deprecated; please use "
|
||||||
number.
|
"corepos_handler.get_office_customer_account_url() instead",
|
||||||
"""
|
DeprecationWarning, stacklevel=2)
|
||||||
if not office_url:
|
|
||||||
office_url = core_office_url(config, require=True)
|
app = config.get_app()
|
||||||
return '{}/mem/MemberEditor.php?memNum={}'.format(
|
corepos = app.get_corepos_handler()
|
||||||
office_url, card_number)
|
return corepos.get_office_member_url(card_number, office_url=office_url, **kwargs)
|
||||||
|
|
|
@ -75,5 +75,8 @@ rattail.importing =
|
||||||
to_corepos_db_lane_op.from_corepos_db_office_op.export = rattail_corepos.corepos.lane.importing.op.office:FromCoreOfficeToCoreLane
|
to_corepos_db_lane_op.from_corepos_db_office_op.export = rattail_corepos.corepos.lane.importing.op.office:FromCoreOfficeToCoreLane
|
||||||
to_trainwreck.from_corepos_db_office_trans = rattail_corepos.trainwreck.importing.corepos:FromCoreToTrainwreck
|
to_trainwreck.from_corepos_db_office_trans = rattail_corepos.trainwreck.importing.corepos:FromCoreToTrainwreck
|
||||||
|
|
||||||
|
rattail.providers =
|
||||||
|
rattail_corepos = rattail_corepos.app:CoreProvider
|
||||||
|
|
||||||
trainwreck.commands =
|
trainwreck.commands =
|
||||||
import-corepos = rattail_corepos.trainwreck.commands:ImportCore
|
import-corepos = rattail_corepos.trainwreck.commands:ImportCore
|
||||||
|
|
Loading…
Reference in a new issue