From f8de832294b0a09e0b340e6107a95f1b0dbea0ab Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 9 May 2023 20:25:52 -0500 Subject: [PATCH] Add support for `member_type_id` in CORE `MemberInfoImporter` also improve support for first, last name sync --- .../corepos/office/importing/db/model.py | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/rattail_corepos/corepos/office/importing/db/model.py b/rattail_corepos/corepos/office/importing/db/model.py index 805b271..15d5190 100644 --- a/rattail_corepos/corepos/office/importing/db/model.py +++ b/rattail_corepos/corepos/office/importing/db/model.py @@ -31,6 +31,8 @@ CORE-POS model importers (direct DB) which may exist. """ +import logging + from corepos.db.office_op import model as corepos, Session as CoreSession from corepos.db.office_trans import model as coretrans @@ -38,11 +40,15 @@ from rattail import importing from rattail.importing.handlers import ToSQLAlchemyHandler +log = logging.getLogger(__name__) + + class ToCoreHandler(ToSQLAlchemyHandler): """ Base class for import handlers which target a CORE database on the local side. """ - local_title = "CORE" + generic_local_title = 'CORE Office (DB "op")' + local_title = 'CORE Office (DB "op")' local_key = 'corepos_db_office_op' def make_session(self): @@ -152,6 +158,58 @@ class MemberInfoImporter(ToCore): model_class = corepos.MemberInfo key = 'card_number' + @property + def supported_fields(self): + fields = list(super(MemberInfoImporter, self).supported_fields) + + fields.append('member_type_id') + + return fields + + def normalize_local_object(self, member): + data = super(MemberInfoImporter, self).normalize_local_object(member) + + if 'member_type_id' in self.fields: + data['member_type_id'] = None + customer = member.customers[0] if member.customers else None + if customer: + data['member_type_id'] = customer.member_type_id + + return data + + def update_object(self, member, host_data, local_data=None, **kwargs): + member = super(MemberInfoImporter, self).update_object( + member, host_data, local_data=local_data, **kwargs) + + if 'first_name' in self.fields: + if member.customers: + customer = member.customers[0] + first_name = host_data['first_name'] + if customer.first_name != first_name: + customer.first_name = first_name + + if 'last_name' in self.fields: + if member.customers: + customer = member.customers[0] + last_name = host_data['last_name'] + if customer.last_name != last_name: + customer.last_name = last_name + + if 'member_type_id' in self.fields: + member_type_id = host_data['member_type_id'] + for customer in member.customers: + if customer.member_type_id != member_type_id: + if member_type_id is None: + log.warning("will not blank out member_type_id for " + "member #%s: %s %s", + member.card_number, + customer.first_name, + customer.last_name) + else: + customer.member_type_id = member_type_id + + return member + class MemberDateImporter(ToCore): model_class = corepos.MemberDate