diff --git a/backend/app/crud/crm/contract.py b/backend/app/crud/crm/contract.py index 59971f26d..7b999db31 100644 --- a/backend/app/crud/crm/contract.py +++ b/backend/app/crud/crm/contract.py @@ -30,6 +30,7 @@ from app.crud.crm.contract_product import ( ) from app.crud.crm.customer import get_customer from app.crud.crm.invoice_info import list_invoice_info_by_customer +from app.services.crm.list_sort import resolve_datetime_order_by from app.services.crm_settlement_clause import default_settlement_clause from app.services.crm_supplier_hazard import assert_products_allowed_for_supplier from app.crud.crm.product import resolve_product_id_for_quote_item @@ -445,7 +446,19 @@ def _build_contract_filters( else: q = q.filter(CrmContract.id == "__none__") - return q.order_by(CrmContract.create_time.desc()) + default_order = CrmContract.create_time.desc() + whitelist = { + "signDate": CrmContract.sign_date, + "startDate": CrmContract.start_date, + "endDate": CrmContract.end_date, + "createTime": CrmContract.create_time, + "updateTime": CrmContract.update_time, + } + sort_field = _get_field(filters, "sort_field", "sortField") + sort_order = _get_field(filters, "sort_order", "sortOrder") + return q.order_by( + resolve_datetime_order_by(sort_field, sort_order, whitelist, default_order) + ) def list_contracts( diff --git a/backend/app/schemas/crm/contract.py b/backend/app/schemas/crm/contract.py index 4ded63443..e719c7513 100644 --- a/backend/app/schemas/crm/contract.py +++ b/backend/app/schemas/crm/contract.py @@ -84,6 +84,8 @@ class ContractListQuery(BaseModel): signDateEnd: Optional[str] = None beginTime: Optional[str] = None endTime: Optional[str] = None + sortField: Optional[str] = None + sortOrder: Optional[str] = None class ContractCreateBody(BaseModel):