Merge pull request #487 feature-NEWDWH2021-1910 into develop

This commit is contained in:
小野 祥照 2025-05-31 14:40:49 +09:00
commit 81edd98ee1
17 changed files with 286 additions and 334 deletions

View File

@ -43,8 +43,8 @@ def search_bio_data(
return JSONResponse(content={'status': 'batch_processing'}, status_code=status.HTTP_403_FORBIDDEN)
# 生物由来データと件数を取得
bio_sales_lot_data = bio_service.search_bio_data(bio_form)
bio_sales_lot_count = bio_service.count_bio_data(bio_form, session)
trn_result_data_bio_lot_data = bio_service.search_bio_data(bio_form)
trn_result_data_bio_lot_count = bio_service.count_bio_data(bio_form, session)
# レスポンスデータを加工
# 日付型のデータのエンコードエラーを解消するための措置
@ -58,7 +58,7 @@ def search_bio_data(
return encoded_obj
data = jsonable_encoder(
bio_sales_lot_data,
trn_result_data_bio_lot_data,
custom_encoder={
BioDisplayModel: custom_encode
}
@ -71,13 +71,13 @@ def search_bio_data(
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
# 検索結果をキャッシュする
UserSession.bio_search_condition.set(bio_form.model_dump()),
UserSession.bio_search_count.set(bio_sales_lot_count),
UserSession.bio_search_count.set(trn_result_data_bio_lot_count),
]
)
set_session(session)
json_response = JSONResponse(content={
'data': data,
'count': bio_sales_lot_count
'count': trn_result_data_bio_lot_count
})
# クッキーも書き換え

View File

@ -111,9 +111,9 @@ def login(
id_token=verified_token.id_token,
refresh_token=verified_token.refresh_token,
csrf_token=csrf_token,
bio_flg=user_record.auth_flg1,
doc_flg=user_record.auth_flg2,
inst_flg=user_record.auth_flg3,
bio_flg=user_record.bio_sales_inq_auth_flg,
doc_flg=user_record.ult_doctor_inq_auth_flg,
inst_flg=user_record.ult_inst_inq_auth_flg,
master_mainte_flg=user_record.auth_flg4,
user_flg=user_record.mntuser_flg
)
@ -170,9 +170,9 @@ def sso_authorize(
id_token=verified_token.id_token,
refresh_token=verified_token.refresh_token,
csrf_token=csrf_token,
bio_flg=user_record.auth_flg1,
doc_flg=user_record.auth_flg2,
inst_flg=user_record.auth_flg3,
bio_flg=user_record.bio_sales_inq_auth_flg,
doc_flg=user_record.ult_doctor_inq_auth_flg,
inst_flg=user_record.ult_inst_inq_auth_flg,
master_mainte_flg=user_record.auth_flg4,
user_flg=user_record.mntuser_flg
)

View File

@ -1,48 +0,0 @@
from datetime import date, datetime
from typing import Optional
from src.model.db.base_db_model import BaseDBModel
class BioSalesLotDBModel(BaseDBModel):
slip_mgt_num: Optional[str]
rec_whs_cd: Optional[str]
rec_whs_sub_cd: Optional[str]
rec_whs_org_cd: Optional[str]
rec_comm_cd: Optional[str]
rec_tran_kbn: Optional[str]
rev_hsdnymd_srk: Optional[str]
rec_urag_num: Optional[str]
rec_nonyu_fcl_name: Optional[str]
rec_nonyu_fcl_addr: Optional[str]
rec_lot_num: Optional[str]
rec_ymd: Optional[str]
v_tran_cd: Optional[int]
tran_kbn_name: Optional[str]
v_whsorg_cd: Optional[int]
whs_org_name: Optional[str]
v_whs_cd: Optional[int]
whs_name: Optional[str]
nonyu_fcl_cd: Optional[str]
product_name: Optional[str]
whs_rep_comm_name: Optional[str]
whs_rep_nonyu_fcl_name: Optional[str]
whs_rep_nonyu_fcl_addr: Optional[str]
mkr_cd: Optional[str]
qty: Optional[int]
bef_slip_mgt_num: Optional[str]
iko_flg: Optional[str]
ins_dt: Optional[datetime]
ins_usr: Optional[str]
inst_cd: Optional[str]
inst_name_form: Optional[str]
address: Optional[str]
tel_num: Optional[str]
data_kbn: Optional[str]
data_kind: Optional[str]
err_dtl_kind: Optional[str]
expr_dt: Optional[date]
class BioSalesLotCountDBModel(BaseDBModel):
count: Optional[int]

View File

@ -4,5 +4,5 @@ from src.model.db.base_db_model import BaseDBModel
class PharmacyProductMasterModel(BaseDBModel):
mkr_cd: Optional[str]
mkr_cd_name: Optional[str]
prod_pkg_cd: Optional[str]
prod_pkg_cd_name: Optional[str]

View File

@ -0,0 +1,40 @@
from datetime import date, datetime
from typing import Optional
from src.model.db.base_db_model import BaseDBModel
class TrnResultDataBioLotDBModel(BaseDBModel):
if_kind: Optional[str]
account_ym: Optional[str]
seq_no: Optional[int]
load_dt: Optional[datetime]
orig_whlslr_cd: Optional[str]
orig_whlslr_sub_cd: Optional[str]
cls_whlslr_nm: Optional[str]
edit_whlslr_org_cd: Optional[str]
orig_slip_no: Optional[str]
cnvs_sales_dt: Optional[datetime]
edit_deal_div_cd: Optional[str]
cls_deal_div_nm: Optional[str]
cnvs_prod_cd: Optional[str]
orig_univ_product_cd: Optional[str]
cls_prod_nm: Optional[str]
edit_endusr_cd: Optional[str]
orig_endusr_nm: Optional[str]
orig_jd45_addr_txt: Optional[str]
cnvs_lot_no: Optional[str]
cnvs_lot_sales_qty: Optional[int]
expr_dt: Optional[date]
data_kbn: Optional[str]
cnvs_inst_cd: Optional[str]
cls_inst_nm: Optional[str]
address: Optional[str]
tel_num: Optional[str]
cnvs_whlslr_cd: Optional[str]
cnvs_depo_cd: Optional[str]
cls_depo_nm: Optional[str]
cnvs_deal_div_cd: Optional[str]
class BioSalesLotCountDBModel(BaseDBModel):
count: Optional[int]

View File

@ -8,9 +8,9 @@ class UserMasterModel(BaseDBModel):
user_id: Optional[str]
mail_adr: Optional[str]
user_name: Optional[str]
auth_flg1: Optional[int]
auth_flg2: Optional[int]
auth_flg3: Optional[int]
bio_sales_inq_auth_flg: Optional[int]
ult_doctor_inq_auth_flg: Optional[int]
ult_inst_inq_auth_flg: Optional[int]
auth_flg4: Optional[int]
auth_flg5: Optional[int]
auth_flg6: Optional[int]

View File

@ -9,18 +9,17 @@ from src.util.string_util import is_not_empty
@sanitize
class BioModel(BaseModel):
rec_whs_cd: Optional[str]
rec_whs_sub_cd: Optional[str]
whs_name: Optional[str]
slip_org_kbn: Optional[str]
rec_ymd_from: Optional[str]
rec_ymd_to: Optional[str]
rec_lot_num: Optional[str]
data_kbn: Optional[str]
mkr_cd: Optional[str]
rev_hsdnymd_srk_from: Optional[str]
rev_hsdnymd_srk_to: Optional[str]
iko_flg: Optional[str]
orig_whlslr_cd: Optional[str]
orig_whlslr_sub_cd: Optional[str]
cls_whlslr_nm: Optional[str]
if_kind: Optional[str]
load_dt_from: Optional[str]
load_dt_to: Optional[str]
cnvs_lot_no: Optional[str]
result_cd: Optional[str]
cnvs_prod_cd: Optional[str]
cnvs_sales_dt_from: Optional[str]
cnvs_sales_dt_to: Optional[str]
pageNumber: Optional[int]
pageSize: Optional[int]
@ -29,14 +28,13 @@ class BioModel(BaseModel):
cls,
ctrl_wholesaler: str = Form(None),
ctrl_org_kbn: str = Form(None),
ctrl_rec_ymd_from: str = Form(None),
ctrl_rec_ymd_to: str = Form(None),
ctrl_rec_lot_num: str = Form(None),
ctrl_data_kbn: str = Form(None),
ctrl_load_dt_from: str = Form(None),
ctrl_load_dt_to: str = Form(None),
ctrl_cnvs_lot_no: str = Form(None),
ctrl_result_cd: str = Form(None),
ctrl_maker_cd: str = Form(None),
ctrl_rev_hsdnymd_srk_from: str = Form(None),
ctrl_rev_hsdnymd_srk_to: str = Form(None),
ikoFlg: str = Form(None),
ctrl_cnvs_sales_dt_from: str = Form(None),
ctrl_cnvs_sales_dt_to: str = Form(None),
pageNumber: int = Form(None),
pageSize: int = Form(None)
):
@ -45,14 +43,13 @@ class BioModel(BaseModel):
cls,
ctrl_wholesaler,
ctrl_org_kbn,
ctrl_rec_ymd_from,
ctrl_rec_ymd_to,
ctrl_rec_lot_num,
ctrl_data_kbn,
ctrl_load_dt_from,
ctrl_load_dt_to,
ctrl_cnvs_lot_no,
ctrl_result_cd,
ctrl_maker_cd,
ctrl_rev_hsdnymd_srk_from,
ctrl_rev_hsdnymd_srk_to,
ikoFlg,
ctrl_cnvs_sales_dt_from,
ctrl_cnvs_sales_dt_to,
pageNumber,
pageSize
)
@ -62,42 +59,39 @@ class BioModel(BaseModel):
cls,
ctrl_wholesaler: str = Body(None),
ctrl_org_kbn: str = Body(None),
ctrl_rec_ymd_from: str = Body(None),
ctrl_rec_ymd_to: str = Body(None),
ctrl_rec_lot_num: str = Body(None),
ctrl_data_kbn: str = Body(None),
ctrl_load_dt_from: str = Body(None),
ctrl_load_dt_to: str = Body(None),
ctrl_cnvs_lot_no: str = Body(None),
ctrl_result_cd: str = Body(None),
ctrl_maker_cd: str = Body(None),
ctrl_rev_hsdnymd_srk_from: str = Body(None),
ctrl_rev_hsdnymd_srk_to: str = Body(None),
ikoFlg: str = Body(None)
ctrl_cnvs_sales_dt_from: str = Body(None),
ctrl_cnvs_sales_dt_to: str = Body(None)
):
return cls.__convert_request_param(
cls,
ctrl_wholesaler,
ctrl_org_kbn,
ctrl_rec_ymd_from,
ctrl_rec_ymd_to,
ctrl_rec_lot_num,
ctrl_data_kbn,
ctrl_load_dt_from,
ctrl_load_dt_to,
ctrl_cnvs_lot_no,
ctrl_result_cd,
ctrl_maker_cd,
ctrl_rev_hsdnymd_srk_from,
ctrl_rev_hsdnymd_srk_to,
ikoFlg
ctrl_cnvs_sales_dt_from,
ctrl_cnvs_sales_dt_to
)
def __convert_request_param(
cls,
ctrl_wholesaler: str,
ctrl_org_kbn: str,
ctrl_rec_ymd_from: str,
ctrl_rec_ymd_to: str,
ctrl_rec_lot_num: str,
ctrl_data_kbn: str,
ctrl_load_dt_from: str,
ctrl_load_dt_to: str,
ctrl_cnvs_lot_no: str,
ctrl_result_cd: str,
ctrl_maker_cd: str,
ctrl_rev_hsdnymd_srk_from: str,
ctrl_rev_hsdnymd_srk_to: str,
ikoFlg: str,
ctrl_cnvs_sales_dt_from: str,
ctrl_cnvs_sales_dt_to: str,
pageNumber: int = None,
pageSize: int = None
):
@ -113,34 +107,33 @@ class BioModel(BaseModel):
wholesaler_sub_code = wholesaler_without_name.split('-')[1]
# 処理日
rec_ymd_from = None
rec_ymd_to = None
if is_not_empty(ctrl_rec_ymd_from):
rec_ymd_from = ctrl_rec_ymd_from.replace('/', '')
if is_not_empty(ctrl_rec_ymd_to):
rec_ymd_to = ctrl_rec_ymd_to.replace('/', '')
load_dt_from = None
load_dt_to = None
if is_not_empty(ctrl_load_dt_from):
load_dt_from = ctrl_load_dt_from.replace('/', '')
if is_not_empty(ctrl_load_dt_to):
load_dt_to = ctrl_load_dt_to.replace('/', '')
# 発伝年月日
rev_hsdnymd_srk_from = None
rev_hsdnymd_srk_to = None
if is_not_empty(ctrl_rev_hsdnymd_srk_from):
rev_hsdnymd_srk_from = ctrl_rev_hsdnymd_srk_from.replace('/', '')
if is_not_empty(ctrl_rev_hsdnymd_srk_to):
rev_hsdnymd_srk_to = ctrl_rev_hsdnymd_srk_to.replace('/', '')
cnvs_sales_dt_from = None
cnvs_sales_dt_to = None
if is_not_empty(ctrl_cnvs_sales_dt_from):
cnvs_sales_dt_from = ctrl_cnvs_sales_dt_from.replace('/', '')
if is_not_empty(ctrl_cnvs_sales_dt_to):
cnvs_sales_dt_to = ctrl_cnvs_sales_dt_to.replace('/', '')
return cls(
rec_whs_cd=wholesaler_code,
rec_whs_sub_cd=wholesaler_sub_code,
whs_name=wholesaler_name,
slip_org_kbn=ctrl_org_kbn,
rec_ymd_from=rec_ymd_from,
rec_ymd_to=rec_ymd_to,
rec_lot_num=ctrl_rec_lot_num,
data_kbn=ctrl_data_kbn,
mkr_cd=ctrl_maker_cd,
rev_hsdnymd_srk_from=rev_hsdnymd_srk_from,
rev_hsdnymd_srk_to=rev_hsdnymd_srk_to,
iko_flg=ikoFlg,
orig_whlslr_cd=wholesaler_code,
orig_whlslr_sub_cd=wholesaler_sub_code,
cls_whlslr_nm=wholesaler_name,
if_kind=ctrl_org_kbn,
load_dt_from=load_dt_from,
load_dt_to=load_dt_to,
cnvs_lot_no=ctrl_cnvs_lot_no,
result_cd=ctrl_result_cd,
cnvs_prod_cd=ctrl_maker_cd,
cnvs_sales_dt_from=cnvs_sales_dt_from,
cnvs_sales_dt_to=cnvs_sales_dt_to,
pageNumber=pageNumber,
pageSize=pageSize
)

