Include person_uuid
when importing members from CORE DB
otherwise can cause duplicate person records, e.g. if customers also are imported from CORE
This commit is contained in:
parent
4ce7d3293e
commit
2f3926f899
|
@ -258,6 +258,7 @@ class MemberImporter(FromCOREPOS, corepos_importing.model.MemberImporter):
|
||||||
'number',
|
'number',
|
||||||
'corepos_card_number',
|
'corepos_card_number',
|
||||||
'customer_uuid',
|
'customer_uuid',
|
||||||
|
'person_uuid',
|
||||||
'person_first_name',
|
'person_first_name',
|
||||||
'person_last_name',
|
'person_last_name',
|
||||||
'membership_type_number',
|
'membership_type_number',
|
||||||
|
@ -274,6 +275,54 @@ class MemberImporter(FromCOREPOS, corepos_importing.model.MemberImporter):
|
||||||
model.Customer,
|
model.Customer,
|
||||||
key='number')
|
key='number')
|
||||||
|
|
||||||
|
query = self.session.query(model.Person)\
|
||||||
|
.outerjoin(model.Customer,
|
||||||
|
model.Customer.account_holder_uuid == model.Person.uuid)\
|
||||||
|
.outerjoin(model.CoreCustomer)\
|
||||||
|
.outerjoin(model.Member,
|
||||||
|
model.Member.person_uuid == model.Person.uuid)\
|
||||||
|
.outerjoin(model.CoreMember)\
|
||||||
|
.filter(sa.or_(
|
||||||
|
model.CoreCustomer.corepos_card_number != None,
|
||||||
|
model.CoreMember.corepos_card_number != None))\
|
||||||
|
.options(orm.joinedload(model.Person.customer_accounts)\
|
||||||
|
.joinedload(model.Customer._corepos))
|
||||||
|
def card_number(person, normal):
|
||||||
|
customer = self.app.get_customer(person)
|
||||||
|
if customer and customer.corepos_card_number:
|
||||||
|
return customer.corepos_card_number
|
||||||
|
member = self.app.get_member(person)
|
||||||
|
if member and member.corepos_card_number:
|
||||||
|
return member.corepos_card_number
|
||||||
|
self.people_by_card_number = self.cache_model(model.Person, query=query,
|
||||||
|
key=card_number)
|
||||||
|
|
||||||
|
def get_person(self, member):
|
||||||
|
if hasattr(self, 'people_by_card_number'):
|
||||||
|
return self.people_by_card_number.get(member.card_number)
|
||||||
|
|
||||||
|
model = self.model
|
||||||
|
|
||||||
|
try:
|
||||||
|
return self.session.query(model.Person)\
|
||||||
|
.join(model.Customer,
|
||||||
|
model.Customer.account_holder_uuid == model.Person.uuid)\
|
||||||
|
.join(model.CoreCustomer)\
|
||||||
|
.filter(model.CoreCustomer.corepos_card_number == member.card_number)\
|
||||||
|
.one()
|
||||||
|
except orm.exc.NoResultFound:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
return self.session.query(model.Person)\
|
||||||
|
.join(model.Member,
|
||||||
|
model.Member.person_uuid == model.Person.uuid)\
|
||||||
|
.join(model.CoreMember)\
|
||||||
|
.filter(model.CoreMember.corepos_card_number == member.card_number)\
|
||||||
|
.one()
|
||||||
|
except orm.exc.NoResultFound:
|
||||||
|
pass
|
||||||
|
|
||||||
def get_customer_by_number(self, number):
|
def get_customer_by_number(self, number):
|
||||||
if hasattr(self, 'customers_by_number'):
|
if hasattr(self, 'customers_by_number'):
|
||||||
return self.customers_by_number.get(number)
|
return self.customers_by_number.get(number)
|
||||||
|
@ -298,6 +347,7 @@ class MemberImporter(FromCOREPOS, corepos_importing.model.MemberImporter):
|
||||||
|
|
||||||
card_number = core_member.card_number
|
card_number = core_member.card_number
|
||||||
customer = self.get_customer_by_number(card_number)
|
customer = self.get_customer_by_number(card_number)
|
||||||
|
person = self.get_person(core_member)
|
||||||
|
|
||||||
typeno = None
|
typeno = None
|
||||||
if core_customer and core_customer.member_type:
|
if core_customer and core_customer.member_type:
|
||||||
|
@ -318,6 +368,7 @@ class MemberImporter(FromCOREPOS, corepos_importing.model.MemberImporter):
|
||||||
'number': card_number,
|
'number': card_number,
|
||||||
'corepos_card_number': card_number,
|
'corepos_card_number': card_number,
|
||||||
'customer_uuid': customer.uuid if customer else None,
|
'customer_uuid': customer.uuid if customer else None,
|
||||||
|
'person_uuid': person.uuid if person else None,
|
||||||
'person_first_name': core_contact.first_name,
|
'person_first_name': core_contact.first_name,
|
||||||
'person_last_name': core_contact.last_name,
|
'person_last_name': core_contact.last_name,
|
||||||
'membership_type_number': typeno,
|
'membership_type_number': typeno,
|
||||||
|
|
Loading…
Reference in a new issue