diff --git a/app/methods/event_badge_methods.py b/app/methods/event_badge_methods.py index 414f10c..60ebcca 100644 --- a/app/methods/event_badge_methods.py +++ b/app/methods/event_badge_methods.py @@ -55,6 +55,46 @@ def load_event_badge_obj( return False log.debug(event_badge_obj) + if return_basic_model: + if event_badge_obj.pronouns_override: + event_badge_obj.pronouns = event_badge_obj.pronouns_override + event_badge_obj.pronouns_override = None + + if event_badge_obj.professional_title_override: + event_badge_obj.professional_title = event_badge_obj.professional_title_override + event_badge_obj.professional_title_override = None + # log.debug(event_badge_obj) + + if event_badge_obj.full_name_override: + event_badge_obj.full_name = event_badge_obj.full_name_override + event_badge_obj.full_name_override = None + + if event_badge_obj.affiliations_override: + event_badge_obj.affiliations = event_badge_obj.affiliations_override + event_badge_obj.affiliations_override = None + + if event_badge_obj.email_override: + event_badge_obj.email = event_badge_obj.email_override + event_badge_obj.email_override = None + + if event_badge_obj.phone_override: + event_badge_obj.phone = event_badge_obj.phone_override + event_badge_obj.phone_override = None + + if event_badge_obj.location_override: + event_badge_obj.location = event_badge_obj.location_override + event_badge_obj.location_override = None + + log.debug(event_badge_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'})) + event_badge_dict = event_badge_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'}) + + try: + event_badge_obj = Event_Badge_Basic_Base(**event_badge_dict) + except ValidationError as e: + log.error(e.json()) + return False + log.debug(event_badge_obj) + # Updated 2022-03-14 if inc_event_badge_template: log.info('Need to include event badge template data...') diff --git a/app/models/event_badge_models.py b/app/models/event_badge_models.py index 17ce591..d21c753 100644 --- a/app/models/event_badge_models.py +++ b/app/models/event_badge_models.py @@ -62,16 +62,11 @@ class Event_Badge_Base(BaseModel): professional_title_override: Optional[str] # Override professional title # title: Optional[str] # NOTE: Phasing out! Use *professional_title* instead. - display_name: Optional[str] # NOTE: Deprecated! Phasing out! Use *full_name_override* instead. - full_name_override: Optional[str] # # Override full_name; Actual name shown on badge and other "public" areas - # BEGIN # Auto created name variations full_name: Optional[str] # title_names given_name middle_name family_name designations + full_name_override: Optional[str] # # Override full_name; Actual name shown on badge and other "public" areas affiliations: Optional[str] # One or more affiliations with organizations, companies, and other groups - # affiliation: Optional[str] # NOTE: Phasing out! Use *affiliations* instead. - # affiliation_name: Optional[str] # NOTE: Phasing out! Use *affiliations* instead. - display_affiliations: Optional[str] # NOTE: Deprecated! Phasing out! Use *affiliations_override* instead. affiliations_override: Optional[str] # Override affiliations email: Optional[str] @@ -100,10 +95,9 @@ class Event_Badge_Base(BaseModel): # full_address: Optional[str] location: Optional[str] # Actual location name shown on badge and other "public" areas + location_override: Optional[str] # Override location location_short: Optional[str] # Auto generated short version location_long: Optional[str] # Auto generated long version - display_location: Optional[str] # NOTE: Deprecated! Phasing out! Use *location_override* instead. - location_override: Optional[str] # Override location # This is updated using SQL triggers and a SQL function # Combines informal, given, middle, family, email @@ -233,6 +227,8 @@ class Event_Badge_Basic_Base(BaseModel): # external_reg_id: Optional[str] # Registration ID generated by external system (should be stable and not change) pronouns: Optional[str] # Preferred pronouns + pronouns_override: Optional[str] # Preferred pronouns + informal_name: Optional[str] title_names: Optional[str] # Title for generation, official position, or professional or academic qualification, other honorific, or other name prefix @@ -242,17 +238,20 @@ class Event_Badge_Basic_Base(BaseModel): designations: Optional[str] # Temporary or long-term designations related to family, relationships, person differentiation (Junior/Senior), location, social status, professional qualifications, legal status, or other name suffix professional_title: Optional[str] # Professional title - display_professional_title: Optional[str] # Override professional title - - display_name: Optional[str] # Override full_name; Actual name shown on badge and other "public" areas + professional_title_override: Optional[str] # Override professional title # BEGIN # Auto created name variations full_name: Optional[str] # title_names given_name middle_name family_name designations + full_name_override: Optional[str] # Override full_name; Actual name shown on badge and other "public" areas affiliations: Optional[str] # One or more affiliations with organizations, companies, and other groups - display_affiliations: Optional[str] # Override affiliations + affiliations_override: Optional[str] # Override affiliations email: Optional[str] + email_override: Optional[str] + + phone: Optional[str] + phone_override: Optional[str] # address_line_1: Optional[str] # address_line_2: Optional[str] @@ -272,10 +271,10 @@ class Event_Badge_Basic_Base(BaseModel): country: Optional[str] # full_address: Optional[str] - # location: Optional[str] # Actual location name shown on badge and other "public" areas + location: Optional[str] # Actual location name shown on badge and other "public" areas + location_override: Optional[str] # Override location # location_short: Optional[str] # Auto generated short version # location_long: Optional[str] # Auto generated long version - display_location: Optional[str] # Override location # NOTE: More badge fields need to be added here once things are cleaned up # badge_type_code: Optional[str] @@ -289,7 +288,7 @@ class Event_Badge_Basic_Base(BaseModel): # other_2: 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 @@ -312,36 +311,6 @@ class Event_Badge_Basic_Base(BaseModel): _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) - #@validator('event_badge_id_random', always=True) - # def event_badge_id_random_copy(cls, v, values, **kwargs): - # log.setLevel(logging.WARNING) - # log.debug(locals()) - - # if values['id_random']: - # return values['id_random'] - # return None - - # @validator('id', always=True) - # def event_badge_id_lookup(cls, v, values, **kwargs): - # if isinstance(v, int) and v > 0: return v - # elif id_random := values.get('id_random'): - # return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') - # return None - - # @validator('event_badge_template_id', always=True) - # def event_badge_template_id_lookup(cls, v, values, **kwargs): - # if isinstance(v, int) and v > 0: return v - # elif id_random := values.get('event_badge_template_id_random'): - # return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge_template') - # return None - - # @validator('event_person_id', always=True) - # def event_person_id_lookup(cls, v, values, **kwargs): - # if isinstance(v, int) and v > 0: return v - # elif id_random := values.get('event_person_id_random'): - # return redis_lookup_id_random(record_id_random=id_random, table_name='event_person') - # return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True diff --git a/app/models/event_exhibit_tracking_models.py b/app/models/event_exhibit_tracking_models.py index 22e1b13..007b934 100644 --- a/app/models/event_exhibit_tracking_models.py +++ b/app/models/event_exhibit_tracking_models.py @@ -58,21 +58,67 @@ class Event_Exhibit_Tracking_Base(BaseModel): # Including convenience data # This is only for convenience. Probably going to keep unless it causes a problem. - event_badge_informal_name: Optional[str] - event_badge_title_names: Optional[str] - event_badge_given_name: Optional[str] - event_badge_middle_name: Optional[str] - event_badge_family_name: Optional[str] - event_badge_full_name: Optional[str] - event_badge_full_name_override: Optional[str] + event_badge_pronouns: Optional[str] = Field( + alias = 'person_pronouns' + ) # Preferred pronouns + event_badge_pronouns_override: Optional[str] = Field( + alias = 'person_pronouns_override' + ) # Override pronouns - event_badge_designations: Optional[str] - event_badge_professional_title: Optional[str] - event_badge_professional_title_override: Optional[str] - event_badge_affiliations: Optional[str] - event_badge_affiliations_override: Optional[str] + event_badge_informal_name: Optional[str] = Field( + alias = 'person_informal_name' + ) - event_badge_email: Optional[str] + event_badge_title_names: Optional[str] = Field( + # alias = 'person_title_names' + ) + event_badge_given_name: Optional[str] = Field( + # alias = 'person_given_name' + ) + event_badge_middle_name: Optional[str] = Field( + # alias = 'person_middle_name' + ) + event_badge_family_name: Optional[str] = Field( + # alias = 'person_family_name' + ) + event_badge_designations: Optional[str] = Field( + # alias = 'person_designations' + ) + + event_badge_professional_title: Optional[str] = Field( + # alias = 'person_pronouns_override' + ) + event_badge_professional_title_override: Optional[str] = Field( + # alias = 'person_professional_title' + ) + + event_badge_full_name: Optional[str] = Field( + # alias = 'person_full_name' + ) + event_badge_full_name_override: Optional[str] = Field( + # alias = 'person_full_name_override' + ) + + event_badge_affiliations: Optional[str] = Field( + # alias = 'person_affiliations' + ) + event_badge_affiliations_override: Optional[str] = Field( + # alias = 'person_affiliations_override' + ) + + event_badge_email: Optional[str] = Field( + # alias = 'person_email' + ) + event_badge_email_override: Optional[str] = Field( + # alias = 'person_email_override' + ) + + event_badge_phone: Optional[str] = Field( + # alias = 'person_phone' + ) + event_badge_phone_override: Optional[str] = Field( + # alias = 'person_phone_override' + ) # event_badge_address_line_1: Optional[str] # event_badge_address_line_2: Optional[str] @@ -80,17 +126,27 @@ class Event_Exhibit_Tracking_Base(BaseModel): # event_badge_city: Optional[str] + # event_badge_county: Optional[str] # NOTE: This is for a county within a state or province + # event_badge_country_subdivision_code: Optional[str] - # event_badge_state_province_abb: Optional[str] # event_badge_state_province: Optional[str] + # event_badge_state_province_abb: Optional[str] # event_badge_postal_code: Optional[str] - event_badge_country_alpha_2_code: Optional[str] - event_badge_country: Optional[str] + event_badge_country_alpha_2_code: Optional[str] = Field( + # alias = 'person_country_alpha_2_code' + ) + event_badge_country: Optional[str] = Field( + # alias = 'person_country' + ) - # event_badge_location: Optional[str] - event_badge_location_override: Optional[str] + event_badge_location: Optional[str] = Field( + # alias = 'person_location' + ) + event_badge_location_override: Optional[str] = Field( + # alias = 'person_location_override' + ) event_person_informal_name: Optional[str] event_person_given_name: Optional[str] diff --git a/app/routers/event_exhibit_tracking.py b/app/routers/event_exhibit_tracking.py index b64a4f1..2901e82 100644 --- a/app/routers/event_exhibit_tracking.py +++ b/app/routers/event_exhibit_tracking.py @@ -1,7 +1,7 @@ import datetime, time from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status from fastapi.responses import FileResponse -from pydantic import BaseModel, EmailStr, Field +from pydantic import BaseModel, EmailStr, Field, ValidationError from typing import Dict, List, Optional, Set, Union from app.lib_general import create_export_file, return_full_tmp_path, log, logging, common_route_params, Common_Route_Params @@ -237,7 +237,7 @@ async def get_event_exhibit_obj_tracking_list( commons: Common_Route_Params = Depends(common_route_params), ): - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass @@ -259,77 +259,128 @@ async def get_event_exhibit_obj_tracking_list( # inc_event_person = inc_event_person, ): event_exhibit_tracking_result_list.append(load_event_exhibit_tracking_result) + event_exhibit_tracking_obj = load_event_exhibit_tracking_result - data_dict = load_event_exhibit_tracking_result.dict(by_alias=True, exclude_unset=False) + if event_exhibit_tracking_obj.event_badge_pronouns_override: + event_exhibit_tracking_obj.event_badge_pronouns = event_exhibit_tracking_obj.event_badge_pronouns_override + event_exhibit_tracking_obj.event_badge_pronouns_override = None - data_dict['person_informal_name'] = data_dict.pop('event_badge_informal_name') - data_dict['person_title_names'] = data_dict.pop('event_badge_title_names') + if event_exhibit_tracking_obj.event_badge_professional_title_override: + event_exhibit_tracking_obj.event_badge_professional_title = event_exhibit_tracking_obj.event_badge_professional_title_override + event_exhibit_tracking_obj.event_badge_professional_title_override = None + # log.debug(event_exhibit_tracking_obj) - data_dict['person_given_name'] = data_dict.pop('event_badge_given_name') - data_dict['person_middle_name'] = data_dict.pop('event_badge_middle_name') - data_dict['person_family_name'] = data_dict.pop('event_badge_family_name') + if event_exhibit_tracking_obj.event_badge_full_name_override: + event_exhibit_tracking_obj.event_badge_full_name = event_exhibit_tracking_obj.event_badge_full_name_override + event_exhibit_tracking_obj.event_badge_full_name_override = None - data_dict['person_designations'] = data_dict.pop('event_badge_designations') - data_dict['person_professional_title'] = data_dict.pop('event_badge_professional_title') - data_dict['person_professional_title_override'] = data_dict.pop('event_badge_professional_title_override') + if event_exhibit_tracking_obj.event_badge_affiliations_override: + event_exhibit_tracking_obj.event_badge_affiliations = event_exhibit_tracking_obj.event_badge_affiliations_override + event_exhibit_tracking_obj.event_badge_affiliations_override = None - data_dict['person_full_name'] = data_dict.pop('event_badge_full_name') - data_dict['person_full_name_override'] = data_dict.pop('event_badge_full_name_override') + if event_exhibit_tracking_obj.event_badge_email_override: + event_exhibit_tracking_obj.event_badge_email = event_exhibit_tracking_obj.event_badge_email_override + event_exhibit_tracking_obj.event_badge_email_override = None - data_dict['person_affiliations'] = data_dict.pop('event_badge_affiliations') - data_dict['person_affiliations_override'] = data_dict.pop('event_badge_affiliations_override') + if event_exhibit_tracking_obj.event_badge_phone_override: + event_exhibit_tracking_obj.event_badge_phone = event_exhibit_tracking_obj.event_badge_phone_override + event_exhibit_tracking_obj.event_badge_phone_override = None - data_dict['person_email'] = data_dict.pop('event_badge_email') + if event_exhibit_tracking_obj.event_badge_location_override: + event_exhibit_tracking_obj.event_badge_location = event_exhibit_tracking_obj.event_badge_location_override + event_exhibit_tracking_obj.event_badge_location_override = None - if 'event_badge_address_line_1' in data_dict: - data_dict['person_address_line_1'] = data_dict.pop('event_badge_address_line_1') - else: data_dict['person_address_line_1'] = None - if 'event_badge_address_line_2' in data_dict: - data_dict['person_address_line_2'] = data_dict.pop('event_badge_address_line_2') - else: data_dict['person_address_line_2'] = None - if 'event_badge_address_line_3' in data_dict: - data_dict['person_address_line_3'] = data_dict.pop('event_badge_address_line_3') - else: data_dict['person_address_line_3'] = None + # log.debug(event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'})) + # event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=True, exclude={'pronouns_override', 'professional_title_override', 'full_name_override', 'affiliations_override', 'email_override', 'phone_override', 'location_override'}) + event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=False) + + # try: + # event_exhibit_tracking_obj = Event_Badge_Basic_Base(**event_badge_dict) + # except ValidationError as e: + # log.error(e.json()) + # return False + + data_dict = event_exhibit_tracking_dict + # data_dict = event_exhibit_tracking_obj.dict(by_alias=True, exclude_unset=False) + + + data_dict['exhibit_tracking_id'] = data_dict.pop('event_exhibit_tracking_id_random', None) + data_dict['badge_id'] = data_dict.pop('event_badge_id_random', None) + + data_dict['person_informal_name'] = data_dict.pop('event_badge_informal_name', None) + data_dict['person_title_names'] = data_dict.pop('event_badge_title_names', None) + + data_dict['person_given_name'] = data_dict.pop('event_badge_given_name', None) + data_dict['person_middle_name'] = data_dict.pop('event_badge_middle_name', None) + data_dict['person_family_name'] = data_dict.pop('event_badge_family_name', None) + + data_dict['person_designations'] = data_dict.pop('event_badge_designations', None) + data_dict['person_professional_title'] = data_dict.pop('event_badge_professional_title', None) + # data_dict['person_professional_title_override'] = data_dict.pop('event_badge_professional_title_override', None) + + data_dict['person_full_name'] = data_dict.pop('event_badge_full_name', None) + # data_dict['person_full_name_override'] = data_dict.pop('event_badge_full_name_override', None) + + data_dict['person_affiliations'] = data_dict.pop('event_badge_affiliations', None) + # data_dict['person_affiliations_override'] = data_dict.pop('event_badge_affiliations_override', None) + + data_dict['person_email'] = data_dict.pop('event_badge_email', None) + + # if 'event_badge_address_line_1' in data_dict: + # data_dict['person_address_line_1'] = data_dict.pop('event_badge_address_line_1', None) + # else: data_dict['person_address_line_1'] = None + # if 'event_badge_address_line_2' in data_dict: + # data_dict['person_address_line_2'] = data_dict.pop('event_badge_address_line_2', None) + # else: data_dict['person_address_line_2'] = None + # if 'event_badge_address_line_3' in data_dict: + # data_dict['person_address_line_3'] = data_dict.pop('event_badge_address_line_3', None) + # else: data_dict['person_address_line_3'] = None if 'event_badge_city' in data_dict: - data_dict['person_city'] = data_dict.pop('event_badge_city') + data_dict['person_city'] = data_dict.pop('event_badge_city', None) else: data_dict['person_city'] = None if 'event_badge_country_subdivision_code' in data_dict: - data_dict['person_country_subdivision_code'] = data_dict.pop('event_badge_country_subdivision_code') + data_dict['person_country_subdivision_code'] = data_dict.pop('event_badge_country_subdivision_code', None) else: data_dict['person_country_subdivision_code'] = None if 'event_badge_state_province_abb' in data_dict: - data_dict['person_state_province_abb'] = data_dict.pop('event_badge_state_province_abb') + data_dict['person_state_province_abb'] = data_dict.pop('event_badge_state_province_abb', None) else: data_dict['person_state_province_abb'] = None if 'event_badge_state_province' in data_dict: - data_dict['person_state_province'] = data_dict.pop('event_badge_state_province') + data_dict['person_state_province'] = data_dict.pop('event_badge_state_province', None) else: data_dict['person_state_province'] = None if 'event_badge_postal_code' in data_dict: - data_dict['person_postal_code'] = data_dict.pop('event_badge_postal_code') + data_dict['person_postal_code'] = data_dict.pop('event_badge_postal_code', None) else: data_dict['person_postal_code'] = None if 'event_badge_country_alpha_2_code' in data_dict: - data_dict['person_country_alpha_2_code'] = data_dict.pop('event_badge_country_alpha_2_code') + data_dict['person_country_alpha_2_code'] = data_dict.pop('event_badge_country_alpha_2_code', None) else: data_dict['person_country_alpha_2_code'] = None if 'event_badge_country' in data_dict: - data_dict['person_country'] = data_dict.pop('event_badge_country') + data_dict['person_country'] = data_dict.pop('event_badge_country', None) else: data_dict['person_country'] = None if 'event_badge_location' in data_dict: - data_dict['person_location'] = data_dict.pop('event_badge_location') + data_dict['person_location'] = data_dict.pop('event_badge_location', None) else: data_dict['person_location'] = None - if 'event_badge_location_override' in data_dict: - data_dict['person_location_override'] = data_dict.pop('event_badge_location_override') - else: data_dict['person_location_override'] = None + # if 'event_badge_location_override' in data_dict: + # data_dict['person_location_override'] = data_dict.pop('event_badge_location_override', None) + # else: data_dict['person_location_override'] = None + + log.debug(data_dict) data_dict_list_for_export.append(data_dict) else: event_exhibit_tracking_result_list.append(None) + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + column_name_li = [ - 'event_exhibit_tracking_id_random', - 'event_badge_id_random', + # 'event_exhibit_tracking_id_random', + 'exhibit_tracking_id', + # 'event_badge_id_random', + 'badge_id', # 'person_pronouns', 'person_informal_name', @@ -341,32 +392,32 @@ async def get_event_exhibit_obj_tracking_list( 'person_designations', 'person_professional_title', - 'person_professional_title_override', + # 'person_professional_title_override', 'person_full_name', - 'person_full_name_override', + # 'person_full_name_override', 'person_affiliations', - 'person_affiliations_override', + # 'person_affiliations_override', 'person_email', - # 'person_address_line_1', - # 'person_address_line_2', - # 'person_address_line_3', + # # 'person_address_line_1', + # # 'person_address_line_2', + # # 'person_address_line_3', - # 'person_city', + # # 'person_city', - # 'person_country_subdivision_code', 'person_state_province_abb', - # 'person_state_province', + # # 'person_country_subdivision_code', 'person_state_province_abb', + # # 'person_state_province', - # 'person_postal_code', + # # 'person_postal_code', 'person_country_alpha_2_code', 'person_country', 'person_location', - 'person_location_override', + # 'person_location_override', 'priority', 'sort', @@ -377,6 +428,9 @@ async def get_event_exhibit_obj_tracking_list( 'updated_on', ] + log.debug(column_name_li) + log.debug(data_dict_list_for_export) + datetime_format='%Y-%m-%d_%H%M' # current_datetime = datetime.datetime.now() # Servers timezone (Eastern) @@ -388,7 +442,7 @@ async def get_event_exhibit_obj_tracking_list( elif file_type == 'Excel': filename_w_ext = filename+'.xlsx' - if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='event_exhibit', filename=filename, export_type=file_type): + if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='event_exhibit', filename=filename, rm_id=False, export_type=file_type): tmp_file_path = result else: log.error('Something went wrong while creating or saving the export file')