114 lines
5.1 KiB
Python
114 lines
5.1 KiB
Python
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() ###
|