feat: リポジトリ修正など

This commit is contained in:
高木要 2023-07-11 16:51:42 +09:00
parent f5b4628f71
commit e690661168
17 changed files with 530 additions and 748 deletions

View File

@ -90,14 +90,7 @@ def inst_emp_csv_upload_view(
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING)
# 画面表示用のモデル
mainte_csv_up = InstEmpCsvUploadViewModel(
# is_verified=False,
# select_function="",
# select_table="",
# new_inst_emp="",
# dialog_msg="",
# error_list=[]
)
mainte_csv_up = InstEmpCsvUploadViewModel()
# セッション書き換え
session.update(
actions=[

View File

@ -1,54 +1,46 @@
import csv
from io import TextIOWrapper
from datetime import datetime
from abc import ABCMeta, abstractmethod
from src.system_var import constants
from src.repositories.mente_exist_inst_cd_repository import MenteExistInstCdRepository
from src.repositories.mente_exist_bu_cd_repository import MenteExistBuCdRepository
from src.repositories.mente_exist_emp_cd_repository import MenteExistEmpCdRepository
from src.repositories.mente_exist_dummy_data_repository import MenteExistDummyDataRepository
from src.repositories.mente_exist_real_data_repository import MenteExistRealDataRepository
from src.repositories.mente_exist_emp_chg_inst_repository import MenteExistEmpChgInstRepository
from src.model.request.master_mainte_csvup import MasterMainteCsvUpModel
from src.repositories.mst_inst_repository import MstInstRepository
from src.repositories.bu_master_cd_repository import BuMasterRepository
from src.repositories.emp_master_repository import EmpMasterRepository
from src.repositories.emp_chg_inst_repository import EmpChgInstRepository
from src.logging.get_logger import get_logger
logger = get_logger('マスターメンテ')
class MasterMainteCSVItem(metaclass=ABCMeta):
select_table: str
csv_row: list[str]
table_name: str
line_num: str
csv_row: list[str] # dictで持つかどうかは要検討
inst_cd: str
ta_cd: str
emp_cd: str
inst_cd_repository: MenteExistInstCdRepository
emp_cd_repository: MenteExistEmpCdRepository
bu_cd_repository: MenteExistBuCdRepository
dummy_data_repository: MenteExistDummyDataRepository
real_data_repository: MenteExistRealDataRepository
emp_chg_inst_repository: MenteExistEmpChgInstRepository
mst_inst_repository: MstInstRepository
emp_master_repository: EmpMasterRepository
bu_master_repository: BuMasterRepository
emp_chginst_repository: EmpChgInstRepository
def __init__(
self,
csv_row: list[str],
select_table: str,
table_name: str,
line_num: str,
inst_cd_repository: MenteExistInstCdRepository,
emp_cd_repository: MenteExistEmpCdRepository,
bu_cd_repository: MenteExistBuCdRepository,
dummy_data_repository: MenteExistDummyDataRepository,
real_data_repository: MenteExistRealDataRepository,
emp_chg_inst_repository: MenteExistEmpChgInstRepository
mst_inst_repository: MstInstRepository,
emp_master_repository: EmpMasterRepository,
bu_master_repository: BuMasterRepository,
emp_chginst_repository: EmpChgInstRepository
):
self.select_table = select_table # ダミー or 本番
self.csv_row = csv_row # CSVの1行
self.line_num = line_num # CSVの行数
self.inst_cd_repository = inst_cd_repository
self.emp_cd_repository = emp_cd_repository
self.bu_cd_repository = bu_cd_repository
self.dummy_data_repository = dummy_data_repository
self.real_data_repository = real_data_repository
self.emp_chg_inst_repository = emp_chg_inst_repository
self.csv_row = csv_row
self.table_name = table_name
self.line_num = line_num
self.mst_inst_repository = mst_inst_repository
self.emp_master_repository = emp_master_repository
self.bu_master_repository = bu_master_repository
self.emp_chginst_repository = emp_chginst_repository
def validate(self) -> list[list[str]]:
def validate(self) -> list[str]:
"""
項目のバリデーションを行うテンプレートメソッド\n
各チェックロジックはサブクラスで実装する
@ -64,7 +56,7 @@ class MasterMainteCSVItem(metaclass=ABCMeta):
# BuCd存在チェック
error_list.extend(self.check_bu_cd_exists())
# 適用開始日 < 適用終了日、実在日チェック
# error_list.extend(self.check_existing_date())
error_list.extend(self.check_existing_date())
# 項目数チェック
error_list.extend(self.check_item_count())
# データ存在チェック
@ -74,28 +66,70 @@ class MasterMainteCSVItem(metaclass=ABCMeta):
error_list = [error for error in error_list if len(error) != 0]
return error_list
# protected?
def check_csv_item_count(self, item_count: int) -> list[str]:
error_list = []
for col_num, row in enumerate(self.csv_row, start=1):
if col_num > item_count and row is not None and len(row) > 0:
error_list.append([self.line_num, '', constants.CSV_UP_ITEM_CNT_ERR, 'の項目数が一致しません。項目数を確認してください。'])
error_list.append(f'{self.line_num}行目の項目数が一致しません。項目数を確認してください。')
break
return error_list
def emp_chg_inst_count(self, start_date: str):
table_name = 'src05.emp_chg_inst_wrk' if self.select_table == 'dummy' else 'src05.emp_chg_inst'
# pythonは子クラスのメンバも親から呼べる
return self.emp_chg_inst_repository.fetch_count(self.inst_cd, self.ta_cd, start_date, table_name)
return self.emp_chginst_repository.fetch_count(self.inst_cd, self.ta_cd, start_date, self.table_name)
def is_error_emp_cd(self, start_date: str) -> bool:
if start_date is None or len(start_date) == 0:
return False
if self.emp_cd_repository.fetch_count(self.emp_cd, start_date, start_date) == 0:
if self.emp_master_repository.fetch_count(self.emp_cd, start_date, start_date) == 0:
return True
return False
def is_exist_inst_cd(self) -> bool:
return True if self.mst_inst_repository.fetch_count(self.inst_cd) > 0 else False
def is_exist_bu_cd(self) -> bool:
return True if self.bu_master_repository.fetch_count(self.bu_cd) > 0 else False
def make_require_error_message(self, line_num: str, col_name: str) -> str:
return f'{line_num}行目の{col_name}が入力されておりません。'
def __parse_str_to_date(self, check_date: str) -> tuple[bool, datetime]:
try:
check_date_time: datetime = datetime.strptime(check_date, '%Y%m%d')
except Exception as e:
logger.exception(f'適用期間の日付が不正{e}')
return (False, None)
try:
reverse_check_date: str = check_date_time.strftime('%Y%m%d')
except Exception as e:
logger.exception(f'適用期間の日付が不正{e}')
return (False, None)
if check_date != reverse_check_date:
return (False, None)
return (True, check_date_time)
def check_term_date(self,
start_date: str,
end_date: str,
start_date_col_name: str,
end_date_col_name: str) -> tuple[list[str], datetime, datetime]:
error_list = []
if start_date is not None:
(result, start_date_time) = self.__parse_str_to_date(start_date)
if result is False:
error_list.append(f'{self.line_num}行目の{start_date_col_name}が実在しない日付になっています。')
if end_date is not None:
(result, end_date_time) = self.__parse_str_to_date(end_date)
if result is False:
error_list.append(f'{self.line_num}行目の{end_date_col_name}が実在しない日付になっています。')
return (error_list, start_date_time, end_date_time)
@abstractmethod
def csv_row_data(self) -> dict:
pass
@ -107,34 +141,27 @@ class MasterMainteCSVItem(metaclass=ABCMeta):
pass
...
@abstractmethod
def check_inst_cd_exists(self) -> list[str]:
error_list = []
inst_cd_count = self.inst_cd_repository.fetch_count(self.inst_cd)
if inst_cd_count == 0:
# 親クラスに持った方がいいので即値指定
error_list.append([self.line_num, '施設コード', constants.CSV_UP_NOT_EXIST_INST_CD_ERR, ''])
return error_list
"""InstCD存在チェック"""
pass
...
@abstractmethod
def check_emp_cd_exists(self) -> list[str]:
"""MUID存在チェック"""
pass
...
@abstractmethod
def check_bu_cd_exists(self) -> list[str]:
"""BuCd存在チェック"""
error_list = []
bu_cd_count = self.bu_cd_repository.fetch_count(self.bu_cd)
if bu_cd_count == 0:
# 親クラスに持った方がいいので即値指定
error_list.append([self.line_num, 'ビジネスユニットコード', constants.CSV_UP_NOT_EXIST_BU_CD_ERR, ''])
return error_list
pass
...
@abstractmethod
def check_existing_date(self) -> list[str]:
"""適用開始日 < 適用終了日、実在日チェック"""
pass
@abstractmethod
def check_item_count(self) -> list[str]:
@ -146,6 +173,7 @@ class MasterMainteCSVItem(metaclass=ABCMeta):
def check_data_exists(self) -> list[str]:
"""データ存在チェック"""
pass
...
class MasterMainteNewInstEmpCSVItem(MasterMainteCSVItem):
@ -156,32 +184,28 @@ class MasterMainteNewInstEmpCSVItem(MasterMainteCSVItem):
# emp_cd: str # d
emp_name_family: str # e
emp_name_first: str # f
bu_cd: str # g
# bu_cd: str # g
start_date: str # h
end_date: str # i
def __init__(
self,
csv_row: list[str],
select_table: str,
table_name: str,
line_num: str,
inst_cd_repository: MenteExistInstCdRepository,
emp_cd_repository: MenteExistEmpCdRepository,
bu_cd_repository: MenteExistBuCdRepository,
dummy_data_repository: MenteExistDummyDataRepository,
real_data_repository: MenteExistRealDataRepository,
emp_chg_inst_repository: MenteExistEmpChgInstRepository
mst_inst_repository: MstInstRepository,
emp_master_repository: EmpMasterRepository,
bu_master_repository: BuMasterRepository,
emp_chginst_repository: EmpChgInstRepository
):
super().__init__(
csv_row,
select_table,
table_name,
line_num,
inst_cd_repository,
emp_cd_repository,
bu_cd_repository,
dummy_data_repository,
real_data_repository,
emp_chg_inst_repository
mst_inst_repository,
emp_master_repository,
bu_master_repository,
emp_chginst_repository
)
self.inst_cd = self.csv_row[constants.CSV_NEW_INST_CD_COL_NO] # a
self.inst_name = self.csv_row[constants.CSV_NEW_INST_NAME_COL_NO] # b
@ -199,45 +223,66 @@ class MasterMainteNewInstEmpCSVItem(MasterMainteCSVItem):
def check_require(self) -> list[str]:
error_list = []
if len(self.inst_cd) == 0:
error_list.append([self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_INST_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。']) # エラーコードを入れないと、出力制御が難しい。
# メッセージの一部を配列に混ぜるかどうか検討
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_INST_CD_COL_NO]))
if len(self.ta_cd) == 0:
error_list.append(
[self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_TA_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_TA_CD_COL_NO]))
if len(self.emp_cd) == 0:
error_list.append(
[self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_EMP_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_EMP_CD_COL_NO]))
if len(self.bu_cd) == 0:
error_list.append(
[self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_BU_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_BU_CD_COL_NO]))
if len(self.start_date) == 0:
error_list.append(
[self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_START_DATE],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_START_DATE]))
if len(self.end_date) == 0:
error_list.append(
[self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_END_DATE],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_END_DATE]))
return error_list
def check_inst_cd_exists(self) -> list[str]:
error_list = []
if super().is_exist_inst_cd() is False:
error_list.append(
f'{self.line_num}行目の{constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_INST_CD_COL_NO]}\
は施設マスタに存在しないコードです')
return error_list
def check_emp_cd_exists(self) -> list[str]:
error_list = []
if self.start_date is None or len(self.start_date) == 0:
return error_list
if super().is_error_emp_cd(self.start_date) is True:
error_list.append([self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_EMP_CD_COL_NO],
constants.CSV_UP_NOT_EXIST_EMP_CD_ERR, ''])
error_list.append(f'{self.line_num}行目の{constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_EMP_CD_COL_NO]}\
は従業員マスタに存在しない もしくは 適用期間外のIDです')
return error_list
def check_bu_cd_exists(self) -> list[str]:
error_list = []
if super().is_exist_bu_cd() is False:
error_list.append(f'{self.line_num}行目の{constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_BU_CD_COL_NO]}\
はビジネスユニットマスタに存在しないコードです')
return error_list
def check_existing_date(self) -> list[str]:
error_list = []
(error_list, start_date_time, end_date_time) = super().check_term_date(
self.start_date,
self.end_date,
constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_START_DATE],
constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_END_DATE])
if len(error_list) > 0 or self.start_date is None or self.end_date is None:
return error_list
if start_date_time > end_date_time:
error_list.append(f'{self.line_num}行目の{constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_START_DATE]}\
{constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_END_DATE]}よりも後の日付になっています')
return error_list
def check_item_count(self) -> list[str]:
@ -246,17 +291,14 @@ class MasterMainteNewInstEmpCSVItem(MasterMainteCSVItem):
def check_data_exists(self) -> list[str]:
error_list = []
if super().emp_chg_inst_count(self.start_date) > 0:
error_list.append([self.line_num, '', constants.CSV_UP_NEW_DATA_DUP_ERR, ''])
error_list.append(f'{self.line_num}行目の施設コード、領域コード、適用開始日がすべて同一のデータが既に登録されています。')
return error_list
def check_existing_date(self) -> list[str]:
return []
class MasterMainteChangeInstEmpCSVItem(MasterMainteCSVItem):
"""施設担当者変更登録CSV"""
bu_cd: str # a
# bu_cd: str # a
bu_name: str # b
org_cd: str # c
org_short_name: str # d
@ -274,25 +316,21 @@ class MasterMainteChangeInstEmpCSVItem(MasterMainteCSVItem):
def __init__(
self,
csv_row: list[str],
select_table: str,
table_name: str,
line_num: str,
inst_cd_repository: MenteExistInstCdRepository,
emp_cd_repository: MenteExistEmpCdRepository,
bu_cd_repository: MenteExistBuCdRepository,
dummy_data_repository: MenteExistDummyDataRepository,
real_data_repository: MenteExistRealDataRepository,
emp_chg_inst_repository: MenteExistEmpChgInstRepository
mst_inst_repository: MstInstRepository,
emp_master_repository: EmpMasterRepository,
bu_master_repository: BuMasterRepository,
emp_chginst_repository: EmpChgInstRepository
):
super().__init__(
csv_row,
select_table,
table_name,
line_num,
inst_cd_repository,
emp_cd_repository,
bu_cd_repository,
dummy_data_repository,
real_data_repository,
emp_chg_inst_repository
mst_inst_repository,
emp_master_repository,
bu_master_repository,
emp_chginst_repository
)
self.bu_cd = self.csv_row[constants.CSV_CHANGE_BU_CD_COL_NO]
@ -317,69 +355,59 @@ class MasterMainteChangeInstEmpCSVItem(MasterMainteCSVItem):
error_list = []
if self.comment == '追加':
if len(self.bu_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_BU_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_BU_CD_COL_NO]))
if len(self.inst_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO]))
if len(self.ta_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO]))
if len(self.emp_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_EMP_CD_COL_NO],
constants.CSV_UP_NULL_ERR, 'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_EMP_CD_COL_NO]))
if len(self.inst_emp_start_date) == 0:
error_list.append([self.line_num, constants.
CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO]))
if len(self.inst_emp_end_date) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[
constants.CSV_CHANGE_INST_EMP_END_DATE_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_END_DATE_COL_NO]))
elif self.comment == '終了':
if len(self.inst_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO]))
if len(self.ta_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO]))
if len(self.inst_emp_start_date) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[
constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO]))
if len(self.change_end_date) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[
constants.CSV_CHANGE_INST_EMP_END_DATE_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(self.line_num, constants.CHANGE_INST_EMP_MAP[
constants.CSV_CHANGE_INST_EMP_END_DATE_COL_NO]))
elif self.comment == '担当者修正':
if len(self.inst_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO]))
if len(self.ta_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_TA_CD_COL_NO]))
if len(self.emp_cd) == 0:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_EMP_CD_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_EMP_CD_COL_NO]))
if len(self.inst_emp_start_date) == 0:
error_list.append([self.line_num, constants.
CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO],
constants.CSV_UP_NULL_ERR,
'が入力されておりません。'])
error_list.append(self.make_require_error_message(
self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO]))
else:
error_list.append([self.line_num, constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_COMMENT],
constants.CSV_UP_COMMENT_ERR,
'のコメントが不正です。 「追加」「終了」「担当者修正」のいずれかを入力してください。'])
error_list.append(f'{self.line_num}行目のコメントが不正です。 「追加」「終了」「担当者修正」のいずれかを入力してください。')
return error_list
def check_inst_cd_exists(self) -> list[str]:
error_list = []
if super().is_exist_inst_cd() is False:
error_list.append(f'{self.line_num}行目の{constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_CD_COL_NO]}\
は施設マスタに存在しないコードです')
return error_list
def check_emp_cd_exists(self) -> list[str]:
@ -389,8 +417,45 @@ class MasterMainteChangeInstEmpCSVItem(MasterMainteCSVItem):
return error_list
if super().is_error_emp_cd(self.inst_emp_start_date) is True:
error_list.append([self.line_num, constants.NEW_INST_EMP_CSV_MAP[constants.CSV_NEW_EMP_CD_COL_NO],
constants.CSV_UP_NOT_EXIST_EMP_CD_ERR, ''])
error_list.append(f'{self.line_num}行目の{constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_EMP_CD_COL_NO]}\
は従業員マスタに存在しない もしくは 適用期間外のIDです')
return error_list
def check_bu_cd_exists(self) -> list[str]:
"""BuCd存在チェック"""
error_list = []
if super().is_exist_bu_cd() is False:
error_list.append(f'{self.line_num}行目の{constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_BU_CD_COL_NO]}\
はビジネスユニットマスタに存在しないコードです')
return error_list
def check_existing_date(self) -> list[str]:
error_list = []
start_date = self.inst_emp_start_date
if self.comment == '追加' or self.comment == '終了':
if self.comment == '追加':
end_date = self.inst_emp_end_date
end_date_col_name = constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_END_DATE_COL_NO]
compare_error_message = f'\
{constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO]}{end_date_col_name}よりも後の日付になっています'
else:
end_date = self.change_end_date
end_date_col_name = constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_CHANGE_END_DATE_COL_NO]
compare_error_message = f'\
{constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO]}{end_date_col_name}よりも後の日付になっています'
(error_list, start_date_time, end_date_time) = super().check_term_date(
start_date,
end_date,
constants.CHANGE_INST_EMP_MAP[constants.CSV_CHANGE_INST_EMP_START_DATE_COL_NO],
end_date_col_name)
if len(error_list) > 0 or self.start_date is None or self.end_date is None:
return error_list
if start_date_time > end_date_time:
error_list.append(f'{self.line_num}行目の{compare_error_message}')
return error_list
def check_item_count(self) -> list[str]:
@ -400,15 +465,13 @@ class MasterMainteChangeInstEmpCSVItem(MasterMainteCSVItem):
error_list = []
emp_chg_inst_count = super().emp_chg_inst_count(self.inst_emp_start_date)
if self.comment == '追加' and emp_chg_inst_count > 0:
error_list.append([self.line_num, '', constants.CSV_UP_ADD_DATA_DUP_ERR, ''])
error_list.append(f'{self.line_num}行目の施設コード、領域コード、施設担当_開始日がすべて同一のデータが既に登録されています。')
elif (self.comment == '終了' or self.comment == '担当者修正') and emp_chg_inst_count == 0:
error_list.append([self.line_num, '', constants.CSV_UP_UPDATE_DATA_DUP_ERR, ''])
error_list.append(f'{self.line_num}行目の施設コード、領域コード、施設担当_開始日がすべて同一のデータが存在しないため更新できません。')
return error_list
def check_existing_date(self) -> list[str]:
return []
class MasterMainteCSVItems:
"""施設担当者CSVをループで回すためのもの"""
@ -432,46 +495,39 @@ class MasterMainteCSVItems:
def __init__(
self,
file: TextIOWrapper,
csv_upload_form: MasterMainteCsvUpModel,
inst_cd_repository: MenteExistInstCdRepository,
emp_cd_repository: MenteExistEmpCdRepository,
bu_cd_repository: MenteExistBuCdRepository,
dummy_data_repository: MenteExistDummyDataRepository,
real_data_repository: MenteExistRealDataRepository,
emp_chg_inst_repository: MenteExistEmpChgInstRepository
select_function: str,
table_name: str,
mst_inst_repository: MstInstRepository,
emp_master_repository: EmpMasterRepository,
bu_master_repository: BuMasterRepository,
emp_chginst_repository: EmpChgInstRepository
) -> None:
# self.header = file.readline().strip('\n').replace('"', '').split(',')
# reader = csv.DictReader(file, fieldnames=self.header)
reader = csv.reader(file)
csv_rows = []
if csv_upload_form.select_function == 'new':
if select_function == 'new':
for line_num, row in enumerate(reader, start=0):
if line_num == 0:
continue
csv_rows.append(MasterMainteNewInstEmpCSVItem(
row,
csv_upload_form.select_table,
table_name,
str(line_num),
inst_cd_repository,
emp_cd_repository,
bu_cd_repository,
dummy_data_repository,
real_data_repository,
emp_chg_inst_repository)
mst_inst_repository,
emp_master_repository,
bu_master_repository,
emp_chginst_repository)
)
elif csv_upload_form.select_function == 'change':
elif select_function == 'change':
for line_num, row in enumerate(reader, start=0):
if line_num == 0:
continue
csv_rows.append(MasterMainteChangeInstEmpCSVItem(
row,
csv_upload_form.select_table,
table_name,
str(line_num),
inst_cd_repository,
emp_cd_repository,
bu_cd_repository,
dummy_data_repository,
real_data_repository,
emp_chg_inst_repository)
mst_inst_repository,
emp_master_repository,
bu_master_repository,
emp_chginst_repository)
)
self.lines = csv_rows

View File

@ -0,0 +1,166 @@
from abc import ABCMeta, abstractmethod
from src.repositories.emp_chg_inst_repository import EmpChgInstRepository
from src.logging.get_logger import get_logger
logger = get_logger('マスターメンテ')
class MasterMainteEmpChg(metaclass=ABCMeta):
insert_data: list[dict]
table_name: str
select_table_message: str
user_name: str
emp_chginst_repository: EmpChgInstRepository
def __init__(
self,
insert_data,
table_name: str,
select_table_message: str,
user_name: str,
emp_chginst_repository: EmpChgInstRepository
):
self.insert_data = insert_data
self.table_name = table_name
self.select_table_message = select_table_message
self.user_name = user_name
self.emp_chginst_repository = emp_chginst_repository
def save(self):
error_list = []
try:
self.emp_chginst_repository.connect()
self.emp_chginst_repository.begin()
(result_message, error_list) = self.write_emp_chg_inst_table()
if len(error_list) > 0:
self.emp_chginst_repository.rollback()
else:
self.emp_chginst_repository.commit()
except Exception as e:
self.emp_chginst_repository.rollback()
raise e
finally:
self.emp_chginst_repository.disconnect()
return (result_message, error_list)
def add_emp_chg_inst_table(self, data, start_date, end_date):
self.emp_chginst_repository.insert_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['MUID'],
data['ビジネスユニットコード'],
start_date,
end_date,
self.user_name,
self.user_name,
self.table_name)
@abstractmethod
def write_emp_chg_inst_table(self):
pass
class MasterMainteNewEmpChg(MasterMainteEmpChg):
def __init__(
self,
insert_data_list: list[dict],
table_name: str,
select_table_message: str,
user_name: str,
emp_chginst_repository: EmpChgInstRepository
):
super().__init__(
insert_data_list,
table_name,
select_table_message,
user_name,
emp_chginst_repository
)
def write_emp_chg_inst_table(self):
error_list = []
add_count = 0
for row_no, data in enumerate(self.insert_data, start=1):
try:
self.add_emp_chg_inst_table(data, data['適用開始日'], data['適用終了日'])
add_count += 1
except Exception as e:
error_list.append(f'{str(row_no)}行目がSQL実行エラーです。Excelファイルを確認してください。')
logger.info(f'新規施設登録時に{row_no}行目でエラーが発生しました: {e}')
result_message_list = []
if len(error_list) == 0:
result_message_list.append('新規施設登録を行いました')
result_message_list.append('対象:' + self.select_table_message)
result_message_list.append('追加:' + str(add_count) + '')
return (result_message_list, error_list)
class MasterMainteChangeEmpChg(MasterMainteEmpChg):
def __init__(
self,
insert_data: list[dict],
table_name: str,
select_table_message: str,
user_name: str,
emp_chginst_repository: EmpChgInstRepository
):
super().__init__(
insert_data,
table_name,
select_table_message,
user_name,
emp_chginst_repository
)
def write_emp_chg_inst_table(self):
add_count = 0
end_count = 0
modify_count = 0
error_list = []
for row_no, data in enumerate(self.insert_data, start=1):
try:
if data['コメント'] == '追加':
self.add_emp_chg_inst_table(data, data['施設担当_開始日'], data['施設担当_終了日'])
add_count += 1
elif data['コメント'] == '終了':
self.__end_emp_chg_inst(data)
end_count += 1
elif data['コメント'] == '担当者修正':
self.__modify_emp_chg_inst(data)
modify_count += 1
except Exception as e:
error_list.append(f'{str(row_no)}行目がSQL実行エラーです。Excelファイルを確認してください。')
logger.info(f'施設担当者変更時に{row_no}行目でエラーが発生しました: {e}')
result_message_list = []
if len(error_list) == 0:
result_message_list.append('施設担当者変更を行いました')
result_message_list.append('対象:' + self.select_table_message)
result_message_list.append('追加:' + str(add_count) + '')
result_message_list.append('修正:' + str(modify_count) + '')
result_message_list.append('終了:' + str(end_count) + '')
return (result_message_list, error_list)
def __end_emp_chg_inst(self, data: dict):
self.emp_chginst_repository.end_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['施設担当_開始日'],
data['終了日の変更'],
self.user_name,
self.table_name)
def __modify_emp_chg_inst(self, data: dict):
self.emp_chginst_repository.modify_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['施設担当_開始日'],
data['MUID'],
self.user_name,
self.table_name)

View File

@ -1,161 +0,0 @@
from abc import ABCMeta, abstractmethod
from src.repositories.mente_write_emp_chg_inst_repository import MenteWriteEmpChgInstRepository
from src.system_var import constants
class MasterMainteInsertEmpChg(metaclass=ABCMeta):
insert_data: list[dict]
table_name: str
select_table_message: str
user_name: str
emp_chg_inst_repository: MenteWriteEmpChgInstRepository
def __init__(
self,
insert_data,
table_name: str,
select_table_message: str,
user_name: str,
emp_chg_inst_repository: MenteWriteEmpChgInstRepository
):
self.insert_data = insert_data
self.table_name = table_name # ダミー or 本番
self.select_table_message = select_table_message
self.user_name = user_name
self.emp_chg_inst_repository = emp_chg_inst_repository
def insert_emp_chg_inst(self):
error_list = []
try:
self.emp_chg_inst_repository.connect()
self.emp_chg_inst_repository.begin()
(result_message, error_list) = self.write_emp_chg_inst_table()
if len(error_list) > 0:
self.emp_chg_inst_repository.rollback()
else:
self.emp_chg_inst_repository.commit()
except Exception:
self.emp_chg_inst_repository.rollback() #  一つでもエラーが発生したら終了するようにする場合はここで
finally:
self.emp_chg_inst_repository.disconnect()
return (result_message, error_list)
def insert_emp_chg_inst_table(self, data, start_date, end_date):
self.emp_chg_inst_repository.insert_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['MUID'],
data['ビジネスユニットコード'],
start_date,
end_date,
self.user_name,
self.user_name,
self.table_name)
@abstractmethod
def write_emp_chg_inst_table(self):
pass
class MasterMainteNewInsertEmpChg(MasterMainteInsertEmpChg):
def __init__(
self,
insert_data_list: list[dict],
table_name: str,
select_table_message: str,
user_name: str,
emp_chg_inst_repository: MenteWriteEmpChgInstRepository
):
super().__init__(
insert_data_list,
table_name,
select_table_message,
user_name,
emp_chg_inst_repository
)
def write_emp_chg_inst_table(self):
error_list = []
add_count = 0
for row_no, data in enumerate(self.insert_data, start=1):
try:
self.insert_emp_chg_inst_table(data, data['適用開始日'], data['適用終了日'])
add_count += 1
except Exception:
error_list.append([str(row_no), '', constants.CSV_UP_SQL_ERR, '']) # ここをどうする?
result_message_list = []
result_message_list.append('新規施設登録を行いました')
result_message_list.append('対象:' + self.select_table_message)
result_message_list.append('追加:' + str(add_count) + '')
return (result_message_list, error_list)
class MasterMainteChangeInsertEmpChg(MasterMainteInsertEmpChg):
def __init__(
self,
insert_data: list[dict],
table_name: str,
select_table_message: str,
user_name: str,
emp_chg_inst_repository: MenteWriteEmpChgInstRepository
):
super().__init__(
insert_data,
table_name,
select_table_message,
user_name,
emp_chg_inst_repository
)
def write_emp_chg_inst_table(self):
add_count = 0
end_count = 0
modify_count = 0
error_list = [] # 例外が発生する仕組みなのでどうするか?
for row_no, data in enumerate(self.insert_data, start=1):
try:
if data['コメント'] == '追加':
self.insert_emp_chg_inst_table(data, data['施設担当_開始日'], data['施設担当_終了日'])
add_count += 1
elif data['コメント'] == '終了':
self.__end_emp_chg_inst(data)
end_count += 1
elif data['コメント'] == '担当者修正':
self.__modify_end_emp_chg_inst(data)
modify_count += 1
except Exception:
error_list.append([str(row_no), '', constants.CSV_UP_SQL_ERR, '']) # ここをどうする?
result_message_list = []
result_message_list.append('施設担当者変更を行いました')
result_message_list.append('対象:' + self.select_table_message)
result_message_list.append('追加:' + str(add_count) + '')
result_message_list.append('修正:' + str(modify_count) + '')
result_message_list.append('終了:' + str(end_count) + '')
return (result_message_list, error_list)
def __end_emp_chg_inst(self, data: dict):
self.emp_chg_inst_repository.end_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['施設担当_開始日'],
data['終了日の変更'],
self.user_name,
self.table_name)
def __modify_end_emp_chg_inst(self, data: dict):
self.emp_chg_inst_repository.modify_end_emp_chg_inst(
data['施設コード'],
data['領域コード'],
data['施設担当_開始日'],
data['MUID'],
self.user_name,
self.table_name)

View File

@ -10,7 +10,7 @@ class InstEmpCsvUploadViewModel(BaseModel):
subtitle: str = '施設担当者データCSVアップロード'
is_verified: Optional[bool]
is_insert: Optional[bool]
error_list: Optional[list[CsvErrorModel]]
error_message_list: Optional[list[CsvErrorModel]]
select_function: Optional[str]
select_table: Optional[str]
csv_file_name: Optional[str]
@ -34,8 +34,8 @@ class InstEmpCsvUploadViewModel(BaseModel):
def is_select_table_empty(self):
return self.select_table is None or len(self.select_table) == 0
def is_error_list_empty(self):
return self.error_list is None or len(self.error_list) == 0
def is_error_message_list_empty(self):
return self.error_message_list is None or len(self.error_message_list) == 0
def csv_data_count(self):
return 0 if self.csv_upload_list is None else len(self.csv_upload_list)

View File

@ -1,30 +1,9 @@
from pydantic import BaseModel
from typing import Optional
from src.system_var import constants
class CsvErrorModel(BaseModel):
row_no: Optional[str]
item_name: Optional[str]
message: Optional[str]
error_code: Optional[str]
error_message: Optional[str]
def __init__(self, row_no: str, item_name: str, error_code: str, message: str) -> None:
super().__init__(row_no=row_no, item_name=item_name,
error_code=error_code, message=message)
# 確認のため途中まで実装 エラーコードが無いと、メッセージの編集が適切にできない場合あり
def error_message(self):
error_message: str = ''
if self.error_code == constants.CSV_UP_NULL_ERR:
error_message = self.row_no + '行目の' + self.item_name + 'が入力されておりません。'
elif self.error_code == constants.CSV_UP_NOT_EXIST_INST_CD_ERR:
error_message = self.row_no + '行目の施設コードは施設マスタに存在しないコードです。'
elif self.error_code == constants.CSV_UP_NOT_EXIST_EMP_CD_ERR:
error_message = self.row_no + '行目のMUIDは従業員マスタに存在しない もしくは 適用期間外のIDです。'
elif self.error_code == constants.CSV_UP_NOT_EXIST_BU_CD_ERR:
error_message = self.row_no + '行目のビジネスユニットコードはビジネスユニットマスタに存在しないコードです。'
elif self.error_code == constants.CSV_UP_SQL_ERR:
error_message = self.row_no + '行目がSQL実行エラーです。Excelファイルを確認してください。'
return error_message
def __init__(self, error_message: str) -> None:
super().__init__(error_message=error_message)

View File

@ -2,7 +2,7 @@ from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistBuCdRepository(BaseRepository):
class BuMasterRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT

View File

@ -1,7 +1,8 @@
from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteWriteEmpChgInstRepository(BaseRepository):
class EmpChgInstRepository(BaseRepository):
def connect(self):
self._database.connect()
@ -109,7 +110,7 @@ class MenteWriteEmpChgInstRepository(BaseRepository):
and start_date = :start_date
"""
def modify_end_emp_chg_inst(self, inst_cd, ta_cd, start_date, emp_cd, update_user_name, table_name):
def modify_emp_chg_inst(self, inst_cd, ta_cd, start_date, emp_cd, update_user_name, table_name):
try:
query = self.UPDATE_SQL.format(table_name=table_name)
self._database.execute(query, {
@ -122,3 +123,30 @@ class MenteWriteEmpChgInstRepository(BaseRepository):
except Exception as e:
print(f"[ERROR] DB Error : Exception={e.args}")
raise e
FETCH_COUNT_SQL = """\
SELECT
COUNT(*) AS count
FROM
{table_name}
WHERE
inst_cd = :inst_cd
AND ta_cd = :ta_cd
AND start_date = :start_date
"""
def fetch_count(self, inst_cd, ta_cd, start_date, table_name) -> MasterMenteCountModel:
try:
self._database.connect()
query = self.FETCH_COUNT_SQL.format(table_name=table_name)
result = self._database.execute_select(query, {'inst_cd': inst_cd, 'ta_cd': ta_cd,
'start_date': start_date})
models = [MasterMenteCountModel(**r) for r in result]
if len(models) == 0:
return 0
return models[0].count
except Exception as e:
print(f"[ERROR] DB Error : Exception={e.args}")
raise e
finally:
self._database.disconnect()

View File

@ -2,7 +2,7 @@ from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistEmpCdRepository(BaseRepository):
class EmpMasterRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT

View File

@ -1,34 +0,0 @@
from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistDummyDataRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT
COUNT(*) AS count
FROM
src05.emp_chg_inst_wrk
WHERE
inst_cd = :instCd
AND ta_cd = :taCd
AND start_date = :startDate
"""
def fetch_count(self, inst_cd, ta_cd, start_date) -> MasterMenteCountModel:
try:
self._database.connect()
query = self.FETCH_COUNT_SQL
result = self._database.execute_select(query,
{'instCd': inst_cd,
'taCd': ta_cd,
'startDate': start_date})
models = [MasterMenteCountModel(**r) for r in result]
if len(models) == 0:
return 0
return models[0].count
except Exception as e:
print(f"[ERROR] DB Error : Exception={e.args}")
raise e
finally:
self._database.disconnect()

View File

@ -1,32 +0,0 @@
from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistEmpChgInstRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT
COUNT(*) AS count
FROM
{table_name}
WHERE
inst_cd = :inst_cd
AND ta_cd = :ta_cd
AND start_date = :start_date
"""
def fetch_count(self, inst_cd, ta_cd, start_date, table_name) -> MasterMenteCountModel:
try:
self._database.connect()
query = self.FETCH_COUNT_SQL.format(table_name=table_name)
result = self._database.execute_select(query, {'inst_cd': inst_cd, 'ta_cd': ta_cd,
'start_date': start_date})
models = [MasterMenteCountModel(**r) for r in result]
if len(models) == 0:
return 0
return models[0].count
except Exception as e:
print(f"[ERROR] DB Error : Exception={e.args}")
raise e
finally:
self._database.disconnect()

View File

@ -1,34 +0,0 @@
from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistRealDataRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT
COUNT(*) AS count
FROM
src05.emp_chg_inst
WHERE
inst_cd = :instCd
AND ta_cd = :taCd
AND start_date = :startDate
"""
def fetch_count(self, inst_cd, ta_cd, start_date) -> MasterMenteCountModel:
try:
self._database.connect()
query = self.FETCH_COUNT_SQL
result = self._database.execute_select(query,
{'instCd': inst_cd,
'taCd': ta_cd,
'startDate': start_date})
models = [MasterMenteCountModel(**r) for r in result]
if len(models) == 0:
return 0
return models[0].count
except Exception as e:
print(f"[ERROR] DB Error : Exception={e.args}")
raise e
finally:
self._database.disconnect()

View File

@ -2,7 +2,7 @@ from src.repositories.base_repository import BaseRepository
from src.model.db.master_mente_count import MasterMenteCountModel
class MenteExistInstCdRepository(BaseRepository):
class MstInstRepository(BaseRepository):
FETCH_COUNT_SQL = """\
SELECT

View File

@ -5,77 +5,71 @@ from src.aws.aws_api_client import AWSAPIClient
from src.repositories.base_repository import BaseRepository
from src.services.base_service import BaseService
from src.model.internal.master_mainte_csv import MasterMainteCSVItems
from src.model.internal.master_mainte_insert_emp_chg import MasterMainteChangeInsertEmpChg
from src.model.internal.master_mainte_insert_emp_chg import MasterMainteNewInsertEmpChg
from src.model.internal.master_mainte_emp_chg import MasterMainteNewEmpChg
from src.model.internal.master_mainte_emp_chg import MasterMainteChangeEmpChg
from src.model.view.inst_emp_csv_upload_view_model import InstEmpCsvUploadViewModel
from src.model.request.master_mainte_csvup import MasterMainteCsvUpModel
from src.logging.get_logger import get_logger
from src.model.view.mainte_csv_upload_model import CsvUploadModel
from src.model.view.mainte_csv_error_model import CsvErrorModel
from src.repositories.mente_exist_inst_cd_repository import MenteExistInstCdRepository
from src.repositories.mente_exist_bu_cd_repository import MenteExistBuCdRepository
from src.repositories.mente_exist_emp_cd_repository import MenteExistEmpCdRepository
from src.repositories.mente_exist_dummy_data_repository import MenteExistDummyDataRepository
from src.repositories.mente_exist_real_data_repository import MenteExistRealDataRepository
from src.repositories.mente_exist_emp_chg_inst_repository import MenteExistEmpChgInstRepository
from src.repositories.mente_write_emp_chg_inst_repository import MenteWriteEmpChgInstRepository
from src.repositories.mst_inst_repository import MstInstRepository
from src.repositories.bu_master_cd_repository import BuMasterRepository
from src.repositories.emp_master_repository import EmpMasterRepository
from src.repositories.emp_chg_inst_repository import EmpChgInstRepository
logger = get_logger('マスターメンテ')
class MasterMainteService(BaseService):
REPOSITORIES = {
'inst_cd_repository': MenteExistInstCdRepository,
'emp_cd_repository': MenteExistEmpCdRepository,
'bu_cd_repository': MenteExistBuCdRepository,
'dummy_data_repository': MenteExistDummyDataRepository,
'real_data_repository': MenteExistRealDataRepository,
'emp_chg_inst_repository': MenteExistEmpChgInstRepository,
'write_emp_chg_inst_repository': MenteWriteEmpChgInstRepository
'mst_inst_repository': MstInstRepository,
'emp_master_repository': EmpMasterRepository,
'bu_master_repository': BuMasterRepository,
'emp_chginst_repository': EmpChgInstRepository,
}
inst_cd_repository: MenteExistInstCdRepository
emp_cd_repository: MenteExistEmpCdRepository
bu_cd_repository: MenteExistBuCdRepository
dummy_data_repository: MenteExistDummyDataRepository
real_data_repository: MenteExistRealDataRepository
emp_chg_inst_repository: MenteExistEmpChgInstRepository
write_emp_chg_inst_repository: MenteWriteEmpChgInstRepository
mst_inst_repository: MstInstRepository
emp_master_repository: EmpMasterRepository
bu_master_repository: BuMasterRepository
emp_chginst_repository: EmpChgInstRepository
def __init__(self, repositories: dict[str, BaseRepository], clients: dict[str, AWSAPIClient]) -> None:
super().__init__(repositories, clients)
self.inst_cd_repository = repositories['inst_cd_repository']
self.emp_cd_repository = repositories['emp_cd_repository']
self.bu_cd_repository = repositories['bu_cd_repository']
self.dummy_data_repository = repositories['dummy_data_repository']
self.real_data_repository = repositories['real_data_repository']
self.emp_chg_inst_repository = repositories['emp_chg_inst_repository']
self.write_emp_chg_inst_repository = repositories['write_emp_chg_inst_repository']
self.mst_inst_repository = repositories['mst_inst_repository']
self.emp_master_repository = repositories['emp_master_repository']
self.bu_master_repository = repositories['bu_master_repository']
self.emp_chginst_repository = repositories['emp_chginst_repository']
def prepare_mainte_csv_up_view(self,
file: TextIOWrapper,
csv_file_name: str,
csv_upload_form: MasterMainteCsvUpModel) -> InstEmpCsvUploadViewModel:
if csv_upload_form.select_function != 'new' and csv_upload_form.select_function == 'change':
raise Exception(f'機能の選択値が不正です: {csv_upload_form.select_function}')
if csv_upload_form.select_table != 'dummy' and csv_upload_form.select_table != 'real':
raise Exception(f'登録テーブルの選択値が不正です: {csv_upload_form.select_table}')
(table_name, _) = self.__target_table(csv_upload_form.select_table)
csv_items = MasterMainteCSVItems(
file,
csv_upload_form,
self.inst_cd_repository,
self.emp_cd_repository,
self.bu_cd_repository,
self.dummy_data_repository,
self.real_data_repository,
self.emp_chg_inst_repository
csv_upload_form.select_function,
table_name,
self.mst_inst_repository,
self.emp_master_repository,
self.bu_master_repository,
self.emp_chginst_repository
)
error_list = []
error_message_list = []
for row_item in csv_items:
error_list.extend([CsvErrorModel(data[0], data[1], data[2], data[3]) for data in row_item.validate()]) # 微妙
error_message_list.extend([CsvErrorModel(data) for data in row_item.validate()])
csv_items.reset()
csv_upload_list = []
json_upload_data = ''
if len(error_list) == 0:
if len(error_message_list) == 0:
csv_upload_list: list[CsvUploadModel] = [CsvUploadModel(
csv_row=row_item.csv_row_data()) for row_item in csv_items]
@ -84,7 +78,7 @@ class MasterMainteService(BaseService):
mainte_csv_up = InstEmpCsvUploadViewModel(
is_verified=True,
error_list=error_list,
error_message_list=error_message_list,
select_function=csv_upload_form.select_function,
select_table=csv_upload_form.select_table,
csv_upload_list=csv_upload_list,
@ -97,46 +91,46 @@ class MasterMainteService(BaseService):
user_name: str,
csv_upload_form: MasterMainteCsvUpModel) -> InstEmpCsvUploadViewModel:
if csv_upload_form.select_table == 'dummy':
table_name = 'src05.emp_chg_inst_wrk'
selected_table_msg = 'ダミーテーブル'
elif csv_upload_form.select_table == 'real':
table_name = 'src05.emp_chg_inst'
selected_table_msg = '本番テーブル'
# else:
# 例外?
(table_name, selected_table_msg) = self.__target_table(csv_upload_form.select_table)
csv_data_list = json.loads(html.unescape(csv_upload_form.unescape().json_upload_data))
if csv_upload_form.select_function == 'new':
insert_emp_chg = MasterMainteNewInsertEmpChg(
emp_chg_inst = MasterMainteNewEmpChg(
csv_data_list,
table_name,
selected_table_msg,
user_name,
self.write_emp_chg_inst_repository)
self.emp_chginst_repository)
elif csv_upload_form.select_function == 'change':
insert_emp_chg = MasterMainteChangeInsertEmpChg(
emp_chg_inst = MasterMainteChangeEmpChg(
csv_data_list,
table_name,
selected_table_msg,
user_name,
self.write_emp_chg_inst_repository
)
# else:
# 例外を発生させる?
self.emp_chginst_repository)
else:
raise Exception(f'機能の選択値が不正です: {csv_upload_form.select_function}')
(result_message_list, raw_error_list) = insert_emp_chg.insert_emp_chg_inst()
(result_message_list, raw_error_list) = emp_chg_inst.save()
error_list = []
error_list.extend([CsvErrorModel(data[0], data[1], data[2], data[3]) for data in raw_error_list])
if result_message_list is None:
result_message_list.append('DB接続エラー')
error_message_list = []
error_message_list.extend([CsvErrorModel(data) for data in raw_error_list])
mainte_csv_up = InstEmpCsvUploadViewModel(
is_insert=True,
result_message_list=result_message_list,
error_list=error_list
error_message_list=error_message_list
)
return mainte_csv_up
def __target_table(self, select_table: str):
if select_table == 'dummy':
table_name = 'src05.emp_chg_inst_wrk'
selected_table_msg = 'ダミーテーブル'
elif select_table == 'real':
table_name = 'src05.emp_chg_inst'
selected_table_msg = '本番テーブル'
else:
raise Exception(f'登録テーブルの選択値が不正です: {select_table}')
return (table_name, selected_table_msg)

View File

@ -23,7 +23,7 @@ h1{
width: 20%;
}
.buttonSize{
.csvup_buttonSize{
width: 85px;
}

View File

@ -214,30 +214,6 @@ CSV_CHANGE_CHANGE_END_DATE_COL_NO = 12
# コメントの列No
CSV_CHANGE_COMMENT = 13
# エラーコード
CSV_UP_NULL_ERR = 'nullError'
CSV_UP_COMMENT_ERR = 'commentError'
CSV_UP_NOT_EXIST_INST_CD_ERR = 'instCdErr'
CSV_UP_NOT_EXIST_EMP_CD_ERR = 'empCdErr'
CSV_UP_NOT_EXIST_BU_CD_ERR = 'buCdErr'
CSV_UP_ITEM_CNT_ERR = 'itemCntErr'
CSV_UP_FILE_TYPE_ERR = 'fileTypeErr'
CSV_UP_FILEN_EXIST_ERR = 'filenExistErr'
CSV_UP_SQL_ERR = 'sqlErr'
CSV_UP_NEW_COMPARE_DATE_ERR = 'newCompareDateErr'
CSV_UP_ADD_COMPARE_DATE_ERR = 'addCompareDateErr'
CSV_UP_END_COMPARE_DATE_ERR = 'endCompareDateErr'
CSV_UP_START_DATE_REAL_ERR = 'startDateRealErr'
CSV_UP_END_DATE_REAL_ERR = 'endDateRealErr'
CSV_UP_INST_EMPSTART_DATE_REAL_ERR = 'instEmpStartDateRealErr'
CSV_UP_INST_EMP_END_DATE_REAL_ERR = 'instEmpEndDateRealErr'
CSV_UP_CHANGE_END_DATE_REAL_ERR = 'changeEndDateRealErr'
CSV_UP_NEW_DATA_DUP_ERR = 'newDataDupErr'
CSV_UP_ADD_DATA_DUP_ERR = 'addDataDupErr'
CSV_UP_UPDATE_DATA_DUP_ERR = 'updateDataDupErr'
CSV_UP_INPUT_DATA_ZERO_ERR = 'inputDataZeroErr'
# CSVの列数
CSV_NEW_COL_COUNT = 9
CSV_CHANGE_COL_COUNT = 14

View File

@ -40,19 +40,19 @@
<tr>
<td class="headerTdLeft">施設担当者データCSVアップロード</td>
<td class="headerTdRight">
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}
<input type="button" onclick="location.href='/masterMainte/instEmpCsvUL' " value="戻る">
{% else %}
<button class="buttonSize" onclick="backToMainteMenu()">メニューへ</button>
<button class="csvup_buttonSize" onclick="backToMainteMenu()">メニューへ</button>
{% endif %}
</td>
</tr>
</table>
</h1>
<!-- 選択フォーム -->
<form name="input" action="{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}/masterMainte/newInst{% else %}/masterMainte/instEmpCsvUL{% endif %}"
<form name="input" action="{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}/masterMainte/newInst{% else %}/masterMainte/instEmpCsvUL{% endif %}"
method="POST" enctype="multipart/form-data"
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}
onsubmit="return Form_Submit_Disp_Dialog();"
{% else %}
onsubmit="Form_Submit();"
@ -68,7 +68,7 @@
<label>
<input type="radio" name="ctrl_select_function" value="new"
{{ "checked " if mainte_csv_up.select_function == 'new' or mainte_csv_up.is_select_function_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() }}
>
新規施設登録
</label>
@ -77,7 +77,7 @@
<label>
<input type="radio" name="ctrl_select_function" value="change"
{{ "checked " if mainte_csv_up.select_function == 'change' }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() }}
>
施設担当者変更
</label>
@ -91,7 +91,7 @@
<label>
<input type="radio" name="ctrl_select_table" value="dummy"
{{ "checked " if mainte_csv_up.select_table == 'dummy' or mainte_csv_up.is_select_table_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() }}
>
ダミーテーブル
</label>
@ -100,7 +100,7 @@
<label>
<input type="radio" name="ctrl_select_table" value="real"
{{ "checked " if mainte_csv_up.select_table == 'real' }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() }}
{{ "disabled" if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() }}
>
本番テーブル
</label>
@ -111,7 +111,7 @@
<!-- 登録Excel -->
<td class="inputLabelTd">登録Excel</td>
<td class="input_tb" colspan="2">
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}
{{mainte_csv_up.csv_file_name}}
{% else %}
<input type="file" id="excelFile" size="50" name="ctrl_csv_file" accept=".csv" onchange="formInsertBtDisabled()">
@ -119,10 +119,10 @@
</td>
<!-- ボタン -->
<td class="inputButtonTd">
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() and mainte_csv_up.select_table == 'real' %}
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() and mainte_csv_up.select_table == 'real' %}
<input name="btName" value="insert_bt" type="hidden">
<div class="errorColor">本番テーブルが選択されています<input class="buttonSize" id="insert" name="insert_bt" value="登録" type="submit" ></div>
{% elif mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() and mainte_csv_up.select_table == 'dummy' %}
{% elif mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() and mainte_csv_up.select_table == 'dummy' %}
<input name="btName" value="insert_bt" type="hidden">
<input class="buttonSize" id="insert" name="insert_bt" value="登録" type="submit">
{% else %}
@ -133,8 +133,8 @@
</tr>
</tbody>
</table>
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}
<input name="ctrl_json_upload_data" value="{{mainte_csv_up.json_upload_data}}" type="hidden"> <!-- formの外に移動した方が良さそう -->
{% if mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}
<input name="ctrl_json_upload_data" value="{{mainte_csv_up.json_upload_data}}" type="hidden">
<input name="ctrl_select_function" value="{{mainte_csv_up.select_function}}" type="hidden">
<input name="ctrl_select_table" value="{{mainte_csv_up.select_table}}" type="hidden">
{% endif %}
@ -142,16 +142,15 @@
<p>
<!-- 処理中メッセージ表示 -->
<div id="loading" class="csvOutputMessage" style="display:none;">
<!-- <img src="IMG/LOADING.GIF" class="loadimg"> -->
<p>処理中...<br>しばらくお待ち下さい。</p>
</div>
{% if not mainte_csv_up.is_error_list_empty() %}
{% if not mainte_csv_up.is_error_message_list_empty() %}
<div id="ulMsg" class="footerMsg errorColor">
{% for error in mainte_csv_up.error_list %}
{{error.error_message()}}<br>
{% for error in mainte_csv_up.error_message_list %}
{{error.error_message}}<br>
{% endfor %}
</div>
{% elif mainte_csv_up.is_verified and mainte_csv_up.is_error_list_empty() %}
{% elif mainte_csv_up.is_verified and mainte_csv_up.is_error_message_list_empty() %}
<div id="ulMsg">
<div class="dataCntDisp">件数:{{mainte_csv_up.csv_data_count()}}件</div>
<!-- 登録されるデータのリスト -->
@ -179,154 +178,6 @@
{% endfor %}
</div>
{% endif %}
<!-- <?php
// エラーが発生した場合のフッター表示
if (!empty($_SESSION['errorList'])) {
echo '<div id="ulMsg" class="footerMsg errorColor">';
foreach ($_SESSION['errorList'] as $value) {
if ($value[2] == $nullErr){
echo $value[0],$nullErrMsgFirst,$value[1],$nullErrMsgSecond,"<br>";
} else if ($value[2] == $notExistInstCdErr){
echo $value[0],$notExistInstCdErrMsg,"<br>";
} else if ($value[2] == $notExistEmpCdErr){
echo $value[0],$notExistEmpCdErrMsg,"<br>";
} else if ($value[2] == $notExistBuCdErr){
echo $value[0],$notExistBuCdErrMsg,"<br>";
} else if ($value[2] == $itemCntErr){
echo $value[0],$itemCntErrMsg,"<br>";
} else if ($value[2] == $fileTypeErr){
echo $value[0],$fileTypeErrMsg,"<br>";
} else if ($value[2] == $filenExistErr){
echo $value[0],$filenExistErrMsg,"<br>";
} else if ($value[2] == $sqlErr){
echo $value[0],$sqlErrMsg,"<br>";
} else if ($value[2] == $commentErr){
echo $value[0],$commentErrMsg,"<br>";
} else if ($value[2] == $newCompareDateErr){
echo $value[0],$newCompareDateErrMsg,"<br>";
} else if ($value[2] == $addCompareDateErr){
echo $value[0],$addCompareDateErrMsg,"<br>";
} else if ($value[2] == $endCompareDateErr){
echo $value[0],$endCompareDateErrMsg,"<br>";
} else if ($value[2] == $startDateRealErr){
echo $value[0],$startDateRealErrMsg,"<br>";
} else if ($value[2] == $endDateRealErr){
echo $value[0],$endDateRealErrMsg,"<br>";
} else if ($value[2] == $instEmpStartDateRealErr){
echo $value[0],$instEmpStartDateRealErrMsg,"<br>";
} else if ($value[2] == $instEmpEndDateRealErr){
echo $value[0],$instEmpEndDateRealErrMsg,"<br>";
} else if ($value[2] == $changeEndDateRealErr){
echo $value[0],$changeEndDateRealErrMsg,"<br>";
} else if ($value[2] == $newDataDupErr){
echo $value[0],$newDataDupErrMsg,"<br>";
} else if ($value[2] == $addDataDupErr){
echo $value[0],$addDataDupErrMsg,"<br>";
} else if ($value[2] == $updateDataDupErr){
echo $value[0],$updateDataDupErrMsg,"<br>";
} else if ($value[2] == $inputDataZeroErr){
echo $value[0],$inputDataZeroErrMsg,"<br>";
}
}
echo '</div>';
// 確認ボタン押下後のフッター表示
} else if ($_POST['btName'] == 'input_bt' && empty($_SESSION['errorList'])) {
// 確認ボタン押下後
echo '<div id="ulMsg">';
// 件数表示 ヘッダ行があるため-1件
echo '<div class="dataCntDisp">件数:', count($_SESSION['sheetData']) - 1 , '件</div>';
// 選択された機能により表示するカラムを切り替え
if ($_SESSION['selectFunction'] == 'new') {
$inputDataColumns = $newInstEmpColumns;
} else if($_SESSION['selectFunction'] == 'change'){
$inputDataColumns = $changeInstEmpColumns;
}
?>
-->
<!-- 登録されるデータのリスト -->
<!-- <table class="inputData">
<tbody>
<tr>
<?php
// ヘッダ行の表示
foreach ($inputDataColumns as $value) {
echo "<th>",$value,"</th>";
}
?>
</tr>
<?php
// 登録されるリストを作成 ヘッダ行を飛ばすために$i=2からスタート
for ($i = 2; $i <= count($_SESSION['sheetData']); $i++) {
echo "<tr>";
// ポインタを先頭に戻す
reset($_SESSION['sheetData'][$i]);
// Excel読み込みで空白部分も読み込んでしまっているため表示したいカラム数だけループ
for ($j = 0; $j < count($inputDataColumns); $j++, next($_SESSION['sheetData'][$i])) {
echo "<td>", current($_SESSION['sheetData'][$i]),"</td>";
}
echo "</tr>";
}
?>
</tbody>
</table>
</div> -->
<!-- <?php
// 登録ボタン押下後のフッター表示
} else if ($_POST['btName'] == 'insert_bt') {
echo '<div id="ulMsg" class="footerMsg">';
if ($dataCnt == false) {
// TODO修正が必要
echo "DB接続エラー";
} else {
if ($selectedTable == 'dummy') {
$selectedTableMsg = $dummyTable;
} else if ($selectedTable == 'real') {
$selectedTableMsg = $realTable;
}
if ($selectedFunction == 'new') {
$selectedFunctionMsg = $newInstEmp;
echo $selectedFunctionMsg, "を行いました<br>";
echo $targetMsg, $selectedTableMsg,"<br>";
echo $addMsg, $dataCnt['add'],"件<br>";
} else if ($selectedFunction == 'change') {
$selectedFunctionMsg = $changeInstEmp;
echo $selectedFunctionMsg, "を行いました<br>";
echo $targetMsg, $selectedTableMsg,"<br>";
echo $addMsg, $dataCnt['add'],"件<br>";
echo $modifyMsg, $dataCnt['modify'],"件<br>";
echo $endMsg, $dataCnt['end'],"件<br>";
}
}
echo "</div>";
}
if ($testLogFlg) { error_log(date("Y/m/d H:i:s") . " [INFO] instEmpExcel.php End"."\n", 3, $masetrMainteLogPath);}
?> -->
</p>
</body>
</html>