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)
|
employee = self._resolve_employee(ontology=ontology, context_json=context_json)
|
||||||
amount = self._resolve_amount(ontology.entities)
|
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)
|
expense_type = self._resolve_expense_type(ontology.entities)
|
||||||
location = self._resolve_location(message=message, context_json=context_json)
|
location = self._resolve_location(message=message, context_json=context_json)
|
||||||
reason = self._resolve_reason(
|
reason = self._resolve_reason(
|
||||||
@@ -306,8 +306,18 @@ class ExpenseClaimService:
|
|||||||
context_json: dict[str, Any],
|
context_json: dict[str, Any],
|
||||||
allow_message_fallback: bool,
|
allow_message_fallback: bool,
|
||||||
) -> str | None:
|
) -> 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")
|
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"):
|
for key in ("reason", "title"):
|
||||||
value = str(request_context.get(key) or "").strip()
|
value = str(request_context.get(key) or "").strip()
|
||||||
if value:
|
if value:
|
||||||
@@ -318,8 +328,18 @@ class ExpenseClaimService:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _resolve_location(*, message: str, context_json: dict[str, Any]) -> str | None:
|
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")
|
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"):
|
for key in ("city", "location"):
|
||||||
value = str(request_context.get(key) or "").strip()
|
value = str(request_context.get(key) or "").strip()
|
||||||
if value:
|
if value:
|
||||||
@@ -330,7 +350,23 @@ class ExpenseClaimService:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@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
|
start_date = ontology.time_range.start_date
|
||||||
if start_date:
|
if start_date:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user