Merge pull request 'feature/items' (#37) from feature/items into development

Reviewed-on: ADUANASOFT/anexo76#37
This commit is contained in:
2025-12-31 15:06:24 +00:00
53 changed files with 4121 additions and 1030 deletions

View File

@@ -232,10 +232,10 @@ export interface InvoiceListResponse {
}
export interface CreateInvoiceData {
system?: string | null;
operation_type?: OperationType | null;
invoice_type?: string | null;
invoice_number?: string | null;
system: string;
operation_type: OperationType;
invoice_type: string;
invoice_number: string;
project_number?: string | null;
purchase_order?: string | null;
related_doc_id?: number | null;

View File

@@ -0,0 +1,121 @@
/**
* API Client para Items
* Gestiona las operaciones CRUD para items de facturas
*/
import { api } from '$lib/api';
// --- Interfaces ---
export interface Item {
id?: number;
invoice_id: number;
reference_number?: string;
order?: string;
guide_number?: string;
depreciation_date?: number;
rectification?: number;
warehouse?: string;
location?: string;
created_at?: string;
updated_at?: string;
}
export interface ItemListResponse {
items: Item[];
total: number;
skip: number;
limit: number;
}
export interface CreateItemData {
invoice_id: number;
reference_number?: string;
order?: string;
guide_number?: string;
depreciation_date?: number;
rectification?: number;
warehouse?: string;
location?: string;
}
export interface UpdateItemData {
reference_number?: string;
order?: string;
guide_number?: string;
depreciation_date?: number;
rectification?: boolean;
warehouse?: string;
location?: string;
}
/**
* API para Items
*/
export const itemsApi = {
/**
* Lista todos los items con paginación
*/
list: (companyId: number, skip = 0, limit = 100, invoiceId?: number) => {
const params = new URLSearchParams({
company_id: companyId.toString(),
skip: skip.toString(),
limit: limit.toString()
});
if (invoiceId) {
params.append('invoice_id', invoiceId.toString());
}
return api.get<ItemListResponse>(`/v1/a76/items/?${params.toString()}`);
},
/**
* Lista items por invoice ID
*/
listByInvoice: (invoiceId: number, companyId: number) => {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.get<ItemListResponse>(`/v1/a76/items/invoice/${invoiceId}/items?${params.toString()}`);
},
/**
* Obtiene un item por ID
*/
get: (itemId: number, companyId: number) => {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.get<Item>(`/v1/a76/items/${itemId}?${params.toString()}`);
},
/**
* Crea un nuevo item
*/
create: (companyId: number, data: CreateItemData) => {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.post<Item>(`/v1/a76/items/?${params.toString()}`, data);
},
/**
* Actualiza un item existente
*/
update: (itemId: number, companyId: number, data: UpdateItemData) => {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.put<Item>(`/v1/a76/items/${itemId}?${params.toString()}`, data);
},
/**
* Elimina un item
*/
delete: (itemId: number, companyId: number) => {
const params = new URLSearchParams({
company_id: companyId.toString()
});
return api.delete(`/v1/a76/items/${itemId}?${params.toString()}`);
}
};