feat: 仪表盘+催办在休息日跳过填报检查
- 新增 is_working_day() 工具函数,自动跳过周末 + 可配置法定假日 - 仪表盘填报进度新增 is_rest_day 字段,休息日显示灰「休」印章 - 催办调度改用 is_working_day() 替代原始 weekday 检查 - 系统设置新增「法定节假日」配置卡片,支局长可管理假日日期 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,8 @@ from app.models.mini_business import MiniBusiness
|
||||
from app.models.key_visit import KeyVisit
|
||||
from app.models.daily_note import DailyNote
|
||||
from app.models.leave import Leave
|
||||
from app.utils.timezone import today_cst
|
||||
from app.models.system_config import SystemConfig
|
||||
from app.utils.timezone import today_cst, is_working_day
|
||||
|
||||
|
||||
def get_week_range(reference_date: date | None = None):
|
||||
@@ -78,8 +79,22 @@ async def get_reporting_progress(db: AsyncSession, reference_date: date | None =
|
||||
)
|
||||
visit_map = {str(uid): cnt for uid, cnt in visits_result.all()}
|
||||
|
||||
# Load holiday config
|
||||
holiday_row = await db.get(SystemConfig, "holidays")
|
||||
holidays: set[date] = set()
|
||||
if holiday_row and holiday_row.value:
|
||||
for s in holiday_row.value.split(","):
|
||||
s = s.strip()
|
||||
if s:
|
||||
try:
|
||||
holidays.add(date.fromisoformat(s))
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# Query leave records for today — build a set of managers on leave
|
||||
today = today_cst()
|
||||
is_rest = not is_working_day(today, holidays)
|
||||
|
||||
leaves_result = await db.execute(
|
||||
select(Leave).where(and_(
|
||||
Leave.start_date <= today,
|
||||
@@ -107,6 +122,7 @@ async def get_reporting_progress(db: AsyncSession, reference_date: date | None =
|
||||
"completed": count >= expected,
|
||||
"has_reported_today": False, # Will be set below
|
||||
"on_leave": leave is not None,
|
||||
"is_rest_day": is_rest,
|
||||
"leave_info": {
|
||||
"leave_type": leave.leave_type,
|
||||
"start_date": str(leave.start_date),
|
||||
|
||||
Reference in New Issue
Block a user