diff --git a/frontend/src/lib/components/dashboard/transportation/drivers/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/drivers/create-edit-dialog.svelte index 10304064..4224ae06 100644 --- a/frontend/src/lib/components/dashboard/transportation/drivers/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/transportation/drivers/create-edit-dialog.svelte @@ -7,6 +7,7 @@ import { driversApi, type Driver } from '$lib/api/dashboard/a76/drivers'; import { transportersApi, type Transporter } from '$lib/api/dashboard/a76/transporters'; import { companyStore } from '$lib/stores/company.svelte'; + import { onMount, onDestroy } from 'svelte'; let { open = $bindable(false), @@ -85,6 +86,7 @@ }); async function handleSubmit() { + if (loading) return; error = null; loading = true; @@ -162,6 +164,17 @@ open = false; error = null; } + + function onSaveFormEvent() { + void handleSubmit(); + } + + onMount(() => { + document.addEventListener('save-form', onSaveFormEvent); + }); + onDestroy(() => { + document.removeEventListener('save-form', onSaveFormEvent); + }); diff --git a/frontend/src/lib/components/dashboard/transportation/trailers/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/trailers/create-edit-dialog.svelte index 6959aed2..042ecc34 100644 --- a/frontend/src/lib/components/dashboard/transportation/trailers/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/transportation/trailers/create-edit-dialog.svelte @@ -5,6 +5,7 @@ import { Label } from '$lib/components/ui/label'; import { trailersApi, type Trailer } from '$lib/api/dashboard/a76/trailers'; import { companyStore } from '$lib/stores/company.svelte'; + import { onMount, onDestroy } from 'svelte'; let { open = $bindable(false), @@ -53,6 +54,7 @@ }); async function handleSubmit() { + if (loading) return; error = null; loading = true; @@ -92,6 +94,17 @@ open = false; error = null; } + + function onSaveFormEvent() { + void handleSubmit(); + } + + onMount(() => { + document.addEventListener('save-form', onSaveFormEvent); + }); + onDestroy(() => { + document.removeEventListener('save-form', onSaveFormEvent); + }); diff --git a/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte index 0cc296fd..0ff6c3d3 100644 --- a/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte @@ -5,6 +5,7 @@ import { Label } from '$lib/components/ui/label'; import { transportersApi, type Transporter } from '$lib/api/dashboard/a76/transporters'; import { companyStore } from '$lib/stores/company.svelte'; + import { onMount, onDestroy } from 'svelte'; let { open = $bindable(false), @@ -76,6 +77,7 @@ }); async function handleSubmit() { + if (loading) return; error = null; loading = true; @@ -117,6 +119,17 @@ open = false; error = null; } + + function onSaveFormEvent() { + void handleSubmit(); + } + + onMount(() => { + document.addEventListener('save-form', onSaveFormEvent); + }); + onDestroy(() => { + document.removeEventListener('save-form', onSaveFormEvent); + }); diff --git a/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte index 313dd45b..e7c7c514 100644 --- a/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte @@ -5,6 +5,7 @@ import { Label } from '$lib/components/ui/label'; import { vehiclesApi, type Vehicle } from '$lib/api/dashboard/a76/vehicles'; import { companyStore } from '$lib/stores/company.svelte'; + import { onMount, onDestroy } from 'svelte'; let { open = $bindable(false), @@ -90,6 +91,7 @@ }); async function handleSubmit() { + if (loading) return; error = null; loading = true; @@ -131,6 +133,17 @@ open = false; error = null; } + + function onSaveFormEvent() { + void handleSubmit(); + } + + onMount(() => { + document.addEventListener('save-form', onSaveFormEvent); + }); + onDestroy(() => { + document.removeEventListener('save-form', onSaveFormEvent); + }); diff --git a/frontend/src/lib/config/shortcuts/dashboard/pedimentos/edit.ts b/frontend/src/lib/config/shortcuts/dashboard/pedimentos/edit.ts index 80685347..cd337949 100644 --- a/frontend/src/lib/config/shortcuts/dashboard/pedimentos/edit.ts +++ b/frontend/src/lib/config/shortcuts/dashboard/pedimentos/edit.ts @@ -19,7 +19,7 @@ export const obtenerAtajosPrincipalesEdicionPedimento = (acciones: { action: () => acciones.cambiarPestana('cuentas-compensacion') }, { key: 'Alt+X', description: 'Tab Otros', action: () => acciones.cambiarPestana('otros-datos') }, - { key: 'Alt+J', description: 'Tab Digital', action: () => acciones.cambiarPestana('digitalizacion') }, + { key: 'Alt+W', description: 'Tab Digital', action: () => acciones.cambiarPestana('digitalizacion') }, { key: 'Ctrl+S', description: 'Guardar cambios', action: acciones.manejarGuardar }, { key: 'Escape', description: 'Regresar / Cancelar', action: acciones.manejarRegresar } ]; diff --git a/frontend/src/routes/dashboard/general_catalogs/drivers/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/drivers/+page.svelte index 0f089351..adeaf72a 100644 --- a/frontend/src/routes/dashboard/general_catalogs/drivers/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/drivers/+page.svelte @@ -13,6 +13,8 @@ import { driversApi, type Driver } from '$lib/api/dashboard/a76/drivers'; import { companyStore } from '$lib/stores/company.svelte'; import { browser } from '$app/environment'; + import { useShortcuts } from '$lib/hooks/use-shortcuts'; + import { obtenerAtajosCatalogoSimple } from '$lib/config/shortcuts/dashboard/general_catalogs/common/factory'; let data = $state([]); let totalItems = $state(0); @@ -91,6 +93,23 @@ loadData(); }); + useShortcuts('Conductores', [ + ...obtenerAtajosCatalogoSimple({ + manejarNuevo: () => { + createDialogOpen = true; + }, + manejarActualizar: loadData + }), + { + key: 'Ctrl+S', + description: 'Guardar', + action: () => { + if (!createDialogOpen) return; + document.dispatchEvent(new CustomEvent('save-form')); + } + } + ]); + const columns = createColumns(loadData); diff --git a/frontend/src/routes/dashboard/general_catalogs/tariff-fractions/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/tariff-fractions/+page.svelte index 8fc9313b..e69de29b 100644 --- a/frontend/src/routes/dashboard/general_catalogs/tariff-fractions/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/tariff-fractions/+page.svelte @@ -1,188 +0,0 @@ - - -
-
-
-

