From ce883d8ad7d0c910e88cfe1a35f932ae38e8678e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E9=96=93?= Date: Wed, 14 Jun 2023 09:41:07 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E5=89=8D?= =?UTF-8?q?=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/.env.example | 1 + ecs/jskult-webapp/src/controller/ultmarc.py | 108 +++++-- .../model/db/ultmarc_doctor_wrkplace_count.py | 9 + .../src/model/db/ultmarc_inst_info.py | 57 ++++ .../src/model/db/ultmarc_inst_trt_course.py | 9 + .../src/model/db/ultmarc_trt_course.py | 2 +- .../src/model/request/ultmarc_inst.py | 6 +- .../view/ultmarc_doctor_info_view_model.py | 29 +- .../model/view/ultmarc_doctor_view_model.py | 15 +- .../view/ultmarc_inst_info_view_model.py | 264 ++++++++++++++++ .../src/model/view/ultmarc_inst_view_model.py | 31 +- .../repositories/ultmarc_doctor_repository.py | 9 +- .../ultmarc_dr_wrkplace_his_repository.py | 30 +- .../ultmarc_dr_wrkplace_repository.py | 24 ++ .../repositories/ultmarc_inst_repository.py | 87 +++++- .../ultmarc_inst_trt_course_repository.py | 31 ++ .../ultmarc_trt_course_repository.py | 6 +- .../src/services/ultmarc_view_service.py | 26 ++ .../src/system_var/environment.py | 3 +- ecs/jskult-webapp/src/templates/docInfo.html | 68 +++-- .../src/templates/docSearch.html | 43 ++- ecs/jskult-webapp/src/templates/instInfo.html | 285 ++++++++++++++++++ .../src/templates/instSearch.html | 62 +++- .../task_settings/web_task_settings.env | 1 + 24 files changed, 1089 insertions(+), 117 deletions(-) create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py create mode 100644 ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py create mode 100644 ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py create mode 100644 ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py create mode 100644 ecs/jskult-webapp/src/templates/instInfo.html diff --git a/ecs/jskult-webapp/.env.example b/ecs/jskult-webapp/.env.example index f330f3d5..c604e43e 100644 --- a/ecs/jskult-webapp/.env.example +++ b/ecs/jskult-webapp/.env.example @@ -22,4 +22,5 @@ AWS_REGION=ap-northeast-1 AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 +SEARCH_RESULT_MAX_COUNT=500 SESSION_EXPIRE_MINUTE=20 diff --git a/ecs/jskult-webapp/src/controller/ultmarc.py b/ecs/jskult-webapp/src/controller/ultmarc.py index f4747bc8..914826c9 100644 --- a/ecs/jskult-webapp/src/controller/ultmarc.py +++ b/ecs/jskult-webapp/src/controller/ultmarc.py @@ -1,18 +1,15 @@ from typing import Optional -from fastapi import APIRouter, Depends, HTTPException, Request -from fastapi.exceptions import HTTPException -from starlette import status +from fastapi import APIRouter, Depends, Request from src.depends.services import get_service from src.model.internal.session import UserSession from src.model.request.ultmarc_doctor import UltmarcDoctorModel, UltmarcDoctorInfoModel -from src.model.request.ultmarc_inst import UltmarcInstModel +from src.model.request.ultmarc_inst import UltmarcInstModel, UltmarcInstInfoModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.ultmarc_view_service import UltmarcViewService from src.services.session_service import set_session -from src.system_var import constants from src.templates import templates router = APIRouter() @@ -33,9 +30,6 @@ def ultmarc_inst_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 検索項目の取得(都道府県・施設区分) ultmarc = ultmarc_service.ultmarc_inst_view(session) ultmarc.is_batch_processing = is_batch_processing @@ -66,10 +60,9 @@ def search_inst( batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない # is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) # 施設データを検索 ultmarc_inst_data = ultmarc_service.search_inst_data(ultmarc_inst_form) @@ -98,6 +91,89 @@ def search_inst( return templates_response +@router.get('/instInfo') +def ultmarc_inst_info_view( + request: Request, + id: str, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + # 施設情報の取得 + ultmarc = ultmarc_service.info_ultmarc_inst_view(id, session) + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + # instId + ultmarc.instId = id + # ページ総数(件数) + ultmarc.postCnt = 1 + # ページ数(表示するページNo) + ultmarc.pageNum = 0 + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + +@router.post('/instInfo') +def ultmarc_inst_info_search( + request: Request, + ultmarc_inst_form: Optional[UltmarcInstInfoModel] = Depends(UltmarcInstInfoModel.as_form), + ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)), + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない + is_batch_processing = batch_status_service.is_batch_processing() + + instId = ultmarc_inst_form.instId.split(',') + + # 施設情報の取得 + ultmarc = ultmarc_service.info_ultmarc_inst_view(instId[ultmarc_inst_form.pageNum], session) + + # バッチ起動判定の取得 + ultmarc.is_batch_processing = is_batch_processing + # InstId + ultmarc.instId = ultmarc_inst_form.instId + # ページ総数(件数) + ultmarc.postCnt = len(instId) + # ページ数(表示するページNo) + ultmarc.pageNum = ultmarc_inst_form.pageNum + + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + session_key = set_session(session) + templates_response = templates.TemplateResponse( + 'instInfo.html', { + 'request': request, + 'ultmarc': ultmarc, + }, + headers={'session_key': session_key} + ) + return templates_response + + @router.get('/docSearch') def ultmarc_doctor_view( request: Request, @@ -108,9 +184,6 @@ def ultmarc_doctor_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 検索項目の取得(都道府県) ultmarc = ultmarc_service.prepare_ultmarc_doctor_view(session) ultmarc.is_batch_processing = is_batch_processing @@ -141,10 +214,9 @@ def search_doc( batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) ): session: UserSession = request.session + # バッチ処理中の場合、機能を利用させない # is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) # 医師データを検索 ultmarc_doctor_data = ultmarc_service.search_doctor_data(ultmarc_doctor_form) @@ -184,9 +256,6 @@ def ultmarc_doctor_info_view( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - # 医師情報の取得 ultmarc = ultmarc_service.info_ultmarc_doctor_view(id, session) # バッチ起動判定の取得 @@ -227,9 +296,6 @@ def ultmarc_doctor_info_search( # バッチ処理中の場合、機能を利用させない is_batch_processing = batch_status_service.is_batch_processing() - # if batch_status_service.is_batch_processing(): - # raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BATCH_PROCESSING) - docId = ultmarc_doctor_form.docId.split(',') # 医師情報の取得 diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py new file mode 100644 index 00000000..4482eab9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_doctor_wrkplace_count.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcDoctorWrkplaceCountDBModel(BaseDBModel): + count: Optional[int] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py b/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py new file mode 100644 index 00000000..a72b38a9 --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_inst_info.py @@ -0,0 +1,57 @@ +from typing import Optional +from datetime import datetime +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstInfoDBModel(BaseDBModel): + dcf_dsf_inst_cd: Optional[str] + unconf_flg: Optional[str] + dup_opp_cd: Optional[str] + close_start_ym: Optional[str] + close_flg: Optional[str] + delete_sche_reason_cd: Optional[str] + abolish_ymd: Optional[str] + estab_sche_ym: Optional[str] + estab_sche_flg: Optional[str] + form_inst_name_kana: Optional[str] + form_inst_name_kanji: Optional[str] + inst_name_kana: Optional[str] + inst_name_kanji: Optional[str] + manage_cd: Optional[str] + postal_number: Optional[str] + inst_phone_number: Optional[str] + addr_unknown_reason_cd: Optional[str] + phone_number_non_flg: Optional[str] + inst_addr_kana: Optional[str] + inst_addr: Optional[str] + re_exam_cd: Optional[str] + rltd_univ_prnt_cd: Optional[str] + insp_item_micrb: Optional[str] + insp_item_serum: Optional[str] + insp_item_blood: Optional[str] + insp_item_patho: Optional[str] + insp_item_paras: Optional[str] + insp_item_biochem: Optional[str] + insp_item_ri: Optional[str] + prmit_bed_num_gen: Optional[str] + prmit_bed_num_rcup: Optional[str] + prmit_bed_num_mental: Optional[str] + prmit_bed_num_infection: Optional[str] + prmit_bed_num_tuber: Optional[str] + prmit_bed_num_other: Optional[str] + prmit_bed_num_sum: Optional[str] + ward_abolish_flg: Optional[str] + bed_num: Optional[str] + prmit_bed_maint_ymd: Optional[str] + inst_repre_cd: Optional[str] + inst_repre_kana: Optional[str] + inst_repre: Optional[str] + sys_update_date: Optional[datetime] + delete_sche_reason: Optional[str] + inst_div_name: Optional[str] + manage_name: Optional[str] + hp_assrt_name: Optional[str] + parent_name: Optional[str] + dcf_prnt_inst_cd: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py new file mode 100644 index 00000000..7c2ef6de --- /dev/null +++ b/ecs/jskult-webapp/src/model/db/ultmarc_inst_trt_course.py @@ -0,0 +1,9 @@ +from typing import Optional + +from src.model.db.base_db_model import BaseDBModel +from src.util.sanitize import sanitize + + +@sanitize +class UltmarcInstTrtCourseDBModel(BaseDBModel): + trt_course_name_abb: Optional[str] diff --git a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py index 23908fce..788d9748 100644 --- a/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py +++ b/ecs/jskult-webapp/src/model/db/ultmarc_trt_course.py @@ -5,5 +5,5 @@ from src.util.sanitize import sanitize @sanitize -class UltmarcTrtCoursedbmodel(BaseDBModel): +class UltmarcTrtCourseDBModel(BaseDBModel): trt_course_name: Optional[str] diff --git a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py index f7919612..8b9a52c6 100644 --- a/ecs/jskult-webapp/src/model/request/ultmarc_inst.py +++ b/ecs/jskult-webapp/src/model/request/ultmarc_inst.py @@ -45,17 +45,17 @@ class UltmarcInstModel(BaseModel): class UltmarcInstInfoModel(BaseModel): - docId: Optional[str] + instId: Optional[str] pageNum: Optional[int] @classmethod def as_form( cls, - docId: str = Form(None), + instId: str = Form(None), pageNum: str = Form(None) ): return cls( - docId=docId, + instId=instId, pageNum=int(pageNum) ) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py index 993bea14..0af599d4 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_info_view_model.py @@ -1,17 +1,13 @@ -import json -from collections import OrderedDict -from datetime import datetime +from datetime import datetime, date from typing import Optional - from pydantic import BaseModel from src.model.db.ultmarc_doctor_info import UltmarcDoctorInfoDBModel -from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_trt_course import UltmarcTrtCourseDBModel from src.model.db.ultmarc_sosiety import UltmarcSosietyDBModel from src.model.db.ultmarc_specialist_license import UltmarcSpecialistLicenseDBModel from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel from src.model.db.ultmarc_doctor_wrkplace_his import UltmarcDoctorWrkplaceHisDBModel - from src.system_var import environment @@ -19,7 +15,7 @@ class UltmarcDoctorInfoViewModel(BaseModel): subtitle: str = '医師情報' is_batch_processing: Optional[bool] doctor_info_data: Optional[UltmarcDoctorInfoDBModel] - trt_coursed_data: Optional[list[UltmarcTrtCoursedbmodel]] + trt_coursed_data: Optional[list[UltmarcTrtCourseDBModel]] sosiety_data: Optional[list[UltmarcSosietyDBModel]] specialist_license_data: Optional[list[UltmarcSpecialistLicenseDBModel]] doctor_wrkplace_data: Optional[list[UltmarcDoctorWrkplaceDBModel]] @@ -28,11 +24,6 @@ class UltmarcDoctorInfoViewModel(BaseModel): postCnt: Optional[int] pageNum: Optional[int] - def ultmarc_data_json_str(self): - def date_handler(obj): - return obj.isoformat() if hasattr(obj, 'isoformat') else obj - return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) - # 医師コード def is_input_dcf_pcf_dr_cd(self): return self.doctor_info_data.dcf_pcf_dr_cd or '' @@ -86,6 +77,11 @@ class UltmarcDoctorInfoViewModel(BaseModel): def is_input_birthday_fromat(self): return self._format_date_string(self.doctor_info_data.birthday) + def is_input_ymd_fromat(self, ymd): + if ymd is None: + return '' + return ymd.strftime('%Y/%m/%d') + def is_input_trt_course_data_size(self): return len(self.trt_coursed_data) @@ -102,13 +98,16 @@ class UltmarcDoctorInfoViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' + + def is_octor_wrkplace_data_count(self): + return len(self.doctor_wrkplace_data) diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py index ea2afe48..47f55454 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_view_model.py @@ -7,7 +7,7 @@ from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel from src.model.request.ultmarc_doctor import UltmarcDoctorModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.db.ultmarc_doctor import UltmarcDoctorDBModel from src.system_var import environment @@ -15,7 +15,7 @@ class UltmarcDoctorViewModel(BaseModel): subtitle: str = '医師検索一覧' is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] - doctor_data: Optional[list[BisDisplayModel]] = [] + doctor_data: Optional[list[UltmarcDoctorDBModel]] = [] form_data: Optional[UltmarcDoctorModel] def ultmarc_data_json_str(self): @@ -65,6 +65,11 @@ class UltmarcDoctorViewModel(BaseModel): return '' return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + def is_input_form_prefc_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.prefc_cd or '' + # 所属部科(漢字) def is_input_blng_sec_name(self): if not self.is_form_submitted(): @@ -99,13 +104,13 @@ class UltmarcDoctorViewModel(BaseModel): return len(self.doctor_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py new file mode 100644 index 00000000..6d64e04f --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_info_view_model.py @@ -0,0 +1,264 @@ +import json +from collections import OrderedDict +from datetime import datetime +from typing import Optional + +from pydantic import BaseModel + +from src.model.db.ultmarc_inst_info import UltmarcInstInfoDBModel +from src.model.db.ultmarc_inst_trt_course import UltmarcInstTrtCourseDBModel + +from src.system_var import environment + + +class UltmarcInstInfoViewModel(BaseModel): + subtitle: str = '施設情報' + is_batch_processing: Optional[bool] + inst_info_data: Optional[UltmarcInstInfoDBModel] + inst_trt_coursed_data: Optional[list[UltmarcInstTrtCourseDBModel]] + doctor_wrkplace_count: Optional[int] + instId: Optional[str] + postCnt: Optional[int] + pageNum: Optional[int] + + # def ultmarc_data_json_str(self): + # def date_handler(obj): + # return obj.isoformat() if hasattr(obj, 'isoformat') else obj + # return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler) + + # 施設コード + def is_input_dcf_dsf_inst_cd(self): + return self.inst_info_data.dcf_dsf_inst_cd or '' + + # 未確認 + def is_checked_unconf_flg(self): + return 'checked' if self.inst_info_data.unconf_flg == '1' else '' + + # 施設コード変換先 + def is_input_dup_opp_cd(self): + return self.inst_info_data.dup_opp_cd or '' + + # 休院店開始年月 + def is_input_close_start_ym(self): + return self.inst_info_data.close_start_ym or '' + + # 休院店 + def is_checked_close_flg(self): + return 'checked' if self.inst_info_data.close_flg == '1' else '' + + # 削除予定理由 + def is_input_delete_sche_reason_cd(self): + return self.inst_info_data.delete_sche_reason_cd or '' + + def is_input_delete_sche_reason(self): + return self.inst_info_data.delete_sche_reason or '' + + # 削除日 + def is_input_abolish_ymd(self): + return self.inst_info_data.abolish_ymd or '' + + # 開業予定年月 + def is_input_estab_sche_ym(self): + return self.inst_info_data.estab_sche_ym or '' + + # 開業 + def is_checked_estab_sche_flg(self): + return 'checked' if self.inst_info_data.estab_sche_flg == '1' else '' + + # 正式施設名(カナ) + def is_input_form_inst_name_kana(self): + return self.inst_info_data.form_inst_name_kana or '' + + # 正式施設名(漢字) + def is_input_form_inst_name_kanji(self): + return self.inst_info_data.form_inst_name_kanji or '' + + # 略式施設名(カナ) + def is_input_inst_name_kana(self): + return self.inst_info_data.inst_name_kana or '' + + # 施設区分名 + def is_input_inst_div_name(self): + return self.inst_info_data.inst_div_name or '' + + # 略式施設名(漢字) + def is_input_inst_name_kanji(self): + return self.inst_info_data.inst_name_kanji or '' + + # 経営体 + def is_input_manage_cd(self): + return self.inst_info_data.manage_cd or '' + + def is_input_manage_name(self): + return self.inst_info_data.manage_name or '' + + # 郵便番号 + def is_input_postal_number(self): + return self.inst_info_data.postal_number or '' + + # 住所不明 + def is_checked_addr_unknown_reason_cd(self): + return 'checked' if self.inst_info_data.addr_unknown_reason_cd else '' + + # 施設電話番号 + def is_input_inst_phone_number(self): + return self.inst_info_data.inst_phone_number or '' + + # 開業 + def is_checked_phone_number_non_flg(self): + return 'checked' if self.inst_info_data.phone_number_non_flg == '1' else '' + + # 住所(カナ) + def is_input_inst_addr_kana(self): + return self.inst_info_data.inst_addr_kana or '' + + # 住所(漢字) + def is_input_inst_addr(self): + return self.inst_info_data.inst_addr or '' + + # 病院種別 + def is_input_hp_assrt_name(self): + return self.inst_info_data.hp_assrt_name or '' + + # 再審査区分 + def is_checked_re_exam_cd(self): + return 'checked' if self.inst_info_data.re_exam_cd else '' + + # 関連大学親名 + def is_input_rltd_univ_prnt_cd(self): + return self.inst_info_data.rltd_univ_prnt_cd or '' + + def is_input_parent_name(self): + return self.inst_info_data.parent_name or '' + + # 微生物 + def is_input_insp_item_micrb(self): + return self.inst_info_data.insp_item_micrb or '' + + # 血清 + def is_input_insp_item_serum(self): + return self.inst_info_data.insp_item_serum or '' + + # 血液 + def is_input_insp_item_blood(self): + return self.inst_info_data.insp_item_blood or '' + + # 病理 + def is_input_insp_item_patho(self): + return self.inst_info_data.insp_item_patho or '' + + # 寄生虫 + def is_input_insp_item_paras(self): + return self.inst_info_data.insp_item_paras or '' + + # 生化 + def is_input_insp_item_biochem(self): + return self.inst_info_data.insp_item_biochem or '' + + # RI + def is_input_insp_item_ri(self): + return self.inst_info_data.insp_item_ri or '' + + # 特務医務室 + def is_input_dcf_prnt_inst_cd(self): + return self.inst_info_data.dcf_prnt_inst_cd or '' + + # 一般 + def is_input_prmit_bed_num_gen(self): + return self.inst_info_data.prmit_bed_num_gen or '' + + # 療養 + def is_input_prmit_bed_num_rcup(self): + return self.inst_info_data.prmit_bed_num_rcup or '' + + # 精神 + def is_input_prmit_bed_num_mental(self): + return self.inst_info_data.prmit_bed_num_mental or '' + + # 感染症 + def is_input_prmit_bed_num_infection(self): + return self.inst_info_data.prmit_bed_num_infection or '' + + # 結核 + def is_input_prmit_bed_num_tuber(self): + return self.inst_info_data.prmit_bed_num_tuber or '' + + # その他 + def is_input_prmit_bed_num_other(self): + return self.inst_info_data.prmit_bed_num_other or '' + + # 合計 + def is_input_prmit_bed_num_sum(self): + return self.inst_info_data.prmit_bed_num_sum or '' + + # 病棟閉鎖   + def is_checked_ward_abolish_flg(self): + return 'checked' if self.inst_info_data.ward_abolish_flg == '1' else '' + + # 一部病棟閉鎖 + def is_checked_ward_abolish_flg_part(self): + return 'checked' if self.inst_info_data.ward_abolish_flg == '2' else '' + + # 病床数(定員) + def is_input_bed_num(self): + return self.inst_info_data.bed_num or '' + + # メンテ年月日 + def is_input_prmit_bed_maint_ymd(self): + return self.inst_info_data.prmit_bed_maint_ymd or '' + + # 代表者個人コード + def is_input_inst_repre_cd(self): + return self.inst_info_data.inst_repre_cd or '' + + # 施設代表者(カナ) + def is_input_inst_repre_kana(self): + return self.inst_info_data.inst_repre_kana or '' + + # 施設代表者(漢字) + def is_input_inst_repre(self): + return self.inst_info_data.inst_repre or '' + + # 修正年月日 + def is_input_sys_update_date(self): + sys_update_date = str(self.inst_info_data.sys_update_date) + return sys_update_date[:10] + + # 勤務医師ボタン表示 + def is_disabled_doctor_wrkplace(self): + return 'disabled' if self.doctor_wrkplace_count == 0 else '' + + # 現在のページ(表示用) + def is_pageNum_view(self): + return self.pageNum + 1 + + # 前ボタン + def is_disabled_prev(self): + return 'disabled' if self.pageNum == 0 else '' + + # 次ボタン + def is_disabled_next(self): + if self.pageNum == self.postCnt - 1: + return 'disabled' + return '' + + # 診療科目のデータ件数 + def is_input_inst_trt_course_data_size(self): + if self.inst_trt_coursed_data is None: + return 0 + return len(self.inst_trt_coursed_data) + + def is_data_string_empty_fromat(self, data_string): + return data_string or '' + + def disabled_button(self): + return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' + + def is_form_submitted(self): + return self.form_data is not None + + def is_data_empty(self): + return len(self.doctor_data) == 0 + + def is_data_overflow_max_length(self): + return len(self.doctor_data) >= environment.SEARCH_RESULT_MAX_COUNT diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py index a0b5107c..e728945a 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_view_model.py @@ -7,7 +7,7 @@ from pydantic import BaseModel from src.model.db.prefc_master import PrefcMasterModel from src.model.db.inst_div_master import InstDivMasterModel from src.model.request.ultmarc_inst import UltmarcInstModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.db.ultmarc_inst import UltmarcInstDBModel from src.system_var import environment @@ -16,7 +16,7 @@ class UltmarcInstViewModel(BaseModel): is_batch_processing: Optional[bool] prefc_models: list[PrefcMasterModel] inst_div_models: list[InstDivMasterModel] - inst_data: Optional[list[BisDisplayModel]] = [] + inst_data: Optional[list[UltmarcInstDBModel]] = [] form_data: Optional[UltmarcInstModel] def ultmarc_data_json_str(self): @@ -25,7 +25,7 @@ class UltmarcInstViewModel(BaseModel): return json.dumps([model.dict() for model in self.inst_data], ensure_ascii=False, default=date_handler) # ULT施設コード - def is_input_dcf_dsf_inst_cdd(self): + def is_input_dcf_dsf_inst_cd(self): if not self.is_form_submitted(): return '' return self.form_data.dcf_dsf_inst_cd or '' @@ -36,6 +36,11 @@ class UltmarcInstViewModel(BaseModel): return '' return self._selected_value(self.form_data.inst_div_cd, selected_inst_div_cd) + def is_input_form_inst_div_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.inst_div_cd or '' + # ULT施設名(漢字) def is_input_form_inst_name_kanji(self): if not self.is_form_submitted(): @@ -63,9 +68,14 @@ class UltmarcInstViewModel(BaseModel): # 削除施設表示 def is_checked_delFlg(self): if not self.is_form_submitted(): - return '' + return 'checked' return self._checked_value(self.form_data.delFlg) + def is_input_delFlg(self): + if not self.is_form_submitted(): + return '' + return self.form_data.delFlg or '' + # ULT施設住所 def is_input_inst_addr(self): if not self.is_form_submitted(): @@ -78,6 +88,11 @@ class UltmarcInstViewModel(BaseModel): return '' return self._selected_value(self.form_data.prefc_cd, selected_prefc_cd) + def is_input_form_prefc_cd(self): + if not self.is_form_submitted(): + return '' + return self.form_data.prefc_cd or '' + def disabled_button(self): return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else '' @@ -85,16 +100,16 @@ class UltmarcInstViewModel(BaseModel): return self.form_data is not None def is_data_empty(self): - return len(self.doctor_data) == 0 + return len(self.inst_data) == 0 def is_data_overflow_max_length(self): - return len(self.doctor_data) >= environment.BIO_SEARCH_RESULT_MAX_COUNT + return len(self.inst_data) >= environment.SEARCH_RESULT_MAX_COUNT def _format_date_string(self, date_string): if date_string is None: return '' - date = datetime.strptime(date_string, '%Y%m%d') - return date.strftime('%Y/%m/%d') + date_str = datetime.strptime(date_string, '%Y%m%d') + return date_str.strftime('%Y/%m/%d') def _selected_value(self, form_value: str, current_value: str): return 'selected' if form_value == current_value else '' diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index 60f1543d..5860148c 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -34,7 +34,7 @@ class UltmarcDoctorRepository(BaseRepository): LEFT JOIN src05.com_alma ON com_dr.alma_cd = com_alma.alma_cd WHERE {where_clause} - GROUP BY com_dr.dcf_pcf_dr_cd + GROUP BY com_dr.dcf_pcf_dr_cd, com_inst.dcf_dsf_inst_cd, com_blng_sec.blng_sec_cd ORDER BY com_dr.dcf_pcf_dr_cd, com_dr_wrkplace.dcf_dsf_inst_cd, @@ -127,6 +127,13 @@ class UltmarcDoctorRepository(BaseRepository): parameter.grad_y = f'%{parameter.grad_y}%' where_clauses.append(SQLCondition('grad_y', condition.LIKE, 'grad_y')) + # 検索条件が入力されていない場合 + # if not where_clauses: + # where_clauses.append(SQLCondition( + # '', '', '(LENGTH(com_inst.abolish_ymd) = 0 OR com_inst.abolish_ymd IS NULL)', literal=True)) + # where_clauses.append(SQLCondition( + # '', '', '(LENGTH(com_dr.abolish_ymd) = 0 OR com_dr.abolish_ymd IS NULL)', literal=True)) + where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py index 14f0de45..67ab328d 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py @@ -5,21 +5,23 @@ from src.repositories.base_repository import BaseRepository class UltmarcDoctorWrkplaceHisRepository(BaseRepository): FETCH_SQL = """\ - SELECT - com_inst.dcf_dsf_inst_cd, - com_inst.inst_name_kanji, - com_blng_sec.blng_sec_name, - univ_post.form_post_name AS univ_post_name, - post.form_post_name AS post_name, - com_dr_wrkplace.aply_start_ymd - FROM src05.com_dr - LEFT JOIN src05.com_dr_wrkplace ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace.dcf_pcf_dr_cd - LEFT JOIN src05.com_inst ON com_dr_wrkplace.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd - LEFT JOIN src05.com_blng_sec ON com_dr_wrkplace.blng_sec_cd = com_blng_sec.blng_sec_cd - LEFT JOIN src05.com_post as univ_post ON com_dr_wrkplace.identity_cd = univ_post.post_cd - LEFT JOIN src05.com_post as post ON com_dr_wrkplace.post_cd = post.post_cd + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.inst_name_kanji, + com_blng_sec.blng_sec_name, + univ_post.form_post_name as univ_post_name, + post.form_post_name as post_name, + com_dr_wrkplace_his.aply_start_ymd, + com_dr_wrkplace_his.aply_end_ymd + FROM com_dr + LEFT JOIN com_dr_wrkplace_his ON com_dr.dcf_pcf_dr_cd = com_dr_wrkplace_his.dcf_pcf_dr_cd + LEFT JOIN com_inst ON com_dr_wrkplace_his.dcf_dsf_inst_cd = com_inst.dcf_dsf_inst_cd + LEFT JOIN com_blng_sec ON com_dr_wrkplace_his.blng_sec_cd = com_blng_sec.blng_sec_cd + LEFT JOIN com_post as univ_post ON com_dr_wrkplace_his.identity_cd = univ_post.post_cd + LEFT JOIN com_post as post ON com_dr_wrkplace_his.post_cd = post.post_cd WHERE com_dr.dcf_pcf_dr_cd = :id - ORDER BY com_dr_wrkplace.aply_start_ymd DESC + ORDER BY com_dr_wrkplace_his.aply_end_ymd DESC, + com_dr_wrkplace_his.aply_start_ymd DESC """ def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceHisDBModel]: diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py index fd1295d7..cc6a9dc3 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py @@ -1,4 +1,6 @@ from src.model.db.ultmarc_doctor_wrkplace import UltmarcDoctorWrkplaceDBModel +from src.model.db.ultmarc_doctor_wrkplace_count import UltmarcDoctorWrkplaceCountDBModel + from src.repositories.base_repository import BaseRepository @@ -37,3 +39,25 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): raise e finally: self._database.disconnect() + + FETCH_COUNT_SQL = """\ + SELECT COUNT(*) AS count + FROM src05.com_dr_wrkplace + WHERE dcf_dsf_inst_cd = :id + """ + + def fetch_count(self, id) -> UltmarcDoctorWrkplaceCountDBModel: + try: + self._database.connect() + query = self.FETCH_COUNT_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcDoctorWrkplaceCountDBModel(**r) for r in result] + if len(models) == 0: + return 0 + return models[0].count + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py index 438c429d..2cf08f77 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py @@ -1,6 +1,7 @@ from src.db import sql_condition as condition from src.db.sql_condition import SQLCondition from src.model.db.ultmarc_inst import UltmarcInstDBModel +from src.model.db.ultmarc_inst_info import UltmarcInstInfoDBModel from src.model.request.ultmarc_inst import UltmarcInstModel from src.repositories.base_repository import BaseRepository from src.util.string_util import is_not_empty @@ -95,14 +96,94 @@ class UltmarcInstRepository(BaseRepository): where_clauses.append(SQLCondition('inst_addr', condition.LIKE, 'inst_addr')) # 削除表示フラグ - if is_not_empty(parameter.delFlg): + if is_not_empty(parameter.delFlg) == False: # 論理和での検索 where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) # 検索条件が入力されていない場合 - if not where_clauses: - where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) + # if not where_clauses: + # where_clauses.append(SQLCondition('', '', '(length(abolish_ymd) = 0 OR abolish_ymd IS NULL)', literal=True)) where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses]) return where_clauses_str + + FETCH_ONE_SQL = """\ + SELECT + com_inst.dcf_dsf_inst_cd, + com_inst.unconf_flg, + com_inst.dup_opp_cd, + com_inst.close_start_ym, + com_inst.close_flg, + com_inst.delete_sche_reason_cd, + com_inst.abolish_ymd, + com_inst.estab_sche_ym, + com_inst.estab_sche_flg, + com_inst.form_inst_name_kana, + com_inst.form_inst_name_kanji, + com_inst.inst_name_kana, + com_inst.inst_name_kanji, + com_inst.manage_cd, + com_inst.postal_number, + com_inst.inst_phone_number, + com_inst.addr_unknown_reason_cd, + com_inst.phone_number_non_flg, + com_inst.inst_addr_kana, + com_inst.inst_addr, + com_inst.re_exam_cd, + com_inst.rltd_univ_prnt_cd, + com_inst.insp_item_micrb, + com_inst.insp_item_serum, + com_inst.insp_item_blood, + com_inst.insp_item_patho, + com_inst.insp_item_paras, + com_inst.insp_item_biochem, + com_inst.insp_item_ri, + com_inst.prmit_bed_num_gen, + com_inst.prmit_bed_num_rcup, + com_inst.prmit_bed_num_mental, + com_inst.prmit_bed_num_infection, + com_inst.prmit_bed_num_tuber, + com_inst.prmit_bed_num_other, + com_inst.prmit_bed_num_sum, + com_inst.ward_abolish_flg, + com_inst.bed_num, + com_inst.prmit_bed_maint_ymd, + com_inst.inst_repre_cd, + com_inst.inst_repre_kana, + com_inst.inst_repre, + com_inst.sys_update_date, + com_inst_delete_sche_reason.delete_sche_reason, + com_inst_div.inst_div_name, + com_manage.manage_name, + com_hp_assrt.hp_assrt_name, + parent_inst.form_inst_name_kanji as parent_name, + com_spcare_med_office_dat.dcf_prnt_inst_cd + FROM src05.com_inst + LEFT JOIN src05.com_inst_div ON com_inst.inst_div_cd = com_inst_div.inst_div_cd + LEFT JOIN src05.com_inst_delete_sche_reason ON com_inst.delete_sche_reason_cd = com_inst_delete_sche_reason.delete_sche_reason_cd + LEFT JOIN src05.com_manage ON com_inst.manage_cd = com_manage.manage_cd + LEFT JOIN src05.com_inst_addr_unknown_reason ON com_inst.addr_unknown_reason_cd = com_inst_addr_unknown_reason.addr_unknown_reason_cd + LEFT JOIN src05.com_hp_assrt ON com_hp_assrt.hp_assrt_cd = com_inst.hp_assrt_cd + LEFT JOIN src05.com_re_exam ON com_inst.re_exam_cd = com_re_exam.re_exam_cd + LEFT JOIN src05.com_spcare_med_office_dat ON com_inst.dcf_dsf_inst_cd = com_spcare_med_office_dat.dcf_chld_inst_cd + LEFT JOIN src05.com_inst as parent_inst ON com_inst.rltd_univ_prnt_cd = parent_inst.dcf_dsf_inst_cd + WHERE com_inst.dcf_dsf_inst_cd = :id + \ + """ + + def fetch_one(self, id) -> UltmarcInstInfoDBModel: + try: + self._database.connect() + query = self.FETCH_ONE_SQL + result = self._database.execute_select(query, {'id': id}) + models = [UltmarcInstInfoDBModel(**r) for r in result] + if len(models) == 0: + return None + return models[0] + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py new file mode 100644 index 00000000..eaee391a --- /dev/null +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py @@ -0,0 +1,31 @@ +from src.model.db.ultmarc_inst_trt_course import UltmarcInstTrtCourseDBModel +from src.repositories.base_repository import BaseRepository + + +class UltmarcInstTrtCourseRepository(BaseRepository): + + FETCH_SQL = """\ + SELECT trt_course_name_abb + FROM src05.com_inst + JOIN src05.com_inst_trt_course ON com_inst.dcf_dsf_inst_cd = com_inst_trt_course.dcf_dsf_inst_cd + LEFT JOIN src05.com_trt_course ON com_inst_trt_course.trt_course_cd = com_trt_course.trt_course_cd + WHERE com_inst.dcf_dsf_inst_cd = :id + ORDER BY com_trt_course.trt_course_cd + """ + + def fetch_many(self, id) -> list[UltmarcInstTrtCourseDBModel]: + try: + self._database.connect() + query = self.FETCH_SQL + result = self._database.execute_select(query, {'id': id}) + + models = [UltmarcInstTrtCourseDBModel(**r) for r in result] + if len(models) == 0: + return None + return models + except Exception as e: + # TODO: ファイルへの書き出しはloggerでやる + print(f"[ERROR] DB Error : Exception={e.args}") + raise e + finally: + self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py index f50fc02a..c76032a3 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py @@ -1,4 +1,4 @@ -from src.model.db.ultmarc_trt_course import UltmarcTrtCoursedbmodel +from src.model.db.ultmarc_trt_course import UltmarcTrtCourseDBModel from src.repositories.base_repository import BaseRepository @@ -13,13 +13,13 @@ class UltmarcTrtCourseRepository(BaseRepository): ORDER BY com_trt_course.trt_course_cd """ - def fetch_many(self, id) -> list[UltmarcTrtCoursedbmodel]: + def fetch_many(self, id) -> list[UltmarcTrtCourseDBModel]: try: self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) - models = [UltmarcTrtCoursedbmodel(**r) for r in result] + models = [UltmarcTrtCourseDBModel(**r) for r in result] if len(models) == 0: return None return models diff --git a/ecs/jskult-webapp/src/services/ultmarc_view_service.py b/ecs/jskult-webapp/src/services/ultmarc_view_service.py index 65cc57a0..d8103c93 100644 --- a/ecs/jskult-webapp/src/services/ultmarc_view_service.py +++ b/ecs/jskult-webapp/src/services/ultmarc_view_service.py @@ -11,6 +11,7 @@ from src.model.request.ultmarc_doctor import UltmarcDoctorModel from src.model.request.ultmarc_inst import UltmarcInstModel from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel from src.model.view.ultmarc_inst_view_model import UltmarcInstViewModel +from src.model.view.ultmarc_inst_info_view_model import UltmarcInstInfoViewModel from src.model.view.ultmarc_doctor_info_view_model import UltmarcDoctorInfoViewModel from src.repositories.base_repository import BaseRepository from src.repositories.prefc_master_repository import PrefcMasterRepository @@ -18,6 +19,7 @@ from src.repositories.inst_master_repository import InstDivMasterRepository from src.repositories.ultmarc_inst_repository import UltmarcInstRepository from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository from src.repositories.ultmarc_trt_course_repository import UltmarcTrtCourseRepository +from src.repositories.ultmarc_inst_trt_course_repository import UltmarcInstTrtCourseRepository from src.repositories.ultmarc_sosiety_repository import UltmarcSosietyRepository from src.repositories.ultmarc_dr_wrkplace_repository import UltmarcDoctorWrkplaceRepository from src.repositories.ultmarc_dr_wrkplace_his_repository import UltmarcDoctorWrkplaceHisRepository @@ -33,6 +35,7 @@ class UltmarcViewService(BaseService): 'inst_div_repository': InstDivMasterRepository, 'ultmarc_inst_repository': UltmarcInstRepository, 'ultmarc_trt_course_repository': UltmarcTrtCourseRepository, + 'ultmarc_inst_trt_course_repository': UltmarcInstTrtCourseRepository, 'ultmarc_sosiety_repository': UltmarcSosietyRepository, 'ultmarc_doctor_wrkplace_repository': UltmarcDoctorWrkplaceRepository, 'ultmarc_doctor_wrkplace_his_repository': UltmarcDoctorWrkplaceHisRepository, @@ -44,6 +47,7 @@ class UltmarcViewService(BaseService): inst_div_repository: InstDivMasterRepository ultmarc_inst_repository: UltmarcInstRepository ultmarc_trt_course_repository: UltmarcTrtCourseRepository + ultmarc_inst_trt_course_repository: UltmarcInstTrtCourseRepository ultmarc_sosiety_repository: UltmarcSosietyRepository ultmarc_doctor_wrkplace_repository: UltmarcDoctorWrkplaceRepository ultmarc_doctor_wrkplace_his_repository: UltmarcDoctorWrkplaceHisRepository @@ -56,6 +60,7 @@ class UltmarcViewService(BaseService): self.inst_div_repository = repositories['inst_div_repository'] self.ultmarc_inst_repository = repositories['ultmarc_inst_repository'] self.ultmarc_trt_course_repository = repositories['ultmarc_trt_course_repository'] + self.ultmarc_inst_trt_course_repository = repositories['ultmarc_inst_trt_course_repository'] self.ultmarc_sosiety_repository = repositories['ultmarc_sosiety_repository'] self.ultmarc_doctor_wrkplace_repository = repositories['ultmarc_doctor_wrkplace_repository'] self.ultmarc_doctor_wrkplace_his_repository = repositories['ultmarc_doctor_wrkplace_his_repository'] @@ -93,6 +98,27 @@ class UltmarcViewService(BaseService): ultmarc_inst_data = self.ultmarc_inst_repository.fetch_many(parameter=search_params) return ultmarc_inst_data + def info_ultmarc_inst_view( + self, + id, + session: UserSession + ) -> UltmarcInstInfoViewModel: + + # 施設情報画面の表示データ取得 + # 施設情報を取得 + inst_info = self.ultmarc_inst_repository.fetch_one(id) + # 診療科目情報を取得 + inst_trt_course = self.ultmarc_inst_trt_course_repository.fetch_many(id) + # 医師件数を取得 + doctor_count = self.ultmarc_doctor_wrkplace_repository.fetch_count(id) + + ultmarc = UltmarcInstInfoViewModel( + inst_info_data=inst_info, + inst_trt_coursed_data=inst_trt_course, + doctor_wrkplace_count=doctor_count + ) + return ultmarc + def search_doctor_data(self, search_params: UltmarcDoctorModel): # 医師データを検索 ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params) diff --git a/ecs/jskult-webapp/src/system_var/environment.py b/ecs/jskult-webapp/src/system_var/environment.py index aed9916c..cd54d35d 100644 --- a/ecs/jskult-webapp/src/system_var/environment.py +++ b/ecs/jskult-webapp/src/system_var/environment.py @@ -19,4 +19,5 @@ DB_PASSWORD = os.environ['DB_PASSWORD'] DB_SCHEMA = os.environ['DB_SCHEMA'] BIO_SEARCH_RESULT_MAX_COUNT = int(os.environ['BIO_SEARCH_RESULT_MAX_COUNT']) -SESSION_EXPIRE_MINUTE=int(os.environ['SESSION_EXPIRE_MINUTE']) \ No newline at end of file +SEARCH_RESULT_MAX_COUNT = int(os.environ['SEARCH_RESULT_MAX_COUNT']) +SESSION_EXPIRE_MINUTE = int(os.environ['SESSION_EXPIRE_MINUTE']) diff --git a/ecs/jskult-webapp/src/templates/docInfo.html b/ecs/jskult-webapp/src/templates/docInfo.html index 1202faee..7e807303 100644 --- a/ecs/jskult-webapp/src/templates/docInfo.html +++ b/ecs/jskult-webapp/src/templates/docInfo.html @@ -33,7 +33,7 @@ - + - + + @@ -175,35 +188,44 @@ + - {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} - {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} - - - - - - - - - - {% endif %} - {% endfor %} - + {% for doctor_wrkplace_data in ultmarc.doctor_wrkplace_data %} + {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd) != ''%} + + + + + + + + + + {% endif %} + {% endfor %} + {% for doctor_wrkplace_his_data in ultmarc.doctor_wrkplace_his_data %} {% if ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd) != ''%} - - + + - - + + {% endif %} {% endfor %} - +

医師情報

{{ultmarc.subtitle}}

{% if ultmarc.is_batch_processing %}
日次バッチ処理中のため、データが正しく表示されない可能性があります
@@ -50,16 +50,29 @@
- + {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} - +
終了年月日
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
+ {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.dcf_dsf_inst_cd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.inst_name_kanji)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.blng_sec_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.univ_post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_data.post_name)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_data.aply_start_ymd)}}9999/99/99
{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}}
+ {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.dcf_dsf_inst_cd)}} + {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.inst_name_kanji)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.blng_sec_name)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.univ_post_name)}} {{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.post_name)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_data_string_empty_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_start_ymd)}}{{ultmarc.is_input_ymd_fromat(doctor_wrkplace_his_data.aply_end_ymd)}}
diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index c3168212..403b7f33 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -22,7 +22,7 @@ - +

