diff --git a/backend/api/v1/modules/a76/general_catalogs/legends/routes.py b/backend/api/v1/modules/a76/general_catalogs/legends/routes.py index be387185..de2b1e5a 100644 --- a/backend/api/v1/modules/a76/general_catalogs/legends/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/legends/routes.py @@ -13,6 +13,7 @@ router = TenantCRUDRoutes( tags=["a76.general_catalogs.legends"], resource_name="Legend", enable_list=True, + enable_filters=True, list_permissions=["cat_legends.view"], get_permissions=["cat_legends.view"], create_permissions=["cat_legends.create"], diff --git a/backend/api/v1/modules/a76/general_catalogs/legends/service.py b/backend/api/v1/modules/a76/general_catalogs/legends/service.py index e7b6c930..e4340e24 100644 --- a/backend/api/v1/modules/a76/general_catalogs/legends/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/legends/service.py @@ -1,6 +1,6 @@ from typing import List, Optional, Tuple, Dict, Any from sqlalchemy.orm import Session -from sqlalchemy import select +from sqlalchemy import cast, String, select from sqlalchemy.exc import IntegrityError from fastapi import HTTPException import logging @@ -28,7 +28,11 @@ class LegendService: if filters: if filters.get("code"): - query = query.filter(Legend.code.ilike(f"%{filters['code']}%")) + code_str = str(filters["code"]).strip() + if code_str: + query = query.filter( + cast(Legend.code, String).ilike(f"%{code_str}%") + ) if filters.get("description"): query = query.filter( Legend.description.ilike(f"%{filters['description']}%") diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/legends.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/legends.ts index 4ef1ffe8..6b384f8a 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/legends.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/legends.ts @@ -32,11 +32,16 @@ export async function getLegends( companyId: number, filters: Record = {} ): Promise> { + const cleanFilters = Object.fromEntries( + Object.entries(filters).filter( + ([, v]) => v !== undefined && v !== null && v !== '' + ) + ); const params = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), company_id: companyId.toString(), - ...filters + ...cleanFilters }); return await api.get(`/v1/a76/legends/?${params.toString()}`); }