diff --git a/frontend/src/lib/components/dashboard/general_catalogs/doda/columns.ts b/frontend/src/lib/components/dashboard/general_catalogs/doda/columns.ts index 2f886934..b25aab86 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/doda/columns.ts +++ b/frontend/src/lib/components/dashboard/general_catalogs/doda/columns.ts @@ -42,7 +42,11 @@ const STATUS_CLASSES: Record = { export function createColumns( loc: 'en' | 'es', onSuccess?: () => void, - { canEdit = true, canDelete = true }: { canEdit?: boolean; canDelete?: boolean } = {} + { + canEdit = true, + canDelete = true, + dodaListBasePath = '/dashboard/despacho/doda' + }: { canEdit?: boolean; canDelete?: boolean; dodaListBasePath?: string } = {} ): ColumnDef[] { const t = (k: DodaFormKey) => dodaFormT(loc, k); return [ @@ -168,7 +172,8 @@ export function createColumns( item: row.original, onSuccess, canEdit, - canDelete + canDelete, + dodaListBasePath }); } } diff --git a/frontend/src/lib/components/dashboard/general_catalogs/doda/data-table-actions.svelte b/frontend/src/lib/components/dashboard/general_catalogs/doda/data-table-actions.svelte index 629b8d81..626940e0 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/doda/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/doda/data-table-actions.svelte @@ -12,12 +12,15 @@ item, onSuccess, canEdit = true, - canDelete = true + canDelete = true, + dodaListBasePath = '/dashboard/despacho/doda' }: { item: Doda; onSuccess?: () => void; canEdit?: boolean; canDelete?: boolean; + /** Ruta base donde vive la lista+formulario de DODA (canĂ³nica en Despacho). */ + dodaListBasePath?: string; } = $props(); let loading = $state(false); @@ -60,7 +63,7 @@ Acciones {#if canEdit} - goto(`/dashboard/general_catalogs/doda?doda_id=${item.id}`)}> + goto(`${dodaListBasePath}?doda_id=${item.id}`)}> Editar diff --git a/frontend/src/routes/dashboard/despacho/doda/+page.svelte b/frontend/src/routes/dashboard/despacho/doda/+page.svelte index 4edc440c..89b21aad 100644 --- a/frontend/src/routes/dashboard/despacho/doda/+page.svelte +++ b/frontend/src/routes/dashboard/despacho/doda/+page.svelte @@ -28,6 +28,7 @@ import { createColumns } from '$lib/components/dashboard/general_catalogs/doda/columns'; import DodaProgressDialog from '$lib/components/dashboard/despacho/doda/doda-progress-dialog.svelte'; import DodaExportExcelDialog from '$lib/components/dashboard/despacho/doda/doda-export-excel-dialog.svelte'; + import DodaFormModal from '$lib/components/dashboard/general_catalogs/doda/doda-form-modal.svelte'; import { applyOptimisticDelete } from '$lib/components/dashboard/general_catalogs/doda/delete-list-state'; import { @@ -139,10 +140,17 @@ } } + function handleNew() { + const url = new URL($page.url); + url.searchParams.set('doda_id', 'new'); + goto(url.toString(), { replaceState: true }); + } + function handleEdit() { - if (selectedDoda) { - void goto(`/dashboard/general_catalogs/doda?doda_id=${selectedDoda.id}`, { noScroll: true }); - } + if (!selectedDoda) return; + const url = new URL($page.url); + url.searchParams.set('doda_id', String(selectedDoda.id)); + goto(url.toString(), { replaceState: true }); } async function handleDelete() { @@ -335,7 +343,7 @@ {m['sidebar.doda_alta.refresh']()} - @@ -405,7 +413,7 @@
reloadDodas())} loading={dodaLoading} hasMore={dodaHasMore} loadMore={loadMoreDodas} @@ -413,8 +421,11 @@ onRowClick={(row) => { selectedDodaIds = selectedDodaIds.includes(row.id) ? [] : [row.id]; }} - onRowDoubleClick={(item) => - goto(`/dashboard/general_catalogs/doda?doda_id=${item.id}`, { noScroll: true })} + onRowDoubleClick={(item) => { + const url = new URL($page.url); + url.searchParams.set('doda_id', String(item.id)); + goto(url.toString(), { replaceState: true }); + }} />
@@ -536,3 +547,21 @@ onCancel={() => (progressDialogOpen = false)} /> {/if} + +{#if $page.url.searchParams.get('doda_id')} + { + const url = new URL($page.url); + url.searchParams.delete('doda_id'); + goto(url.toString(), { replaceState: true }); + void reloadDodas(); + }} + onCreatedNavigateTo={(newId) => { + const url = new URL($page.url); + url.searchParams.set('doda_id', String(newId)); + goto(url.toString(), { replaceState: true }); + }} + /> +{/if} diff --git a/frontend/src/routes/dashboard/despacho/doda/edit/[[id]]/+page.ts b/frontend/src/routes/dashboard/despacho/doda/edit/[[id]]/+page.ts index 9cf2484e..a444dfc0 100644 --- a/frontend/src/routes/dashboard/despacho/doda/edit/[[id]]/+page.ts +++ b/frontend/src/routes/dashboard/despacho/doda/edit/[[id]]/+page.ts @@ -8,8 +8,8 @@ export const load: PageLoad = async ({ params }) => { if (params.id) { throw redirect( 303, - `/dashboard/general_catalogs/doda?doda_id=${encodeURIComponent(String(params.id))}` + `/dashboard/despacho/doda?doda_id=${encodeURIComponent(String(params.id))}` ); } - throw redirect(303, '/dashboard/general_catalogs/doda?doda_id=new'); + throw redirect(303, '/dashboard/despacho/doda?doda_id=new'); }; diff --git a/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts index 8d3a8b86..5bcd57ec 100644 --- a/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts @@ -1,81 +1,14 @@ +import { redirect } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; -import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; -export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - const parentData = await parent(); - const { accessToken } = getAuthTokens(cookies); +export const load: PageServerLoad = async ({ url }) => { + // Preservar parĂ¡metros relevantes al redirigir al nuevo flujo en Despacho + const dodaId = url.searchParams.get('doda_id'); + const integrationNumber = url.searchParams.get('integration_number'); - const pUser = parentData.user as - | { preferred_username?: string; name?: string; email?: string } - | undefined - | null; - const defaultLastUser = - (pUser?.preferred_username?.trim() || pUser?.name?.trim() || pUser?.email?.trim() || '') || ''; + const target = new URL('/dashboard/despacho/doda', url.origin); + if (dodaId) target.searchParams.set('doda_id', dodaId); + if (integrationNumber) target.searchParams.set('integration_number', integrationNumber); - if (!accessToken) { - return { - error: 'No authenticated', - dodas: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, - defaultLastUser - }; - } - - try { - const page = Number(url.searchParams.get('page')) || 1; - const pageSize = Number(url.searchParams.get('pageSize')) || 50; - - // Obtener company_id de la cookie o usar el primero disponible - const cookieCompanyId = cookies.get('active_company_id'); - const companyId = cookieCompanyId - ? parseInt(cookieCompanyId) - : parentData.companies?.[0]?.id; - - if (!companyId) { - return { - error: 'No company selected', - dodas: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, - defaultLastUser - }; - } - - const filters: Record = {}; - const integrationNumber = url.searchParams.get('integration_number'); - - if (integrationNumber) filters.integration_number = integrationNumber; - - const queryParams = new URLSearchParams({ - page: page.toString(), - page_size: pageSize.toString(), - company_id: companyId.toString(), - ...filters - }); - const response = await authenticatedFetch(`v1/a76/doda?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); - - if (!response.ok) { - let errorMsg = 'Failed to load'; - try { - const errorData = await response.json(); - errorMsg = errorData.detail || errorData.message || errorMsg; - } catch (e) { - // Ignore json parsing error - } - return { - error: errorMsg, - status: response.status, - dodas: { items: [], total: 0, page, page_size: pageSize, pages: 0 }, - defaultLastUser - }; - } - - const dodasData = await response.json(); - return { dodas: dodasData, status: 200, defaultLastUser }; - } catch (error: any) { - console.error('Error loading DODAs:', error); - return { - error: error.message || 'Error loading', - status: error.status || 500, - dodas: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, - defaultLastUser - }; - } + throw redirect(303, `${target.pathname}${target.search}`); }; diff --git a/frontend/src/routes/dashboard/general_catalogs/doda/edit/[[id]]/+page.ts b/frontend/src/routes/dashboard/general_catalogs/doda/edit/[[id]]/+page.ts index 9cf2484e..a444dfc0 100644 --- a/frontend/src/routes/dashboard/general_catalogs/doda/edit/[[id]]/+page.ts +++ b/frontend/src/routes/dashboard/general_catalogs/doda/edit/[[id]]/+page.ts @@ -8,8 +8,8 @@ export const load: PageLoad = async ({ params }) => { if (params.id) { throw redirect( 303, - `/dashboard/general_catalogs/doda?doda_id=${encodeURIComponent(String(params.id))}` + `/dashboard/despacho/doda?doda_id=${encodeURIComponent(String(params.id))}` ); } - throw redirect(303, '/dashboard/general_catalogs/doda?doda_id=new'); + throw redirect(303, '/dashboard/despacho/doda?doda_id=new'); };