34c7e2f964
- 설정 화면 추가: /cupang/products — itemcode_db 검색 등록 + 수동 등록. 제품명 드롭다운 소스. cupang_products 테이블 신규(init.sql 멱등 재실행 필요) - 폼 품목라인: 제품명 드롭다운 선택 → 제품코드 자동 입력 - 라인 컬럼 순서 제품명·제품코드·수량·입수량·박스계산·메모 - 제품코드 140px, 수량·입수량 60px 폭 고정 - 공통 헤더 입력란 겹침 수정(min-width:0, width:100%, box-sizing) - 달력: 일/공휴일 빨강, 토 파랑, 글자 크기 확대. 한국 공휴일 모듈(holidays.py) - document_no null → "None" 출력 버그 수정 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
63 lines
2.9 KiB
Python
63 lines
2.9 KiB
Python
"""대한민국 공휴일 판정 (달력 색상용).
|
|
|
|
- 고정 양력 공휴일은 매년 동일 → 연도 무관 판정.
|
|
- 음력 공휴일(설날/부처님오신날/추석)과 대체공휴일은 매년 달라짐 →
|
|
연도별 dict(`_LUNAR_AND_SUBSTITUTE`)에 명시. 새 연도는 KASI 발표값을 추가한다.
|
|
|
|
미수록 연도는 고정 양력 공휴일만 빨강 처리된다(음력/대체는 누락).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
|
|
# 매년 동일한 양력 공휴일 (month, day)
|
|
_FIXED_SOLAR: set[tuple[int, int]] = {
|
|
(1, 1), # 신정
|
|
(3, 1), # 삼일절
|
|
(5, 5), # 어린이날
|
|
(6, 6), # 현충일
|
|
(8, 15), # 광복절
|
|
(10, 3), # 개천절
|
|
(10, 9), # 한글날
|
|
(12, 25), # 성탄절
|
|
}
|
|
|
|
# 연도별 음력 공휴일 + 대체공휴일 (ISO 날짜 문자열). KASI 발표 기준.
|
|
_LUNAR_AND_SUBSTITUTE: dict[int, set[str]] = {
|
|
2025: {
|
|
"2025-01-28", "2025-01-29", "2025-01-30", # 설날 연휴
|
|
"2025-03-03", # 삼일절 대체(3/1 토)
|
|
"2025-05-06", # 부처님오신날 대체(5/5 겹침)
|
|
"2025-05-05", # 부처님오신날(어린이날과 동일일)
|
|
"2025-10-06", "2025-10-07", "2025-10-08", # 추석 연휴
|
|
"2025-10-08", # 추석 대체 가능
|
|
},
|
|
2026: {
|
|
"2026-02-16", "2026-02-17", "2026-02-18", # 설날 연휴 (설날 2/17)
|
|
"2026-03-02", # 삼일절 대체 (3/1 일)
|
|
"2026-05-24", # 부처님오신날 (일)
|
|
"2026-05-25", # 부처님오신날 대체
|
|
"2026-08-17", # 광복절 대체 (8/15 토)
|
|
"2026-09-24", "2026-09-25", "2026-09-26", # 추석 연휴 (추석 9/25)
|
|
"2026-09-28", # 추석 대체 (9/26 토)
|
|
"2026-10-05", # 개천절 대체 (10/3 토)
|
|
},
|
|
2027: {
|
|
"2027-02-06", "2027-02-07", "2027-02-08", # 설날 연휴 (설날 2/7)
|
|
"2027-02-09", # 설날 대체 (2/7 일)
|
|
"2027-05-13", # 부처님오신날 (목)
|
|
"2027-08-16", # 광복절 대체 (8/15 일)
|
|
"2027-09-14", "2027-09-15", "2027-09-16", # 추석 연휴 (추석 9/15)
|
|
"2027-10-04", # 개천절 대체 (10/3 일)
|
|
"2027-10-11", # 한글날 대체 (10/9 토)
|
|
},
|
|
}
|
|
|
|
|
|
def is_holiday(d: date) -> bool:
|
|
"""공휴일(일요일 제외)이면 True. 일/토 색상은 요일로 따로 판정한다."""
|
|
if (d.month, d.day) in _FIXED_SOLAR:
|
|
return True
|
|
return d.isoformat() in _LUNAR_AND_SUBSTITUTE.get(d.year, set())
|