View File

@ -1,8 +1,8 @@
from src.model.db.bio_sales_lot import BioSalesLotDBModel
from src.model.db.trn_result_data_bio_lot import TrnResultDataBioLotDBModel
from src.util.sanitize import sanitize
@sanitize
class BioDisplayModel(BioSalesLotDBModel):
def __init__(self, param: BioSalesLotDBModel) -> None:
class BioDisplayModel(TrnResultDataBioLotDBModel):
def __init__(self, param: TrnResultDataBioLotDBModel) -> None:
super().__init__(**param.model_dump())

View File

@ -26,9 +26,10 @@ class BioViewModel(BaseModel):
return OrderedDict(
{
'': '',
'J': 'JD-NET',
'N': 'NHI',
'H': '手入力'
'1':'VAN',
'2':'手入力',
'3':'VAN-Web',
'S':'SCSK-VAN'
}
)
@ -36,10 +37,10 @@ class BioViewModel(BaseModel):
return OrderedDict(
{
'': '',
'0': '正常',
'1': 'ロットエラー',
'3': 'ロット不明',
'9': 'エラー(解消済み',
'2': '除外'
'1':'正常',
'2':'卸間転送除外対象データ',
'E':'エラー',
'D':'エラー(重複',
'Z':'エラー(想定外)'
}
)

View File

@ -6,10 +6,10 @@ from src.system_var import constants
class UserViewModel(BaseModel):
bio_flg: Optional[int] # AUTH_FLG1
doc_flg: Optional[int] # AUTH_FLG2
inst_flg: Optional[int] # AUTH_FLG3
master_mainte_flg: Optional[int] # AUTH_FLG4
bio_flg: Optional[int] # bio_sales_inq_auth_flg
doc_flg: Optional[int] # ult_doctor_inq_auth_flg
inst_flg: Optional[int] # ult_inst_inq_auth_flg
# TODO: 削除予定 master_mainte_flg: Optional[int] # AUTH_FLG4
def has_ult_doctor_permission(self):
return self.doc_flg == constants.PERMISSION_ENABLED

View File

@ -6,7 +6,7 @@ logger = get_logger('日付テーブル取得')
class HdkeTblRepository(BaseRepository):
FETCH_SQL = "SELECT bch_actf, dump_sts_kbn FROM src05.hdke_tbl"
FETCH_SQL = "SELECT bch_actf, dump_sts_kbn FROM src07.hdke_tbl"
def fetch_all(self) -> list[HdkeTblModel]:
try:

View File

@ -8,24 +8,18 @@ logger = get_logger('製品取得')
class PharmacyProductMasterRepository(BaseRepository):
FETCH_SQL = """\
SELECT
t1.mkr_cd,
CONCAT(IFNULL(t1.mkr_cd, ''), ' ', IFNULL(t1.mkr_inf_1, '')) AS mkr_cd_name
FROM
src05.phm_prd_mst_v t1
INNER JOIN
(
SELECT
prd_cd, MAX(sub_num) AS sno
FROM
src05.phm_prd_mst_v
WHERE rec_sts_kbn <> '9'
GROUP BY prd_cd
) fmv2
ON t1.prd_cd = fmv2.prd_cd AND t1.sub_num = fmv2.sno
WHERE
t1.mkr_cd IS NOT NULL
ORDER BY mkr_cd
SELECT
prod_pkg_cd,
CONCAT(IFNULL(prod_pkg_cd, ''), ' ', IFNULL(prod_pkg_nm_kj, '')) AS prod_pkg_cd_name
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY prod_pkg_cd ORDER BY eff_start_ym DESC) AS rn
FROM
src07.mst_prod_pkg
) AS ranked
WHERE
rn = 1;
"""
def fetch_all(self) -> list[PharmacyProductMasterModel]:

View File

@ -1,8 +1,8 @@
from src.db import sql_condition as condition
from src.db.sql_condition import SQLCondition
from src.logging.get_logger import get_logger
from src.model.db.bio_sales_lot import (BioSalesLotCountDBModel,
BioSalesLotDBModel)
from src.model.db.trn_result_data_bio_lot import (BioSalesLotCountDBModel,
TrnResultDataBioLotDBModel)
from src.model.request.bio import BioModel
from src.repositories.base_repository import BaseRepository
from src.system_var import environment
@ -14,58 +14,50 @@ logger = get_logger('生物由来参照')
class BioSalesLotRepository(BaseRepository):
FETCH_SQL = """\
SELECT
data_kind,
slip_mgt_num,
rec_ymd,
rec_whs_cd,
rec_whs_sub_cd,
whs_name,
rec_whs_org_cd,
rec_urag_num,
rev_hsdnymd_srk,
rec_tran_kbn,
tran_kbn_name,
mkr_cd,
rec_comm_cd,
product_name,
whs_rep_comm_name,
nonyu_fcl_cd,
rec_nonyu_fcl_name,
whs_rep_nonyu_fcl_name,
rec_nonyu_fcl_addr,
whs_rep_nonyu_fcl_addr,
rec_lot_num,
qty,
if_kind,
account_ym,
seq_no,
load_dt,
orig_whlslr_cd,
orig_whlslr_sub_cd,
cls_whlslr_nm,
edit_whlslr_org_cd,
orig_slip_no,
cnvs_sales_dt,
edit_deal_div_cd,
cls_deal_div_nm,
cnvs_prod_cd,
orig_univ_product_cd,
cls_prod_nm,
edit_endusr_cd,
orig_endusr_nm,
orig_jd45_addr_txt,
cnvs_lot_no,
cnvs_lot_sales_qty,
expr_dt,
data_kbn,
err_dtl_kind,
bef_slip_mgt_num,
ins_usr,
ins_dt,
inst_cd,
inst_name_form,
cnvs_inst_cd,
cls_inst_nm,
address,
tel_num,
-- Excel出力のため数値型のコード値を文字列として取得(Veeva卸コードVeeva卸組織コードVeeva取引区分コード)
CAST(v_whs_cd AS CHAR) AS v_whs_cd,
CAST(v_whsorg_cd AS CHAR) AS v_whsorg_cd,
whs_org_name,
CAST(v_tran_cd AS CHAR) AS v_tran_cd,
iko_flg
cnvs_whlslr_cd,
cnvs_depo_cd,
cls_depo_nm,
cnvs_deal_div_cd
FROM
src05.bio_sales_lot
src07.trn_result_data_bio_lot
WHERE
{where_clause}
ORDER BY
rec_whs_cd,
rec_whs_sub_cd,
rev_hsdnymd_srk,
slip_mgt_num
orig_whlslr_cd,
orig_whlslr_sub_cd,
cnvs_sales_dt,
orig_slip_no
ASC
LIMIT {limit}\
"""
def fetch_many(self, parameter: BioModel) -> list[BioSalesLotDBModel]:
def fetch_many(self, parameter: BioModel) -> list[TrnResultDataBioLotDBModel]:
try:
logger.debug('DB参照実行')
where_clause = self.__build_condition(parameter)
@ -74,7 +66,7 @@ class BioSalesLotRepository(BaseRepository):
query = self.FETCH_SQL.format(where_clause=where_clause, limit=limit_clause)
logger.debug(f'SQL: {query}')
result = self._database.execute_select(query, parameter.model_dump())
models = [BioSalesLotDBModel(**r) for r in result]
models = [TrnResultDataBioLotDBModel(**r) for r in result]
return models
except Exception as e:
logger.exception(f"DB Error : Exception={e.args}")
@ -100,14 +92,14 @@ class BioSalesLotRepository(BaseRepository):
FROM
(
SELECT 1
FROM src05.bio_sales_lot
FROM src07.trn_result_data_bio_lot
WHERE
{where_clause}
LIMIT {limit}
) AS t\
"""
def fetch_count(self, parameter: BioModel) -> list[BioSalesLotDBModel]:
def fetch_count(self, parameter: BioModel) -> list[TrnResultDataBioLotDBModel]:
try:
logger.debug('DB参照実行')
where_clause = self.__build_condition(parameter)
@ -130,43 +122,44 @@ class BioSalesLotRepository(BaseRepository):
where_clauses.append(SQLCondition('', '', '1 = 1', literal=True))
# 卸(コード/サブコード)
if is_not_empty(parameter.rec_whs_cd) and is_not_empty(parameter.rec_whs_sub_cd):
where_clauses.append(SQLCondition('rec_whs_cd', condition.EQ, 'rec_whs_cd'))
where_clauses.append(SQLCondition('rec_whs_sub_cd', condition.EQ, 'rec_whs_sub_cd'))
# データ種別
if is_not_empty(parameter.slip_org_kbn):
where_clauses.append(SQLCondition('slip_org_kbn', condition.EQ, 'slip_org_kbn'))
if is_not_empty(parameter.orig_whlslr_cd) and is_not_empty(parameter.orig_whlslr_sub_cd):
where_clauses.append(SQLCondition('orig_whlslr_cd', condition.EQ, 'orig_whlslr_cd'))
where_clauses.append(SQLCondition('orig_whlslr_sub_cd', condition.EQ, 'orig_whlslr_sub_cd'))
# 連携種別
if is_not_empty(parameter.if_kind):
where_clauses.append(SQLCondition('if_kind', condition.EQ, 'if_kind'))
# 処理日 開始日
if is_not_empty(parameter.rec_ymd_from):
where_clauses.append(SQLCondition('rec_ymd', condition.GE, 'rec_ymd_from'))
if is_not_empty(parameter.load_dt_from):
where_clauses.append(SQLCondition('load_dt', condition.GE, 'load_dt_from'))
# 処理日 終了日
if is_not_empty(parameter.rec_ymd_to):
where_clauses.append(SQLCondition('rec_ymd', condition.LE, 'rec_ymd_to'))
if is_not_empty(parameter.load_dt_to):
where_clauses.append(SQLCondition('load_dt', condition.LE, 'load_dt_to'))
# ロット番号
if is_not_empty(parameter.rec_lot_num):
rec_lot_num = parameter.rec_lot_num
if is_not_empty(parameter.cnvs_lot_no):
cnvs_lot_no = parameter.cnvs_lot_no
# あいまい検索文字列('%')が含まれる場合は'LIKE'、でなければ'='で検索
rec_lot_num_comparator = condition.LIKE if '%' in rec_lot_num else condition.EQ
where_clauses.append(SQLCondition('TRIM(rec_lot_num)', rec_lot_num_comparator, 'rec_lot_num'))
cnvs_lot_no_comparator = condition.LIKE if '%' in cnvs_lot_no else condition.EQ
where_clauses.append(SQLCondition('TRIM(cnvs_lot_no)', cnvs_lot_no_comparator, 'cnvs_lot_no'))
# データ区分
if is_not_empty(parameter.data_kbn):
where_clauses.append(SQLCondition('data_kbn', condition.EQ, 'data_kbn'))
if is_not_empty(parameter.result_cd):
where_clauses.append(SQLCondition('result_cd', condition.EQ, 'result_cd'))
# 製品
if is_not_empty(parameter.mkr_cd):
where_clauses.append(SQLCondition('mkr_cd', condition.EQ, 'mkr_cd'))
if is_not_empty(parameter.cnvs_prod_cd):
where_clauses.append(SQLCondition('cnvs_prod_cd', condition.EQ, 'cnvs_prod_cd'))
# 発伝年月日 開始日
if is_not_empty(parameter.rev_hsdnymd_srk_from):
where_clauses.append(SQLCondition('rev_hsdnymd_srk', condition.GE, 'rev_hsdnymd_srk_from'))
if is_not_empty(parameter.cnvs_sales_dt_from):
where_clauses.append(SQLCondition('cnvs_sales_dt', condition.GE, 'cnvs_sales_dt_from'))
# 発伝年月日 終了日
if is_not_empty(parameter.rev_hsdnymd_srk_to):
where_clauses.append(SQLCondition('rev_hsdnymd_srk', condition.LE, 'rev_hsdnymd_srk_to'))
# 移行フラグ
# チェックが入っていない場合、移行対象(IKO_FLG = '*')を省く
if parameter.iko_flg is None:
where_clauses.append(SQLCondition('iko_flg', condition.IS, 'NULL', literal=True))
if is_not_empty(parameter.cnvs_sales_dt_to):
where_clauses.append(SQLCondition('cnvs_sales_dt', condition.LE, 'cnvs_sales_dt_to'))
# TODO: 削除 # 移行フラグ
# # チェックが入っていない場合、移行対象(IKO_FLG = '*')を省く
# if parameter.iko_flg is None:
# where_clauses.append(SQLCondition('iko_flg', condition.IS, 'NULL', literal=True))
# 固定条件
# Viewで返されるロット番号9件をNull以外で抽出
where_clauses.append(SQLCondition('LENGTH(TRIM(rec_lot_num))', condition.GT, '0', literal=True))
# ロット番号9件をNull以外で抽出
# 現在の仕組みだと存在有り得ないので削除
# where_clauses.append(SQLCondition('LENGTH(TRIM(cnvs_lot_no))', condition.GT, '0', literal=True))
where_clauses_str = ' AND '.join([condition.apply() for condition in where_clauses])

View File

@ -23,7 +23,7 @@ class UserMasterRepository(BaseRepository):
SELECT
*
FROM
src05.user_mst
src07.user_mst
WHERE
user_id = :user_id\
"""
@ -44,7 +44,7 @@ class UserMasterRepository(BaseRepository):
try:
query = """\
UPDATE
src05.user_mst
src07.user_mst
SET
mntuser_login_failed_cnt =
CASE
@ -70,7 +70,7 @@ class UserMasterRepository(BaseRepository):
try:
query = """\
UPDATE
src05.user_mst
src07.user_mst
SET
enabled_flg = 'N'
WHERE

