feat: API化に伴い、不要になったビューモデルのメソッドとテンプレートへの埋め込みを削除

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2023-10-05 10:10:49 +09:00
parent 1a24f2675f
commit 292960e33b
2 changed files with 31 additions and 173 deletions

View File

@ -1,14 +1,9 @@
import json
from collections import OrderedDict
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from src.model.db.pharmacy_product_master import PharmacyProductMasterModel
from src.model.db.wholesaler_master import WholesalerMasterModel
from src.model.request.bio import BioModel
from src.model.view.bio_disp_model import BioDisplayModel
from src.system_var import environment
@ -17,9 +12,8 @@ class BioViewModel(BaseModel):
user_id: str
whs_models: list[WholesalerMasterModel]
phm_models: list[PharmacyProductMasterModel]
bio_data: Optional[list[BioDisplayModel]] = None
form_data: BioModel = None
excel_max_lines: int = str(environment.BIO_EXCEL_RESULT_MAX_COUNT)
search_data_max_length: int = environment.BIO_SEARCH_RESULT_MAX_COUNT
excel_max_lines: str = str(environment.BIO_EXCEL_RESULT_MAX_COUNT)
def display_wholesaler_names(self):
display_names = [
@ -49,117 +43,3 @@ class BioViewModel(BaseModel):
'2': '除外'
}
)
def bio_data_json_str(self):
"""生物由来ロット分解データの検索結果を指定された件数ごとに分割しながら返す"""
def date_handler(obj):
"""json.dumpsの日付項目のフォーマットハンドラ"""
return obj.isoformat().replace('T', ' ') if hasattr(obj, 'isoformat') else obj
search_data_list = [model.model_dump() for model in self.bio_data]
search_data_len = len(search_data_list)
# 呼び出し一回あたりの分割数
part_size = 500
for i in range(0, search_data_len, part_size):
json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler)
# JavaScriptに埋め込むため、クォートをエスケープ
json_str = json_str.replace("'", "\\'")
json_str = json_str.replace('\\"', '\\\\"')
yield json_str
def make_whs_name(self):
if not self.is_form_submitted():
return ''
if self.form_data.rec_whs_cd is None:
return ''
form_wholesaler_full_name = \
f'{self.form_data.rec_whs_cd}-{self.form_data.rec_whs_sub_cd}:{self.form_data.whs_name}'
return form_wholesaler_full_name
def is_selected_whs_name(self, selected_wholesaler):
if not self.is_form_submitted():
return ''
form_wholesaler_full_name = \
f'{self.form_data.rec_whs_cd}-{self.form_data.rec_whs_sub_cd}:{self.form_data.whs_name}'
return self._selected_value(form_wholesaler_full_name, selected_wholesaler)
def is_selected_org_kbn(self, selected_org_kbn):
if not self.is_form_submitted():
return ''
return self._selected_value(self.form_data.slip_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_selected_maker_cd(self, selected_maker_cd):
if not self.is_form_submitted():
return ''
return self._selected_value(self.form_data.mkr_cd, selected_maker_cd)
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.iko_flg else ''
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 self.bio_data is None or len(self.bio_data) == 0
def is_data_overflow_max_length(self):
return self.bio_data is None or len(self.bio_data) > environment.BIO_SEARCH_RESULT_MAX_COUNT
def data_overflow_max_length(self):
return environment.BIO_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')
def _selected_value(self, form_value: str, current_value: str):
return 'selected' if form_value == current_value else ''

View File

@ -37,9 +37,7 @@
<select class="text search_dropdown" name="ctrl_wholesaler" value="" onChange="formBtDisabled();applySearchParam(this)">
<option value=""></option>
{% for whs_name in bio.display_wholesaler_names() %}
<option
value="{{whs_name}}"
{{bio.is_selected_whs_name(whs_name)}}>
<option value="{{whs_name}}">
{{whs_name}}
</option>
{% endfor %}
@ -49,19 +47,21 @@
<td class="search_tb">
<select class="text search_dropdown" name="ctrl_org_kbn" onChange="formBtDisabled();applySearchParam(this)" value="">
{% for org_kbn_code, org_kbn_value in bio.display_org_kbn().items() %}
<option value="{{org_kbn_code}}" {{bio.is_selected_org_kbn(org_kbn_code)}} >{{org_kbn_value}}</option>
<option value="{{org_kbn_code}}">
{{org_kbn_value}}
</option>
{% endfor %}
</select>
</td>
<td>処理日:</td>
<td colspan="2">
<input type="text" id="shoribi_start" class="date_picker" name="ctrl_rec_ymd_from" maxlength="10"
value="{{bio.is_input_rec_ymd_from()}}"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
<input type="text" id="shoribi_end" class="date_picker" name="ctrl_rec_ymd_to" maxlength="10"
value="{{bio.is_input_rec_ymd_to()}}"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
</td>
@ -70,14 +70,16 @@
<td>ロット番号:</td>
<td class="search_tb">
<input class="text" type="text" id="lot_tb" name="ctrl_rec_lot_num" style="ime-mode:disabled" maxlength="10"
value="{{bio.is_input_lot_num()}}"
value=""
oninput="checkSpaceForm(this); checkAimaiSearhForm(this); formBtDisabled();applySearchParam(this)">
</td>
<td>データ区分:</td>
<td class="search_tb">
<select class="text search_dropdown" name="ctrl_data_kbn" onchange="formBtDisabled();applySearchParam(this)">
{% for data_kbn_code, data_kbn_value in bio.display_data_kbn().items() %}
<option value="{{data_kbn_value}}" {{bio.is_selected_data_kbn(data_kbn_value)}} >{{data_kbn_value}}</option>
<option option value="{{data_kbn_value}}">
{{data_kbn_value}}
</option>
{% endfor %}
</select>
</td>
@ -86,10 +88,9 @@
<select class="text search_dropdown" name="ctrl_maker_cd" value="" onChange="formBtDisabled();applySearchParam(this);">
<option value=""></option>
{% for phm in bio.phm_models %}
<option
value="{{phm['mkr_cd']}}" {{bio.is_selected_maker_cd(phm['mkr_cd'])}}>
{{phm['mkr_cd_name']}}
</option>
<option value="{{phm['mkr_cd']}}">
{{phm['mkr_cd_name']}}
</option>
{% endfor %}
</select>
</td>
@ -98,22 +99,21 @@
<td>発伝年月日:</td>
<td colspan="3">
<input type="text" id="hsdnymd_start" class="date_picker" name="ctrl_rev_hsdnymd_srk_from" maxlength="10"
value="{{bio.is_input_rev_hsdnymd_srk_from()}}"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
<input type="text" id="hsdnymd_end" class="date_picker" name="ctrl_rev_hsdnymd_srk_to" maxlength="10"
value="{{bio.is_input_rev_hsdnymd_srk_to()}}"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
</td>
<td colspan="2">
<input type="checkbox" id="ikoFlg" name="ikoFlg" value="true" {{bio.is_checked_iko_flg()}} oninput="applySearchParam(this)">
<input type="checkbox" id="ikoFlg" name="ikoFlg" value="true" oninput="applySearchParam(this)">
<label for="ikoFlg">2017年11月以前のデータを含める</label>
</td>
<td>
<input class="buttonSize" id="clear" type="button" name="clear_bt" value="クリア" onclick="clr()">
<!-- <input class="buttonSize" id="search_bt" value="検索" type="submit"> -->
<input class="buttonSize" id="search_bt" value="検索" type="button" onclick="searchBioList()">
</td>
</tr>
@ -175,35 +175,26 @@
<tbody id="result_data" class="result_data"></tbody>
</table>
<div id="message_area" class="resultAreaMsg"></div>
{% if bio.is_form_submitted() and bio.is_data_overflow_max_length() %}
検索結果が最大件数を超えました。検索条件を見直しして下さい。
{% endif %}
{% if bio.is_form_submitted() and bio.is_data_empty() %}
<div class="resultAreaMsg">
対象のデータが存在しません
</div>
{% endif %}
</div>
</form>
<form id="search_param_hidden" name="bioHidden">
<input type="hidden" name="ctrl_wholesaler" value="{{bio.make_whs_name()}}">
<input type="hidden" name="ctrl_org_kbn" value="{{bio.form_data.slip_org_kbn or ''}}">
<input type="hidden" name="ctrl_rec_ymd_from" value="{{bio.is_input_rec_ymd_from()}}">
<input type="hidden" name="ctrl_rec_ymd_to" value="{{bio.is_input_rec_ymd_to()}}">
<input type="hidden" name="ctrl_rec_lot_num" value="{{bio.is_input_lot_num()}}">
<input type="hidden" name="ctrl_data_kbn" value="{{bio.form_data.data_kbn or ''}}">
<input type="hidden" name="ctrl_maker_cd" value="{{bio.form_data.mkr_cd or ''}}">
<input type="hidden" name="ctrl_rev_hsdnymd_srk_from" value="{{bio.is_input_rev_hsdnymd_srk_from()}}">
<input type="hidden" name="ctrl_rev_hsdnymd_srk_to" value="{{bio.is_input_rev_hsdnymd_srk_to()}}">
<input type="checkbox" name="ikoFlg" value="true" {{bio.is_checked_iko_flg()}} style="display: none;">
<input type="hidden" name="ctrl_wholesaler" value="">
<input type="hidden" name="ctrl_org_kbn" value="">
<input type="hidden" name="ctrl_rec_ymd_from" value="">
<input type="hidden" name="ctrl_rec_ymd_to" value="">
<input type="hidden" name="ctrl_rec_lot_num" value="">
<input type="hidden" name="ctrl_data_kbn" value="">
<input type="hidden" name="ctrl_maker_cd" value="">
<input type="hidden" name="ctrl_rev_hsdnymd_srk_from" value="">
<input type="hidden" name="ctrl_rev_hsdnymd_srk_to" value="">
<input type="checkbox" name="ikoFlg" value="true" style="display: none;">
</form>
<script type="text/javascript">
// CSV/Excelダウンロード処理
function download(ext) {
// ローディング開始
const loading = new Loading();
const loading = new Loading('');
loading.start();
// ダウンロード固有のパラメータを設定
@ -296,7 +287,7 @@
const messageArea = $('#message_area')
messageArea.text('')
messageArea.hide()
const loading = new Loading()
const loading = new Loading('_loading_for_other')
const searchParams = createSearchParams()
$('.pagination').pagination({
dataSource: '/bio/search',
@ -390,7 +381,7 @@
}
function bioDataOverflowMaxLength() {
const maxlength = '{{bio.data_overflow_max_length()}}'
const maxlength = '{{bio.search_data_max_length}}'
return Number(maxlength)
}
@ -449,19 +440,6 @@
})
}
function generateSearchResult(){
const searchResultData = []
// {% if bio.is_form_submitted() and not (bio.is_data_overflow_max_length() or bio.is_data_empty()) %}
// {% autoescape False%}
// ジェネレータですこしずつ取得してリストに詰める
// {% for bio_data_json_str in bio.bio_data_json_str() %}
searchResultData.push(...JSON.parse('{{bio_data_json_str}}'))
// {% endfor %}
// {% endautoescape%}
// {% endif %}
return searchResultData
}
</script>
<!-- Excel出力モーダル -->