Se esta trabajando en el formulario de partes y sus relaciones

This commit is contained in:
2026-01-06 18:02:45 -06:00
parent 2182f0b739
commit 7c5f78f258
9 changed files with 595 additions and 252 deletions

View File

@@ -1,107 +1,52 @@
/**
* API para gestión de Classes (Clases A76)
*/
import { api } from '$lib/api';
import type { ApiResponse } from '$lib/api';
export interface A76Class {
id: number;
tenant_id: number;
company_id: number;
client_id: number;
class_code: string;
description_es: string | null;
description_en: string | null;
material_key: string | null;
unit_of_measure: string;
fraction: string;
us_fraction: string;
sub_key: string;
physical_review: number;
iva_exempt_fraction: string;
created_at: string;
updated_at: string;
}
export interface A76ClassCreate {
company_id: number;
client_id: number;
class_code: string;
description_es?: string | null;
description_en?: string | null;
material_key?: string | null;
unit_of_measure: string;
fraction: string;
us_fraction: string;
sub_key: string;
physical_review?: number;
iva_exempt_fraction: string;
}
export interface A76ClassUpdate {
client_id?: number;
class_code?: string;
description_es?: string | null;
description_en?: string | null;
material_key?: string | null;
unit_of_measure?: string;
fraction?: string;
us_fraction?: string;
sub_key?: string;
physical_review?: number;
iva_exempt_fraction?: string;
id: number;
tenant_id: number;
company_id: number;
client_id: number;
class_code: string;
description_es: string | null;
description_en: string | null;
material_key: string | null;
unit_of_measure: string;
fraction: string;
us_fraction: string;
sub_key: string;
physical_review: number;
iva_exempt_fraction: string;
created_at: string;
updated_at: string;
}
export interface A76ClassListResponse {
items: A76Class[];
total: number;
page: number;
page_size: number;
items: A76Class[];
classes?: A76Class[];
total: number;
page: number;
page_size: number;
size?: number;
}
export interface A76ClassListParams {
company_id: number;
page?: number;
page_size?: number;
company_id: number;
page?: number;
page_size?: number;
class_code?: string;
description?: string;
}
/**
* API de Classes
*/
export const classesApi = {
/**
* Obtener lista de classes con paginación
*/
list: (params: A76ClassListParams): Promise<ApiResponse<A76ClassListResponse>> => {
const { company_id, page = 1, page_size = 50 } = params;
return api.get(`/v1/a76/classes/?company_id=${company_id}&page=${page}&page_size=${page_size}`);
},
list: (params: A76ClassListParams): Promise<ApiResponse<A76ClassListResponse>> => {
const query = new URLSearchParams();
Object.entries(params).forEach(([key, value]) => {
if (value) query.append(key, value.toString());
});
return api.get(`/v1/a76/classes/?${query.toString()}`);
},
/**
* Obtener un class por ID
*/
get: (id: number, company_id: number): Promise<ApiResponse<A76Class>> => {
return api.get(`/v1/a76/classes/${id}?company_id=${company_id}`);
},
/**
* Crear un nuevo class
*/
create: (data: A76ClassCreate, company_id: number): Promise<ApiResponse<A76Class>> => {
return api.post(`/v1/a76/classes/?company_id=${company_id}`, data);
},
/**
* Actualizar un class existente
*/
update: (id: number, data: A76ClassUpdate, company_id: number): Promise<ApiResponse<A76Class>> => {
return api.put(`/v1/a76/classes/${id}?company_id=${company_id}`, data);
},
/**
* Eliminar un class
*/
delete: (id: number, company_id: number): Promise<ApiResponse<void>> => {
return api.delete(`/v1/a76/classes/${id}?company_id=${company_id}`);
}
};
get: (id: number, company_id: number): Promise<ApiResponse<A76Class>> => {
return api.get(`/v1/a76/classes/${id}?company_id=${company_id}`);
}
};