fix: refactor config.get_model() => app.model

per rattail changes
This commit is contained in:
Lance Edgar 2024-07-13 09:52:53 -05:00
parent 03bc03c9b8
commit 345d5348c3
4 changed files with 121 additions and 48 deletions

View file

@ -540,7 +540,7 @@ class ProductImporter(FromCOREPOSAPI, corepos_importing.model.ProductImporter):
return list(products.values()) return list(products.values())
def identify_product(self, corepos_product): def identify_product(self, corepos_product):
model = self.config.get_model() model = self.app.model
corepos_id = int(corepos_product['id']) corepos_id = int(corepos_product['id'])
if hasattr(self, 'core_existing'): if hasattr(self, 'core_existing'):
@ -712,7 +712,7 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
def setup(self): def setup(self):
super().setup() super().setup()
model = self.config.get_model() model = self.app.model
query = self.session.query(model.Vendor)\ query = self.session.query(model.Vendor)\
.join(model.CoreVendor)\ .join(model.CoreVendor)\
@ -798,7 +798,7 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
if hasattr(self, 'vendors'): if hasattr(self, 'vendors'):
return self.vendors.get(corepos_id) return self.vendors.get(corepos_id)
model = self.config.get_model() model = self.app.model
try: try:
return self.session.query(model.Vendor)\ return self.session.query(model.Vendor)\
.join(model.CoreVendor)\ .join(model.CoreVendor)\

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2023 Lance Edgar # Copyright © 2010-2024 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -32,11 +32,7 @@ from collections import OrderedDict
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from corepos.db.office_op import model as corepos, Session as CoreSession
from corepos.db.office_trans import model as coretrans, Session as CoreTransSession
from rattail import importing from rattail import importing
from rattail.gpc import GPC
from rattail.db.util import normalize_full_name from rattail.db.util import normalize_full_name
from rattail_corepos import importing as corepos_importing from rattail_corepos import importing as corepos_importing
@ -58,13 +54,16 @@ class FromCOREPOSToRattail(importing.FromSQLAlchemyHandler, importing.ToRattailH
return "CORE-POS (DB/{})".format(self.corepos_dbkey) return "CORE-POS (DB/{})".format(self.corepos_dbkey)
def make_host_session(self): def make_host_session(self):
corepos = self.app.get_corepos_handler()
# session type depends on the --corepos-dbtype arg # session type depends on the --corepos-dbtype arg
if self.corepos_dbtype == 'office_trans': if self.corepos_dbtype == 'office_trans':
return CoreTransSession(bind=self.config.coretrans_engines[self.corepos_dbkey]) return corepos.make_session_office_trans(
bind=self.config.coretrans_engines[self.corepos_dbkey])
# assume office_op by default # assume office_op by default
return CoreSession(bind=self.config.corepos_engines[self.corepos_dbkey]) return corepos.make_session_office_op(
bind=self.config.corepos_engines[self.corepos_dbkey])
def get_importers(self): def get_importers(self):
importers = OrderedDict() importers = OrderedDict()
@ -120,7 +119,13 @@ class StoreImporter(FromCOREPOS, corepos_importing.model.StoreImporter):
""" """
Importer for store data from CORE POS. Importer for store data from CORE POS.
""" """
host_model_class = corepos.Store
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Store
key = 'corepos_id' key = 'corepos_id'
supported_fields = [ supported_fields = [
'corepos_id', 'corepos_id',
@ -140,7 +145,13 @@ class EmployeeImporter(FromCOREPOS, corepos_importing.model.EmployeeImporter):
""" """
Importer for employee data from CORE POS. Importer for employee data from CORE POS.
""" """
host_model_class = corepos.Employee
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Employee
key = 'corepos_number' key = 'corepos_number'
supported_fields = [ supported_fields = [
'corepos_number', 'corepos_number',
@ -164,7 +175,13 @@ class CustomerImporter(FromCOREPOS, corepos_importing.model.CustomerImporter):
""" """
Importer for customer data from CORE POS. Importer for customer data from CORE POS.
""" """
host_model_class = corepos.MemberInfo
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.MemberInfo
key = 'corepos_card_number' key = 'corepos_card_number'
supported_fields = [ supported_fields = [
'corepos_card_number', 'corepos_card_number',
@ -275,7 +292,13 @@ class MemberImporter(FromCOREPOS, corepos_importing.model.MemberImporter):
""" """
Importer for member data from CORE POS. Importer for member data from CORE POS.
""" """
host_model_class = corepos.MemberInfo
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.MemberInfo
# TODO use this key instead # TODO use this key instead
#key = 'corepos_card_number' #key = 'corepos_card_number'
key = 'number' key = 'number'
@ -407,7 +430,13 @@ class TaxImporter(FromCOREPOS, corepos_importing.model.TaxImporter):
""" """
Importer for tax data from CORE POS. Importer for tax data from CORE POS.
""" """
host_model_class = corepos.TaxRate
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.TaxRate
key = 'corepos_id' key = 'corepos_id'
supported_fields = [ supported_fields = [
'corepos_id', 'corepos_id',
@ -429,7 +458,13 @@ class TenderImporter(FromCOREPOS, corepos_importing.model.TenderImporter):
""" """
Importer for tender data from CORE POS. Importer for tender data from CORE POS.
""" """
host_model_class = corepos.Tender
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Tender
key = 'corepos_id' key = 'corepos_id'
supported_fields = [ supported_fields = [
'corepos_id', 'corepos_id',
@ -449,7 +484,13 @@ class VendorImporter(FromCOREPOS, corepos_importing.model.VendorImporter):
""" """
Importer for vendor data from CORE POS. Importer for vendor data from CORE POS.
""" """
host_model_class = corepos.Vendor
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Vendor
key = 'corepos_id' key = 'corepos_id'
supported_fields = [ supported_fields = [
'corepos_id', 'corepos_id',
@ -467,7 +508,7 @@ class VendorImporter(FromCOREPOS, corepos_importing.model.VendorImporter):
""" """
# can't just use rattail.db.model b/c the CoreVendor would normally not # can't just use rattail.db.model b/c the CoreVendor would normally not
# be in there! this still requires custom model to be configured though. # be in there! this still requires custom model to be configured though.
model = self.config.get_model() model = self.app.model
# first get default query # first get default query
query = super().cache_query() query = super().cache_query()
@ -502,7 +543,13 @@ class DepartmentImporter(FromCOREPOS, corepos_importing.model.DepartmentImporter
""" """
Importer for department data from CORE POS. Importer for department data from CORE POS.
""" """
host_model_class = corepos.Department
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Department
key = 'corepos_number' key = 'corepos_number'
supported_fields = [ supported_fields = [
'corepos_number', 'corepos_number',
@ -526,7 +573,13 @@ class SubdepartmentImporter(FromCOREPOS, corepos_importing.model.SubdepartmentIm
""" """
Importer for subdepartment data from CORE POS. Importer for subdepartment data from CORE POS.
""" """
host_model_class = corepos.Subdepartment
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Subdepartment
key = 'corepos_number' key = 'corepos_number'
supported_fields = [ supported_fields = [
'corepos_number', 'corepos_number',
@ -548,7 +601,13 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
""" """
Importer for product data from CORE POS. Importer for product data from CORE POS.
""" """
host_model_class = corepos.Product
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.Product
key = 'corepos_id' key = 'corepos_id'
supported_fields = [ supported_fields = [
'corepos_id', 'corepos_id',
@ -579,6 +638,8 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
def setup(self): def setup(self):
super().setup() super().setup()
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
if self.fields_active(self.sale_price_fields): if self.fields_active(self.sale_price_fields):
self.core_batch_items = {} self.core_batch_items = {}
@ -588,11 +649,11 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
# determine which would "win" but not clear what sort # determine which would "win" but not clear what sort
# order should be used, e.g. CORE does not seem to use one # order should be used, e.g. CORE does not seem to use one
today = self.app.today() today = self.app.today()
batches = self.host_session.query(corepos.Batch)\ batches = self.host_session.query(op_model.Batch)\
.filter(corepos.Batch.start_date <= today)\ .filter(op_model.Batch.start_date <= today)\
.filter(corepos.Batch.end_date >= today)\ .filter(op_model.Batch.end_date >= today)\
.filter(corepos.Batch.discount_type > 0)\ .filter(op_model.Batch.discount_type > 0)\
.options(orm.joinedload(corepos.Batch.items))\ .options(orm.joinedload(op_model.Batch.items))\
.all() .all()
def cache(batch, i): def cache(batch, i):
@ -620,7 +681,7 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
def normalize_host_object(self, product): def normalize_host_object(self, product):
try: try:
upc = GPC(product.upc, calc_check_digit='upc') upc = self.app.make_gpc(product.upc, calc_check_digit='upc')
except (TypeError, ValueError): except (TypeError, ValueError):
log.debug("CORE POS product has invalid UPC: %s", product.upc) log.debug("CORE POS product has invalid UPC: %s", product.upc)
if len(self.key) == 1 and self.key[0] == 'upc': if len(self.key) == 1 and self.key[0] == 'upc':
@ -691,7 +752,13 @@ class ProductCostImporter(FromCOREPOS, corepos_importing.model.ProductCostImport
""" """
Importer for product cost data from CORE POS API. Importer for product cost data from CORE POS API.
""" """
host_model_class = corepos.VendorItem
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
op_model = corepos.get_model_office_op()
return op_model.VendorItem
key = ('corepos_vendor_id', 'corepos_sku') key = ('corepos_vendor_id', 'corepos_sku')
supported_fields = [ supported_fields = [
'corepos_vendor_id', 'corepos_vendor_id',
@ -731,7 +798,7 @@ class ProductCostImporter(FromCOREPOS, corepos_importing.model.ProductCostImport
if hasattr(self, 'vendors_by_corepos_id'): if hasattr(self, 'vendors_by_corepos_id'):
return self.vendors_by_corepos_id.get(corepos_id) return self.vendors_by_corepos_id.get(corepos_id)
model = self.config.get_model() model = self.app.model
try: try:
return self.session.query(model.Vendor)\ return self.session.query(model.Vendor)\
.join(model.CoreVendor)\ .join(model.CoreVendor)\
@ -798,7 +865,13 @@ class MemberEquityPaymentImporter(FromCOREPOS, corepos_importing.model.MemberEqu
""" """
Imports equity payment data from CORE-POS Imports equity payment data from CORE-POS
""" """
host_model_class = coretrans.StockPurchase
@property
def host_model_class(self):
corepos = self.app.get_corepos_handler()
trans_model = corepos.get_model_office_trans()
return trans_model.StockPurchase
key = 'uuid' key = 'uuid'
supported_fields = [ supported_fields = [
'uuid', 'uuid',

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2023 Lance Edgar # Copyright © 2010-2024 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -27,7 +27,6 @@ Rattail model importer extensions, for CORE-POS integration
import decimal import decimal
from rattail import importing from rattail import importing
from rattail.util import pretty_quantity
############################## ##############################
@ -44,7 +43,7 @@ class PersonImporter(importing.model.PersonImporter):
def cache_query(self): def cache_query(self):
query = super().cache_query() query = super().cache_query()
model = self.config.get_model() model = self.app.model
# we want to ignore people with no CORE ID, if that's (part of) our key # we want to ignore people with no CORE ID, if that's (part of) our key
if 'corepos_customer_id' in self.key: if 'corepos_customer_id' in self.key:
@ -177,7 +176,7 @@ class ProductImporter(importing.model.ProductImporter):
def cache_query(self): def cache_query(self):
query = super().cache_query() query = super().cache_query()
model = self.config.get_model() model = self.app.model
# we want to ignore products with no CORE ID, if that's (part of) our key # we want to ignore products with no CORE ID, if that's (part of) our key
if 'corepos_id' in self.key: if 'corepos_id' in self.key:
@ -219,9 +218,10 @@ class ProductImporter(importing.model.ProductImporter):
uom_code = self.get_uom_code(uom_abbrev) or self.enum.UNIT_OF_MEASURE_NONE uom_code = self.get_uom_code(uom_abbrev) or self.enum.UNIT_OF_MEASURE_NONE
if unit_size is not None and uom_abbrev is not None: if unit_size is not None and uom_abbrev is not None:
size = "{} {}".format(pretty_quantity(unit_size), uom_abbrev) size = self.app.render_quantity(unit_size)
size = f"{size} {uom_abbrev}"
elif unit_size is not None: elif unit_size is not None:
size = pretty_quantity(unit_size) size = self.app.render_quantity(unit_size)
elif uom_abbrev is not None: elif uom_abbrev is not None:
size = uom_abbrev size = uom_abbrev
else: else:
@ -247,7 +247,7 @@ class ProductCostImporter(importing.model.ProductCostImporter):
def cache_query(self): def cache_query(self):
query = super().cache_query() query = super().cache_query()
model = self.config.get_model() model = self.app.model
# we want to ignore items with no CORE ID, if that's (part of) our key # we want to ignore items with no CORE ID, if that's (part of) our key
if 'corepos_id' in self.key: if 'corepos_id' in self.key:

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2023 Lance Edgar # Copyright © 2010-2024 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -51,7 +51,7 @@ class CorePersonImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CorePerson return model.CorePerson
@ -59,7 +59,7 @@ class CoreEmployeeImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreEmployee return model.CoreEmployee
@ -67,7 +67,7 @@ class CoreCustomerImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreCustomer return model.CoreCustomer
@ -82,7 +82,7 @@ class CoreMemberImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreMember return model.CoreMember
@ -90,7 +90,7 @@ class CoreMemberEquityPaymentImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreMemberEquityPayment return model.CoreMemberEquityPayment
@ -98,7 +98,7 @@ class CoreStoreImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreStore return model.CoreStore
@ -106,7 +106,7 @@ class CoreDepartmentImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreDepartment return model.CoreDepartment
@ -114,7 +114,7 @@ class CoreSubdepartmentImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreSubdepartment return model.CoreSubdepartment
@ -122,7 +122,7 @@ class CoreVendorImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreVendor return model.CoreVendor
@ -130,5 +130,5 @@ class CoreProductImporter(base.VersionImporter):
@property @property
def host_model_class(self): def host_model_class(self):
model = self.config.get_model() model = self.app.model
return model.CoreProduct return model.CoreProduct