医師検索一覧

{{ultmarc.subtitle}}

{% if ultmarc.is_batch_processing %}
日次バッチ処理中のため、データが正しく表示されない可能性があります
@@ -140,7 +140,17 @@
- + {% if ultmarc.is_form_submitted() and ultmarc.is_data_overflow_max_length() %} +
+ 検索結果が最大件数を超えました。検索条件を見直しして下さい。 +
+ {% endif %} + {% if ultmarc.is_form_submitted() and ultmarc.is_data_empty() %} +
+ 対象のデータが存在しません。 +
+ {% endif %} + @@ -156,8 +166,24 @@ const searchResultData = JSON.parse(searchResultString) if (searchResultData.length == 0) { return - } - $(".pagination").pagination({ + }else if(searchResultData.length > 500){ + return + } + // 検索条件をセッションに入れる + sessionStorage.clear(); + sessionStorage.setItem('ctrl_dcf_pcf_dr_cd','{{ultmarc.is_input_dcf_pcf_dr_cd()}}'); + sessionStorage.setItem('ctrl_dr_name','{{ultmarc.is_input_dr_name()}}'); + sessionStorage.setItem('ctrl_dr_name_kana','{{ultmarc.is_input_dr_name_kana()}}'); + sessionStorage.setItem('ctrl_dcf_dsf_inst_cd','{{ultmarc.is_input_dcf_dsf_inst_cd()}}'); + sessionStorage.setItem('ctrl_form_inst_name_kanji','{{ultmarc.is_input_form_inst_name_kanji()}}'); + sessionStorage.setItem('ctrl_form_inst_name_kana','{{ultmarc.is_input_form_inst_name_kana()}}'); + sessionStorage.setItem('ctrl_prefc_cd','{{ultmarc.is_input_form_prefc_cd()}}'); + sessionStorage.setItem('ctrl_blng_sec_name','{{ultmarc.is_input_blng_sec_name()}}'); + sessionStorage.setItem('ctrl_trt_course_name','{{ultmarc.is_input_trt_course_name()}}'); + sessionStorage.setItem('ctrl_alma','{{ultmarc.is_input_alma()}}'); + sessionStorage.setItem('ctrl_grad_y','{{ultmarc.is_input_grad_y()}}'); + + $(".pagination").pagination({ dataSource: function(done) { done(searchResultData) }, @@ -175,6 +201,11 @@ }) }); + function OnLinkClick(){ + sessionStorage.clear(); + return true; + } + function pagination_content(datas) { const display_keys = [ 'dcf_pcf_dr_cd', @@ -192,7 +223,7 @@ if(key=='dcf_pcf_dr_cd') inner_content = `${data['dcf_pcf_dr_cd'] || ''}`; if(key=='dcf_dsf_inst_cd') - inner_content = `${data['form_inst_name_kanji'] || ''}`; + inner_content = `${data['form_inst_name_kanji'] || ''}`; return `${inner_content || ''}` }); return ` @@ -208,7 +239,7 @@ }) } - // 配列パラメータを加工にする + 配列パラメータを加工にする function CheckBoxListPocessing() { var vals = []; // 配列を定義 diff --git a/ecs/jskult-webapp/src/templates/instInfo.html b/ecs/jskult-webapp/src/templates/instInfo.html new file mode 100644 index 00000000..2ce03d2b --- /dev/null +++ b/ecs/jskult-webapp/src/templates/instInfo.html @@ -0,0 +1,285 @@ + + + + {% with subtitle = ultmarc.subtitle %} + {% include '_header.html' %} + {% endwith %} + + + + + + + +

+ {{ultmarc.subtitle}} +

+ {% if ultmarc.is_batch_processing %} +
日次バッチ処理中のため、データが正しく表示されない可能性があります
+ {% endif %} + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + {{ultmarc.is_pageNum_view()}}/{{ultmarc.postCnt}} + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
施設コード + + 未確認 + 施設コード変換先 + + 休院店開始年月 + + 休院店 +
削除予定理由削除日 + + 開業予定年月 + + 開業 +
正式施設名(カナ)
正式施設名(漢字)
略式施設名(カナ)施設区分名
略式施設名(漢字)経営体 + + +
郵便番号 + + 住所不明 + 施設電話番号 + + 電話なし +
住所(カナ)
住所(漢字)
+ +
+ + + + + + + + + + + + + + + + + + + + +
病院種別再審査区分関連大学親名 + + +
診療科目 + {% if ultmarc.inst_trt_coursed_data != None %} + {% for inst_trt_course_data in ultmarc.inst_trt_coursed_data %} + + {% endfor %} + {% endif %} + {% for i in range(60-ultmarc.is_input_inst_trt_course_data_size()) %} + + {% endfor %} + +
検査工程 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
特務医務室許可病床数 + + + + + + + + + + + + + + + + + + + + + +
一般療養精神感染症結核その他合計
+
病棟閉鎖  一部病棟閉鎖
病床数(定員)メンテ年月日
+ + + + + + + + + + + + + + + + + + + + +
代表者個人コード
施設代表者(カナ)
施設代表者(漢字)
修正年月日
+ + \ No newline at end of file diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index 92db85ae..15988f05 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -7,7 +7,7 @@ \ No newline at end of file diff --git a/s3/config/jskult/task_settings/web_task_settings.env b/s3/config/jskult/task_settings/web_task_settings.env index 9cd4ecf8..b10c9342 100644 --- a/s3/config/jskult/task_settings/web_task_settings.env +++ b/s3/config/jskult/task_settings/web_task_settings.env @@ -4,3 +4,4 @@ AUTHORIZE_ENDPOINT=oauth2/authorize TOKEN_ENDPOINT=oauth2/token BIO_SEARCH_RESULT_MAX_COUNT=35000 SESSION_EXPIRE_MINUTE=20 +SEARCH_RESULT_MAX_COUNT=500