New link and sync function. It is mostly good to go, but could probably use more testing and improvements.
This commit is contained in:
@@ -1053,6 +1053,104 @@ async def pre_program_data_import(
|
|||||||
# ### END ### Event Importing ### pre_program_person_data_import() ###
|
# ### END ### Event Importing ### pre_program_person_data_import() ###
|
||||||
|
|
||||||
|
|
||||||
|
# ### BEGIN ### Event Presenter Person Link ### presenter_person_link() ###
|
||||||
|
# This is the new import endpoint to run through the presenters for an event, check if they have a person_id, and if not then try to find a person to link to based on their full_name. Currently this is intended for use with LCI to link their presenters with their iMIS IDs.
|
||||||
|
# Required fields: account_id (from commons header), event_id, begin_at, end_at, link_person, sync_person, sync_external_id
|
||||||
|
# Updated 2025-06-24
|
||||||
|
@router.get('/event/{event_id}/presenter/link_sync_person', response_model=Resp_Body_Base)
|
||||||
|
async def presenter_person_link(
|
||||||
|
event_id: str = Path(min_length=11, max_length=22),
|
||||||
|
|
||||||
|
begin_at: int = 0,
|
||||||
|
end_at: int = 20000,
|
||||||
|
|
||||||
|
link_person: bool = True, # At least one of these should be True
|
||||||
|
sync_person: bool = True, # At least one of these should be True
|
||||||
|
sync_external_id: bool = False, # Changing the external_id can break future imports
|
||||||
|
|
||||||
|
commons: Common_Route_Params = Depends(common_route_params),
|
||||||
|
):
|
||||||
|
log.setLevel(logging.INFO)
|
||||||
|
log.debug(locals())
|
||||||
|
|
||||||
|
account_id = commons.x_account_id
|
||||||
|
|
||||||
|
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, response=commons.response)
|
||||||
|
|
||||||
|
if not link_person and not sync_person:
|
||||||
|
log.error('At least one of link_person or sync_person must be True.')
|
||||||
|
return mk_resp(data=None, status_code=400, response=commons.response)
|
||||||
|
|
||||||
|
# Get the event presenter list
|
||||||
|
event_presenter_li_data = sql_select(table_name='v_event_presenter', field_name='event_id', field_value=event_id)
|
||||||
|
if not isinstance(event_presenter_li_data, list):
|
||||||
|
log.error('Something unexpected may have happened while getting the event presenter list.')
|
||||||
|
log.error(event_presenter_li_data)
|
||||||
|
return mk_resp(data=None, status_code=500, response=commons.response)
|
||||||
|
if not event_presenter_li_data:
|
||||||
|
log.info('No event presenters found for this event.')
|
||||||
|
return mk_resp(data=None, status_code=404, response=commons.response)
|
||||||
|
log.info(f'Found {len(event_presenter_li_data)} event presenters for this event.')
|
||||||
|
log.debug(event_presenter_li_data)
|
||||||
|
|
||||||
|
loop_count = 0
|
||||||
|
event_presenter_summary_data_li = []
|
||||||
|
|
||||||
|
for event_presenter_data in event_presenter_li_data:
|
||||||
|
log.info(f'Loop Count: {loop_count}')
|
||||||
|
loop_count = loop_count + 1
|
||||||
|
if loop_count <= begin_at: continue
|
||||||
|
if loop_count > end_at: break
|
||||||
|
|
||||||
|
log.debug(event_presenter_data)
|
||||||
|
|
||||||
|
event_presenter_id = event_presenter_data.get('event_presenter_id', None)
|
||||||
|
event_session_id = event_presenter_data.get('event_session_id', None)
|
||||||
|
event_presentation_id = event_presenter_data.get('event_presentation_id', None)
|
||||||
|
presenter_full_name = event_presenter_data.get('full_name', None)
|
||||||
|
|
||||||
|
person_id = event_presenter_data.get('person_id', None)
|
||||||
|
# Check if the event presenter has a person_id
|
||||||
|
if not person_id and link_person:
|
||||||
|
log.warning(f'Event Presenter ID: {event_presenter_id} does not have a person_id. Attempting to link person.')
|
||||||
|
else:
|
||||||
|
log.info(f'Event Presenter ID: {event_presenter_id} already has a person_id: {person_id}. Skipping.')
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not presenter_full_name:
|
||||||
|
log.warning(f'No presenter full name found for event presenter ID: {event_presenter_id}. Skipping.')
|
||||||
|
continue
|
||||||
|
|
||||||
|
log.info(f'Processing Event Presenter ID: {event_presenter_id} | Full Name: {presenter_full_name}')
|
||||||
|
|
||||||
|
# Process the event presenter with the full name
|
||||||
|
event_presenter_record_results = process_event_presenter_w_full_name(
|
||||||
|
account_id = account_id,
|
||||||
|
event_id = event_id,
|
||||||
|
event_session_id = event_session_id,
|
||||||
|
event_presentation_id = event_presentation_id,
|
||||||
|
presenter_full_name = presenter_full_name,
|
||||||
|
event_presenter_id = event_presenter_id,
|
||||||
|
link_person = link_person,
|
||||||
|
sync_person = sync_person,
|
||||||
|
sync_external_id = sync_external_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not isinstance(event_presenter_record_results, dict):
|
||||||
|
# log.error('Something unexpected may have happened while processing the event presenter with the full name.')
|
||||||
|
# log.error(event_presenter_record_results)
|
||||||
|
# return mk_resp(data=None, status_code=500, response=commons.response)
|
||||||
|
log.warning(f'A matching person full_name was not found.')
|
||||||
|
|
||||||
|
# Append the summary data to the list
|
||||||
|
event_presenter_summary_data_li.append(event_presenter_record_results)
|
||||||
|
log.info(f'Processed {len(event_presenter_summary_data_li)} event presenters.')
|
||||||
|
|
||||||
|
return mk_resp(data=event_presenter_summary_data_li, response=commons.response)
|
||||||
|
# ### END ### Event Presenter Person Link ### presenter_person_link() ###
|
||||||
|
|
||||||
|
|
||||||
# ### BEGIN ### Event Importing ### process_person_data() ###
|
# ### BEGIN ### Event Importing ### process_person_data() ###
|
||||||
# Updated 2025-06-13
|
# Updated 2025-06-13
|
||||||
def process_person_data(account_id, source_code, record):
|
def process_person_data(account_id, source_code, record):
|
||||||
|
|||||||
Reference in New Issue
Block a user