Add support for Rattail -> CORE export/sync for Member data
also refactor CORE -> Rattail logic to use `api.set_member()` etc.
This commit is contained in:
parent
8d47a1449c
commit
cb63644c7d
6 changed files with 326 additions and 79 deletions
|
@ -24,11 +24,48 @@
|
|||
CORE-POS misc. utilities
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from corepos.db.office_op import Session as CoreSession, model as corepos
|
||||
|
||||
from rattail.db.util import short_session
|
||||
from rattail.util import OrderedDict, progress_loop
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_core_members(api, progress=None):
|
||||
"""
|
||||
Shared logic for fetching *all* customer accounts from CORE-POS API.
|
||||
"""
|
||||
# TODO: ideally could do this, but API doesn't let us fetch "all"
|
||||
# return api.get_members()
|
||||
|
||||
# first we fetch all customer records from CORE DB
|
||||
with short_session(Session=CoreSession) as s:
|
||||
db_customers = s.query(corepos.Customer).all()
|
||||
s.expunge_all()
|
||||
|
||||
# now we must fetch each customer account individually from API
|
||||
members = OrderedDict()
|
||||
|
||||
def fetch(dbcust, i):
|
||||
if dbcust.card_number in members:
|
||||
return # already fetched this one
|
||||
member = api.get_member(dbcust.card_number)
|
||||
if member:
|
||||
members[dbcust.card_number] = member
|
||||
else:
|
||||
logger = log.warning if dbcust.account_holder else log.debug
|
||||
logger("could not fetch member from CORE API: %s",
|
||||
dbcust.card_number)
|
||||
|
||||
progress_loop(fetch, db_customers, progress,
|
||||
message="Fetching Member data from CORE API")
|
||||
return list(members.values())
|
||||
|
||||
|
||||
def get_max_existing_vendor_id(session=None):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue