Merge pull request 'Arreglo de filtros, click con compoartmiento de exit, reactividad al ingresar un registro, ademmsa del docble click' (#433) from fix/prevalidadores into development

Reviewed-on: ADUANASOFT/anexo76#433
This commit is contained in:
2026-05-22 22:46:47 +00:00
5 changed files with 35 additions and 23 deletions

View File

@@ -29,6 +29,7 @@ prevalidator_crud = TenantCRUDRoutes(
tags=["Prevalidators"], tags=["Prevalidators"],
resource_name="Prevalidator", resource_name="Prevalidator",
enable_list=True, enable_list=True,
enable_filters=True,
list_permissions=["cat_prevalidators.view"], list_permissions=["cat_prevalidators.view"],
get_permissions=["cat_prevalidators.view"], get_permissions=["cat_prevalidators.view"],
create_permissions=["cat_prevalidators.create"], create_permissions=["cat_prevalidators.create"],

View File

@@ -37,17 +37,17 @@ export async function getPrevalidators(
filters: Record<string, any> = {}, filters: Record<string, any> = {},
companyId?: number companyId?: number
): Promise<ApiResponse<PrevalidatorListResponse>> { ): Promise<ApiResponse<PrevalidatorListResponse>> {
const params = new URLSearchParams({ const paramObj: Record<string, string> = {
page: page.toString(), page: page.toString(),
page_size: pageSize.toString(), page_size: pageSize.toString()
...filters };
if (companyId) paramObj.company_id = companyId.toString();
Object.entries(filters).forEach(([k, v]) => {
if (v !== undefined && v !== null && v !== '') paramObj[k] = String(v);
}); });
if (companyId) { const params = new URLSearchParams(paramObj);
params.append('company_id', companyId.toString());
}
const response = await api.get(`/v1/a76/prevalidators/?${params.toString()}`); return api.get(`/v1/a76/prevalidators/?${params.toString()}`);
return response.data;
} }
export async function getPrevalidator(id: number, companyId?: number): Promise<Prevalidator> { export async function getPrevalidator(id: number, companyId?: number): Promise<Prevalidator> {

View File

@@ -3,12 +3,12 @@ import type { ApiResponse } from '$lib/api';
export interface Signature { export interface Signature {
id: number; id: number;
code: string; code: string;
signature: string | null; signature: string | null;
photo_path: string | null; photo_path: string | null;
tenant_id: number; tenant_id: number;
company_id: number; company_id: number;
created_at: string; created_at: string;
@@ -19,10 +19,10 @@ export interface SignatureCreate {
code: string; code: string;
signature?: string | null; signature?: string | null;
photo_path?: string | null; photo_path?: string | null;
} }
export interface SignatureUpdate extends Partial<SignatureCreate> {} export interface SignatureUpdate extends Partial<SignatureCreate> { }
export interface SignatureListResponse { export interface SignatureListResponse {
items: Signature[]; items: Signature[];
@@ -49,7 +49,6 @@ export async function getSignatures(
}); });
const params = new URLSearchParams(paramObj); const params = new URLSearchParams(paramObj);
return api.get(`/v1/a76/signatures/?${params.toString()}`); return api.get(`/v1/a76/signatures/?${params.toString()}`);
} }
@@ -62,7 +61,7 @@ export async function getSignature(id: number, companyId: number): Promise<Signa
export async function createSignature( export async function createSignature(
data: SignatureCreate, data: SignatureCreate,
companyId: number companyId: number
): Promise<Signature> { ): Promise<Signature> {
const response = await api.post(`/v1/a76/signatures/?company_id=${companyId}`, data); const response = await api.post(`/v1/a76/signatures/?company_id=${companyId}`, data);
@@ -71,8 +70,8 @@ export async function createSignature(
} }
export async function updateSignature( export async function updateSignature(
id: number, id: number,
data: SignatureUpdate, data: SignatureUpdate,
companyId: number companyId: number
): Promise<Signature> { ): Promise<Signature> {
const response = await api.put(`/v1/a76/signatures/${id}/?company_id=${companyId}`, data); const response = await api.put(`/v1/a76/signatures/${id}/?company_id=${companyId}`, data);

View File

@@ -89,7 +89,7 @@
</script> </script>
<Dialog.Root bind:open> <Dialog.Root bind:open>
<Dialog.Content class="sm:max-w-[500px]"> <Dialog.Content class="sm:max-w-[500px]" onInteractOutside={(e) => e.preventDefault()}>
<Dialog.Header> <Dialog.Header>
<Dialog.Title>{title}</Dialog.Title> <Dialog.Title>{title}</Dialog.Title>
</Dialog.Header> </Dialog.Header>

View File

@@ -7,7 +7,7 @@
import * as Card from '$lib/components/ui/card'; import * as Card from '$lib/components/ui/card';
import { Button } from '$lib/components/ui/button'; import { Button } from '$lib/components/ui/button';
import { Input } from '$lib/components/ui/input'; import { Input } from '$lib/components/ui/input';
import { Pencil, Plus, Trash2 } from 'lucide-svelte'; import { Pencil, Plus, Trash2, RefreshCw } from 'lucide-svelte';
import InfiniteDataTable from '$lib/components/dashboard/common/infinite-data-table.svelte'; import InfiniteDataTable from '$lib/components/dashboard/common/infinite-data-table.svelte';
import { createColumns } from '$lib/components/dashboard/general_catalogs/prevalidators/columns'; import { createColumns } from '$lib/components/dashboard/general_catalogs/prevalidators/columns';
import CreateEditDialog from '$lib/components/dashboard/general_catalogs/prevalidators/create-edit-dialog.svelte'; import CreateEditDialog from '$lib/components/dashboard/general_catalogs/prevalidators/create-edit-dialog.svelte';
@@ -226,7 +226,9 @@
size="sm" size="sm"
class="h-9" class="h-9"
onclick={reloadData} onclick={reloadData}
disabled={loading}
> >
<RefreshCw class="mr-2 h-4 w-4 {loading ? 'animate-spin' : ''}" />
Actualizar Actualizar
</Button> </Button>
{#if canCreate} {#if canCreate}
@@ -262,7 +264,17 @@
</Card.Header> </Card.Header>
<Card.Content class="p-0 flex-1 overflow-hidden min-h-0"> <Card.Content class="p-0 flex-1 overflow-hidden min-h-0">
<div class="rounded-md border bg-background overflow-hidden h-full"> <div class="rounded-md border bg-background overflow-hidden h-full">
<InfiniteDataTable data={allItems} {columns} {loading} {hasMore} {loadMore} /> <InfiniteDataTable
data={allItems}
{columns}
{loading}
{hasMore}
{loadMore}
{selectedIds}
onSelectedIdsChange={(ids) => (selectedIds = ids)}
onRowClick={handleRowClick}
onRowDoubleClick={handleRowDoubleClick}
/>
</div> </div>
</Card.Content> </Card.Content>
</Card.Root> </Card.Root>