Lots of work for ISHLT badge printing.

This commit is contained in:
Scott Idem
2023-02-01 17:57:22 -05:00
parent a9f0e2bf3d
commit a176248104
6 changed files with 332 additions and 161 deletions

View File

@@ -85,7 +85,8 @@ def logger_reset(func):
# log.info(locals()) # log.info(locals())
@functools.wraps(func) @functools.wraps(func)
def wrapper(*args, **kwargs): 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}') log.debug(f'*** Function Positional Args: {args}\nFunction Key Args: {kwargs}')
init_log_level = log.level init_log_level = log.level
returned_result = func(*args, **kwargs) returned_result = func(*args, **kwargs)

View File

@@ -273,6 +273,8 @@ def get_event_registrants(
# ### BEGIN ### API External Impexium Methods ### get_individual_profile() ### # ### BEGIN ### API External Impexium Methods ### get_individual_profile() ###
# Updated 2022-04-22 # 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 @logger_reset
def get_individual_profile( def get_individual_profile(
individual_id: str, individual_id: str,
@@ -309,6 +311,7 @@ def get_individual_profile(
# log.debug(resp.json()) # log.debug(resp.json())
if resp.status_code == 200: if resp.status_code == 200:
log.info('Status 200')
log.debug(resp.json()) log.debug(resp.json())
impexium_individual_profile_raw = resp.json() # .get('data').get('dataList')[0] impexium_individual_profile_raw = resp.json() # .get('data').get('dataList')[0]
@@ -319,7 +322,7 @@ def get_individual_profile(
try_request = False try_request = False
elif resp.status_code == 404: elif resp.status_code == 404:
log.info('No results returned.') log.info('No results returned (status 404)')
try_request = False try_request = False
impexium_individual_profile = None impexium_individual_profile = None
elif resp.status_code == 429: elif resp.status_code == 429:
@@ -328,6 +331,7 @@ def get_individual_profile(
try_request = True try_request = True
impexium_individual_profile = False impexium_individual_profile = False
else: else:
log.info('Not trying again')
try_request = False try_request = False
impexium_event_registration_list = False impexium_event_registration_list = False

View File

@@ -1,11 +1,10 @@
from __future__ import annotations
import datetime import datetime
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator 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.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_abstract_methods import load_event_abstract_obj
from app.methods.event_badge_methods import create_update_event_badge_obj_v4, load_event_badge_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() ### # ### BEGIN ### API Event Person Methods ### load_event_person_obj() ###
@logger_reset
def load_event_person_obj( def load_event_person_obj(
event_person_id: int|str, event_person_id: int|str,
enabled: str = 'enabled', # enabled, disabled, all 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() ### # ### BEGIN ### API Event Person Methods ### get_event_person_rec_list() ###
# for_obj_type: account, event, event_registration, event_badge, person, user # for_obj_type: account, event, event_registration, event_badge, person, user
# Updated 2021-09-10 # Updated 2021-09-10
@logger_reset
def get_event_person_rec_list( def get_event_person_rec_list(
for_obj_type: str, # NOTE: This is not for_type because the field name generated based 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 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() ### # ### BEGIN ### API Event Person Methods ### create_update_event_person_obj_v4() ###
# Updated 2022-02-23 # Updated 2022-02-23
@logger_reset
def create_update_event_person_obj_v4( def create_update_event_person_obj_v4(
event_person_dict_obj: Event_Person_Base|dict, event_person_dict_obj: Event_Person_Base|dict,
event_person_id: int|str|None = None, 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 fail_any: bool = False, # Fail if any thing goes wrong for sub objects
return_outline: bool = False, return_outline: bool = False,
) -> int|bool: ) -> 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()) log.debug(locals())
# ### SECTION ### Secondary data validation # ### 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: 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? # 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 # Updated 2021-08-25
@logger_reset
def create_event_person_obj( def create_event_person_obj(
event_id: int|str, event_id: int|str,
event_person_obj_new: Event_Person_Base, 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: 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? # 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 # Reviewed and updated 2021-08-10
@logger_reset
def update_event_person_obj( 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_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, 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}') log.debug(f'Returning the new event_person_id: {event_person_id}')
return event_person_id return event_person_id
# ### END ### API Event Person Methods ### smart_event_person_obj() ### # ### END ### API Event Person Methods ### smart_event_person_obj() ###

View File

@@ -116,6 +116,7 @@ class Event_Badge_Base(BaseModel):
badge_type: Optional[str] badge_type: Optional[str]
member_type_code: Optional[str] member_type_code: Optional[str]
member_type: Optional[str] member_type: Optional[str]
member_status: Optional[str]
registration_type_code: Optional[str] registration_type_code: Optional[str]
registration_type: Optional[str] registration_type: Optional[str]
@@ -135,7 +136,7 @@ class Event_Badge_Base(BaseModel):
ticket_10_code: Optional[str] ticket_10_code: Optional[str]
agree_to_tc: Optional[bool] # Agree to terms and conditions 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_first_datetime: Optional[datetime.datetime] = None
print_last_datetime: Optional[datetime.datetime] = None print_last_datetime: Optional[datetime.datetime] = None

View File

@@ -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_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) 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] file_count: Optional[int]
priority: Optional[bool] priority: Optional[bool]

View File

@@ -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) 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) registered_since: datetime.datetime = None, # datetime.datetime.now() + datetime.timedelta(seconds=120)
details: bool = True, 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 page: int = 0, # 250 per page from Impexium
event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04) event_id: str = Query(..., min_length=11, max_length=22), # For ISHLT: ZDzTBlevhZs (2022-04)
# Account ID For ISHLT: d8TqXqf1EOg # Account ID For ISHLT: d8TqXqf1EOg
@@ -43,6 +44,7 @@ async def event_import_reg(
log.info('Starting Impexium event registration import...') log.info('Starting Impexium event registration import...')
account_id = commons.x_account_id 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 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) 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 # 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_count = 0
loop_limit = 2500 # 200 loop_limit = 2500 # 200
event_person_li = [] event_person_li = []
event_person_summary_li = [] event_person_summary_li = []
for event_registrant in event_registrant_li: for event_registrant in event_registrant_li:
if loop_count > loop_limit: break 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.info(f'BEGIN: **** *** ** * Impexium registrant import loop #{loop_count} * ** *** ****')
# log.debug(event_registrant) # 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. # 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_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_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_id_v3 = str(e_impexium_event_id)+':'+str(event_registrant.get('recordNumber'))
external_sys_id = event_registrant.get('id') # Impexium UUID for person external_person_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_registration_id = event_registrant.get('recordNumber') # Impexium record number for a registration (guest should match)
event_person_summary_data = {} event_person_summary_data = {}
event_person_summary_data['external_id'] = external_id_v3 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['account_id'] = account_id
event_person_data['event_id'] = event_id event_person_data['event_id'] = event_id
event_person_data['external_id'] = external_id_v3 event_person_data['external_id'] = external_id_v3
event_person_data['external_sys_id'] = external_sys_id event_person_data['external_person_id'] = external_person_id
event_person_data['external_reg_id'] = external_reg_id event_person_data['external_registration_id'] = external_registration_id
# event_person_data['external_id_old'] = external_id_old # event_person_data['external_id_old'] = external_id_old
email = None email = None
address_line_1 = None
address_line_2 = None
address_line_3 = None
city = None city = None
country_subdivision_code = None country_subdivision_code = None
state_province = None state_province = None
@@ -126,16 +188,75 @@ async def event_import_reg(
degrees = None degrees = None
organization_name = None organization_name = None
if inc_membership_fields: membership_code = None
individual_custom_fields_li = get_individual_custom_fields(individual_id=event_registrant.get('id')) 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_profile_result:
if individual_custom_field.get('name') == 'degree': individual_profile_custom_field_li = []
degrees = individual_custom_field.get('value') if individual_profile_custom_field_li := individual_profile_result.get('customFields'):
if individual_custom_field.get('name') == 'organization_name': if isinstance(individual_profile_custom_field_li, list):
organization_name = individual_custom_field.get('value') 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 = {} 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_data['event_person_profile'] = event_person_profile_data 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['enable'] = True
event_badge_data['event_id'] = event_id event_badge_data['event_id'] = event_id
event_badge_data['external_id'] = external_id_v3 event_badge_data['external_id'] = external_id_v3
event_badge_data['external_sys_id'] = external_sys_id event_badge_data['external_person_id'] = external_person_id
event_badge_data['external_reg_id'] = external_reg_id event_badge_data['external_registration_id'] = external_registration_id
# event_badge_data['external_id_old'] = external_id_old # event_badge_data['external_id_old'] = external_id_old
if reg_type_code := event_registrant.get('registrantTypeCode'): event_badge_data['allow_tracking'] = False
event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type 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') # if reg_type_code := event_registrant.get('registrantTypeCode'):
ishlt_nm = ('ANHM', 'INMB', 'NMBR') # event_badge_data['badge_type_code'] = event_registrant.get('registrantTypeCode') # Using this as the badge_type
ishlt_student_m = ('SMBR')
ishlt_student_nm = ('SNMB') # ishlt_m = ('AHMB', 'IMBR', 'MBR')
ishlt_ex_all = ('EX') # ishlt_nm = ('ANHM', 'INMB', 'NMBR')
ishlt_ex_booth = ('EX') # ishlt_student_m = ('SMBR')
ishlt_guest = ('GUEST') # ishlt_student_nm = ('SNMB')
if reg_type_code in ishlt_m: # ishlt_ex_all = ('EX')
event_badge_data['badge_type'] = 'Member' # ishlt_ex_booth = ('EX')
elif reg_type_code in ishlt_nm: # ishlt_guest = ('GUEST')
event_badge_data['badge_type'] = 'Non-Member' # if reg_type_code in ishlt_m:
elif reg_type_code in ishlt_student_m: # event_badge_data['badge_type'] = 'Member'
event_badge_data['badge_type'] = 'Student/Trainee Member' # elif reg_type_code in ishlt_nm:
elif reg_type_code in ishlt_student_nm: # event_badge_data['badge_type'] = 'Non-Member'
event_badge_data['badge_type'] = 'Student/Trainee Non-Member' # elif reg_type_code in ishlt_student_m:
elif reg_type_code in ishlt_ex_all: # event_badge_data['badge_type'] = 'Student/Trainee Member'
event_badge_data['badge_type'] = 'Exhibitor All Access' # elif reg_type_code in ishlt_student_nm:
elif reg_type_code in ishlt_ex_booth: # event_badge_data['badge_type'] = 'Student/Trainee Non-Member'
event_badge_data['badge_type'] = 'Exhibitor Booth Staff' # elif reg_type_code in ishlt_ex_all:
elif reg_type_code in ishlt_guest: # event_badge_data['badge_type'] = 'Exhibitor All Access'
event_badge_data['badge_type'] = 'Guest' # 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: else:
event_badge_data['badge_type'] = event_registrant.get('registrantTypeName') log.info('Inactive membership; expired')
# member_status = 'inactive' # Inactive member; expired
if custom_fields := event_registrant.get('itemizedCustomFields'): event_badge_data['member_status'] = 'inactive' # Inactive member; expired
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
event_badge_data['pronouns'] = event_registrant.get('gender') event_badge_data['pronouns'] = event_registrant.get('gender')
event_badge_data['informal_name'] = event_registrant.get('preferredFirstName') 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_person_data['event_badge'] = event_badge_data 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""" 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 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` FROM `event_person` AS `event_person`
@@ -516,10 +674,10 @@ async def event_check_individual(
individual_profile = individual_profile_result individual_profile = individual_profile_result
event_person_summary_data = {} 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 = {}
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 email = None
city = None city = None
@@ -599,8 +757,8 @@ async def event_check_individual(
# event_badge_data['enable'] = True # event_badge_data['enable'] = True
# event_badge_data['event_id'] = event_id # event_badge_data['event_id'] = event_id
# event_badge_data['external_id'] = external_id_v3 # event_badge_data['external_id'] = external_id_v3
# event_badge_data['external_sys_id'] = external_sys_id # event_badge_data['external_person_id'] = external_person_id
# event_badge_data['external_reg_id'] = external_reg_id # event_badge_data['external_registration_id'] = external_registration_id
event_badge_data['pronouns'] = individual_profile.get('gender') event_badge_data['pronouns'] = individual_profile.get('gender')
event_badge_data['informal_name'] = individual_profile.get('preferredFirstName') 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 # if location: event_badge_data['location'] = location
sql_select_event_person = f""" 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` FROM `event_person` AS `event_person`
WHERE event_person.event_id = :event_id 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*/; /*LIMIT 1*/;
""" """