feat: add fixed asset classes management page and embed functionality

- Implemented a new page for managing fixed asset classes with full CRUD functionality.
- Added filtering options for searching classes by code, description, type, and fraction.
- Integrated dialogs for inserting, editing, and deleting classes with validation.
- Enhanced error handling and user feedback with toast notifications.
- Created an embedded iframe for the fixed asset classes page in the merchandise section.
This commit is contained in:
Galindo97
2026-01-08 16:33:43 -06:00
parent 7c9c295c5c
commit ea0e570678
18 changed files with 3014 additions and 48 deletions

View File

@@ -0,0 +1,110 @@
/**
* API para gestión de Fixed Asset Classes (Clases de Activos Fijos A24)
*/
import { api } from '$lib/api';
import type { ApiResponse } from '$lib/api';
export interface FAClass {
id: number;
tenant_id: number;
company_id: number;
class_id: number;
import_tariff_code: string | null;
import_tariff_type: string | null;
export_tariff_code: string | null;
export_tariff_type: string | null;
depreciation_rate: number | null;
fda_code: string | null;
eccn_code: string | null;
class_enabled: boolean | null;
created_at: string;
updated_at: string;
}
export interface FAClassCreate {
class_id: number;
import_tariff_code?: string | null;
import_tariff_type?: string | null;
export_tariff_code?: string | null;
export_tariff_type?: string | null;
depreciation_rate?: number | null;
fda_code?: string | null;
eccn_code?: string | null;
class_enabled?: boolean;
}
export interface FAClassUpdate {
import_tariff_code?: string | null;
import_tariff_type?: string | null;
export_tariff_code?: string | null;
export_tariff_type?: string | null;
depreciation_rate?: number | null;
fda_code?: string | null;
eccn_code?: string | null;
class_enabled?: boolean;
}
export interface FAClassListResponse {
items: FAClass[];
total: number;
page: number;
page_size: number;
}
export interface FAClassListParams {
company_id: number;
page?: number;
page_size?: number;
class_id?: number;
fda_code?: string;
class_enabled?: boolean;
}
/**
* API de Fixed Asset Classes
*/
export const faClassesApi = {
/**
* Obtener lista de clases de activos fijos con paginación
*/
list: (params: FAClassListParams): Promise<ApiResponse<FAClassListResponse>> => {
const { company_id, page = 1, page_size = 50, ...filters } = params;
const queryParams = new URLSearchParams({
company_id: company_id.toString(),
page: page.toString(),
page_size: page_size.toString(),
...Object.fromEntries(
Object.entries(filters).filter(([_, v]) => v !== undefined).map(([k, v]) => [k, String(v)])
)
});
return api.get(`/v1/a24/fa/classes/?${queryParams}`);
},
/**
* Obtener una clase de activo fijo por ID
*/
get: (id: number, company_id: number): Promise<ApiResponse<FAClass>> => {
return api.get(`/v1/a24/fa/classes/${id}?company_id=${company_id}`);
},
/**
* Crear una nueva clase de activo fijo
*/
create: (data: FAClassCreate, company_id: number): Promise<ApiResponse<FAClass>> => {
return api.post(`/v1/a24/fa/classes/?company_id=${company_id}`, data);
},
/**
* Actualizar una clase de activo fijo existente
*/
update: (id: number, data: FAClassUpdate, company_id: number): Promise<ApiResponse<FAClass>> => {
return api.put(`/v1/a24/fa/classes/${id}?company_id=${company_id}`, data);
},
/**
* Eliminar una clase de activo fijo
*/
delete: (id: number, company_id: number): Promise<ApiResponse<void>> => {
return api.delete(`/v1/a24/fa/classes/${id}?company_id=${company_id}`);
}
};

View File

@@ -103,5 +103,12 @@ export const classesApi = {
*/
delete: (id: number, company_id: number): Promise<ApiResponse<void>> => {
return api.delete(`/v1/a76/classes/${id}?company_id=${company_id}`);
},
/**
* Inicializar datos semilla de clases de activo fijo
*/
seed: (company_id: number, client_id: number): Promise<ApiResponse<{ message: string; count: number }>> => {
return api.post(`/v1/a76/classes/seed?company_id=${company_id}&client_id=${client_id}`, {});
}
};