Refactor item management: Update schemas, models, and API routes

- Renamed customs-related schemas in line_items to LineCustomCreate, LineCustomUpdate, and LineCustomResponse.
- Adjusted models to streamline invoice_id mapping in Item model.
- Enhanced item routes to include company_id in summary statistics endpoint.
- Refactored ItemService to improve item creation and update logic, removing redundant methods.
- Updated frontend components for item management, including new item creation and editing functionalities.
- Added API client for items with CRUD operations and improved error handling.
This commit is contained in:
AlexeerCT
2025-12-30 09:22:52 -06:00
parent 304f7b07d4
commit 30b8daf16e
8 changed files with 623 additions and 481 deletions

View File

@@ -0,0 +1,133 @@
/**
* 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;
item_type: string;
system_origin: string;
invoice_number?: string;
reference_number?: string;
order?: string;
guide_number?: string;
invoice_date?: number;
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;
item_type: string;
system_origin: string;
invoice_number?: string;
reference_number?: string;
order?: string;
guide_number?: string;
invoice_date?: number;
depreciation_date?: number;
rectification?: number;
warehouse?: string;
location?: string;
}
export interface UpdateItemData {
item_type?: string;
system_origin?: string;
invoice_number?: string;
reference_number?: string;
order?: string;
guide_number?: string;
invoice_date?: number;
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()}`);
}
};