refactor(server): update expense claims service
- services/expense_claims.py: update expense claims business logic
This commit is contained in:
@@ -45,7 +45,7 @@ class ExpenseClaimService:
|
||||
|
||||
employee = self._resolve_employee(ontology=ontology, context_json=context_json)
|
||||
amount = self._resolve_amount(ontology.entities)
|
||||
occurred_at = self._resolve_occurred_at(ontology)
|
||||
occurred_at = self._resolve_occurred_at(ontology, context_json=context_json)
|
||||
expense_type = self._resolve_expense_type(ontology.entities)
|
||||
location = self._resolve_location(message=message, context_json=context_json)
|
||||
reason = self._resolve_reason(
|
||||
@@ -306,8 +306,18 @@ class ExpenseClaimService:
|
||||
context_json: dict[str, Any],
|
||||
allow_message_fallback: bool,
|
||||
) -> str | None:
|
||||
review_form_values = context_json.get("review_form_values")
|
||||
if isinstance(review_form_values, dict):
|
||||
for key in ("reason", "business_reason"):
|
||||
value = str(review_form_values.get(key) or "").strip()
|
||||
if value:
|
||||
return value
|
||||
|
||||
request_context = context_json.get("request_context")
|
||||
if isinstance(request_context, dict):
|
||||
if (
|
||||
isinstance(request_context, dict)
|
||||
and str(context_json.get("entry_source") or "").strip() == "detail"
|
||||
):
|
||||
for key in ("reason", "title"):
|
||||
value = str(request_context.get(key) or "").strip()
|
||||
if value:
|
||||
@@ -318,8 +328,18 @@ class ExpenseClaimService:
|
||||
|
||||
@staticmethod
|
||||
def _resolve_location(*, message: str, context_json: dict[str, Any]) -> str | None:
|
||||
review_form_values = context_json.get("review_form_values")
|
||||
if isinstance(review_form_values, dict):
|
||||
for key in ("business_location", "location"):
|
||||
value = str(review_form_values.get(key) or "").strip()
|
||||
if value:
|
||||
return value
|
||||
|
||||
request_context = context_json.get("request_context")
|
||||
if isinstance(request_context, dict):
|
||||
if (
|
||||
isinstance(request_context, dict)
|
||||
and str(context_json.get("entry_source") or "").strip() == "detail"
|
||||
):
|
||||
for key in ("city", "location"):
|
||||
value = str(request_context.get(key) or "").strip()
|
||||
if value:
|
||||
@@ -330,7 +350,23 @@ class ExpenseClaimService:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _resolve_occurred_at(ontology: OntologyParseResult) -> datetime | None:
|
||||
def _resolve_occurred_at(
|
||||
ontology: OntologyParseResult,
|
||||
*,
|
||||
context_json: dict[str, Any],
|
||||
) -> datetime | None:
|
||||
review_form_values = context_json.get("review_form_values")
|
||||
if isinstance(review_form_values, dict):
|
||||
for key in ("occurred_date", "time_range", "business_time"):
|
||||
value = str(review_form_values.get(key) or "").strip()
|
||||
if not value:
|
||||
continue
|
||||
try:
|
||||
parsed = date.fromisoformat(value)
|
||||
return datetime(parsed.year, parsed.month, parsed.day, tzinfo=UTC)
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
start_date = ontology.time_range.start_date
|
||||
if start_date:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user