feat: 환산계수 모달 구현 전 백업
This commit is contained in:
@@ -571,6 +571,7 @@ def preview_label():
|
||||
- frequency: 복용 횟수
|
||||
- duration: 복용 일수
|
||||
- unit: 단위 (정, 캡슐, mL 등)
|
||||
- sung_code: 성분코드 (환산계수 조회용, 선택)
|
||||
"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
@@ -582,6 +583,17 @@ def preview_label():
|
||||
frequency = int(data.get('frequency', 0))
|
||||
duration = int(data.get('duration', 0))
|
||||
unit = data.get('unit', '정')
|
||||
sung_code = data.get('sung_code', '')
|
||||
|
||||
# 환산계수 조회 (sung_code가 있는 경우)
|
||||
conversion_factor = None
|
||||
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')
|
||||
except Exception as cf_err:
|
||||
logging.warning(f"환산계수 조회 실패 (무시): {cf_err}")
|
||||
|
||||
# 라벨 이미지 생성
|
||||
image = create_label_image(
|
||||
@@ -591,7 +603,8 @@ def preview_label():
|
||||
dosage=dosage,
|
||||
frequency=frequency,
|
||||
duration=duration,
|
||||
unit=unit
|
||||
unit=unit,
|
||||
conversion_factor=conversion_factor
|
||||
)
|
||||
|
||||
# Base64 인코딩
|
||||
@@ -602,7 +615,8 @@ def preview_label():
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'image': f'data:image/png;base64,{img_base64}'
|
||||
'image': f'data:image/png;base64,{img_base64}',
|
||||
'conversion_factor': conversion_factor
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
@@ -679,9 +693,14 @@ 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='정'):
|
||||
def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=0, duration=0, unit='정', conversion_factor=None):
|
||||
"""
|
||||
라벨 이미지 생성 (29mm 용지 기준) - 레거시 디자인 적용
|
||||
|
||||
Args:
|
||||
conversion_factor: 건조시럽 환산계수 (mL→g 변환용, 선택)
|
||||
- 예: 0.11이면 120ml * 0.11 = 13.2g
|
||||
- 총량 옆에 괄호로 표시: "총120mL (13.2g)/5일분"
|
||||
"""
|
||||
# 약품명 정제 (밀리그램 → mg 등)
|
||||
med_name = normalize_medication_name(med_name)
|
||||
@@ -811,11 +830,21 @@ def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=
|
||||
|
||||
y += 5
|
||||
|
||||
# 총량 계산 및 표시
|
||||
# 총량 계산 및 표시 (환산계수 반영)
|
||||
if dosage > 0 and frequency > 0 and duration > 0:
|
||||
total = dosage * frequency * duration
|
||||
total_str = str(int(total)) if total == int(total) else f"{total:.2f}".rstrip('0').rstrip('.')
|
||||
total_text = f"총{total_str}{unit}/{duration}일분"
|
||||
|
||||
# 환산계수가 있으면 변환된 총량도 표시 (예: "총120mL (13.2g)/5일분")
|
||||
if conversion_factor is not None and conversion_factor > 0:
|
||||
converted_total = total * conversion_factor
|
||||
if converted_total == int(converted_total):
|
||||
converted_str = str(int(converted_total))
|
||||
else:
|
||||
converted_str = f"{converted_total:.2f}".rstrip('0').rstrip('.')
|
||||
total_text = f"총{total_str}{unit} ({converted_str}g)/{duration}일분"
|
||||
else:
|
||||
total_text = f"총{total_str}{unit}/{duration}일분"
|
||||
y = draw_centered(total_text, y, additional_font)
|
||||
|
||||
y += 5
|
||||
|
||||
Reference in New Issue
Block a user