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