diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/unit-conversions.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/unit-conversions.ts index 7ece8a8e..1a977195 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/unit-conversions.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/unit-conversions.ts @@ -76,6 +76,7 @@ export async function updateUnitConversion( } export async function deleteUnitConversion(id: number, companyId: number): Promise { - const response = await api.delete(`/v1/a76/unit-conversions/${id}/?company_id=${companyId}`); + // Backend DELETE route is defined without trailing slash: /unit-conversions/{id} + const response = await api.delete(`/v1/a76/unit-conversions/${id}?company_id=${companyId}`); if (response.error) throw new Error(response.error); } \ No newline at end of file diff --git a/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/create-edit-dialog.svelte index 1a6911c8..0d6c303a 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/create-edit-dialog.svelte @@ -3,6 +3,8 @@ import * as Dialog from '$lib/components/ui/dialog'; import { Input } from '$lib/components/ui/input'; import { Label } from '$lib/components/ui/label'; + import UnitMeasureSelectorDialog from '$lib/components/dashboard/goods/modales/unit-measure-dialog.svelte'; + import { FolderSearch, Scale } from 'lucide-svelte'; import { createUnitConversion, updateUnitConversion, @@ -36,6 +38,21 @@ let loading = $state(false); let error = $state(null); + let showFromUomModal = $state(false); + let showToUomModal = $state(false); + let wasOpen = $state(false); + + function resetForm() { + formData = { + from_unit_code: '', + to_unit_code: '', + conversion_factor: '' + }; + error = null; + loading = false; + showFromUomModal = false; + showToUomModal = false; + } $effect(() => { if (conversion) { @@ -53,6 +70,14 @@ } }); + $effect(() => { + // Reset each time the dialog is opened in create mode + if (open && !wasOpen && !isEdit) { + resetForm(); + } + wasOpen = open; + }); + async function handleSubmit() { loading = true; error = null; @@ -114,24 +139,60 @@
- +
+
+ + (showFromUomModal = true)} + class="cursor-pointer pl-9 font-mono" + placeholder="Seleccione..." + disabled={loading} + required + /> +
+ +
- +
+
+ + (showToUomModal = true)} + class="cursor-pointer pl-9 font-mono" + placeholder="Seleccione..." + disabled={loading} + required + /> +
+ +
@@ -160,3 +221,17 @@ + + { + formData.from_unit_code = u.code; + }} +/> + + { + formData.to_unit_code = u.code; + }} +/> diff --git a/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/data-table-actions.svelte b/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/data-table-actions.svelte index 05c6410e..b020111a 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/unit_conversions/data-table-actions.svelte @@ -5,6 +5,7 @@ import { companyStore } from "$lib/stores/company.svelte"; import { EllipsisVertical, Pencil, LoaderCircle, Trash2 } from 'lucide-svelte'; import CreateEditDialog from "./create-edit-dialog.svelte"; + import { toast } from "svelte-sonner"; let { conversion, @@ -23,6 +24,9 @@ } if (!companyStore.activeCompany) { + toast.error('Selecciona una compañía', { + description: 'No se puede eliminar sin una compañía activa.' + }); return; } @@ -30,11 +34,13 @@ try { await deleteUnitConversion(conversion.id, companyStore.activeCompany.id); + toast.success('Conversión eliminada'); if (onSuccess) { onSuccess(); } } catch (e) { const errorMsg = e instanceof Error ? e.message : 'Error desconocido al eliminar el registro'; + toast.error('No se pudo eliminar', { description: errorMsg }); } finally { loading = false; }