View File

@ -9,24 +9,21 @@ class WholesalerMasterRepository(BaseRepository):
FETCH_SQL = """\
SELECT DISTINCT
b.rec_whs_cd,
b.rec_whs_sub_cd,
v2.name,
b.whs_name
FROM src05.bio_sales b
b.orig_whlslr_cd as rec_whs_cd,
b.orig_whlslr_sub_cd as rec_whs_sub_cd,
v2.ws_nm_kj as name,
b.cls_whlslr_nm as whs_name
FROM src07.trn_result_data_bio b
LEFT OUTER JOIN
(
SELECT
sub_num,
name,
v_whs_cd,
rec_sts_kbn
FROM src05.whs_mst_v
WHERE src05.get_syor_date() BETWEEN start_date AND end_date
ws_cd,
ws_nm_kj
FROM src07.mst_whlslr
WHERE src07.get_syor_date() BETWEEN str_to_date(concat(eff_start_ym, '01'), '%Y%m%d') AND str_to_date(concat(eff_end_ym, '01'), '%Y%m%d')
) v2
ON b.v_whs_cd = v2.v_whs_cd
AND v2.rec_sts_kbn <> '9'
ORDER BY b.rec_whs_cd, b.rec_whs_sub_cd , b.whs_name DESC
ON b.orig_whlslr_cd = v2.ws_cd
ORDER BY b.orig_whlslr_cd, b.orig_whlslr_sub_cd , b.cls_whlslr_nm DESC
"""
def fetch_all(self) -> list[WholesalerMasterModel]:

