feat(pmr): 라벨에 보관조건 표시 추가
- get_conversion_factor()에서 storage_conditions 함께 반환 - PostgreSQL 조회 결과 없으면 '실온보관' 기본값 - create_label_image()에 storage_conditions 파라미터 추가 - 용법 박스 아래, 조제일 위 여백에 보관조건 표시 - 모든 약품에 보관조건 표시 (실온보관 포함)
This commit is contained in:
@@ -589,13 +589,15 @@ def preview_label():
|
||||
unit = data.get('unit', '정')
|
||||
sung_code = data.get('sung_code', '')
|
||||
|
||||
# 환산계수 조회 (sung_code가 있는 경우)
|
||||
# 환산계수 및 보관조건 조회 (sung_code가 있는 경우)
|
||||
conversion_factor = None
|
||||
storage_conditions = '실온보관'
|
||||
if sung_code:
|
||||
try:
|
||||
from db.dbsetup import db_manager
|
||||
cf_result = db_manager.get_conversion_factor(sung_code)
|
||||
conversion_factor = cf_result.get('conversion_factor')
|
||||
storage_conditions = cf_result.get('storage_conditions', '실온보관')
|
||||
except Exception as cf_err:
|
||||
logging.warning(f"환산계수 조회 실패 (무시): {cf_err}")
|
||||
|
||||
@@ -608,7 +610,8 @@ def preview_label():
|
||||
frequency=frequency,
|
||||
duration=duration,
|
||||
unit=unit,
|
||||
conversion_factor=conversion_factor
|
||||
conversion_factor=conversion_factor,
|
||||
storage_conditions=storage_conditions
|
||||
)
|
||||
|
||||
# Base64 인코딩
|
||||
@@ -620,7 +623,8 @@ def preview_label():
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'image': f'data:image/png;base64,{img_base64}',
|
||||
'conversion_factor': conversion_factor
|
||||
'conversion_factor': conversion_factor,
|
||||
'storage_conditions': storage_conditions
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
@@ -670,13 +674,15 @@ def print_label():
|
||||
printer_ip = '192.168.0.168'
|
||||
printer_model = 'QL-810W'
|
||||
|
||||
# 환산계수 조회
|
||||
# 환산계수 및 보관조건 조회
|
||||
conversion_factor = None
|
||||
storage_conditions = '실온보관'
|
||||
if sung_code:
|
||||
try:
|
||||
from db.dbsetup import db_manager
|
||||
cf_result = db_manager.get_conversion_factor(sung_code)
|
||||
conversion_factor = cf_result.get('conversion_factor')
|
||||
storage_conditions = cf_result.get('storage_conditions', '실온보관')
|
||||
except Exception as cf_err:
|
||||
logging.warning(f"환산계수 조회 실패 (무시): {cf_err}")
|
||||
|
||||
@@ -689,7 +695,8 @@ def print_label():
|
||||
frequency=frequency,
|
||||
duration=duration,
|
||||
unit=unit,
|
||||
conversion_factor=conversion_factor
|
||||
conversion_factor=conversion_factor,
|
||||
storage_conditions=storage_conditions
|
||||
)
|
||||
|
||||
# 2. 방향 설정 (portrait: 회전 없음, landscape: 90도 회전)
|
||||
@@ -802,7 +809,7 @@ def draw_scissor_border(draw, width, height, edge_size=5, steps=20):
|
||||
draw.line(right_points, fill="black", width=2)
|
||||
|
||||
|
||||
def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=0, duration=0, unit='정', conversion_factor=None):
|
||||
def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=0, duration=0, unit='정', conversion_factor=None, storage_conditions='실온보관'):
|
||||
"""
|
||||
라벨 이미지 생성 (29mm 용지 기준) - 레거시 디자인 적용
|
||||
|
||||
@@ -810,6 +817,8 @@ def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=
|
||||
conversion_factor: 건조시럽 환산계수 (mL→g 변환용, 선택)
|
||||
- 예: 0.11이면 120ml * 0.11 = 13.2g
|
||||
- 총량 옆에 괄호로 표시: "총120mL (13.2g)/5일분"
|
||||
storage_conditions: 보관조건 (예: '냉장보관', '실온보관')
|
||||
- 용법 박스와 조제일 사이 여백에 표시
|
||||
"""
|
||||
# 약품명 정제 (밀리그램 → mg 등)
|
||||
med_name = normalize_medication_name(med_name)
|
||||
@@ -1000,6 +1009,19 @@ def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=
|
||||
|
||||
y = box_bottom + 10
|
||||
|
||||
# 보관조건 표시 (용법 박스와 조제일 사이 여백)
|
||||
if storage_conditions:
|
||||
# 모든 보관조건 표시 (실온보관, 냉장보관 등)
|
||||
storage_text = f"* {storage_conditions}"
|
||||
try:
|
||||
storage_font = ImageFont.truetype(font_path, 22)
|
||||
except:
|
||||
storage_font = ImageFont.load_default()
|
||||
bbox_storage = draw.textbbox((0, 0), storage_text, font=storage_font)
|
||||
storage_w = bbox_storage[2] - bbox_storage[0]
|
||||
draw.text(((label_width - storage_w) / 2, y), storage_text, font=storage_font, fill="black")
|
||||
y += 25
|
||||
|
||||
# 조제일 (시그니처 위쪽에 배치)
|
||||
today = datetime.now().strftime('%Y-%m-%d')
|
||||
print_date_text = f"조제일 : {today}"
|
||||
|
||||
Reference in New Issue
Block a user