From a17624810434bde20d2d7cd1196bae75a30e71cf Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 1 Feb 2023 17:57:22 -0500 Subject: [PATCH] Lots of work for ISHLT badge printing. --- app/log.py | 3 +- app/methods/e_impexium_methods.py | 6 +- app/methods/event_person_methods.py | 12 +- app/models/event_badge_models.py | 3 +- app/models/event_person_models.py | 3 + app/routers/e_impexium.py | 466 +++++++++++++++++++--------- 6 files changed, 332 insertions(+), 161 deletions(-) diff --git a/app/log.py b/app/log.py index 6a41f94..99ac5e9 100644 --- a/app/log.py +++ b/app/log.py @@ -85,7 +85,8 @@ def logger_reset(func): # log.info(locals()) @functools.wraps(func) def wrapper(*args, **kwargs): - log.info(f'*** Function: "{func.__name__}()"') + if func.__name__ not in ['redis_lookup_id_random']: + log.info(f'*** Function: "{func.__name__}()"') log.debug(f'*** Function Positional Args: {args}\nFunction Key Args: {kwargs}') init_log_level = log.level returned_result = func(*args, **kwargs) diff --git a/app/methods/e_impexium_methods.py b/app/methods/e_impexium_methods.py index f893320..17bcbc9 100644 --- a/app/methods/e_impexium_methods.py +++ b/app/methods/e_impexium_methods.py @@ -273,6 +273,8 @@ def get_event_registrants( # ### BEGIN ### API External Impexium Methods ### get_individual_profile() ### # Updated 2022-04-22 +# NOTE: Without details the results are very basic. Pretty much just their name. +# Including details adds the addresses, customFields, emails, memberships, phones, etc @logger_reset def get_individual_profile( individual_id: str, @@ -309,6 +311,7 @@ def get_individual_profile( # log.debug(resp.json()) if resp.status_code == 200: + log.info('Status 200') log.debug(resp.json()) impexium_individual_profile_raw = resp.json() # .get('data').get('dataList')[0] @@ -319,7 +322,7 @@ def get_individual_profile( try_request = False elif resp.status_code == 404: - log.info('No results returned.') + log.info('No results returned (status 404)') try_request = False impexium_individual_profile = None elif resp.status_code == 429: @@ -328,6 +331,7 @@ def get_individual_profile( try_request = True impexium_individual_profile = False else: + log.info('Not trying again') try_request = False impexium_event_registration_list = False diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 163862a..9023119 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -1,11 +1,10 @@ -from __future__ import annotations import datetime from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update -from app.lib_general import log, logging +from app.lib_general import log, logging, logger_reset # from app.methods.event_abstract_methods import load_event_abstract_obj from app.methods.event_badge_methods import create_update_event_badge_obj_v4, load_event_badge_obj @@ -25,6 +24,7 @@ from app.models.event_person_models import Event_Person_New_Base, Event_Person_B # ### BEGIN ### API Event Person Methods ### load_event_person_obj() ### +@logger_reset def load_event_person_obj( event_person_id: int|str, enabled: str = 'enabled', # enabled, disabled, all @@ -188,6 +188,7 @@ def load_event_person_obj( # ### BEGIN ### API Event Person Methods ### get_event_person_rec_list() ### # for_obj_type: account, event, event_registration, event_badge, person, user # Updated 2021-09-10 +@logger_reset def get_event_person_rec_list( for_obj_type: str, # NOTE: This is not for_type because the field name generated based for_obj_id: str, # NOTE: This is not for_id because the field name generated based @@ -310,6 +311,7 @@ def get_event_id_w_event_person_id( # ### BEGIN ### API Event Person Methods ### create_update_event_person_obj_v4() ### # Updated 2022-02-23 +@logger_reset def create_update_event_person_obj_v4( event_person_dict_obj: Event_Person_Base|dict, event_person_id: int|str|None = None, @@ -321,7 +323,7 @@ def create_update_event_person_obj_v4( fail_any: bool = False, # Fail if any thing goes wrong for sub objects return_outline: bool = False, ) -> int|bool: - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) # ### SECTION ### Secondary data validation @@ -526,6 +528,7 @@ def create_update_event_person_obj_v4( # NOTE: Is it a good idea to create and or update a person and or user here??? The create_event_person_obj() below does do that. # NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity? # Updated 2021-08-25 +@logger_reset def create_event_person_obj( event_id: int|str, event_person_obj_new: Event_Person_Base, @@ -861,6 +864,7 @@ def update_event_person_obj_v3( # NOTE NOTE NOTE NOTE: This will be taken over by _exist version # NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity? # Reviewed and updated 2021-08-10 +@logger_reset def update_event_person_obj( event_person_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. event_person_obj_up: Event_Person_Base, @@ -1051,4 +1055,4 @@ def smart_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: log.debug(f'Returning the new event_person_id: {event_person_id}') return event_person_id -# ### END ### API Event Person Methods ### smart_event_person_obj() ### \ No newline at end of file +# ### END ### API Event Person Methods ### smart_event_person_obj() ### diff --git a/app/models/event_badge_models.py b/app/models/event_badge_models.py index 1621be2..67dd5ac 100644 --- a/app/models/event_badge_models.py +++ b/app/models/event_badge_models.py @@ -116,6 +116,7 @@ class Event_Badge_Base(BaseModel): badge_type: Optional[str] member_type_code: Optional[str] member_type: Optional[str] + member_status: Optional[str] registration_type_code: Optional[str] registration_type: Optional[str] @@ -135,7 +136,7 @@ class Event_Badge_Base(BaseModel): ticket_10_code: Optional[str] agree_to_tc: Optional[bool] # Agree to terms and conditions - allow_tracking: Optional[bool] # Allow tracking for lead retrival and other marketing + allow_tracking: Optional[bool] # Allow tracking for lead retrieval and other marketing print_first_datetime: Optional[datetime.datetime] = None print_last_datetime: Optional[datetime.datetime] = None diff --git a/app/models/event_person_models.py b/app/models/event_person_models.py index 0dc5f0e..993a000 100644 --- a/app/models/event_person_models.py +++ b/app/models/event_person_models.py @@ -63,6 +63,9 @@ class Event_Person_Base(BaseModel): external_person_id: Optional[str] # Person ID generated by external system (should be stable and not change) external_sys_id: Optional[str] # NOTE: Deprecated; Move to external_person_id. Person ID generated by external system (should be stable and not change) + agree_to_tc: Optional[bool] # Agree to terms and conditions + allow_tracking: Optional[bool] # Allow tracking for lead retrieval and other marketing + file_count: Optional[int] priority: Optional[bool] diff --git a/app/routers/e_impexium.py b/app/routers/e_impexium.py index dd5c69d..5469e56 100644 --- a/app/routers/e_impexium.py +++ b/app/routers/e_impexium.py @@ -28,7 +28,8 @@ async def event_import_reg( e_impexium_event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: 42_AM (2022-04); EX22_AM (2022-04); 41V_2 (2021-04) registered_since: datetime.datetime = None, # datetime.datetime.now() + datetime.timedelta(seconds=120) details: bool = True, - inc_membership_fields: bool = True, + inc_individual_profile: bool = True, + inc_individual_profile_custom_fields: bool = True, # NOTE: Do not set True if inc_individual_profile is also set True page: int = 0, # 250 per page from Impexium event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04) # Account ID For ISHLT: d8TqXqf1EOg @@ -43,6 +44,7 @@ async def event_import_reg( log.info('Starting Impexium event registration import...') account_id = commons.x_account_id + account_id_random = commons.x_account_id_random if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass else: return mk_resp(data=None, status_code=404, status_message=f'The Event ID was not found. Event ID: {event_id}', response=commons.response) @@ -59,23 +61,80 @@ async def event_import_reg( # return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented + # BEGIN: Loop through the registrants pulled from Impexium + loop_count = 0 loop_limit = 2500 # 200 event_person_li = [] event_person_summary_li = [] for event_registrant in event_registrant_li: if loop_count > loop_limit: break - log.info(f"Record Num: {event_registrant.get('recordNumber')}, Registration Num: {event_registrant.get('registrationNumber')}, Registrant Type Code: {event_registrant.get('registrantTypeCode')}") - # log.debug(event_registrant) + log.info(f'BEGIN: **** *** ** * Impexium registrant import loop #{loop_count} * ** *** ****') + # ISHLT 2022 used event_registrant.get('registrantTypeCode') for the registration type + # ISHLT 2023 used a custom field for their main registration. + + custom_fields = [] # NOTE: These are custom fields for registration + if custom_fields := event_registrant.get('itemizedCustomFields'): + if isinstance(custom_fields, list): pass + else: + log.warning('Found custom fields section, but no list was found.') + custom_fields = [] + else: + log.warning('The custom fields were not found at all. Are the "details" being included?') + pass + + event_badge_data = {} + + if account_id_random == 'd8TqXqf1EOg': + if e_impexium_event_id == '2023_Annual Meeting': + log.info('Processing ISHLT 2023 Annual Meeting Registration...') + event_badge_data['event_badge_template_id'] = 10 + log.info('Found list of custom fields for a registrant. Searching for "registration_selection"') + for field in custom_fields: + if field.get('name') == 'registration_selection': + event_badge_data['badge_type_code'] = field.get('value') # This is probably not exactly right + event_badge_data['badge_type'] = field.get('value') # This is probably not exactly right + event_badge_data['registration_type_code'] = field.get('value') + event_badge_data['registration_type'] = field.get('value') + break + else: + event_badge_data['badge_type_code'] = 'guest' + event_badge_data['badge_type'] = 'Guest' + event_badge_data['registration_type_code'] = 'guest' + event_badge_data['registration_type'] = 'Guest' + elif e_impexium_event_id == 'ISHLT 43rd Annual Meeting - Exhib Booth Staff Only': + log.info('Processing ISHLT 2023 Annual Meeting Exhibit Only...') + event_badge_data['event_badge_template_id'] = 10 + event_badge_data['badge_type_code'] = 'EXO' + event_badge_data['badge_type'] = 'Exhibitor Booth Staff' + event_badge_data['registration_type_code'] = 'EXO' + event_badge_data['registration_type'] = 'Exhibitor Booth Staff' + elif e_impexium_event_id in ['2023 Lung Transplantation Morning Master Class', '2023 Lung Transplantation Afternoon Master Class', '2023 Nursing and Allied Health Master Class', '2023 Pediatric MCS Master Class', '2023 Pulmonary Hypertension Master Class']: + log.info('Processing ISHLT 2023 Annual Meeting Academies...') + event_badge_data['event_badge_template_id'] = 11 + event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # MBR19, NonM + event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') # Member, Non-Member + event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') + event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') + else: + log.error(f'This is an unknown meeting ID ({e_impexium_event_id}) for account ID ({account_id_random})!') + return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented + else: + log.error(f'This account ID ({account_id_random}) is not currently configured!') + return mk_resp(data=len(event_registrant_li), status_code=501, response=commons.response) # Not Implemented + + # event_registrant.get('id') is the Impexium UUID for an individual person and their registrations + # event_registrant.get('recordNumber') is the Impexium 5 digit number for an individual person and their registrations + log.info(f"ID: {event_registrant.get('id')}, Record Num: {event_registrant.get('recordNumber')}, Registration Num: {event_registrant.get('registrationNumber')}, Registrant Type Code: {event_badge_data.get('registration_type_code')}") + log.debug(event_registrant) # Creating an external ID from the Impexium record number and registration number. Very explicitly converting each number to a string before joining, just in case. - external_id_old = str(event_registrant.get('recordNumber'))+':'+str(event_registrant.get('registrationNumber')) - external_id_v2 = str(e_impexium_event_id)+':'+str(event_registrant.get('recordNumber'))+':'+str(event_registrant.get('registrationNumber')) - + # external_id_v1 = str(event_registrant.get('recordNumber'))+':'+str(event_registrant.get('registrationNumber')) + # external_id_v2 = str(e_impexium_event_id)+':'+str(event_registrant.get('recordNumber'))+':'+str(event_registrant.get('registrationNumber')) external_id_v3 = str(e_impexium_event_id)+':'+str(event_registrant.get('recordNumber')) - external_sys_id = event_registrant.get('id') # Impexium UUID for person - external_reg_id = event_registrant.get('recordNumber') # Impexium record number for a registration (guest should match) + external_person_id = event_registrant.get('id') # Impexium UUID for person + external_registration_id = event_registrant.get('recordNumber') # Impexium record number for a registration (guest should match) event_person_summary_data = {} event_person_summary_data['external_id'] = external_id_v3 @@ -85,11 +144,14 @@ async def event_import_reg( event_person_data['account_id'] = account_id event_person_data['event_id'] = event_id event_person_data['external_id'] = external_id_v3 - event_person_data['external_sys_id'] = external_sys_id - event_person_data['external_reg_id'] = external_reg_id + event_person_data['external_person_id'] = external_person_id + event_person_data['external_registration_id'] = external_registration_id # event_person_data['external_id_old'] = external_id_old email = None + address_line_1 = None + address_line_2 = None + address_line_3 = None city = None country_subdivision_code = None state_province = None @@ -126,16 +188,75 @@ async def event_import_reg( degrees = None organization_name = None - if inc_membership_fields: - individual_custom_fields_li = get_individual_custom_fields(individual_id=event_registrant.get('id')) + membership_code = None + membership_type = None + membership_effective_datetime = None + membership_expire_datetime = None + membership_status = None + if inc_individual_profile: # This also includes membership information if details is True + # NOTE: Reminder that the ID under a registration is also the person's profile ID. + log.info(f'Getting individual profile for ID {event_registrant.get("id")}') + individual_profile_result = get_individual_profile( + individual_id = event_registrant.get('id'), + details = details, + # page = page, + ) + log.debug(individual_profile_result) - for individual_custom_field in individual_custom_fields_li: - if individual_custom_field.get('name') == 'degree': - degrees = individual_custom_field.get('value') - if individual_custom_field.get('name') == 'organization_name': - organization_name = individual_custom_field.get('value') + if individual_profile_result: + individual_profile_custom_field_li = [] + if individual_profile_custom_field_li := individual_profile_result.get('customFields'): + if isinstance(individual_profile_custom_field_li, list): + for individual_profile_custom_field in individual_profile_custom_field_li: + if individual_profile_custom_field.get('name') == 'degree': + degrees = individual_profile_custom_field.get('value') + if individual_profile_custom_field.get('name') == 'organization_name': + organization_name = individual_profile_custom_field.get('value') - log.debug(f'Degrees: {degrees}; Organization Name: {organization_name}') + log.debug(f'Degrees: {degrees}; Organization Name: {organization_name}') + else: + log.warning('Found individual profile custom fields section, but no list was found.') + individual_profile_custom_field_li = [] + else: + log.warning('The individual profile custom fields were not found at all. Are the "details" being included?') + pass + + individual_profile_membership_li = [] + membership_code = None + membership_type = None + membership_effective_datetime = None + membership_expire_datetime = None + if individual_profile_membership_li := individual_profile_result.get('memberships'): + if isinstance(individual_profile_membership_li, list): + for individual_profile_membership in individual_profile_membership_li: + if membership_code := individual_profile_membership.get('code'): pass + if membership_type := individual_profile_membership.get('membershipType'): pass + if membership_effective_datetime := individual_profile_membership.get('effectiveDate'): pass + if membership_expire_datetime := individual_profile_membership.get('expireDate'): pass + log.debug(f'Membership - Code: {membership_code}; Type: {membership_type}; Effective Datetime: {membership_effective_datetime}; Expire Datetime: {membership_expire_datetime}') + else: + log.warning('Found individual profile membership section, but no list was found.') + individual_profile_membership_li = [] + else: + log.warning('The individual profile membership section was not found at all. Are the "details" being included?') + pass + else: + log.warning('Tried to get individual profile, but no results!') + pass + + + # if inc_individual_profile_custom_fields: + # log.info(f'Getting individual custom fields list for Event Registrant ID {event_registrant.get("id")}') + # individual_custom_fields_li = get_individual_custom_fields(individual_id=event_registrant.get('id')) + # log.debug(individual_custom_fields_li) + + # for individual_custom_field in individual_custom_fields_li: + # if individual_custom_field.get('name') == 'degree': + # degrees = individual_custom_field.get('value') + # if individual_custom_field.get('name') == 'organization_name': + # organization_name = individual_custom_field.get('value') + + # log.debug(f'Degrees: {degrees}; Organization Name: {organization_name}') event_person_profile_data = {} @@ -167,143 +288,177 @@ async def event_import_reg( event_person_data['event_person_profile'] = {} event_person_data['event_person_profile'] = event_person_profile_data - event_badge_data = {} + # event_badge_data = {} # Initialized above ^ event_badge_data['enable'] = True event_badge_data['event_id'] = event_id event_badge_data['external_id'] = external_id_v3 - event_badge_data['external_sys_id'] = external_sys_id - event_badge_data['external_reg_id'] = external_reg_id + event_badge_data['external_person_id'] = external_person_id + event_badge_data['external_registration_id'] = external_registration_id # event_badge_data['external_id_old'] = external_id_old - if reg_type_code := event_registrant.get('registrantTypeCode'): - event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type + event_badge_data['allow_tracking'] = False + event_person_data['allow_tracking'] = False + for field in custom_fields: + if field.get('name') == 'EventSponsorOptin' and field.get('value') == 'True': + log.info('Allow Tracking') + event_badge_data['allow_tracking'] = True + event_person_data['allow_tracking'] = True + elif field.get('name') == 'EventSponsorOptin' and field.get('value') == 'False': + log.info('Tracking Not Allowed') + event_badge_data['allow_tracking'] = False + event_person_data['allow_tracking'] = False - ishlt_m = ('AHMB', 'IMBR', 'MBR') - ishlt_nm = ('ANHM', 'INMB', 'NMBR') - ishlt_student_m = ('SMBR') - ishlt_student_nm = ('SNMB') - ishlt_ex_all = ('EX') - ishlt_ex_booth = ('EX') - ishlt_guest = ('GUEST') - if reg_type_code in ishlt_m: - event_badge_data['badge_type'] = 'Member' - elif reg_type_code in ishlt_nm: - event_badge_data['badge_type'] = 'Non-Member' - elif reg_type_code in ishlt_student_m: - event_badge_data['badge_type'] = 'Student/Trainee Member' - elif reg_type_code in ishlt_student_nm: - event_badge_data['badge_type'] = 'Student/Trainee Non-Member' - elif reg_type_code in ishlt_ex_all: - event_badge_data['badge_type'] = 'Exhibitor All Access' - elif reg_type_code in ishlt_ex_booth: - event_badge_data['badge_type'] = 'Exhibitor Booth Staff' - elif reg_type_code in ishlt_guest: - event_badge_data['badge_type'] = 'Guest' + # if reg_type_code := event_registrant.get('registrantTypeCode'): + # event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type + + # ishlt_m = ('AHMB', 'IMBR', 'MBR') + # ishlt_nm = ('ANHM', 'INMB', 'NMBR') + # ishlt_student_m = ('SMBR') + # ishlt_student_nm = ('SNMB') + # ishlt_ex_all = ('EX') + # ishlt_ex_booth = ('EX') + # ishlt_guest = ('GUEST') + # if reg_type_code in ishlt_m: + # event_badge_data['badge_type'] = 'Member' + # elif reg_type_code in ishlt_nm: + # event_badge_data['badge_type'] = 'Non-Member' + # elif reg_type_code in ishlt_student_m: + # event_badge_data['badge_type'] = 'Student/Trainee Member' + # elif reg_type_code in ishlt_student_nm: + # event_badge_data['badge_type'] = 'Student/Trainee Non-Member' + # elif reg_type_code in ishlt_ex_all: + # event_badge_data['badge_type'] = 'Exhibitor All Access' + # elif reg_type_code in ishlt_ex_booth: + # event_badge_data['badge_type'] = 'Exhibitor Booth Staff' + # elif reg_type_code in ishlt_guest: + # event_badge_data['badge_type'] = 'Guest' + # else: + # event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') + + # if custom_fields := event_registrant.get('itemizedCustomFields'): + # if isinstance(custom_fields, list): + # log.info('Found list of custom fields for an exhibitor. Searching for "exhibitor_reg_type') + # for field in custom_fields: + # if field.get('name') == 'registration_type': + # event_badge_data['registration_type_code'] = field.get('value') + # event_badge_data['registration_type'] = field.get('value') + # break + # else: log.info('Found custom fields section, but no list was found.') + # else: + # log.warning('The custom fields were not found at all. Are the "details" being included?') + + # event_badge_data['event_badge_template_id'] = 3 + + # elif e_impexium_event_id == '42_AM': + # if not reg_type_code and event_registrant.get('guestOfRecordNumber'): + # event_badge_data['badge_type_code'] = 'GUEST' + # event_badge_data['badge_type'] = 'Guest' + + # event_badge_data['registration_type_code'] = 'GUEST' + # event_badge_data['registration_type'] = 'Guest' + # else: + # event_badge_data['badge_type_code'] = 'UNKNOWN' + # event_badge_data['badge_type'] = 'Unknown Type' + + # event_badge_data['registration_type_code'] = 'UNKNOWN' + # event_badge_data['registration_type'] = 'Unknown Type' + + # event_badge_data['event_badge_template_id'] = 3 + + # elif e_impexium_event_id == 'EX22_AM': + # event_badge_data['badge_type_code'] = 'EX' + # event_badge_data['badge_type'] = 'Exhibit Staff' + + # if custom_fields := event_registrant.get('itemizedCustomFields'): + # if isinstance(custom_fields, list): + # log.info('Found list of custom fields for an exhibitor. Searching for "exhibitor_reg_type') + # for field in custom_fields: + # if field.get('name') == 'exhibitor_reg_type': + # if field.get('value') == 'Exhibitor Booth Staff ': + # event_badge_data['badge_type_code'] = 'EXO' + # event_badge_data['badge_type'] = 'Exhibitor Booth Staff' + # elif field.get('value') == 'Exhibitor All Access ': + # event_badge_data['badge_type_code'] = 'EXALL' + # event_badge_data['badge_type'] = 'Exhibitor All Access' + + # event_badge_data['registration_type_code'] = field.get('value') + # event_badge_data['registration_type'] = field.get('value') + + # break + # else: log.info('Found custom fields section, but no list was found.') + # else: + # log.warning('The custom fields were not found at all. Are the "details" being included?') + # event_badge_data['event_badge_template_id'] = 3 + + # elif e_impexium_event_id == '2022HEART': + # if not reg_type_code and event_registrant.get('guestOfRecordNumber'): + # event_badge_data['badge_type_code'] = 'GUEST' + # event_badge_data['badge_type'] = 'Guest' + + # event_badge_data['registration_type_code'] = 'GUEST' + # event_badge_data['registration_type'] = 'Guest' + # else: + # event_badge_data['badge_type_code'] = 'HEART' + # event_badge_data['badge_type'] = 'HFTX Core' + + # event_badge_data['registration_type_code'] = 'HEART' + # event_badge_data['registration_type'] = 'HFTX Core' + + # event_badge_data['event_badge_template_id'] = 5 + + # # event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') + # # event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') + + # elif e_impexium_event_id == '2022LUNG': + # if not reg_type_code and event_registrant.get('guestOfRecordNumber'): + # event_badge_data['badge_type_code'] = 'GUEST' + # event_badge_data['badge_type'] = 'Guest' + + # event_badge_data['badge_type_code'] = 'GUEST' + # event_badge_data['badge_type'] = 'Guest' + # else: + # event_badge_data['badge_type_code'] = 'LUNG' + # event_badge_data['badge_type'] = 'LTX Core' + + # event_badge_data['registration_type_code'] = 'LUNG' + # event_badge_data['registration_type'] = 'LTX Core' + + # event_badge_data['event_badge_template_id'] = 5 + + # # event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') + # # event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') + + # else: + # event_badge_data['badge_type_code'] = 'UNKNOWN' + # event_badge_data['badge_type'] = 'Unknown Type' + # event_badge_data['event_badge_template_id'] = 3 + + # event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') + # event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') + + event_badge_data['member_type_code'] = event_registrant.get('customerType') # Using this as the member_type. Will update below if possible + event_badge_data['member_type'] = None # Using this as the member_type. Will update below if possible + + if membership_code: event_badge_data['member_type_code'] = membership_code + else: event_badge_data['member_type_code'] = event_registrant.get('customerType') + if membership_type: event_badge_data['member_type'] = membership_type + + if membership_expire_datetime: + current_datetime_utc = datetime.datetime.utcnow() + # membership_expire_datetime_obj = datetime.datetime.strptime(membership_expire_datetime, '%Y-%m-%d') + membership_expire_datetime_obj = datetime.datetime.strptime(membership_expire_datetime, '%Y-%m-%dT%H:%M:%S') + # log.debug(current_datetime_utc) + # log.debug(membership_expire_datetime_obj) + # log.debug(membership_expire_datetime) + + if membership_expire_datetime_obj > current_datetime_utc: + log.info('Current membership; not expired') + # member_status = 'current' # Active member; not expired + event_badge_data['member_status'] = 'current' # Active member; not expired else: - event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') - - if custom_fields := event_registrant.get('itemizedCustomFields'): - if isinstance(custom_fields, list): - log.info('Found list of custom fields for an exhibitor. Searching for "exhibitor_reg_type') - for field in custom_fields: - if field.get('name') == 'registration_type': - event_badge_data['registration_type_code'] = field.get('value') - event_badge_data['registration_type'] = field.get('value') - break - else: log.info('Found custom fields section, but no list was found.') - else: - log.warning('The custom fields were not found at all. Are the "details" being included?') - - event_badge_data['event_badge_template_id'] = 3 - - elif e_impexium_event_id == '42_AM': - if not reg_type_code and event_registrant.get('guestOfRecordNumber'): - event_badge_data['badge_type_code'] = 'GUEST' - event_badge_data['badge_type'] = 'Guest' - - event_badge_data['registration_type_code'] = 'GUEST' - event_badge_data['registration_type'] = 'Guest' - else: - event_badge_data['badge_type_code'] = 'UNKNOWN' - event_badge_data['badge_type'] = 'Unknown Type' - - event_badge_data['registration_type_code'] = 'UNKNOWN' - event_badge_data['registration_type'] = 'Unknown Type' - - event_badge_data['event_badge_template_id'] = 3 - - elif e_impexium_event_id == 'EX22_AM': - event_badge_data['badge_type_code'] = 'EX' - event_badge_data['badge_type'] = 'Exhibit Staff' - - if custom_fields := event_registrant.get('itemizedCustomFields'): - if isinstance(custom_fields, list): - log.info('Found list of custom fields for an exhibitor. Searching for "exhibitor_reg_type') - for field in custom_fields: - if field.get('name') == 'exhibitor_reg_type': - if field.get('value') == 'Exhibitor Booth Staff ': - event_badge_data['badge_type_code'] = 'EXO' - event_badge_data['badge_type'] = 'Exhibitor Booth Staff' - elif field.get('value') == 'Exhibitor All Access ': - event_badge_data['badge_type_code'] = 'EXALL' - event_badge_data['badge_type'] = 'Exhibitor All Access' - - event_badge_data['registration_type_code'] = field.get('value') - event_badge_data['registration_type'] = field.get('value') - - break - else: log.info('Found custom fields section, but no list was found.') - else: - log.warning('The custom fields were not found at all. Are the "details" being included?') - event_badge_data['event_badge_template_id'] = 3 - - elif e_impexium_event_id == '2022HEART': - if not reg_type_code and event_registrant.get('guestOfRecordNumber'): - event_badge_data['badge_type_code'] = 'GUEST' - event_badge_data['badge_type'] = 'Guest' - - event_badge_data['registration_type_code'] = 'GUEST' - event_badge_data['registration_type'] = 'Guest' - else: - event_badge_data['badge_type_code'] = 'HEART' - event_badge_data['badge_type'] = 'HFTX Core' - - event_badge_data['registration_type_code'] = 'HEART' - event_badge_data['registration_type'] = 'HFTX Core' - - event_badge_data['event_badge_template_id'] = 5 - - # event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') - # event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') - - elif e_impexium_event_id == '2022LUNG': - if not reg_type_code and event_registrant.get('guestOfRecordNumber'): - event_badge_data['badge_type_code'] = 'GUEST' - event_badge_data['badge_type'] = 'Guest' - - event_badge_data['badge_type_code'] = 'GUEST' - event_badge_data['badge_type'] = 'Guest' - else: - event_badge_data['badge_type_code'] = 'LUNG' - event_badge_data['badge_type'] = 'LTX Core' - - event_badge_data['registration_type_code'] = 'LUNG' - event_badge_data['registration_type'] = 'LTX Core' - - event_badge_data['event_badge_template_id'] = 5 - - # event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') - # event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') - - else: - event_badge_data['badge_type_code'] = 'UNKNOWN' - event_badge_data['badge_type'] = 'Unknown Type' - event_badge_data['event_badge_template_id'] = 3 - - event_badge_data['registration_type_code'] = event_registrant.get('registrantTypeCode') - event_badge_data['registration_type'] = event_registrant.get('registrantTypeName') - - event_badge_data['member_type_code'] = event_registrant.get('customerType') # Using this as the member_type + log.info('Inactive membership; expired') + # member_status = 'inactive' # Inactive member; expired + event_badge_data['member_status'] = 'inactive' # Inactive member; expired event_badge_data['pronouns'] = event_registrant.get('gender') event_badge_data['informal_name'] = event_registrant.get('preferredFirstName') @@ -375,6 +530,9 @@ async def event_import_reg( event_person_data['event_badge'] = {} event_person_data['event_badge'] = event_badge_data + # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_person_data) + sql_select_event_person = f""" SELECT id AS event_person_id, id_random AS event_person_id_random, external_id AS event_person_external_id, event_badge_id AS event_badge_id, event_person_profile_id AS event_person_profile_id FROM `event_person` AS `event_person` @@ -516,10 +674,10 @@ async def event_check_individual( individual_profile = individual_profile_result event_person_summary_data = {} - event_person_summary_data['external_sys_id'] = e_impexium_individual_id + event_person_summary_data['external_person_id'] = e_impexium_individual_id event_person_data = {} - event_person_data['external_sys_id'] = e_impexium_individual_id # The Impexium individual ID + event_person_data['external_person_id'] = e_impexium_individual_id # The Impexium individual ID email = None city = None @@ -599,8 +757,8 @@ async def event_check_individual( # event_badge_data['enable'] = True # event_badge_data['event_id'] = event_id # event_badge_data['external_id'] = external_id_v3 - # event_badge_data['external_sys_id'] = external_sys_id - # event_badge_data['external_reg_id'] = external_reg_id + # event_badge_data['external_person_id'] = external_person_id + # event_badge_data['external_registration_id'] = external_registration_id event_badge_data['pronouns'] = individual_profile.get('gender') event_badge_data['informal_name'] = individual_profile.get('preferredFirstName') @@ -665,10 +823,10 @@ async def event_check_individual( # if location: event_badge_data['location'] = location sql_select_event_person = f""" - SELECT id AS event_person_id, id_random AS event_person_id_random, external_id AS event_person_external_id, external_sys_id AS event_person_external_sys_id, event_badge_id AS event_badge_id, event_person_profile_id AS event_person_profile_id + SELECT id AS event_person_id, id_random AS event_person_id_random, external_id AS event_person_external_id, external_person_id AS event_person_external_person_id, event_badge_id AS event_badge_id, event_person_profile_id AS event_person_profile_id FROM `event_person` AS `event_person` WHERE event_person.event_id = :event_id - AND event_person.external_sys_id = :external_sys_id + AND event_person.external_person_id = :external_person_id /*LIMIT 1*/; """