View File

@ -14,7 +14,7 @@ from src.model.request.bio import BioModel
from src.model.view.bio_disp_model import BioDisplayModel
from src.model.view.bio_view_model import BioViewModel
from src.repositories.base_repository import BaseRepository
from src.repositories.bio_sales_lot_repository import BioSalesLotRepository
from src.repositories.trn_result_data_bio_lot_repository import BioSalesLotRepository
from src.repositories.pharmacy_product_master_repository import \
PharmacyProductMasterRepository
from src.repositories.wholesaler_master_repository import \
@ -65,9 +65,9 @@ class BioViewService(BaseService):
def search_bio_data(self, search_params: BioModel):
# 生物由来データを検索
bio_sales_lot_data = self.bio_sales_repository.fetch_many(parameter=search_params)
trn_result_data_bio_lot_data = self.bio_sales_repository.fetch_many(parameter=search_params)
# 画面表示用に加工
display_bio_data: list[BioDisplayModel] = [BioDisplayModel(data) for data in bio_sales_lot_data]
display_bio_data: list[BioDisplayModel] = [BioDisplayModel(data) for data in trn_result_data_bio_lot_data]
return display_bio_data

View File

@ -43,7 +43,7 @@
{% endfor %}
</select>
</td>
<td>データ種別:</td>
<td>連携種別:</td>
<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() %}
@ -55,12 +55,12 @@
</td>
<td>処理日:</td>
<td colspan="2">
<input type="text" id="shoribi_start" class="date_picker" name="ctrl_rec_ymd_from" maxlength="10"
<input type="text" id="shoribi_start" class="date_picker" name="ctrl_load_dt_from" maxlength="10"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
<input type="text" id="shoribi_end" class="date_picker" name="ctrl_rec_ymd_to" maxlength="10"
<input type="text" id="shoribi_end" class="date_picker" name="ctrl_load_dt_to" maxlength="10"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
@ -69,13 +69,13 @@
<tr>
<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"
<input class="text" type="text" id="lot_tb" name="ctrl_cnvs_lot_no" style="ime-mode:disabled" maxlength="10"
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)">
<select class="text search_dropdown" name="ctrl_result_cd" onchange="formBtDisabled();applySearchParam(this)">
{% for data_kbn_code, data_kbn_value in bio.display_data_kbn().items() %}
<option option value="{{data_kbn_value}}">
{{data_kbn_value}}
@ -88,8 +88,8 @@
<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']}}">
{{phm['mkr_cd_name']}}
<option value="{{phm['prod_pkg_cd']}}">
{{phm['prod_pkg_cd_name']}}
</option>
{% endfor %}
</select>
@ -98,19 +98,17 @@
<tr>
<td>発伝年月日:</td>
<td colspan="3">
<input type="text" id="hsdnymd_start" class="date_picker" name="ctrl_rev_hsdnymd_srk_from" maxlength="10"
<input type="text" id="hsdnymd_start" class="date_picker" name="ctrl_cnvs_sales_dt_from" maxlength="10"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
<input type="text" id="hsdnymd_end" class="date_picker" name="ctrl_rev_hsdnymd_srk_to" maxlength="10"
<input type="text" id="hsdnymd_end" class="date_picker" name="ctrl_cnvs_sales_dt_to" maxlength="10"
value=""
onchange="formBtDisabled();applySearchParam(this)"
>
</td>
<td colspan="2">
<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();clearHidden('bioSearchHidden')">
@ -133,8 +131,9 @@
<table class="tablesorter search_longtextbox" _fixedhead='rows:1; cols:0;'>
<thead>
<tr>
<th>データ種別</th>
<th>伝票管理NO</th>
<th>連携種別</th>
<th>計上年月</th>
<th>管理番号</th>
<th>処理日</th>
<th>卸コード</th>
<th>卸サブコード</th>
@ -147,29 +146,21 @@
<th>製品コード</th>
<th>統一商品コード</th>
<th>商品名</th>
<th>卸報告商品名</th>
<th>納入先コード</th>
<th>納入先名</th>
<th>卸報告納入先名</th>
<th>納入先住所</th>
<th>卸報告納入先住所</th>
<th>ロット番号</th>
<th>数量</th>
<th>有効期限</th>
<th>データ区分</th>
<th>エラー詳細種別</th>
<th>訂正前伝票管理NO</th>
<th>修正者</th>
<th>修正日時</th>
<th>施設コード</th>
<th>施設名</th>
<th>施設住所</th>
<th>施設電話番号</th>
<th>Veeva卸コード</th>
<th>Veeva卸組織コード</th>
<th>卸組織名</th>
<th>Veeva取引区分コード</th>
<th>2017年11月以前データ</th>
<th>tebra卸コード</th>
<th>tebraデポコード</th>
<th>デポ名</th>
<th>tebra取引区分コード</th>
</tr>
</thead>
<tbody id="result_data" class="result_data"></tbody>
@ -180,26 +171,24 @@
<form id="search_param_hidden" name="bioSearchHidden">
<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_load_dt_from" value="">
<input type="hidden" name="ctrl_load_dt_to" value="">
<input type="hidden" name="ctrl_cnvs_lot_no" value="">
<input type="hidden" name="ctrl_result_cd" 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;">
<input type="hidden" name="ctrl_cnvs_sales_dt_from" value="">
<input type="hidden" name="ctrl_cnvs_sales_dt_to" value="">
</form>
<form id="download_hidden" name="bioDownloadHidden">
<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_load_dt_from" value="">
<input type="hidden" name="ctrl_load_dt_to" value="">
<input type="hidden" name="ctrl_cnvs_lot_no" value="">
<input type="hidden" name="ctrl_result_cd" 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;">
<input type="hidden" name="ctrl_cnvs_sales_dt_from" value="">
<input type="hidden" name="ctrl_cnvs_sales_dt_to" value="">
</form>
<script type="text/javascript">
@ -422,43 +411,36 @@
function pagination_content(datas) {
const display_keys = [
'data_kind',
'slip_mgt_num',
'rec_ymd',
'rec_whs_cd',
'rec_whs_sub_cd',
'whs_name',
'rec_whs_org_cd',
'rec_urag_num',
'rev_hsdnymd_srk',
'rec_tran_kbn',
'tran_kbn_name',
'mkr_cd',
'rec_comm_cd',
'product_name',
'whs_rep_comm_name',
'nonyu_fcl_cd',
'rec_nonyu_fcl_name',
'whs_rep_nonyu_fcl_name',
'rec_nonyu_fcl_addr',
'whs_rep_nonyu_fcl_addr',
'rec_lot_num',
'qty',
'if_kind',
'account_ym',
'seq_no',
'load_dt',
'orig_whlslr_cd',
'orig_whlslr_sub_cd',
'cls_whlslr_nm',
'edit_whlslr_org_cd',
'orig_slip_no',
'cnvs_sales_dt',
'edit_deal_div_cd',
'cls_deal_div_nm',
'cnvs_prod_cd',
'orig_univ_product_cd',
'cls_prod_nm',
'edit_endusr_cd',
'orig_endusr_nm',
'orig_jd45_addr_txt',
'cnvs_lot_no',
'cnvs_lot_sales_qty',
'expr_dt',
'data_kbn',
'err_dtl_kind',
'bef_slip_mgt_num',
'ins_usr',
'ins_dt',
'inst_cd',
'inst_name_form',
'cnvs_inst_cd',
'cls_inst_nm',
'address',
'tel_num',
'v_whs_cd',
'v_whsorg_cd',
'whs_org_name',
'v_tran_cd',
'iko_flg',
'cnvs_whlslr_cd',
'cnvs_depo_cd',
'cls_depo_nm',
'cnvs_deal_div_cd',
];
return datas.map(function (data) {
const td = display_keys.map((key) =>{