refactor(backend): update expense claims service and tests
- services/expense_claims.py: update expense claims service - tests/test_orchestrator_service.py: update orchestrator service tests
This commit is contained in:
@@ -36,7 +36,7 @@ EXPENSE_TYPE_LABELS = {
|
||||
"welfare": "福利",
|
||||
}
|
||||
|
||||
PRIVILEGED_CLAIM_ROLE_CODES = {"manager", "finance", "approver", "auditor", "executive"}
|
||||
PRIVILEGED_CLAIM_ROLE_CODES = {"finance"}
|
||||
MAX_DRAFT_CLAIMS_PER_USER = 3
|
||||
LOCATION_REQUIRED_EXPENSE_TYPES = {
|
||||
"travel",
|
||||
@@ -1607,8 +1607,6 @@ class ExpenseClaimService:
|
||||
|
||||
@staticmethod
|
||||
def _has_privileged_claim_access(current_user: CurrentUserContext) -> bool:
|
||||
if current_user.is_admin:
|
||||
return True
|
||||
return bool(set(current_user.role_codes) & PRIVILEGED_CLAIM_ROLE_CODES)
|
||||
|
||||
def _apply_claim_scope(self, stmt: Any, current_user: CurrentUserContext) -> Any:
|
||||
@@ -1617,13 +1615,31 @@ class ExpenseClaimService:
|
||||
|
||||
conditions = []
|
||||
username = str(current_user.username or "").strip()
|
||||
name = str(current_user.name or "").strip()
|
||||
|
||||
employee = None
|
||||
if username:
|
||||
conditions.append(ExpenseClaim.employee_id == username)
|
||||
conditions.append(ExpenseClaim.employee_name == username)
|
||||
if name:
|
||||
conditions.append(ExpenseClaim.employee_name == name)
|
||||
employee = self.db.scalar(
|
||||
select(Employee)
|
||||
.where(func.lower(Employee.email) == username.lower())
|
||||
.limit(1)
|
||||
)
|
||||
|
||||
def add_condition(field_name: str, value: str | None) -> None:
|
||||
normalized = str(value or "").strip()
|
||||
if not normalized:
|
||||
return
|
||||
if field_name == "employee_id":
|
||||
conditions.append(ExpenseClaim.employee_id == normalized)
|
||||
return
|
||||
conditions.append(ExpenseClaim.employee_name == normalized)
|
||||
|
||||
if employee is not None:
|
||||
add_condition("employee_id", employee.id)
|
||||
add_condition("employee_name", employee.name)
|
||||
add_condition("employee_name", employee.email)
|
||||
else:
|
||||
add_condition("employee_id", username)
|
||||
add_condition("employee_name", username)
|
||||
|
||||
if not conditions:
|
||||
return stmt.where(ExpenseClaim.id == "__no_visible_claim__")
|
||||
|
||||
Reference in New Issue
Block a user