Clean up of Cvent and IDAA person and membership related. The person.status only matters if it is Pending.

This commit is contained in:
Scott Idem
2022-03-16 10:43:57 -04:00
parent 212d69cbe3
commit bcec34670d
5 changed files with 152 additions and 7 deletions

View File

@@ -0,0 +1,113 @@
import datetime, json, pprint, pytz, random, requests, secrets, string, time
from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging, logger_reset, secure_hash_string, verify_secure_hash_string
# ### BEGIN ### API Client: IDAA Methods ### refresh_person_group() ###
# Updated 2022-03-16
@logger_reset
def refresh_person_group(
person_id: int = None,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
data = {}
sql_person_id = ''
if person_id:
data['person_id'] = person_id
sql_person_id = f'AND `person`.id = :person_id'
log.info(f'Updating membership group for Person ID: {person_id}')
else:
log.info('Updating membership group for all person records.')
sql = f"""
UPDATE person
INNER JOIN membership_person ON person.id = membership_person.person_id
SET person.enable = 1, person.group = 'pending_member'
WHERE person.account_id = 13
AND membership_person.end_on >= NOW()
AND person.status = 'pending'
{sql_person_id};
"""
if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING):
log.warning(f'Finished the SQL UPDATE of person table record(s) for pending members')
elif person_update_result is None:
log.warning(f'Finished the SQL UPDATE of person table record(s) for pending members, but no records needed to be updated')
else:
log.warning(f'The SQL UPDATE of person table record(s) failed for pending members')
log.debug(person_update_result)
sql = f"""
UPDATE person
INNER JOIN membership_person ON person.id = membership_person.person_id
SET person.enable = 1, person.group = 'current_member'
WHERE person.account_id = 13
AND membership_person.end_on >= NOW()
AND (person.status IS NULL OR person.status = '' OR person.status = 'approved' OR person.status = 'unknown')
{sql_person_id};
"""
if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING):
log.warning(f'Finished the SQL UPDATE of person table record(s) for current members')
elif person_update_result is None:
log.warning(f'Finished the SQL UPDATE of person table record(s) for current members, but no records needed to be updated')
else:
log.warning(f'The SQL UPDATE of person table record(s) failed for current members')
log.debug(person_update_result)
sql = f"""
UPDATE person
INNER JOIN membership_person ON person.id = membership_person.person_id
SET person.group = 'inactive_member'
WHERE person.account_id = 13
AND membership_person.end_on < NOW()
AND membership_person.end_on >= DATE(NOW() - INTERVAL 4 WEEK)
{sql_person_id};
"""
if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING):
log.warning(f'Finished the SQL UPDATE of person table record(s) for inactive members')
elif person_update_result is None:
log.warning(f'Finished the SQL UPDATE of person table record(s) for inactive members, but no records needed to be updated')
else:
log.warning(f'The SQL UPDATE of person table record(s) failed for inactive members')
log.debug(person_update_result)
sql = f"""
UPDATE person
INNER JOIN membership_person ON person.id = membership_person.person_id
SET person.group = 'suspended_member'
WHERE person.account_id = 13
AND membership_person.end_on < DATE(NOW() - INTERVAL 4 WEEK)
{sql_person_id};
"""
if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING):
log.warning(f'Finished the SQL UPDATE of person table record(s) for suspended members')
elif person_update_result is None:
log.warning(f'Finished the SQL UPDATE of person table record(s) for suspended members, but no records needed to be updated')
else:
log.warning(f'The SQL UPDATE of person table record(s) failed for suspended members')
log.debug(person_update_result)
sql = f"""
UPDATE person
LEFT JOIN membership_person ON person.id = membership_person.person_id
SET person.group = 'not_member'
WHERE person.account_id = 13
AND membership_person.id IS NULL
{sql_person_id};
"""
if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING):
log.warning(f'Finished the SQL UPDATE of person table record(s) for not members')
elif person_update_result is None:
log.warning(f'Finished the SQL UPDATE of person table record(s) for not members, but no records needed to be updated')
else:
log.warning(f'The SQL UPDATE of person table record(s) failed for not members')
log.debug(person_update_result)
return True
# ### END ### API Client: IDAA Methods ### refresh_person_group() ###

View File

@@ -7,6 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging, logger_reset, secure_hash_string, verify_secure_hash_string
from app.methods.c_idaa_methods import refresh_person_group
from app.methods.person_methods import create_person_kiss, get_person_rec_list, get_person_rec_w_external_id, load_person_obj, update_person_kiss
from app.methods.membership_person_methods import create_membership_person_obj, update_membership_person_obj
@@ -465,8 +466,12 @@ def modify_contact_id(contact_id: str, field_list: list=[], custom_field_id: str
def create_update_aether_person(
cvent_contact_id: str,
cvent_contact_obj: dict,
account_id: str,
person_id: str=None,
person_id: str = None,
idaa_refresh_person_group: bool = False,
log_lvl: int = logging.INFO, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
):
log.setLevel(log_lvl)
@@ -783,6 +788,9 @@ def create_update_aether_person(
person_data['membership_person'] = membership_person_data
log.debug(json.dumps(person_data, indent=2, default=str))
if idaa_refresh_person_group:
refresh_person_group(person_id=person_id)
# person_obj = load_person_obj(person_id=person_id, inc_address=True, inc_contact=True, inc_membership_person=True, inc_membership_person_type=True, inc_user=True)
# log.debug(person_obj)