feat: Implementación módulos Empresas, Plantas, Tipos y Estados Bobina
Backend API: - Implementado CRUD completo para Empresas (DE001-DE004): - EmpresaRepository, EmpresaService, EmpresasController. - Lógica de creación/eliminación de saldos iniciales en EmpresaService. - Transacciones y registro en tablas _H. - Verificación de permisos específicos. - Implementado CRUD completo para Plantas de Impresión (IP001-IP004): - PlantaRepository, PlantaService, PlantasController. - Transacciones y registro en tablas _H. - Verificación de permisos. - Implementado CRUD completo para Tipos de Bobina (IB006-IB009): - TipoBobinaRepository, TipoBobinaService, TiposBobinaController. - Transacciones y registro en tablas _H. - Verificación de permisos. - Implementado CRUD completo para Estados de Bobina (IB010-IB013): - EstadoBobinaRepository, EstadoBobinaService, EstadosBobinaController. - Transacciones y registro en tablas _H. - Verificación de permisos. Frontend React: - Módulo Empresas: - empresaService.ts para interactuar con la API. - EmpresaFormModal.tsx para crear/editar empresas. - GestionarEmpresasPage.tsx con tabla, filtro, paginación y menú de acciones. - Integración con el hook usePermissions para control de acceso. - Módulo Plantas de Impresión: - plantaService.ts. - PlantaFormModal.tsx. - GestionarPlantasPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Módulo Tipos de Bobina: - tipoBobinaService.ts. - TipoBobinaFormModal.tsx. - GestionarTiposBobinaPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Módulo Estados de Bobina: - estadoBobinaService.ts. - EstadoBobinaFormModal.tsx. - GestionarEstadosBobinaPage.tsx con tabla, filtro, paginación y acciones. - Integración con usePermissions. - Navegación: - Añadidas sub-pestañas y rutas para los nuevos módulos dentro de "Distribución" (Empresas) e "Impresión" (Plantas, Tipos Bobina, Estados Bobina). - Creado ImpresionIndexPage.tsx para la navegación interna del módulo de Impresión. Correcciones: - Corregido el uso de CommitAsync/RollbackAsync a Commit/Rollback síncronos en PlantaService.cs debido a que IDbTransaction no los soporta asíncronamente.
This commit is contained in:
46
Frontend/src/services/empresaService.ts
Normal file
46
Frontend/src/services/empresaService.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import apiClient from './apiClient';
|
||||
import type { EmpresaDto } from '../models/dtos/Empresas/EmpresaDto';
|
||||
import type { CreateEmpresaDto } from '../models/dtos/Empresas/CreateEmpresaDto';
|
||||
import type { UpdateEmpresaDto } from '../models/dtos/Empresas/UpdateEmpresaDto';
|
||||
|
||||
const getAllEmpresas = async (nombreFilter?: string, detalleFilter?: string): Promise<EmpresaDto[]> => {
|
||||
const params: Record<string, string> = {};
|
||||
if (nombreFilter) params.nombre = nombreFilter;
|
||||
if (detalleFilter) params.detalle = detalleFilter; // Asegúrate que la API soporte esto
|
||||
|
||||
// Llama a GET /api/empresas
|
||||
const response = await apiClient.get<EmpresaDto[]>('/empresas', { params });
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getEmpresaById = async (id: number): Promise<EmpresaDto> => {
|
||||
// Llama a GET /api/empresas/{id}
|
||||
const response = await apiClient.get<EmpresaDto>(`/empresas/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const createEmpresa = async (data: CreateEmpresaDto): Promise<EmpresaDto> => {
|
||||
// Llama a POST /api/empresas
|
||||
const response = await apiClient.post<EmpresaDto>('/empresas', data);
|
||||
return response.data; // La API devuelve el objeto creado (201 Created)
|
||||
};
|
||||
|
||||
const updateEmpresa = async (id: number, data: UpdateEmpresaDto): Promise<void> => {
|
||||
// Llama a PUT /api/empresas/{id} (204 No Content en éxito)
|
||||
await apiClient.put(`/empresas/${id}`, data);
|
||||
};
|
||||
|
||||
const deleteEmpresa = async (id: number): Promise<void> => {
|
||||
// Llama a DELETE /api/empresas/{id} (204 No Content en éxito)
|
||||
await apiClient.delete(`/empresas/${id}`);
|
||||
};
|
||||
|
||||
const empresaService = {
|
||||
getAllEmpresas,
|
||||
getEmpresaById,
|
||||
createEmpresa,
|
||||
updateEmpresa,
|
||||
deleteEmpresa,
|
||||
};
|
||||
|
||||
export default empresaService;
|
||||
40
Frontend/src/services/estadoBobinaService.ts
Normal file
40
Frontend/src/services/estadoBobinaService.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import apiClient from './apiClient';
|
||||
import type { EstadoBobinaDto } from '../models/dtos/Impresion/EstadoBobinaDto';
|
||||
import type { CreateEstadoBobinaDto } from '../models/dtos/Impresion/CreateEstadoBobinaDto';
|
||||
import type { UpdateEstadoBobinaDto } from '../models/dtos/Impresion/UpdateEstadoBobinaDto';
|
||||
|
||||
const getAllEstadosBobina = async (denominacionFilter?: string): Promise<EstadoBobinaDto[]> => {
|
||||
const params: Record<string, string> = {};
|
||||
if (denominacionFilter) params.denominacion = denominacionFilter;
|
||||
|
||||
const response = await apiClient.get<EstadoBobinaDto[]>('/estadosbobina', { params });
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getEstadoBobinaById = async (id: number): Promise<EstadoBobinaDto> => {
|
||||
const response = await apiClient.get<EstadoBobinaDto>(`/estadosbobina/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const createEstadoBobina = async (data: CreateEstadoBobinaDto): Promise<EstadoBobinaDto> => {
|
||||
const response = await apiClient.post<EstadoBobinaDto>('/estadosbobina', data);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const updateEstadoBobina = async (id: number, data: UpdateEstadoBobinaDto): Promise<void> => {
|
||||
await apiClient.put(`/estadosbobina/${id}`, data);
|
||||
};
|
||||
|
||||
const deleteEstadoBobina = async (id: number): Promise<void> => {
|
||||
await apiClient.delete(`/estadosbobina/${id}`);
|
||||
};
|
||||
|
||||
const estadoBobinaService = {
|
||||
getAllEstadosBobina,
|
||||
getEstadoBobinaById,
|
||||
createEstadoBobina,
|
||||
updateEstadoBobina,
|
||||
deleteEstadoBobina,
|
||||
};
|
||||
|
||||
export default estadoBobinaService;
|
||||
46
Frontend/src/services/plantaService.ts
Normal file
46
Frontend/src/services/plantaService.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import apiClient from './apiClient';
|
||||
import type { PlantaDto } from '../models/dtos/Impresion/PlantaDto';
|
||||
import type { CreatePlantaDto } from '../models/dtos/Impresion/CreatePlantaDto';
|
||||
import type { UpdatePlantaDto } from '../models/dtos/Impresion/UpdatePlantaDto';
|
||||
|
||||
const getAllPlantas = async (nombreFilter?: string, detalleFilter?: string): Promise<PlantaDto[]> => {
|
||||
const params: Record<string, string> = {};
|
||||
if (nombreFilter) params.nombre = nombreFilter;
|
||||
if (detalleFilter) params.detalle = detalleFilter; // La API debe soportar esto
|
||||
|
||||
// Llama a GET /api/plantas
|
||||
const response = await apiClient.get<PlantaDto[]>('/plantas', { params });
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getPlantaById = async (id: number): Promise<PlantaDto> => {
|
||||
// Llama a GET /api/plantas/{id}
|
||||
const response = await apiClient.get<PlantaDto>(`/plantas/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const createPlanta = async (data: CreatePlantaDto): Promise<PlantaDto> => {
|
||||
// Llama a POST /api/plantas
|
||||
const response = await apiClient.post<PlantaDto>('/plantas', data);
|
||||
return response.data; // La API devuelve el objeto creado (201 Created)
|
||||
};
|
||||
|
||||
const updatePlanta = async (id: number, data: UpdatePlantaDto): Promise<void> => {
|
||||
// Llama a PUT /api/plantas/{id} (204 No Content en éxito)
|
||||
await apiClient.put(`/plantas/${id}`, data);
|
||||
};
|
||||
|
||||
const deletePlanta = async (id: number): Promise<void> => {
|
||||
// Llama a DELETE /api/plantas/{id} (204 No Content en éxito)
|
||||
await apiClient.delete(`/plantas/${id}`);
|
||||
};
|
||||
|
||||
const plantaService = {
|
||||
getAllPlantas,
|
||||
getPlantaById,
|
||||
createPlanta,
|
||||
updatePlanta,
|
||||
deletePlanta,
|
||||
};
|
||||
|
||||
export default plantaService;
|
||||
45
Frontend/src/services/tipoBobinaService.ts
Normal file
45
Frontend/src/services/tipoBobinaService.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import apiClient from './apiClient';
|
||||
import type { TipoBobinaDto } from '../models/dtos/Impresion/TipoBobinaDto';
|
||||
import type { CreateTipoBobinaDto } from '../models/dtos/Impresion/CreateTipoBobinaDto';
|
||||
import type { UpdateTipoBobinaDto } from '../models/dtos/Impresion/UpdateTipoBobinaDto';
|
||||
|
||||
const getAllTiposBobina = async (denominacionFilter?: string): Promise<TipoBobinaDto[]> => {
|
||||
const params: Record<string, string> = {};
|
||||
if (denominacionFilter) params.denominacion = denominacionFilter;
|
||||
|
||||
// Llama a GET /api/tiposbobina
|
||||
const response = await apiClient.get<TipoBobinaDto[]>('/tiposbobina', { params });
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getTipoBobinaById = async (id: number): Promise<TipoBobinaDto> => {
|
||||
// Llama a GET /api/tiposbobina/{id}
|
||||
const response = await apiClient.get<TipoBobinaDto>(`/tiposbobina/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const createTipoBobina = async (data: CreateTipoBobinaDto): Promise<TipoBobinaDto> => {
|
||||
// Llama a POST /api/tiposbobina
|
||||
const response = await apiClient.post<TipoBobinaDto>('/tiposbobina', data);
|
||||
return response.data; // La API devuelve el objeto creado (201 Created)
|
||||
};
|
||||
|
||||
const updateTipoBobina = async (id: number, data: UpdateTipoBobinaDto): Promise<void> => {
|
||||
// Llama a PUT /api/tiposbobina/{id} (204 No Content en éxito)
|
||||
await apiClient.put(`/tiposbobina/${id}`, data);
|
||||
};
|
||||
|
||||
const deleteTipoBobina = async (id: number): Promise<void> => {
|
||||
// Llama a DELETE /api/tiposbobina/{id} (204 No Content en éxito)
|
||||
await apiClient.delete(`/tiposbobina/${id}`);
|
||||
};
|
||||
|
||||
const tipoBobinaService = {
|
||||
getAllTiposBobina,
|
||||
getTipoBobinaById,
|
||||
createTipoBobina,
|
||||
updateTipoBobina,
|
||||
deleteTipoBobina,
|
||||
};
|
||||
|
||||
export default tipoBobinaService;
|
||||
46
Frontend/src/services/zonaService.ts
Normal file
46
Frontend/src/services/zonaService.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import apiClient from './apiClient';
|
||||
import type { ZonaDto } from '../models/dtos/Zonas/ZonaDto'; // DTO para recibir listas
|
||||
import type { CreateZonaDto } from '../models/dtos/Zonas/CreateZonaDto';
|
||||
import type { UpdateZonaDto } from '../models/dtos/Zonas/UpdateZonaDto';
|
||||
|
||||
const getAllZonas = async (nombreFilter?: string, descripcionFilter?: string): Promise<ZonaDto[]> => {
|
||||
const params: Record<string, string> = {};
|
||||
if (nombreFilter) params.nombre = nombreFilter;
|
||||
if (descripcionFilter) params.descripcion = descripcionFilter; // Asegúrate que la API soporte este filtro si lo necesitas
|
||||
|
||||
// Llama al GET /api/zonas (que por defecto devuelve solo activas según el servicio)
|
||||
const response = await apiClient.get<ZonaDto[]>('/zonas', { params });
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getZonaById = async (id: number): Promise<ZonaDto> => {
|
||||
// Llama al GET /api/zonas/{id} (que por defecto devuelve solo activas según el servicio)
|
||||
const response = await apiClient.get<ZonaDto>(`/zonas/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const createZona = async (data: CreateZonaDto): Promise<ZonaDto> => {
|
||||
// Llama a POST /api/zonas
|
||||
const response = await apiClient.post<ZonaDto>('/zonas', data);
|
||||
return response.data; // La API devuelve el objeto creado
|
||||
};
|
||||
|
||||
const updateZona = async (id: number, data: UpdateZonaDto): Promise<void> => {
|
||||
// Llama a PUT /api/zonas/{id}
|
||||
await apiClient.put(`/zonas/${id}`, data);
|
||||
};
|
||||
|
||||
const deleteZona = async (id: number): Promise<void> => {
|
||||
// Llama a DELETE /api/zonas/{id} (que hará el soft delete)
|
||||
await apiClient.delete(`/zonas/${id}`);
|
||||
};
|
||||
|
||||
const zonaService = {
|
||||
getAllZonas,
|
||||
getZonaById,
|
||||
createZona,
|
||||
updateZona,
|
||||
deleteZona,
|
||||
};
|
||||
|
||||
export default zonaService;
|
||||
Reference in New Issue
Block a user