diff --git a/backend/api/v1/modules/a76/general_catalogs/inpc/routes.py b/backend/api/v1/modules/a76/general_catalogs/inpc/routes.py index 69143893..e5b5b8e0 100644 --- a/backend/api/v1/modules/a76/general_catalogs/inpc/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/inpc/routes.py @@ -13,6 +13,7 @@ router = TenantCRUDRoutes( tags=["a76.general_catalogs.inpc"], resource_name="INPC", enable_list=True, + enable_filters=True, # Permisos list_permissions=["cat_inpc.view"], get_permissions=["cat_inpc.view"], diff --git a/backend/api/v1/modules/a76/general_catalogs/inpc/service.py b/backend/api/v1/modules/a76/general_catalogs/inpc/service.py index af4e6d20..de06ce0b 100644 --- a/backend/api/v1/modules/a76/general_catalogs/inpc/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/inpc/service.py @@ -22,8 +22,10 @@ class INPCService: ) if filters: - # Add filters here if needed - pass + if filters.get("year"): + query = query.filter(INPC.year == filters["year"]) + if filters.get("month"): + query = query.filter(INPC.month == filters["month"]) total = query.count() items = query.offset(skip).limit(limit).all() diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/inpc.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/inpc.ts index b53cb816..28cac121 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/inpc.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/inpc.ts @@ -34,11 +34,22 @@ export async function getINPCs( companyId: number, filters: Record = {} ): Promise> { + const cleanFilters = Object.fromEntries( + Object.entries(filters).filter(([, value]) => { + if (value === undefined || value === null) return false; + if (typeof value === 'string') { + const trimmed = value.trim(); + return trimmed !== '' && trimmed.toLowerCase() !== 'undefined'; + } + return true; + }) + ); + const params = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), company_id: companyId.toString(), - ...filters + ...cleanFilters }); return await api.get(`/v1/a76/inpc/?${params.toString()}`); diff --git a/frontend/src/lib/components/dashboard/general_catalogs/inpc/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/general_catalogs/inpc/create-edit-dialog.svelte index 1b4a0a32..7b8e7191 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/inpc/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/inpc/create-edit-dialog.svelte @@ -86,7 +86,10 @@ - + e.preventDefault()} + > {title} diff --git a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte index dfa33ef2..6c1c565c 100644 --- a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte @@ -11,7 +11,7 @@ import * as Card from '$lib/components/ui/card'; import { Button } from '$lib/components/ui/button'; import { Input } from '$lib/components/ui/input'; - import { Pencil, Plus, Trash2, RefreshCw } from 'lucide-svelte'; + import { Pencil, Plus, Trash2 } from 'lucide-svelte'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; import { obtenerAtajosListaINPC } from '$lib/config/shortcuts/dashboard/general_catalogs/inpc/list'; import { inpcApi, type INPC } from '$lib/api/dashboard/a76/general_catalogs/inpc'; @@ -88,10 +88,11 @@ page: '1', page_size: pageSize.toString() }); - if (response.data) { - allItems = response.data.items; - currentPage = 1; - totalItems = response.data.total; + const payload = (response as any).items ? response : (response as any).data; + if (payload?.items) { + allItems = payload.items; + currentPage = payload.page || 1; + totalItems = payload.total; } } catch (err) { error = 'Error aplicando filtros'; @@ -118,11 +119,14 @@ page: (currentPage + 1).toString(), page_size: pageSize.toString() }); - if (response.data?.items) { - allItems = [...allItems, ...response.data.items]; - currentPage += 1; - totalItems = response.data.total; + const payload = (response as any).items ? response : (response as any).data; + if (payload?.items) { + allItems = [...allItems, ...payload.items]; + currentPage = payload.page || currentPage + 1; + totalItems = payload.total; } + } catch (err) { + error = 'Error cargando mas datos'; } finally { loading = false; } @@ -139,11 +143,14 @@ page: '1', page_size: pageSize.toString() }); - if (response.data) { - allItems = response.data.items; - currentPage = 1; - totalItems = response.data.total; + const payload = (response as any).items ? response : (response as any).data; + if (payload?.items) { + allItems = payload.items; + currentPage = payload.page || 1; + totalItems = payload.total; } + } catch (err) { + error = 'Error al recargar datos'; } finally { loading = false; } @@ -168,9 +175,6 @@

{m['common.sub_inpc']()}

- {#if !isError && canCreate}