Files
OSIT-AE-API-FastAPI/app/methods/c_idaa_methods.py

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() ###