diff --git a/frontend/src/lib/api/dashboard/reference_data/sectors.ts b/frontend/src/lib/api/dashboard/reference_data/sectors.ts index 43b9c72b..b2fe0800 100644 --- a/frontend/src/lib/api/dashboard/reference_data/sectors.ts +++ b/frontend/src/lib/api/dashboard/reference_data/sectors.ts @@ -45,7 +45,7 @@ export const sectorsApi = { }, get: (id: number, companyId: number) => - api.get(`/v1/a76/sectors/${id}/?company_id=${companyId}`), + api.get(`/v1/a76/sectors/${id}?company_id=${companyId}`), getByKey: (key: string, companyId: number) => { const params = new URLSearchParams({ @@ -64,5 +64,5 @@ export const sectorsApi = { api.put(`/v1/a76/sectors/${id}/?company_id=${companyId}`, data), delete: (id: number, companyId: number) => - api.delete(`/v1/a76/sectors/${id}/?company_id=${companyId}`) + api.delete(`/v1/a76/sectors/${id}?company_id=${companyId}`) }; diff --git a/frontend/src/lib/components/dashboard/reference_data/sectors/columns.ts b/frontend/src/lib/components/dashboard/reference_data/sectors/columns.ts index 834824bb..a270a965 100644 --- a/frontend/src/lib/components/dashboard/reference_data/sectors/columns.ts +++ b/frontend/src/lib/components/dashboard/reference_data/sectors/columns.ts @@ -14,7 +14,8 @@ export type Sector = { export function createColumns( onSuccess?: () => void, - permissions: { canEdit: boolean; canDelete: boolean } = { canEdit: true, canDelete: true } + permissions: { canEdit: boolean; canDelete: boolean } = { canEdit: true, canDelete: true }, + callbacks: { onEdit?: (item: Sector) => void; onDelete?: (item: Sector) => void } = {} ): ColumnDef[] { return [ { @@ -67,7 +68,9 @@ export function createColumns( item: row.original, onSuccess, canEdit: permissions.canEdit, - canDelete: permissions.canDelete + canDelete: permissions.canDelete, + onEdit: callbacks.onEdit, + onDelete: callbacks.onDelete }); } } diff --git a/frontend/src/lib/components/dashboard/reference_data/sectors/data-table-actions.svelte b/frontend/src/lib/components/dashboard/reference_data/sectors/data-table-actions.svelte index 1c399a57..70d350a8 100644 --- a/frontend/src/lib/components/dashboard/reference_data/sectors/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/reference_data/sectors/data-table-actions.svelte @@ -13,12 +13,16 @@ item, onSuccess, canEdit = true, - canDelete = true + canDelete = true, + onEdit, + onDelete }: { item: Sector; onSuccess?: () => void; canEdit?: boolean; canDelete?: boolean; + onEdit?: (item: Sector) => void; + onDelete?: (item: Sector) => void; } = $props(); let showDetailsDialog = $state(false); @@ -54,13 +58,13 @@ {#if canEdit} - (alert('Módulo de edición no disponible para Catálogos Públicos'))}> + onEdit?.(item)}> Editar {/if} {#if canDelete} - (alert('Módulo de eliminación no disponible para Catálogos Públicos'))} class="text-destructive"> + onDelete?.(item)} class="text-destructive"> Eliminar diff --git a/frontend/src/lib/permissions/reference-data/sectors-ref-permissions.ts b/frontend/src/lib/permissions/reference-data/sectors-ref-permissions.ts index 44c94ddd..8747d56b 100644 --- a/frontend/src/lib/permissions/reference-data/sectors-ref-permissions.ts +++ b/frontend/src/lib/permissions/reference-data/sectors-ref-permissions.ts @@ -1,13 +1,20 @@ /** * Datos de referencia — permisos `ref_sectors.*` (seed_v2.py `permissions_reference`). - * Solo lectura en seed actual; `action` reservado por si se amplía el CRUD. * Sectores (referencia) + * Nota: Para mutaciones (create/edit/delete) se usan los permisos de cat_sectors + * ya que es el único catálogo "fijo" que permite edición por el usuario. */ import type { User } from '$lib/auth'; import { userHasPermission } from '$lib/auth'; -export type SectorsRefAction = 'view'; +export type SectorsRefAction = 'view' | 'create' | 'edit' | 'delete'; export function userHasSectorsRefAction(user: User | null, action: SectorsRefAction): boolean { - return userHasPermission(user, `ref_sectors.${action}`); + if (action === 'view') { + return userHasPermission(user, `ref_sectors.${action}`); + } + + // Mapeo a cat_sectors para acciones de escritura + const catalogAction = action === 'edit' ? 'edit' : action; + return userHasPermission(user, `cat_sectors.${catalogAction}`); } diff --git a/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte index 9cb4d78a..9c2eb613 100644 --- a/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte +++ b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte @@ -15,6 +15,7 @@ import ErrorState from '$lib/components/dashboard/common/error-state.svelte'; import { createColumns } from '$lib/components/dashboard/reference_data/sectors/columns'; import CreateEditDialog from '$lib/components/dashboard/reference_data/sectors/create-edit-dialog.svelte'; + import DeleteDialog from '$lib/components/dashboard/reference_data/sectors/delete-dialog.svelte'; import InfiniteDataTable from '$lib/components/dashboard/common/infinite-data-table.svelte'; // Los datos iniciales vienen del servidor @@ -31,7 +32,9 @@ // Diálogos let createDialogOpen = $state(false); + let deleteDialogOpen = $state(false); let editingItem = $state(null); + let itemToDelete = $state(null); // Filtros let searchQuery = $state($page.url.searchParams.get('search') || ''); @@ -39,9 +42,9 @@ // Permisos const canView = $derived(userHasSectorsRefAction($currentUser, 'view')); - const canCreate = $derived(false); - const canEdit = $derived(false); - const canDelete = $derived(false); + const canCreate = $derived(userHasSectorsRefAction($currentUser, 'create')); + const canEdit = $derived(userHasSectorsRefAction($currentUser, 'edit')); + const canDelete = $derived(userHasSectorsRefAction($currentUser, 'delete')); const isError = $derived(!canView || status >= 400 || error); @@ -111,10 +114,22 @@ function handleSuccess() { createDialogOpen = false; + deleteDialogOpen = false; editingItem = null; + itemToDelete = null; reloadData(); } + function handleEdit(item: Sector) { + editingItem = item; + createDialogOpen = true; + } + + function handleDelete(item: Sector) { + itemToDelete = item; + deleteDialogOpen = true; + } + useShortcuts('Sectores', [ { key: 'Alt+Shift+R', description: 'Actualizar Lista', action: reloadData }, { @@ -127,7 +142,7 @@ } ]); - const columns = $derived(createColumns(handleSuccess, { canEdit, canDelete })); + const columns = $derived(createColumns(handleSuccess, { canEdit, canDelete }, { onEdit: handleEdit, onDelete: handleDelete }));
@@ -176,3 +191,4 @@
+