feat: 数字员工财务报告体系与定时提醒及看板快照调度

- 新增数字员工财务报告生成、邮件投递与渲染调度器
- 引入员工画像扫描调度与定时提醒任务
- 完善财务看板快照、排行口径与部门人员占比计算
- 优化数字员工工作看板仪表盘与技能目录
- 增强前端总览页图表、工作台摘要与顶部导航栏交互
- 新增差旅申请规划推动提醒与报销创建会话状态管理
- 补充财务报告、看板调度、数字员工工作记录测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-03 09:25:23 +08:00
parent 0c74b4ab4a
commit 15006a05a7
114 changed files with 7356 additions and 650 deletions

View File

@@ -3541,12 +3541,63 @@ def test_direct_manager_cannot_delete_application_claim() -> None:
db.commit()
claim_id = claim.id
with pytest.raises(ValueError, match="申请单只有系统管理员可以删除"):
with pytest.raises(ValueError, match="只有草稿、待补充或退回待提交状态的单据"):
ExpenseClaimService(db).delete_claim(claim_id, current_user)
assert db.get(ExpenseClaim, claim_id) is not None
def test_applicant_can_delete_returned_application_claim() -> None:
current_user = CurrentUserContext(
username="zhangsan-application-return-delete@example.com",
name="张三",
role_codes=[],
is_admin=False,
)
with build_session() as db:
employee = Employee(
employee_no="E-APP-DEL-RETURN",
name="张三",
email="zhangsan-application-return-delete@example.com",
)
db.add(employee)
db.flush()
claim = ExpenseClaim(
claim_no="APP-DEL-RETURN-101",
employee_id=employee.id,
employee_name="张三",
department_name="市场部",
project_code=None,
expense_type="travel_application",
reason="差旅申请",
location="上海",
amount=Decimal("1200.00"),
currency="CNY",
invoice_count=0,
occurred_at=datetime(2026, 5, 11, 9, 0, tzinfo=UTC),
submitted_at=datetime(2026, 5, 11, 10, 0, tzinfo=UTC),
status="returned",
approval_stage="待提交",
risk_flags_json=[
{
"source": "manual_return",
"event_type": "expense_application_return",
"message": "请补充出差事由",
}
],
)
db.add(claim)
db.commit()
claim_id = claim.id
deleted = ExpenseClaimService(db).delete_claim(claim_id, current_user)
assert deleted is not None
assert deleted.claim_no == "APP-DEL-RETURN-101"
assert db.get(ExpenseClaim, claim_id) is None
def test_admin_can_delete_application_claim() -> None:
current_user = CurrentUserContext(
username="superadmin",