Catálogo de Fracciones SITAR - SCAII

-

Nomenclatura arancelaria mexicana completa

-
- -
- - - -
- Listado de Fracciones -
- - -
-
-
- -
- - - - Código - Fracción - Descripción - NICO - UMT - Adv. Impo - Adv. Expo - - - - {#if tariffFractions.length === 0} - - - {#if isLoading} - Cargando fracciones arancelarias... - {:else if searchQuery} - No se encontraron fracciones que coincidan con la búsqueda - {:else} - No hay fracciones arancelarias disponibles - {/if} - - - {:else} - {#each tariffFractions as fraction (fraction.id)} - - {fraction.code} - {fraction.fraction} - {fraction.description || '-'} - {fraction.nico || '-'} - {fraction.umt || '-'} - {fraction.adv_impo || '-'} - {fraction.adv_expo || '-'} - - {/each} - {/if} - - -
-
-
- -
- Mostrando {tariffFractions.length} de {totalRecords} fracciones arancelarias - {#if searchQuery} - - Filtrado - {/if} -
- - {#if totalPages > 1} -
- - - - -
- {/if} -
diff --git a/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte index 0331dc38..5894f317 100644 --- a/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte @@ -14,6 +14,8 @@ import { trailersApi, type Trailer } from '$lib/api/dashboard/a76/trailers'; import { companyStore } from '$lib/stores/company.svelte'; import { browser } from '$app/environment'; + import { useShortcuts } from '$lib/hooks/use-shortcuts'; + import { obtenerAtajosCatalogoSimple } from '$lib/config/shortcuts/dashboard/general_catalogs/common/factory'; // --- ESTADO --- let data = $state([]); @@ -98,6 +100,23 @@ loadData(); }); + useShortcuts('Trailers', [ + ...obtenerAtajosCatalogoSimple({ + manejarNuevo: () => { + createDialogOpen = true; + }, + manejarActualizar: loadData + }), + { + key: 'Ctrl+S', + description: 'Guardar', + action: () => { + if (!createDialogOpen) return; + document.dispatchEvent(new CustomEvent('save-form')); + } + } + ]); + const columns = createColumns(loadData); diff --git a/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte index f14bf171..eb986eb3 100644 --- a/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte @@ -14,6 +14,8 @@ import { transportersApi, type Transporter } from '$lib/api/dashboard/a76/transporters'; import { companyStore } from '$lib/stores/company.svelte'; import { browser } from '$app/environment'; + import { useShortcuts } from '$lib/hooks/use-shortcuts'; + import { obtenerAtajosCatalogoSimple } from '$lib/config/shortcuts/dashboard/general_catalogs/common/factory'; // --- ESTADO --- let data = $state([]); @@ -98,6 +100,23 @@ loadData(); }); + useShortcuts('Transportistas', [ + ...obtenerAtajosCatalogoSimple({ + manejarNuevo: () => { + createDialogOpen = true; + }, + manejarActualizar: loadData + }), + { + key: 'Ctrl+S', + description: 'Guardar', + action: () => { + if (!createDialogOpen) return; + document.dispatchEvent(new CustomEvent('save-form')); + } + } + ]); + const columns = createColumns(loadData); diff --git a/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte index 39ee3719..1e193fe7 100644 --- a/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte @@ -14,6 +14,8 @@ import { vehiclesApi, type Vehicle } from '$lib/api/dashboard/a76/vehicles'; import { companyStore } from '$lib/stores/company.svelte'; import { browser } from '$app/environment'; + import { useShortcuts } from '$lib/hooks/use-shortcuts'; + import { obtenerAtajosCatalogoSimple } from '$lib/config/shortcuts/dashboard/general_catalogs/common/factory'; // --- ESTADO --- let data = $state([]); @@ -98,6 +100,23 @@ loadData(); }); + useShortcuts('Vehículos (transporte)', [ + ...obtenerAtajosCatalogoSimple({ + manejarNuevo: () => { + createDialogOpen = true; + }, + manejarActualizar: loadData + }), + { + key: 'Ctrl+S', + description: 'Guardar', + action: () => { + if (!createDialogOpen) return; + document.dispatchEvent(new CustomEvent('save-form')); + } + } + ]); + const columns = createColumns(loadData); diff --git a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte index 7f46bab4..a2bcc5e2 100644 --- a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte +++ b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte @@ -229,6 +229,14 @@ key: 'Alt+Shift+D', description: 'Delete', action: handleDelete + }, + { + key: 'Ctrl+S', + description: 'Guardar clase', + action: () => { + if (!showInsertDialog || isSaving) return; + document.dispatchEvent(new CustomEvent('save-form')); + } } ]);