From 1c9f1ef5151eb9e80a070228955d3b68911576ee Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Fri, 5 Nov 2021 20:35:38 -0500 Subject: [PATCH] Add support for 2nd "member type" file in CORE member batch still just feature preview mode here, this is terribly specific --- rattail_corepos/batch/coremember.py | 72 ++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/rattail_corepos/batch/coremember.py b/rattail_corepos/batch/coremember.py index 808c238..7dacf86 100644 --- a/rattail_corepos/batch/coremember.py +++ b/rattail_corepos/batch/coremember.py @@ -43,17 +43,6 @@ class CoreMemberBatchHandler(BatchHandler): """ batch_model_class = CoreMemberBatch - importing_fields = [ - 'first_name', - 'last_name', - 'street', - 'city', - 'state', - 'zipcode', - 'phone', - 'email1', - ] - def should_populate(self, batch): if batch.input_file: return True @@ -81,8 +70,11 @@ class CoreMemberBatchHandler(BatchHandler): """ Populate member batch from input data file. """ - # TODO: should detect what type of input file we have, but for - # now we only support one kind.. + # TODO: how should we detect what type of input file we have? + # this way is pretty lame but sort of works for testing + if 'member-status' in batch.input_file: + return self.populate_from_member_file(batch, progress=progress) + return self.populate_from_contact_file(batch, progress=progress) def populate_from_contact_file(self, batch, progress=None): @@ -95,10 +87,21 @@ class CoreMemberBatchHandler(BatchHandler): data = list(reader) input_file.close() - batch.set_param('fields', self.importing_fields) + fields = [ + 'first_name', + 'last_name', + 'street', + 'city', + 'state', + 'zipcode', + 'phone', + 'email1', + ] + + batch.set_param('fields', fields) maxlens = {} - for field in self.importing_fields: + for field in fields: maxlens[field] = maxlen(getattr(CoreMemberBatchRow, field)) def append(csvrow, i): @@ -115,7 +118,7 @@ class CoreMemberBatchHandler(BatchHandler): # row.phone = self.app.format_phone_number(csvrow['phone_number']) row.email1 = csvrow['email'] - for field in self.importing_fields: + for field in fields: if len(getattr(row, field)) > maxlens[field]: log.warning("%s field is %s and will be truncated to %s " "for row #%s in CSV data: %s", @@ -132,7 +135,37 @@ class CoreMemberBatchHandler(BatchHandler): self.progress_loop(append, data, progress, message="Adding initial rows to batch") + def populate_from_member_file(self, batch, progress=None): + """ + Populate member batch from "member" CSV input data file. + """ + input_path = batch.filepath(self.config, batch.input_file) + input_file = open(input_path, 'rt') + reader = csv.DictReader(input_file) + data = list(reader) + input_file.close() + + fields = [ + 'first_name', + 'last_name', + 'member_type_id', + ] + + batch.set_param('fields', fields) + + def append(csvrow, i): + row = self.make_row() + row.card_number = int(csvrow['signup_external_id']) + row.first_name = csvrow['signup_first_name'] + row.last_name = csvrow['signup_last_name'] + row.member_type_id = int(csvrow['member_type']) + self.add_row(batch, row) + + self.progress_loop(append, data, progress, + message="Adding initial rows to batch") + def refresh_row(self, row): + batch = row.batch # clear these first in case they are set row.first_name_old = None @@ -174,7 +207,8 @@ class CoreMemberBatchHandler(BatchHandler): row.member_type_id_old = core_customer.member_type_id diffs = [] - for field in self.importing_fields: + fields = batch.get_param('fields') + for field in fields: if getattr(row, field) != getattr(row, '{}_old'.format(field)): diffs.append(field) @@ -241,6 +275,10 @@ class CoreMemberBatchHandler(BatchHandler): if 'last_name' in fields: core_customer.last_name = row.last_name + if 'member_type_id' in fields: + for core_customer in core_member.customers: + core_customer.member_type_id = row.member_type_id + self.progress_loop(update, rows, progress, message="Updating members in CORE-POS")