Initial commit
This commit is contained in:
commit
810d4726c3
17 changed files with 1414 additions and 0 deletions
29
rattail_corepos/datasync/__init__.py
Normal file
29
rattail_corepos/datasync/__init__.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2018 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 Interface
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from rattail_corepos._version import __version__
|
102
rattail_corepos/datasync/corepos.py
Normal file
102
rattail_corepos/datasync/corepos.py
Normal file
|
@ -0,0 +1,102 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2018 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/>.
|
||||
#
|
||||
################################################################################
|
||||
"""
|
||||
DataSync for CORE POS
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import six
|
||||
|
||||
from corepos.db import Session as CoreSession, model as corepos
|
||||
|
||||
from rattail.db import model
|
||||
from rattail.datasync import DataSyncWatcher
|
||||
|
||||
|
||||
class COREPOSProductWatcher(DataSyncWatcher):
|
||||
"""
|
||||
DataSync watcher for the CORE POS database.
|
||||
"""
|
||||
|
||||
def get_changes(self, lastrun):
|
||||
if not lastrun:
|
||||
return
|
||||
|
||||
changes = []
|
||||
session = CoreSession()
|
||||
lastrun = self.localize_lastrun(session, lastrun)
|
||||
|
||||
# Department
|
||||
departments = session.query(corepos.Department)\
|
||||
.filter(corepos.Department.modified >= lastrun)\
|
||||
.all()
|
||||
if departments:
|
||||
changes.extend([
|
||||
(None,
|
||||
model.DataSyncChange(
|
||||
payload_type='Department',
|
||||
payload_key=six.text_type(dept.dept_no)))
|
||||
for dept in departments])
|
||||
|
||||
# TODO: subdepartment table doesn't have a modified flag?
|
||||
# # Subdepartment
|
||||
# subdepartments = session.query(corepos.Subdepartment)\
|
||||
# .filter(corepos.Subdepartment.modified >= lastrun)\
|
||||
# .all()
|
||||
# if subdepartments:
|
||||
# changes.extend([
|
||||
# (None,
|
||||
# model.DataSyncChange(
|
||||
# payload_type='Subdepartment',
|
||||
# payload_key=six.text_type(subdept.subdept_no)))
|
||||
# for subdept in subdepartments])
|
||||
|
||||
# TODO: vendor table doesn't have a modified flag?
|
||||
# # Vendor
|
||||
# vendors = session.query(corepos.Vendor)\
|
||||
# .filter(corepos.Vendor.modified >= lastrun)\
|
||||
# .all()
|
||||
# if vendors:
|
||||
# changes.extend([
|
||||
# (None,
|
||||
# model.DataSyncChange(
|
||||
# payload_type='Vendor',
|
||||
# payload_key=six.text_type(vendor.vendorID)))
|
||||
# for vendor in vendors])
|
||||
|
||||
# Product
|
||||
products = session.query(corepos.Product)\
|
||||
.filter(corepos.Product.modified >= lastrun)\
|
||||
.all()
|
||||
if products:
|
||||
changes.extend([
|
||||
(None,
|
||||
model.DataSyncChange(
|
||||
payload_type='Product',
|
||||
payload_key=product.upc))
|
||||
for product in products
|
||||
if product.upc])
|
||||
|
||||
session.close()
|
||||
return changes
|
74
rattail_corepos/datasync/rattail.py
Normal file
74
rattail_corepos/datasync/rattail.py
Normal file
|
@ -0,0 +1,74 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2018 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/>.
|
||||
#
|
||||
################################################################################
|
||||
"""
|
||||
DataSync for Milo
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from rattail.datasync import NewDataSyncImportConsumer
|
||||
|
||||
from corepos.db import Session as CoreSession, model as corepos
|
||||
|
||||
|
||||
class FromCOREPOSToRattailBase(NewDataSyncImportConsumer):
|
||||
"""
|
||||
Base class for CORE POS -> Rattail data sync consumers.
|
||||
"""
|
||||
handler_spec = 'rattail_corepos.importing.corepos:FromCOREPOSToRattail'
|
||||
|
||||
def begin_transaction(self):
|
||||
self.corepos_session = CoreSession()
|
||||
|
||||
def rollback_transaction(self):
|
||||
self.corepos_session.rollback()
|
||||
self.corepos_session.close()
|
||||
|
||||
def commit_transaction(self):
|
||||
# always rollback here, we don't want any accidents in CORE POS
|
||||
self.corepos_session.rollback()
|
||||
self.corepos_session.close()
|
||||
|
||||
|
||||
class FromCOREPOSToRattailProducts(FromCOREPOSToRattailBase):
|
||||
"""
|
||||
Handles CORE POS -> Rattail sync for product data.
|
||||
"""
|
||||
|
||||
def get_host_object(self, session, change):
|
||||
|
||||
if change.payload_type == 'Product':
|
||||
try:
|
||||
return self.corepos_session.query(corepos.Product)\
|
||||
.filter(corepos.Product.upc == change.payload_key)\
|
||||
.one()
|
||||
except NoResultFound:
|
||||
pass
|
||||
|
||||
else:
|
||||
# try to fetch CORE POS object via typical method
|
||||
Model = getattr(corepos, change.payload_type)
|
||||
return self.corepos_session.query(Model)\
|
||||
.get(int(change.payload_key))
|
Loading…
Add table
Add a link
Reference in a new issue