feature/abstraccion-de-funcionalidades-y-manejo-por-tareas-en-comun

This commit is contained in:
hreyes
2026-03-04 08:12:59 -07:00
parent 4c781b460a
commit e83205caf9
91 changed files with 4153 additions and 4571 deletions

View File

@@ -370,6 +370,8 @@ export const api = {
validate: (tenantId: number) => api.get(`/v1/licenses/validate/${tenantId}/`)
},
// CSV import for Operaciones de Importación/Exportación (facturas: encabezados y partidas).
// Backend: api/v1/modules/a76/layouts_csv/facturas (rutas bajo /v1/a76/imports/).
imports: {
upload: (
file: File,

View File

@@ -31,6 +31,8 @@ export interface CsvUploadItem {
/** Backend template id for CSV download (e.g. customs_brokers, part_numbers). No physical file. */
templateId?: string;
disabled?: boolean; // New property to mark items as "Coming Soon"
/** Backend module path (layouts_csv) for traceability, e.g. "layouts_csv/facturas", "layouts_csv/parts". */
layoutModule?: string;
}
export interface CsvUploadField {
@@ -125,42 +127,47 @@ export const tabSettings: Record<string, CsvUploadField[]> = {
};
// --- DATA DEFINITIONS (Items only, no config) ---
// Catálogos: la mayoría usa backend en layouts_csv (customs_brokers, clients_and_providers, etc.).
export const catalogosConfig: CsvUploadItem[] = [
{
id: 'customs_brokers',
title: 'Agentes Aduanales',
icon: User,
modelTarget: 'CustomsBroker',
templateId: 'customs_brokers'
templateId: 'customs_brokers',
layoutModule: 'layouts_csv/customs_brokers'
},
{
id: 'clients_providers',
title: 'Clientes y Proveedores',
icon: Users,
modelTarget: 'ClientProvider',
templateId: 'clients_providers'
templateId: 'clients_providers',
layoutModule: 'layouts_csv/clients_and_providers'
},
{
id: 'exchange_rates',
title: 'Tipo de Cambios',
icon: DollarSign,
modelTarget: 'ExchangeRate',
templateId: 'exchange_rates'
templateId: 'exchange_rates',
layoutModule: 'layouts_csv/exchange_rate'
},
{
id: 'american_fractions',
title: 'Fracc. Ame.',
icon: Globe,
modelTarget: 'AmericanFraction',
templateId: 'american_fractions'
templateId: 'american_fractions',
layoutModule: 'layouts_csv/us_tariff_fractions'
},
{
id: 'material_classes',
title: 'Clases de Materiales',
icon: Package,
modelTarget: 'MaterialClass',
templateId: 'material_classes'
templateId: 'material_classes',
layoutModule: 'layouts_csv/classes'
},
{
id: 'part_numbers',
@@ -168,6 +175,7 @@ export const catalogosConfig: CsvUploadItem[] = [
icon: Hash,
modelTarget: 'Part',
templateId: 'part_numbers',
layoutModule: 'layouts_csv/parts'
},
{
id: 'boms',
@@ -175,6 +183,7 @@ export const catalogosConfig: CsvUploadItem[] = [
icon: Briefcase,
modelTarget: 'Bom',
templateId: 'boms',
layoutModule: 'layouts_csv/boms'
},
{
id: 'items',
@@ -204,10 +213,12 @@ export const catalogosConfig: CsvUploadItem[] = [
title: 'Pedimentos',
icon: FileDigit,
modelTarget: 'Pedimento',
templateId: 'pedimentos'
templateId: 'pedimentos',
layoutModule: 'layouts_csv/pedmientos'
},
];
// Transportes: conductores, trailers y “Transportes” (vehículos) usan layouts_csv; transportistas sin layouts_csv aún.
export const transportesConfig: CsvUploadItem[] = [
{
id: 'transporters',
@@ -221,24 +232,29 @@ export const transportesConfig: CsvUploadItem[] = [
title: 'Transportes',
icon: Truck,
modelTarget: 'Transport',
templateId: 'transports'
templateId: 'transports',
layoutModule: 'layouts_csv/vehicles'
},
{
id: 'drivers',
title: 'Conductores',
icon: User,
modelTarget: 'Driver',
templateId: 'drivers'
templateId: 'drivers',
layoutModule: 'layouts_csv/drivers'
},
{
id: 'trailers',
title: 'Trailers y Cajas',
icon: Container,
modelTarget: 'Trailer',
templateId: 'trailers'
templateId: 'trailers',
layoutModule: 'layouts_csv/trailers'
},
];
// --- Operaciones de Importación (facturas: encabezados y partidas)
// Backend: layouts_csv/facturas — rutas /v1/a76/imports/ (upload, status, commit).
export const importacionConfig: CsvUploadItem[] = [
// Impo Temp
{
@@ -247,7 +263,8 @@ export const importacionConfig: CsvUploadItem[] = [
icon: FileText,
group: 'Impo. Temp.',
modelTarget: 'invoice_header',
templateId: 'imp_temp_header'
templateId: 'imp_temp_header',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'imp_temp_details',
@@ -255,7 +272,8 @@ export const importacionConfig: CsvUploadItem[] = [
icon: Package,
group: 'Impo. Temp.',
modelTarget: 'invoice_details',
templateId: 'imp_temp_details'
templateId: 'imp_temp_details',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'imp_temp_series',
@@ -272,7 +290,8 @@ export const importacionConfig: CsvUploadItem[] = [
icon: FileText,
group: 'Impo. Def.',
modelTarget: 'invoice_header',
templateId: 'imp_def_header'
templateId: 'imp_def_header',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'imp_def_details',
@@ -280,7 +299,8 @@ export const importacionConfig: CsvUploadItem[] = [
icon: Package,
group: 'Impo. Def.',
modelTarget: 'invoice_details',
templateId: 'imp_def_details'
templateId: 'imp_def_details',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'imp_def_series',
@@ -317,6 +337,8 @@ export const importacionConfig: CsvUploadItem[] = [
},
];
// --- Operaciones de Exportación (facturas: encabezados y partidas)
// Backend: layouts_csv/facturas — mismas rutas /v1/a76/imports/ con operation_type=exp.
export const exportacionConfig: CsvUploadItem[] = [
// Expo Def / Cam. Reg.
{
@@ -325,7 +347,8 @@ export const exportacionConfig: CsvUploadItem[] = [
icon: FileText,
group: 'Expo. Def./Cam. Reg.',
modelTarget: 'invoice_header',
templateId: 'exp_def_header'
templateId: 'exp_def_header',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'exp_def_details',
@@ -333,7 +356,8 @@ export const exportacionConfig: CsvUploadItem[] = [
icon: Package,
group: 'Expo. Def./Cam. Reg.',
modelTarget: 'invoice_details',
templateId: 'exp_def_details'
templateId: 'exp_def_details',
layoutModule: 'layouts_csv/facturas'
},
{
id: 'exp_def_series',

View File

@@ -449,6 +449,7 @@
<div class="mt-6">
<Tabs.Content value="catalogos" class="space-y-4">
<!-- Catálogos: backend layouts_csv (customs_brokers, clients_and_providers, parts, boms, etc.) -->
<div class="flex items-center justify-between">
<h2 class="text-lg font-medium tracking-tight">Catálogos Generales</h2>
</div>
@@ -456,6 +457,7 @@
</Tabs.Content>
<Tabs.Content value="transportes" class="space-y-4">
<!-- Logística: backend layouts_csv (vehicles, drivers, trailers); transportistas sin layouts_csv -->
<div class="flex items-center justify-between">
<h2 class="text-lg font-medium tracking-tight">Logística y Transporte</h2>
</div>
@@ -463,6 +465,7 @@
</Tabs.Content>
<Tabs.Content value="importacion" class="space-y-4">
<!-- Operaciones de Importación: backend layouts_csv/facturas (api.imports) -->
<div class="flex items-center justify-between">
<h2 class="text-lg font-medium tracking-tight">Operaciones de Importación</h2>
</div>