医師検索画面_検索表示は完了

This commit is contained in:
野間 2023-06-02 16:27:12 +09:00
parent 79d241aa18
commit 90944307ae
6 changed files with 65 additions and 709 deletions

View File

@ -66,7 +66,6 @@ def search_doc(
ultmarc_service: UltmarcViewService = Depends(get_service(UltmarcViewService)),
batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService))
):
# error_log(date("Y/m/d H:i:s") . " [INFO] UserId:" . $UserId . "\r\n", 3, "$execLog");
session: UserSession = request.session
# バッチ処理中の場合、機能を利用させない
# is_batch_processing = batch_status_service.is_batch_processing()
@ -82,10 +81,6 @@ def search_doc(
ultmarc.doctor_data = ultmarc_doctor_data
ultmarc.form_data = ultmarc_doctor_form
# bio: BioViewModel = bio_service.prepare_bio_view(session)
# bio.bio_data = ultmarc_doctor_data
# bio.form_data = bio_form
# セッション書き換え
session.update(
actions=[

View File

@ -6,7 +6,6 @@ from typing import Optional
from pydantic import BaseModel
from src.model.db.prefc_master import PrefcMasterModel
# from src.model.db.doctor_view import DoctorViewModel
from src.model.request.ultmarc_doctor import UltmarcDoctorModel
from src.model.view.bio_disp_model import BisDisplayModel
from src.system_var import environment
@ -16,58 +15,49 @@ class UltmarcDoctorViewModel(BaseModel):
subtitle: str = '医師検索一覧'
is_batch_processing: Optional[bool]
prefc_models: list[PrefcMasterModel]
# doctor_models: list[DoctorViewModel]
doctor_data: Optional[list[BisDisplayModel]] = []
form_data: Optional[UltmarcDoctorModel]
def display_wholesaler_names(self):
display_names = [
f'{whs_model.rec_whs_cd}-{whs_model.rec_whs_sub_cd}:{whs_model.nm}'
for whs_model in self.doctor_models
]
return display_names
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):
if not self.is_form_submitted():
return ''
return self.form_data.dcf_pcf_dr_cd
return self.form_data.dcf_pcf_dr_cd or ''
# 氏名(漢字)
def is_input_dr_name(self):
if not self.is_form_submitted():
return ''
return self.form_data.dr_name
return self.form_data.dr_name or ''
# 氏名(かな・カナ)
def is_input_dr_name_kana(self):
if not self.is_form_submitted():
return ''
return self.form_data.dr_name_kana
return self.form_data.dr_name_kana or ''
# 勤務先コード
def is_input_dcf_dsf_inst_cd(self):
if not self.is_form_submitted():
return ''
return self.form_data.dcf_dsf_inst_cd
return self.form_data.dcf_dsf_inst_cd or ''
# 勤務先名(漢字)
def is_input_form_inst_name_kanji(self):
if not self.is_form_submitted():
return ''
return self.form_data.form_inst_name_kanji
return self.form_data.form_inst_name_kanji or ''
# 勤務先名(かな・カナ)
def is_input_form_inst_name_kana(self):
if not self.is_form_submitted():
return ''
return self.form_data.form_inst_name_kana
return self.form_data.form_inst_name_kana or ''
# 勤務先都道府県
def is_selected_prefc_cd(self, selected_prefc_cd):
@ -79,73 +69,25 @@ class UltmarcDoctorViewModel(BaseModel):
def is_input_blng_sec_name(self):
if not self.is_form_submitted():
return ''
return self.form_data.blng_sec_name
return self.form_data.blng_sec_name or ''
# 診療科目(漢字)
def is_input_trt_course_name(self):
if not self.is_form_submitted():
return ''
return self.form_data.trt_course_name
return self.form_data.trt_course_name or ''
# 出身大学(漢字)
def is_input_alma(self):
if not self.is_form_submitted():
return ''
return self.form_data.alma
return self.form_data.alma or ''
# 卒年
def is_grad_y(self):
def is_input_grad_y(self):
if not self.is_form_submitted():
return ''
return self.form_data.grad_y
# ************************** のま作 **************************
# def is_selected_org_kbn(self, selected_org_kbn):
# if not self.is_form_submitted():
# return ''
# return self._selected_value(self.form_data.org_kbn, selected_org_kbn)
# def is_input_rec_ymd_from(self):
# if not self.is_form_submitted():
# return ''
# return self._format_date_string(self.form_data.rec_ymd_from)
# def is_input_rec_ymd_to(self):
# if not self.is_form_submitted():
# return ''
# return self._format_date_string(self.form_data.rec_ymd_to)
# def is_input_lot_num(self):
# if not self.is_form_submitted():
# return ''
# return self.form_data.rec_lot_num or ''
# def is_selected_data_kbn(self, selected_data_kbn):
# if not self.is_form_submitted():
# return ''
# return self._selected_value(self.form_data.data_kbn, selected_data_kbn)
# def is_input_rev_hsdnymd_srk_from(self):
# if not self.is_form_submitted():
# return ''
# return self._format_date_string(self.form_data.rev_hsdnymd_srk_from)
# def is_input_rev_hsdnymd_srk_to(self):
# if not self.is_form_submitted():
# return ''
# return self._format_date_string(self.form_data.rev_hsdnymd_srk_to)
# def is_checked_iko_flg(self):
# if not self.is_form_submitted():
# return ''
# return 'checked' if self.form_data.ikoFlg else ''
return self.form_data.grad_y or ''
def disabled_button(self):
return 'disabled' if self.is_data_empty() or self.is_data_overflow_max_length() else ''

View File

@ -81,20 +81,20 @@ class UltmarcDoctorRepository(BaseRepository):
if is_not_empty(parameter.dcf_dsf_inst_cd):
# 必ず部分一致で検索
parameter.dcf_dsf_inst_cd = f'%{parameter.dcf_dsf_inst_cd}%'
where_clauses.append(SQLCondition('com_inst.dcf_dsf_inst_cd',
condition.LIKE, 'dcf_dsf_inst_cd'))
where_clauses.append(SQLCondition(
'com_inst.dcf_dsf_inst_cd', condition.LIKE, 'dcf_dsf_inst_cd'))
# 勤務先名(漢字)
if is_not_empty(parameter.form_inst_name_kanji):
# 必ず部分一致で検索
parameter.form_inst_name_kanji = f'%{parameter.form_inst_name_kanji}%'
where_clauses.append(SQLCondition('form_inst_name_kanji', condition.LIKE,
'form_inst_name_kanji'))
where_clauses.append(SQLCondition(
'form_inst_name_kanji', condition.LIKE, 'form_inst_name_kanji'))
# 勤務先名(かな・カナ)
if is_not_empty(parameter.form_inst_name_kana):
# 必ず部分一致で検索
parameter.form_inst_name_kana = f'%{parameter.form_inst_name_kana}%'
where_clauses.append(SQLCondition('form_inst_name_kana', condition.LIKE,
'form_inst_name_kana'))
where_clauses.append(SQLCondition(
'form_inst_name_kana', condition.LIKE, 'form_inst_name_kana'))
# 勤務先都道府県
if is_not_empty(parameter.prefc_cd):
@ -104,8 +104,8 @@ class UltmarcDoctorRepository(BaseRepository):
if is_not_empty(parameter.blng_sec_name):
# 必ず部分一致で検索
parameter.blng_sec_name = f'%{parameter.blng_sec_name}%'
where_clauses.append(SQLCondition('com_blng_sec.blng_sec_name',
condition.LIKE, 'blng_sec_name'))
where_clauses.append(SQLCondition(
'com_blng_sec.blng_sec_name', condition.LIKE, 'blng_sec_name'))
# 診療科目(漢字)
if is_not_empty(parameter.trt_course_name):

View File

@ -8,16 +8,10 @@ from src.aws.aws_api_client import AWSAPIClient
from src.aws.s3 import S3Client
from src.model.internal.session import UserSession
from src.model.request.ultmarc_doctor import UltmarcDoctorModel
from src.model.view.bio_disp_model import BisDisplayModel
from src.model.view.ultmarc_doctor_view_model import UltmarcDoctorViewModel
from src.repositories.base_repository import BaseRepository
from src.repositories.bio_sales_view_repository import BioSalesViewRepository
from src.repositories.prefc_master_repository import PrefcMasterRepository
from src.repositories.ultmarc_doctor_repository import UltmarcDoctorRepository
from src.repositories.pharmacy_product_master_repository import \
PharmacyProductMasterRepository
from src.repositories.wholesaler_master_repository import \
WholesalerMasterRepository
from src.services.base_service import BaseService
from src.system_var import constants, environment
@ -52,58 +46,3 @@ class UltmarcViewService(BaseService):
# 医師データを検索
ultmarc_doctor_data = self.ultmarc_doctor_repository.fetch_many(parameter=search_params)
return ultmarc_doctor_data
# def search_download_bio_data(self, search_params: BioModel):
# # 生物由来データをダウンロードするために、DBから検索した結果をデータフレームに変換
# bio_sales_data_frame = self.bio_sales_repository.fetch_as_data_frame(parameter=search_params)
# return bio_sales_data_frame
# def write_excel_file(self, data_frame: pd.DataFrame, user_id: str, timestamp: datetime):
# # Excelに書き込み
# output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH,
# f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.xlsx')
# # テンプレートファイルをコピーして出力ファイルの枠だけを作る
# shutil.copyfile(
# src=constants.BIO_EXCEL_TEMPLATE_FILE_PATH,
# dst=output_file_path
# )
# # ExcelWriterの追記モード(`mode`='a')でファイルを開く
# # `engine``='openpyxlは、追記モードでExcelを開くためのおまじない(xlsxしか動作しないが、こちらが出すものなので問題ナシ)
# # 既存シートへの書き込みは、`if_sheet_exists='overlay'を指定する
# with pd.ExcelWriter(output_file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
# # `sheet_name`引数を省略した場合は、「Sheet1」に書き込む。
# # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。
# # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。
# data_frame.to_excel(writer, header=False, index=False, startrow=1, startcol=0)
# return output_file_path
# def write_csv_file(self, data_frame: pd.DataFrame, user_id: str, header: list[str], timestamp: datetime):
# # csvに書き込み
# output_file_path = path.join(constants.BIO_TEMPORARY_FILE_DIR_PATH,
# f'Result_{user_id}_{timestamp:%Y%m%d%H%M%S%f}.csv')
# # 横長のDataFrameとするため、ヘッダーの加工処理
# header_data = {}
# for df_column, header_column in zip(data_frame.columns, header):
# header_data[df_column] = header_column
# header_df = pd.DataFrame([header_data], index=None)
# output_df = pd.concat([header_df, data_frame])
# # ヘッダー行としてではなく、1レコードとして出力する
# output_df.to_csv(output_file_path, index=False, header=False)
# return output_file_path
# def upload_bio_data_file(self, local_file_path: str) -> None:
# bucket_name = environment.BIO_ACCESS_LOG_BUCKET
# # TODO: フォルダを変える
# file_key = f'bio/{path.basename(local_file_path)}'
# self.s3_client.upload_file(local_file_path, bucket_name, file_key)
# def generate_download_file_url(self, local_file_path: str, user_id: str, kind: str) -> str:
# bucket_name = environment.BIO_ACCESS_LOG_BUCKET
# # TODO: フォルダを変える
# file_key = f'bio/{path.basename(local_file_path)}'
# download_filename = f'{user_id}_生物由来卸販売データ.{kind}'
# return self.s3_client.generate_presigned_url(bucket_name, file_key, download_filename)

View File

@ -46,18 +46,18 @@ table{
}
.scroll_table::-webkit-scrollbar {
height: 5px;
width: 10px;
height: 5px;
width: 10px;
}
.scroll_table::-webkit-scrollbar-track {
border-radius: 5px;
background: #eee;
border-radius: 5px;
background: #eee;
}
.scroll_table::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #666;
border-radius: 5px;
background: #666;
}
.ult_bt {
@ -361,7 +361,7 @@ table{
}
.docHeader_bt{
width: 40%;s
width: 40%;
}
/* アルトマーク課題管理表No.2の修正 8% → 10% */
@ -405,18 +405,18 @@ table{
}
.docSearchScroll::-webkit-scrollbar {
height: 5px;
width: 10px;
height: 5px;
width: 10px;
}
.docSearchScroll::-webkit-scrollbar-track {
border-radius: 5px;
background: #eee;
border-radius: 5px;
background: #eee;
}
.docSearchScroll::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #666;
border-radius: 5px;
background: #666;
}
.allOnOffButton{
@ -471,18 +471,18 @@ table{
}
.scroll::-webkit-scrollbar {
height: 5px;
width: 10px;
height: 5px;
width: 10px;
}
.scroll::-webkit-scrollbar-track {
border-radius: 5px;
background: #eee;
border-radius: 5px;
background: #eee;
}
.scroll::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #666;
border-radius: 5px;
background: #666;
}
.rightBoderLine{

View File

@ -1,13 +1,3 @@
<?php
require_once('/home/nds_dwh/webroot/common/config/ultIniSet.inc');
require_once('/home/nds_dwh/webroot/common/function/sessionCheck.php');
require_once('/home/nds_dwh/webroot/common/function/timeout.php');
require_once('/home/nds_dwh/webroot/common/function/dbcls.php');
require_once('/home/nds_dwh/webroot/common/config/path.inc');
require_once('/home/nds_dwh/webroot/common/config/message.inc');
require_once('/home/nds_dwh/webroot/common/function/getDateBatchJSString.php');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
@ -16,137 +6,17 @@ require_once('/home/nds_dwh/webroot/common/function/getDateBatchJSString.php');
{% endwith %}
<link rel="stylesheet" href="/static/css/ultStyle.css">
<!-- <link rel="stylesheet" type="text/css" href="<?php echo $ultCss ?>"> -->
<!-- <script type="text/javascript" src="<?php echo $ultJsPath ?>"></script> -->
<script type="text/javascript">
controlCount = 11; // 検索フォームの入力ボックスの数 アルトマーク課題管理表No.2の修正
// function DisplayErrorDialog(strMesssage) {
// $( "#errorTxt" ).html( strMesssage );
// $("#error").dialog("open");
// }
// function CreateDialog() {
// $("#error").dialog({
// autoOpen: false,
// width: 400,
// modal: true,
// open: function (event, ui) {
// $(".ui-dialog-titlebar-close").click(function(){
// $("#error").dialog("close");
// location.href = '<?php echo $logoutPath ?>';
// });
// },
// buttons: [
// {
// text: 'OK',
// click: function(){
// $("#error").dialog("close");
// location.href = '<?php echo $logoutPath ?>';
// }
// }
// ]
// });
// }
// function imgLoad(){
// $(".ConfirmImg").attr("src","/common/css/image/kakunin.png");
// $(".ErrorImg").attr("src","/common/css/image/error.png");
// }
window.onload = function(){
// 見出し固定初期化
FixedMidashi.create();
// ボタン、テキストボックス初期化
formBtDisabled();
// メッセージダイアログ初期化
// CreateDialog();
// imgLoad();
}
</script>
</head>
<!-- <?php
// 施設検索情報の削除 -->
<!-- $_SESSION['instDelFlg'] = true;
if (isset($_POST['docBackBt'])|| isset($_POST['currentPageNum'])) {
// 前回の検索結果をそのまま表示
}
else if (isset($_POST['search_bt'])) {
$_SESSION['docTextbox_1'] = htmlspecialchars($_POST['textbox_1'], ENT_QUOTES);
$_SESSION['docTextbox_2'] = htmlspecialchars($_POST['textbox_2'], ENT_QUOTES);
$_SESSION['docTextbox_3'] = htmlspecialchars($_POST['textbox_3'], ENT_QUOTES);
$_SESSION['docTextbox_4'] = htmlspecialchars($_POST['textbox_4'], ENT_QUOTES);
$_SESSION['docTextbox_5'] = htmlspecialchars($_POST['textbox_5'], ENT_QUOTES);
$_SESSION['docTextbox_6'] = htmlspecialchars($_POST['textbox_6'], ENT_QUOTES);
$_SESSION['docTextbox_7'] = htmlspecialchars($_POST['textbox_7'], ENT_QUOTES);
$_SESSION['docTextbox_8'] = htmlspecialchars($_POST['textbox_8'], ENT_QUOTES);
$_SESSION['docTextbox_9'] = htmlspecialchars($_POST['textbox_9'], ENT_QUOTES);
$_SESSION['docTextbox_10'] = htmlspecialchars($_POST['textbox_10'], ENT_QUOTES);
$_SESSION['docTextbox_11'] = htmlspecialchars($_POST['textbox_11'], ENT_QUOTES);
} else if(isset($_POST['docSearchBt'])){
$_SESSION['docTextbox_1'] = null;
$_SESSION['docTextbox_2'] = null;
$_SESSION['docTextbox_3'] = null;
$_SESSION['docTextbox_4'] = $_POST['id'];
$_SESSION['docTextbox_5'] = null;
$_SESSION['docTextbox_6'] = null;
$_SESSION['docTextbox_7'] = null;
$_SESSION['docTextbox_8'] = null;
$_SESSION['docTextbox_9'] = null;
$_SESSION['docTextbox_10'] = null;
$_SESSION['docTextbox_11'] = null;
} else{
$_SESSION['docTextbox_1'] = null;
$_SESSION['docTextbox_2'] = null;
$_SESSION['docTextbox_3'] = null;
$_SESSION['docTextbox_4'] = null;
$_SESSION['docTextbox_5'] = null;
$_SESSION['docTextbox_6'] = null;
$_SESSION['docTextbox_7'] = null;
$_SESSION['docTextbox_8'] = null;
$_SESSION['docTextbox_9'] = null;
$_SESSION['docTextbox_10'] = null;
$_SESSION['docTextbox_11'] = null;
} -->
<!-- // どのページを表示させるか -->
<!-- if (isset($_POST['currentPageNum'])) {
$_SESSION['pageNumber'] = $_POST['currentPageNum'];
} elseif (isset($_POST['instSearchBt']) || isset($_POST['docBackBt'])) {
// なにもしない
} else {
$_SESSION['pageNumber'] = 1;
}
$pageNumber = $_SESSION['pageNumber'];
// 表示するデータの位置決める
$limit = ($pageNumber - 1) * INST_DATA_PER_PAGE;
$instDataPerPage = INST_DATA_PER_PAGE; -->
<!-- // DB接続 -->
<!-- $sqlCls = new sqlClass();
$isDBSuccess = $sqlCls->dbConnection($dbs, $user, $pass, $docSearchPath, __LINE__);
if (!isset($isDBSuccess)) {
$isDBSuccess = true; -->
<!-- // アルトマーク課題管理表No.2の追加 Start
$sql = "SELECT DISTINCT COM_INST.PREFC_CD, MST_PREFC.PREFC_NAME FROM COM_INST JOIN MST_PREFC ON COM_INST.PREFC_CD = MST_PREFC.PREFC_CD ORDER BY MST_PREFC.PREFC_CD";
$info = array($sql);
$prefc = $sqlCls->dbSelect($info, $docSearchPath, __LINE__);
if ($prefc == false) {
$isDBSuccess = false;
}
// アルトマーク課題管理表No.2の追加 End
}
?> -->
<!--検索フォーム-->
<body>
@ -155,17 +25,9 @@ if (!isset($isDBSuccess)) {
<tr>
<td class="docHeaderTd"><h1>医師検索一覧</h1></td>
<td class="docHeaderTdCenter docHeaderTdCenter">
<!-- <?php
// バッチ処理中判断
if(getDateBatchJSString($dbs, $user, $pass) && $isDBSuccess){
?> -->
{% if ultmarc.is_batch_processing %}
<div class="docButchMsg">日次バッチ処理中のため、データが正しく表示されない可能性があります</div>
{% endif %}
<!-- <?php
} -->
<!-- ?> -->
</td>
<td class="docHeaderTd docHeaderTdRight"><button class="docHeader_bt" onclick="backToMenu()">メニューへ</button></td>
</tr>
@ -179,26 +41,16 @@ if (!isset($isDBSuccess)) {
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" style="ime-mode:disabled;" type="text" name="ctrl_dcf_pcf_dr_cd"
value="{{ultmarc.is_input_dcf_pcf_dr_cd()}}" maxlength='10' oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION['docTextbox_1'])) {
echo $_SESSION['docTextbox_1'];
} ?> -->
</td>
<td class="docSearchColumnTd">氏名(漢字)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_dr_name"
value="{{ultmarc.is_input_dr_name()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_3"])) {
echo $_SESSION["docTextbox_2"];
} ?> -->
</td>
<!-- アルトマーク課題管理表No.8の修正 氏名(カナ)→氏名(かな・カナ) -->
<td class="docSearchColumnTd">氏名(かな・カナ)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_dr_name_kana"
value="{{ultmarc.is_input_dr_name_kana()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_3"])) {
echo $_SESSION["docTextbox_3"];
} ?> -->
</td>
</tr>
<tr>
@ -206,35 +58,24 @@ if (!isset($isDBSuccess)) {
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" style="ime-mode:disabled;" type="text" name="ctrl_dcf_dsf_inst_cd"
value="{{ultmarc.is_input_dcf_dsf_inst_cd()}}" maxlength='11' oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION['docTextbox_4'])) {
echo $_SESSION['docTextbox_4'];
} ?> -->
</td>
<td class="docSearchColumnTd">勤務先名(漢字)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_form_inst_name_kanji"
value="{{ultmarc.is_input_form_inst_name_kanji()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_5"])) {
echo $_SESSION["docTextbox_5"];
} ?> -->
</td>
<!-- アルトマーク課題管理表No.8の修正 勤務先名(カナ)→勤務先名(かな・カナ) -->
<td class="docSearchColumnTd">勤務先名(かな・カナ)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_form_inst_name_kana"
value="{{ultmarc.is_input_form_inst_name_kana()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_6"])) {
echo $_SESSION["docTextbox_6"];
} ?> -->
</td>
</tr>
<tr>
<!-- アルトマーク課題管理表No.2の追加 Start -->
<td class="docSearchColumnTd">勤務先都道府県:</td>
<td class="search_tb">
<!-- 都道府県のドロップダウン -->
<select class="text search_dropdown" name="ctrl_prefc_cd" onchange="formBtDisabled()" onkeyup="formBtDisablead()">
<!--ToDo 都道府県ドロップダウンの中身を作成(マスタからとってこれる) -->
<!-- 都道府県ドロップダウンの中身を作成 -->
<option value=""></option>
{% for prefc in ultmarc.prefc_models %}
<option
@ -242,32 +83,17 @@ if (!isset($isDBSuccess)) {
{{prefc['prefc_name']}}
</option>
{% endfor %}
<!-- <?php
foreach ($prefc as $value){
?>
<option value="<?php echo $value['PREFC_CD'] ?>" <?php if(isset($_SESSION['docTextbox_11'])) { if($_SESSION['docTextbox_11'] == $value['PREFC_CD']) { echo ' selected'; }}; ?> >
<?php echo $value['PREFC_NAME']; ?></option>
<?php
}
?> -->
</select>
</td>
<!-- アルトマーク課題管理表No.2の追加 End -->
<td class="docSearchColumnTd">所属部科(漢字)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_blng_sec_name"
value="{{ultmarc.is_input_blng_sec_name()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_7"])) {
echo $_SESSION["docTextbox_7"];
} ?> -->
</td>
<td class="docSearchColumnTd">診療科目(漢字)</td>
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_trt_course_name"
value="{{ultmarc.is_input_trt_course_name()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_8"])) {
echo $_SESSION["docTextbox_8"];
} ?> -->
</td>
</tr>
<tr>
@ -275,16 +101,10 @@ if (!isset($isDBSuccess)) {
<td class="docSearchTextboxTd">
<input class="text docSearchTextbox" type="text" name="ctrl_alma"
value="{{ultmarc.is_input_alma()}}" oninput="formBtDisabled()">
<!-- <?php if(isset($_SESSION["docTextbox_9"])) {
echo $_SESSION["docTextbox_9"];
} ?> -->
</td>
<td class="docSearchColumnTd">卒年:</td>
<td class="docSearchTextboxTd"><input class="text docSearchTextbox" style="ime-mode:disabled;" type="text" name="ctrl_grad_y"
value="" maxlength='4' oninput="formBtDisabled()"></td>
<!-- <?php if(isset($_SESSION["docTextbox_10"])) {
echo $_SESSION["docTextbox_10"];
} ?> -->
value="{{ultmarc.is_input_grad_y()}}" maxlength='4' oninput="formBtDisabled()"></td>
<td class="search_btTd" colspan="2">
<input class="text ult_bt search_bt" id="clear" type="button" name="clear_bt" value="クリア" onclick="clr();">
<input class="ult_bt search_bt" id="search_bt" name="search_bt" value="検索" type="submit">
@ -293,223 +113,13 @@ if (!isset($isDBSuccess)) {
</tbody>
</table>
</form>
<!-- <?php
// アルトマーク課題管理表No.2の修正(LEFT JOIN MST_PREFC…の2行追加&SELECT COM_DR.DCF_PCF_DR_CD…の最後の検索項目MST_PREFC.PREFC_NAME追加)
// アルトマーク課題管理表No.7の修正 旧ソース:$cntSql = "SELECT COUNT(*) AS countNum FROM (((((((COM_DR)
if ((isset($_POST['search_bt']) || isset($_POST['currentPageNum']) || isset($_POST['docSearchBt']) || isset($_POST['docBackBt'])) && $isDBSuccess && isset($_SESSION['id'])) {
$cntSql = "SELECT COUNT(countNum) AS countNum FROM (SELECT COUNT(*) AS countNum FROM (((((((COM_DR
LEFT JOIN MST_PREFC ON COM_DR.PREFC_CD = MST_PREFC.PREFC_CD)
LEFT JOIN COM_DR_WRKPLACE ON COM_DR.DCF_PCF_DR_CD = COM_DR_WRKPLACE.DCF_PCF_DR_CD)
LEFT JOIN COM_INST ON COM_DR_WRKPLACE.DCF_DSF_INST_CD = COM_INST.DCF_DSF_INST_CD)
LEFT JOIN COM_BLNG_SEC ON COM_DR_WRKPLACE.BLNG_SEC_CD = COM_BLNG_SEC.BLNG_SEC_CD)
LEFT JOIN COM_DR_TRT_COURSE ON COM_DR.DCF_PCF_DR_CD = COM_DR_TRT_COURSE.DCF_PCF_DR_CD)
LEFT JOIN COM_TRT_COURSE ON COM_DR_TRT_COURSE.TRT_COURSE_CD = COM_TRT_COURSE.TRT_COURSE_CD)
LEFT JOIN COM_POST ON COM_DR_WRKPLACE.POST_CD = COM_POST.POST_CD)
LEFT JOIN COM_ALMA ON COM_DR.ALMA_CD = COM_ALMA.ALMA_CD
WHERE ";
// アルトマーク課題管理表No.7の修正 旧ソースSELECT COM_DR.DCF_PCF_DR_CD, COM_DR.DR_NAME, COM_INST.FORM_INST_NAME_KANJI, COM_INST.DCF_DSF_INST_CD, COM_BLNG_SEC.BLNG_SEC_NAME, COM_TRT_COURSE.TRT_COURSE_NAME, COM_POST.FORM_POST_NAME, COM_ALMA.ALMA, COM_DR.GRAD_Y, MST_PREFC.PREFC_NAME
$sql = "
SELECT COM_DR.DCF_PCF_DR_CD, COM_DR.DR_NAME, COM_INST.FORM_INST_NAME_KANJI, COM_INST.DCF_DSF_INST_CD, COM_BLNG_SEC.BLNG_SEC_NAME, COM_TRT_COURSE.TRT_COURSE_NAME, COM_POST.FORM_POST_NAME, COM_ALMA.ALMA, COM_DR.GRAD_Y, MST_PREFC.PREFC_NAME, COM_DR_WRKPLACE.BLNG_SEC_CD
FROM (((((((COM_DR
LEFT JOIN MST_PREFC ON COM_DR.PREFC_CD = MST_PREFC.PREFC_CD)
LEFT JOIN COM_DR_WRKPLACE ON COM_DR.DCF_PCF_DR_CD = COM_DR_WRKPLACE.DCF_PCF_DR_CD)
LEFT JOIN COM_INST ON COM_DR_WRKPLACE.DCF_DSF_INST_CD = COM_INST.DCF_DSF_INST_CD)
LEFT JOIN COM_BLNG_SEC ON COM_DR_WRKPLACE.BLNG_SEC_CD = COM_BLNG_SEC.BLNG_SEC_CD)
LEFT JOIN COM_DR_TRT_COURSE ON COM_DR.DCF_PCF_DR_CD = COM_DR_TRT_COURSE.DCF_PCF_DR_CD)
LEFT JOIN COM_TRT_COURSE ON COM_DR_TRT_COURSE.TRT_COURSE_CD = COM_TRT_COURSE.TRT_COURSE_CD)
LEFT JOIN COM_POST ON COM_DR_WRKPLACE.POST_CD = COM_POST.POST_CD)
LEFT JOIN COM_ALMA ON COM_DR.ALMA_CD = COM_ALMA.ALMA_CD
WHERE ";
$notfirstFlg = false;
// もし医師コードが入力されていたら
if (!empty($_SESSION["docTextbox_1"])) {
$cntSql .= "COM_DR.DCF_PCF_DR_CD LIKE :drCd";
$sql .= "COM_DR.DCF_PCF_DR_CD LIKE :drCd";
$val[":drCd"] = '%' . htmlspecialchars($_SESSION['docTextbox_1'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし医師名(漢字)が入力されていたら
if (!empty($_SESSION["docTextbox_2"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "DR_NAME LIKE :drName";
$sql .= "DR_NAME LIKE :drName";
$val[":drName"] = '%' . htmlspecialchars($_SESSION['docTextbox_2'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし医師名(カナ)が入力されていたら
if (!empty($_SESSION["docTextbox_3"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "DR_NAME_KANA LIKE :drNameKana";
$sql .= "DR_NAME_KANA LIKE :drNameKana";
$val[":drNameKana"] = '%' . htmlspecialchars(mb_convert_kana($_SESSION['docTextbox_3'], "khs", "UTF-8"), ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし勤務先コードが入力されていたら
if (!empty($_SESSION["docTextbox_4"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "COM_INST.DCF_DSF_INST_CD LIKE :instCd";
$sql .= "COM_INST.DCF_DSF_INST_CD LIKE :instCd";
$val[":instCd"] = '%' . htmlspecialchars($_SESSION['docTextbox_4'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし勤務先名(漢字)が入力されていたら
if (!empty($_SESSION["docTextbox_5"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "FORM_INST_NAME_KANJI LIKE :instNameKanji";
$sql .= "FORM_INST_NAME_KANJI LIKE :instNameKanji";
$val[":instNameKanji"] = '%' . htmlspecialchars($_SESSION['docTextbox_5'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし勤務先名(カナ)が入力されていたら
if (!empty($_SESSION["docTextbox_6"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "FORM_INST_NAME_KANA LIKE :instNameKana";
$sql .= "FORM_INST_NAME_KANA LIKE :instNameKana";
$val[":instNameKana"] = '%' . htmlspecialchars(mb_convert_kana($_SESSION['docTextbox_6'], "khs", "UTF-8"), ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// アルトマーク課題管理表No.2の追加 Start
// もし都道府県が入力されていたら
if ($_SESSION["docTextbox_11"] != null) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "COM_INST.PREFC_CD = :prefcCd";
$sql .= "COM_INST.PREFC_CD = :prefcCd";
$val[":prefcCd"] = htmlspecialchars($_SESSION['docTextbox_11'], ENT_QUOTES);
$notfirstFlg = true;
}
// アルトマーク課題管理表No.2の追加 End
// もし所属部科(漢字)が入力されていたら
if (!empty($_SESSION["docTextbox_7"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "COM_BLNG_SEC.BLNG_SEC_NAME LIKE :blngSecName";
$sql .= "COM_BLNG_SEC.BLNG_SEC_NAME LIKE :blngSecName";
$val[":blngSecName"] = '%' . htmlspecialchars($_SESSION['docTextbox_7'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし診療科目(漢字)が入力されていたら
if (!empty($_SESSION["docTextbox_8"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "TRT_COURSE_NAME LIKE :trtCourseName";
$sql .= "TRT_COURSE_NAME LIKE :trtCourseName";
$val[":trtCourseName"] = '%' . htmlspecialchars($_SESSION['docTextbox_8'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし出身大学(漢字)が入力されていたら
if (!empty($_SESSION["docTextbox_9"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "ALMA LIKE :alma";
$sql .= "ALMA LIKE :alma";
$val[":alma"] = '%' . htmlspecialchars($_SESSION['docTextbox_9'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// もし卒年が入力されていたら
if (!empty($_SESSION["docTextbox_10"])) {
if ($notfirstFlg) {
$cntSql .= " AND ";
$sql .= " AND ";
}
$cntSql .= "GRAD_Y LIKE :gradY";
$sql .= "GRAD_Y LIKE :gradY";
$val[":gradY"] = htmlspecialchars($_SESSION['docTextbox_10'], ENT_QUOTES) . '%';
$notfirstFlg = true;
}
// テキストボックスが未入力なら
// アルトマーク課題管理表No.7の修正
//if (!(empty($_SESSION["docTextbox_1"]) AND empty($_SESSION["docTextbox_2"]) AND empty($_SESSION["docTextbox_3"]) AND empty($_SESSION["docTextbox_4"]) AND empty($_SESSION["docTextbox_5"]) AND empty($_SESSION["docTextbox_6"]) AND empty($_SESSION["docTextbox_7"]) AND empty($_SESSION["docTextbox_8"]) AND empty($_SESSION["docTextbox_9"]) AND empty($_SESSION["docTextbox_10"]))) {
if (!(empty($_SESSION["docTextbox_1"]) AND empty($_SESSION["docTextbox_2"]) AND empty($_SESSION["docTextbox_3"]) AND empty($_SESSION["docTextbox_4"]) AND empty($_SESSION["docTextbox_5"]) AND empty($_SESSION["docTextbox_6"]) AND empty($_SESSION["docTextbox_7"]) AND empty($_SESSION["docTextbox_8"]) AND empty($_SESSION["docTextbox_9"]) AND empty($_SESSION["docTextbox_10"]) AND empty($_SESSION["docTextbox_11"]))) {
$sql .=" AND (LENGTH(COM_INST.ABOLISH_YMD) = 0 OR COM_INST.ABOLISH_YMD IS NULL)
AND (LENGTH(COM_DR.ABOLISH_YMD) = 0 OR COM_DR.ABOLISH_YMD IS NULL)";
$cntSql .=" AND (LENGTH(COM_INST.ABOLISH_YMD) = 0 OR COM_INST.ABOLISH_YMD IS NULL)
AND (LENGTH(COM_DR.ABOLISH_YMD) = 0 OR COM_DR.ABOLISH_YMD IS NULL)
GROUP BY COM_DR.DCF_PCF_DR_CD, COM_INST.DCF_DSF_INST_CD) AS A;"; // アルトマーク課題管理表No.7の修正 GROUP BY の1行追加
// ソートの基準設定
// アルトマーク課題管理表No.7の修正
//$sql .= " ORDER BY COM_DR.DCF_PCF_DR_CD";
$sql .= " ORDER BY COM_DR.DCF_PCF_DR_CD, COM_DR_WRKPLACE.DCF_DSF_INST_CD, COM_DR_WRKPLACE.BLNG_SEC_CD,COM_DR_TRT_COURSE.TRT_COURSE_CD";
// アルトマーク課題管理表No.7の修正
//$sql .=" LIMIT {$limit} , {$instDataPerPage};";
} else {
$sql .= ";";
$cntSql .= ";";
}
// 取得件数を計算
$info = array($cntSql, $val);
$dtCnt = $sqlCls->dbCount($info, $docSearchPath, __LINE__);
if ($dtCnt == false) {
$isDBSuccess = false;
}
// 件数が500以上かどうか
if ($dtCnt['countNum'] > 500) {
$resultMaxFlg = true;
$dtCnt['countNum'] = 0;
$selectDt = array();
} else {
$resultMaxFlg = false;
// データを取得
$info = array($sql, $val);
$selectDt = $sqlCls->dbSelect($info, $docSearchPath, __LINE__);
if ($selectDt == false) {
$isDBSuccess = false;
}
}
} else{
$resultMaxFlg = false;
$dtCnt['countNum'] = 0;
$selectDt = array();
}
if (!$isDBSuccess) {
$selectDt = array();
$dtCnt['countNum'] = 0;
}
$sqlCls->dbExit();
// ページ数の計算
$pageCount = ceil( $dtCnt['countNum'] / INST_DATA_PER_PAGE );
?> -->
<!--検索結果-->
<form class="_form" name="result" action="/ultmarc/docSearch" method="POST">
<input type="button" name="allon" onclick="allOn()" value="全選択" class="ult_bt allOnOffButton" />
<!-- <?php if ($dtCnt['countNum'] <= 0){ echo "disabled"; } ?> -->
<input type="button" name="alloff" onclick="allOff()" value="全解除" class="ult_bt allOnOffButton" />
<!-- <?php if ($dtCnt['countNum'] <= 0){ echo "disabled"; } ?> -->
<!--検索件数-->
<!-- <div class="result_info">件数:<?php echo $dtCnt['countNum']; ?>件 ページ数:<?php echo "$pageCount"; ?><br></div> -->
<!--ページネーション-->
<div id="light-pagination" class="pagination"></div>
<!--検索結果表示テーブル-->
@ -528,152 +138,15 @@ if (!isset($isDBSuccess)) {
<th>卒年</th>
</tr>
</thead>
<!-- <?php
if (isset($_POST['search_bt']) || isset($_POST['currentPageNum']) || isset($_POST['docSearchBt']) || isset($_POST['docBackBt'])) {
?> -->
<tbody id="result_data" class="result_data"></tbody>
<!-- <tbody>
<?php
// アルトマーク課題管理表No.7の修正 Start
// 同じ所属部課で複数の診療科目を担当する医師情報をマージする
$selectDtMerge = array();
$beforeDrCd = "";
$beforeInstCd = "";
$beforeSecCd = "";
$limitCount = 0;
$pageLastProcEndFlag = false; -->
<!-- foreach ($selectDt as $value) {
<tbody id="result_data" class="result_data"></tbody>
// 該当ページ内のデータであるかの判定 -->
<!-- if ($limit > $limitCount || $limitCount >= $limit + $instDataPerPage) {
if ($beforeDrCd != $value['DCF_PCF_DR_CD'] || $beforeInstCd != $value['DCF_DSF_INST_CD'] || $beforeSecCd != $value['BLNG_SEC_CD']) {
$beforeDrCd = $value['DCF_PCF_DR_CD'];
$beforeInstCd = $value['DCF_DSF_INST_CD'];
$beforeSecCd = $value['BLNG_SEC_CD'];
$limitCount++;
}
// 該当ページ内のデータでない場合一覧表示対象ではないのでスキップ
continue;
} -->
<!-- // 同じ医師情報の場合 -->
<!-- if ($beforeDrCd === $value['DCF_PCF_DR_CD'] && $beforeInstCd === $value['DCF_DSF_INST_CD'] && $beforeSecCd === $value['BLNG_SEC_CD']) {
// 医師情報が設定されていない場合、前のページの最後の医師データなのでスキップ
if (count($selectDtMerge) == 0) {
$limitCount++;
continue;
}
// 診療科目以外同じ情報という前提で、診療科目だけをマージ(・で区切って追加)
 SQLで取りましょう
$selectDtMerge[count($selectDtMerge) - 1]['TRT_COURSE_NAME'] .= $delimiterTrtCourceName . $value['TRT_COURSE_NAME'];
} -->
<!-- // 異なる医師情報の場合
else {
// 該当ページ内の最後のデータで、同じ医師情報がない場合、該当ページの処理は終わり
if ($pageLastProcEndFlag) {
$limitCount++;
$pageLastProcEndFlag = false;
continue;
}
// 医師情報を追加
$selectDtMerge[] = $value;
$beforeDrCd = $value['DCF_PCF_DR_CD'];
$beforeInstCd = $value['DCF_DSF_INST_CD'];
$beforeSecCd = $value['BLNG_SEC_CD'];
// 該当ページ内の最後のデータの場合、同じ医師情報がある可能性があるので次のデータを検索する為にカウントアップしない
if ($limitCount === $limit + $instDataPerPage - 1) {
$pageLastProcEndFlag = true;
}
else {
$limitCount++;
}
}
} -->
<!-- // アルトマーク課題管理表No.7の修正 End
$i = 0; // チェックボックスの名前つけに利用
// アルトマーク課題管理表No.7の修正
//foreach ($selectDt as $value) {
foreach ($selectDtMerge as $value) {
$i++;
?>
<tr>
<td><div class="checkNum"><input type="checkbox" class="checkbox selected" name="data<?php echo $i ?>" onclick="resultBtDisablead()" value="<?php echo $value['DCF_PCF_DR_CD'] ?>"></div></td>
<td><a href="<?php echo $docInfoPath . "/?id=" . $value['DCF_PCF_DR_CD'] ?>"><?php echo $value['DCF_PCF_DR_CD'] ?></a></td>
<td><?php echo $value['DR_NAME'] ?></td>
<td><a href="<?php echo $instInfoPath . "/?id=" . $value['DCF_DSF_INST_CD'] ?>"><?php echo $value['FORM_INST_NAME_KANJI'] ?></a></td>
<td><?php echo $value['BLNG_SEC_NAME'] ?></td>
<td><?php echo $value['TRT_COURSE_NAME'] ?></td>
<td><?php echo $value['FORM_POST_NAME'] ?></td>
<td><?php echo $value['ALMA'] ?></td>
<td><?php echo $value['GRAD_Y'] ?></td>
</tr>
<?php
}
?> -->
<!-- </tbody>
<?php
}
?> -->
</table>
<!--
※ ここに埋めよう
<?php
if ($resultMaxFlg && $isDBSuccess) {
?>
<div class="notFind"><?php echo $resultMaxMsg ?></div>
<?php
} else if (isset($_POST['search_bt']) && $dtCnt['countNum'] <= 0 && $isDBSuccess){
?>
<div class="notFind"><?php echo $notFindMsg ?></div>
<?php
} ?> -->
</div>
<!--操作ボタン-->
<input class="send ult_bt info_bt" type="submit" name="detail" value="医師情報">
</form>
<!-- ダイアログ -->
<!-- <div id="error" title="エラー">
<div style="float: left;width: 15%"><img class="ErrorImg" style="width: 50px;" src="/common/css/image/error.png"></div>
<div id="errorTxt" style="float: right; white-space: normal; width: 300px;"></div>
</div> -->
<!-- <?php
// DBエラーしていないか
if(!$isDBSuccess){
print "<script language=javascript>CreateDialog();</script>";
print "<script language=javascript>DisplayErrorDialog('$dbErrMsg');</script>";
}
?> -->
<!-- DB接続失敗エラーモーダル -->
<!-- {% with
modal_id='ErrorModal_DB',
modal_title='エラー',
message='DB接続に失敗しました。管理者にお問い合わせください。',
icon_key='warning',
modal_close_event='location.href="/logout?reason="',
buttons = [
{
'id': 'error_modal_db',
'class': 'btn btn-primary',
'text': 'OK',
'onclick_event': 'location.href="/logout?reason=''"'
}
]
%}
{% include '_modal.html' %}
{% endwith %} -->
<script type="text/javascript">
// <! --ページネーションの作成-- >
$(function() {
@ -686,7 +159,6 @@ if (!isset($isDBSuccess)) {
return
}
$(".pagination").pagination({
// 以下はテスト用コード
dataSource: function(done) {
done(searchResultData)
},
@ -708,26 +180,34 @@ if (!isset($isDBSuccess)) {
const display_keys = [
'dcf_pcf_dr_cd',
'dr_name',
'form_inst_name_kanji',
'dcf_dsf_inst_cd',
'blng_sec_name',
'trt_course_name',
'form_post_name',
'alma',
'grad_y',
'prefc_name',
'blng_sec_cd'
'grad_y'
];
const tableRow = document.createElement('tr')
return datas.map(function (data) {
return `
<tr class="result_data">
${display_keys.map((key) =>`<td>${data[key] || ''}</td>`)}
</tr>
`
})
return tableRow
}
return datas.map(function (data, index) {
let td = display_keys.map((key) =>{
let inner_content = data[key];
if(key=='dcf_pcf_dr_cd')
inner_content = `<a href="/ultmarc/docInfo?id=${data['dcf_pcf_dr_cd']}">${data['dcf_pcf_dr_cd'] || ''}</a>`;
if(key=='dcf_dsf_inst_cd')
inner_content = `<a href="/ultmarc/instInfo?id=${data['dcf_dsf_inst_cd']}">${data['form_inst_name_kanji'] || ''}</a>`;
return `<td>${inner_content || ''}</td>`
});
return `
<tr class="result_data">
<td><div class="checkNum">
<input type="checkbox" class="checkbox selected" name="data${index+1}" onclick="resultBtDisablead()"
value=${data['dcf_pcf_dr_cd']}>
</div></td>
${td}
</tr>
`
})
}
</script>
</body>
</html>