404 lines
16 KiB
Python
404 lines
16 KiB
Python
from io import BytesIO, TextIOWrapper
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from starlette import status
|
|
from src.depends.services import get_service
|
|
from src.logging.get_logger import get_logger
|
|
from src.model.internal.session import UserSession
|
|
from src.model.view.inst_emp_csv_download_view_model import \
|
|
InstEmpCsvDownloadViewModel
|
|
from src.model.view.inst_emp_csv_upload_view_model import \
|
|
InstEmpCsvUploadViewModel
|
|
from src.model.view.master_mainte_menu_view_model import \
|
|
MasterMainteMenuViewModel
|
|
from src.model.view.table_override_view_model import TableOverrideViewModel
|
|
from src.router.session_router import AuthenticatedRoute
|
|
from src.services.batch_status_service import BatchStatusService
|
|
from src.services.master_mainte_service import MasterMainteService
|
|
from src.services.session_service import set_session
|
|
from src.system_var import constants
|
|
from src.templates import templates
|
|
from src.model.request.master_mainte_csvup import MasterMainteCsvUpModel
|
|
from src.model.request.master_mainte_csvdl import MasterMainteCsvDlModel
|
|
|
|
|
|
logger = get_logger('マスターメンテ')
|
|
|
|
router = APIRouter()
|
|
router.route_class = AuthenticatedRoute
|
|
|
|
#########################
|
|
# Views #
|
|
#########################
|
|
|
|
|
|
@router.get('/masterMainteMenu', response_class=HTMLResponse)
|
|
def menu_view(
|
|
request: Request,
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
menu = MasterMainteMenuViewModel()
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'masterMainteMenu.html',
|
|
{
|
|
'request': request,
|
|
'menu': menu
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.get('/instEmpCsvUL', response_class=HTMLResponse)
|
|
def inst_emp_csv_upload_view(
|
|
request: Request,
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
mainte_csv_up = InstEmpCsvUploadViewModel()
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'instEmpCsvUL.html',
|
|
{
|
|
'request': request,
|
|
'mainte_csv_up': mainte_csv_up
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.post('/instEmpCsvUL', response_class=HTMLResponse)
|
|
async def inst_emp_csv_upload(
|
|
request: Request,
|
|
csv_upload_form: Optional[MasterMainteCsvUpModel] = Depends(MasterMainteCsvUpModel.as_form),
|
|
master_mainte_service: MasterMainteService = Depends(get_service(MasterMainteService)),
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
if csv_upload_form.csv_file.size >= constants.MENTE_CSV_UPLOAD_MAX_FILE_SIZE_BYTE:
|
|
error_message_list = []
|
|
error_message_list.append('選択されたCSVファイルサイズが大きいです。100MB未満にしてください。')
|
|
mainte_csv_up = InstEmpCsvUploadViewModel(
|
|
is_verified=True,
|
|
error_message_list=error_message_list,
|
|
select_function=csv_upload_form.select_function,
|
|
select_table=csv_upload_form.select_table)
|
|
else:
|
|
mainte_csv_up = master_mainte_service.prepare_mainte_csv_up_view(
|
|
TextIOWrapper(BytesIO(await csv_upload_form.csv_file.read()), encoding='utf-8'),
|
|
csv_upload_form.csv_file.filename,
|
|
csv_upload_form)
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'instEmpCsvUL.html',
|
|
{
|
|
'request': request,
|
|
'mainte_csv_up': mainte_csv_up
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.post('/newInst', response_class=HTMLResponse)
|
|
def new_inst_result_view(
|
|
request: Request,
|
|
csv_upload_form: Optional[MasterMainteCsvUpModel] = Depends(MasterMainteCsvUpModel.as_form),
|
|
master_mainte_service: MasterMainteService = Depends(get_service(MasterMainteService)),
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
mainte_csv_up = master_mainte_service.prepare_mainte_new_inst_view(session.user_id, csv_upload_form)
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'instEmpCsvUL.html',
|
|
{
|
|
'request': request,
|
|
'mainte_csv_up': mainte_csv_up
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@ router.get('/instEmpCsvDL', response_class=HTMLResponse)
|
|
def inst_emp_csv_download_view(
|
|
request: Request,
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
mainte_csv_dl = InstEmpCsvDownloadViewModel(
|
|
is_search=False
|
|
)
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'instEmpCsvDL.html',
|
|
{
|
|
'request': request,
|
|
'mainte_csv_dl': mainte_csv_dl
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.post('/download', response_class=HTMLResponse)
|
|
async def inst_emp_csv_download(
|
|
request: Request,
|
|
csv_download_form: Optional[MasterMainteCsvDlModel] = Depends(MasterMainteCsvDlModel.as_form),
|
|
master_mainte_service: MasterMainteService = Depends(get_service(MasterMainteService)),
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
search_result_df = master_mainte_service.search_emp_chg_inst_data(csv_download_form)
|
|
|
|
(result_msg, download_file_url) = master_mainte_service.upload_emp_chg_inst_data_file(
|
|
search_result_df,
|
|
session.user_id,
|
|
csv_download_form.select_table)
|
|
|
|
# 画面表示用のモデル
|
|
mainte_csv_dl = InstEmpCsvDownloadViewModel(
|
|
is_search=True,
|
|
ta_cd=csv_download_form.ta_cd,
|
|
inst_cd=csv_download_form.inst_cd,
|
|
emp_cd=csv_download_form.emp_cd,
|
|
apply_date_from=csv_download_form.apply_date_from,
|
|
start_date_from=csv_download_form.start_date_from,
|
|
start_date_to=csv_download_form.start_date_to,
|
|
end_date_from=csv_download_form.end_date_from,
|
|
end_date_to=csv_download_form.end_date_to,
|
|
create_date_from=csv_download_form.create_date_from,
|
|
create_date_to=csv_download_form.create_date_to,
|
|
update_date_from=csv_download_form.update_date_from,
|
|
update_date_to=csv_download_form.update_date_to,
|
|
select_table=csv_download_form.select_table,
|
|
data_count=search_result_df.size,
|
|
download_file_url=download_file_url,
|
|
file_name=constants.MENTE_CSV_DOWNLOAD_FILE_NAME,
|
|
result_msg=result_msg
|
|
)
|
|
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'instEmpCsvDL.html',
|
|
{
|
|
'request': request,
|
|
'mainte_csv_dl': mainte_csv_dl
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.get('/tableOverride', response_class=HTMLResponse)
|
|
def table_override_view(
|
|
request: Request,
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
table_override = TableOverrideViewModel()
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'tableOverride.html',
|
|
{
|
|
'request': request,
|
|
'table_override': table_override
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|
|
|
|
|
|
@router.post('/tableOverride', response_class=HTMLResponse)
|
|
def table_override_result_view(
|
|
request: Request,
|
|
master_mainte_service: MasterMainteService = Depends(get_service(MasterMainteService)),
|
|
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
|
|
):
|
|
session: UserSession = request.session
|
|
|
|
# マスタメンテメニューへのアクセス権がない場合、ログアウトさせる
|
|
if session.master_mainte_flg != '1':
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
|
|
|
|
# バッチ処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_batch_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN,
|
|
detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE)
|
|
# dump処理中の場合、ログアウトさせる
|
|
if batch_status_service.is_dump_processing():
|
|
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
|
|
|
|
# 画面表示用のモデル
|
|
table_override = master_mainte_service.copy_data_real_to_dummy()
|
|
|
|
# セッション書き換え
|
|
session.update(
|
|
actions=[
|
|
UserSession.last_access_time.set(UserSession.new_last_access_time()),
|
|
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
|
|
]
|
|
)
|
|
set_session(session)
|
|
templates_response = templates.TemplateResponse(
|
|
'tableOverride.html',
|
|
{
|
|
'request': request,
|
|
'table_override': table_override
|
|
},
|
|
headers={'session_key': session.session_key}
|
|
)
|
|
return templates_response
|