133 lines
6.4 KiB
Python
133 lines
6.4 KiB
Python
# /data/gyber/apps/web/gyber/db/group.py
|
|
import logging
|
|
from django.db import connections, DatabaseError, InterfaceError, OperationalError
|
|
from .base import execute_procedure, dictfetchall
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# --- 그룹(Group/부서) 관련 함수 ---
|
|
|
|
def get_all_groups():
|
|
"""모든 그룹(부서) 목록을 이름순으로 조회합니다."""
|
|
return execute_procedure('sp_get_all_groups', fetch_mode='all_dicts')
|
|
|
|
def get_group_by_id(group_id):
|
|
"""특정 그룹(부서) ID로 상세 정보를 조회합니다 (관리자 정보 포함)."""
|
|
logger.debug(f"Calling sp_get_group_by_id with group_id: {group_id}")
|
|
result = execute_procedure('sp_get_group_by_id', [group_id], fetch_mode='one_dict')
|
|
if not result:
|
|
logger.warning(f"sp_get_group_by_id did not find group with ID: {group_id}")
|
|
return result
|
|
|
|
def add_new_group(admin_user_id, actor_description, group_name, manager_user_id):
|
|
"""
|
|
새로운 그룹(부서)을 추가합니다.
|
|
프로시저: sp_add_group (OUT: p_new_group_id(index 4), p_result_message(index 5))
|
|
Returns:
|
|
tuple: (success: bool, message: str, new_group_id: int|None)
|
|
"""
|
|
params = [
|
|
admin_user_id, actor_description, group_name, manager_user_id,
|
|
None, # OUT p_new_group_id placeholder
|
|
None # OUT p_result_message placeholder
|
|
]
|
|
call_params = params[:-2]
|
|
logger.debug(f"Calling sp_add_group with params (excluding OUT): {call_params}")
|
|
try:
|
|
with connections['default'].cursor() as cursor:
|
|
cursor.callproc('sp_add_group', params)
|
|
# OUT 파라미터 가져오기
|
|
cursor.execute("SELECT @_sp_add_group_4, @_sp_add_group_5;")
|
|
result = cursor.fetchone()
|
|
if result:
|
|
new_group_id = result[0]
|
|
message = result[1]
|
|
if message and message.endswith('추가 완료.') and new_group_id is not None:
|
|
logger.info(f"sp_add_group succeeded: {message} (New ID: {new_group_id})")
|
|
return True, message, new_group_id
|
|
else:
|
|
logger.warning(f"sp_add_group reported an issue: {message} (New ID: {new_group_id})")
|
|
return False, message if message else "그룹 추가 실패", None
|
|
else:
|
|
logger.error("Failed to retrieve OUT parameters from sp_add_group.")
|
|
return False, "프로시저 결과(OUT 파라미터)를 가져오는데 실패했습니다.", None
|
|
except (DatabaseError, InterfaceError, OperationalError) as e:
|
|
logger.error(f"Database error calling sp_add_group: {e}", exc_info=True)
|
|
return False, f"데이터베이스 오류: {e}", None
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error calling sp_add_group: {e}", exc_info=True)
|
|
return False, f"알 수 없는 오류: {e}", None
|
|
|
|
def update_group(admin_user_id, actor_description, group_id, group_name, manager_user_id):
|
|
"""
|
|
그룹(부서) 정보를 수정합니다.
|
|
프로시저: sp_update_group (OUT: p_result_message - index 5)
|
|
Returns:
|
|
tuple: (success: bool, message: str)
|
|
"""
|
|
params = [
|
|
admin_user_id, actor_description, group_id, group_name, manager_user_id,
|
|
None # OUT p_result_message placeholder
|
|
]
|
|
call_params = params[:-1]
|
|
logger.debug(f"Calling sp_update_group for group_id {group_id} with params (excluding OUT): {call_params}")
|
|
try:
|
|
with connections['default'].cursor() as cursor:
|
|
cursor.callproc('sp_update_group', params)
|
|
# OUT 파라미터 가져오기
|
|
cursor.execute("SELECT @_sp_update_group_5;")
|
|
result = cursor.fetchone()
|
|
if result:
|
|
message = result[0]
|
|
if message and message.endswith('정보 수정 완료.'):
|
|
logger.info(f"sp_update_group succeeded: {message}")
|
|
return True, message
|
|
else:
|
|
logger.warning(f"sp_update_group reported an issue: {message}")
|
|
return False, message if message else "그룹 수정 실패"
|
|
else:
|
|
logger.error("Failed to retrieve OUT parameter from sp_update_group.")
|
|
return False, "프로시저 결과(OUT 파라미터)를 가져오는데 실패했습니다."
|
|
except (DatabaseError, InterfaceError, OperationalError) as e:
|
|
logger.error(f"Database error calling sp_update_group: {e}", exc_info=True)
|
|
return False, f"데이터베이스 오류: {e}"
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error calling sp_update_group: {e}", exc_info=True)
|
|
return False, f"알 수 없는 오류: {e}"
|
|
|
|
def delete_group(admin_user_id, actor_description, group_id):
|
|
"""
|
|
그룹(부서)을 삭제합니다.
|
|
프로시저: sp_delete_group (OUT: p_result_message - index 3)
|
|
Returns:
|
|
tuple: (success: bool, message: str)
|
|
"""
|
|
params = [
|
|
admin_user_id, actor_description, group_id,
|
|
None # OUT p_result_message placeholder
|
|
]
|
|
call_params = params[:-1]
|
|
logger.debug(f"Calling sp_delete_group for group_id {group_id} with params (excluding OUT): {call_params}")
|
|
try:
|
|
with connections['default'].cursor() as cursor:
|
|
cursor.callproc('sp_delete_group', params)
|
|
# OUT 파라미터 가져오기
|
|
cursor.execute("SELECT @_sp_delete_group_3;")
|
|
result = cursor.fetchone()
|
|
if result:
|
|
message = result[0]
|
|
if message and message.endswith('삭제 완료.'):
|
|
logger.info(f"sp_delete_group succeeded: {message}")
|
|
return True, message
|
|
else: # 멤버 존재 등
|
|
logger.warning(f"sp_delete_group reported an issue: {message}")
|
|
return False, message if message else "그룹 삭제 실패"
|
|
else:
|
|
logger.error("Failed to retrieve OUT parameter from sp_delete_group.")
|
|
return False, "프로시저 결과(OUT 파라미터)를 가져오는데 실패했습니다."
|
|
except (DatabaseError, InterfaceError, OperationalError) as e:
|
|
logger.error(f"Database error calling sp_delete_group: {e}", exc_info=True)
|
|
return False, f"데이터베이스 오류: {e}"
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error calling sp_delete_group: {e}", exc_info=True)
|
|
return False, f"알 수 없는 오류: {e}" |