Este proyecto es una plataforma integral de planificación de recursos empresariales (ERP) y gestión de inventario diseñada para una tienda de electrodomésticos. El sistema está compuesto por una arquitectura dividida en dos componentes principales: un servidor backend basado en Spring Boot que expone una API REST, y un cliente de escritorio frontend desarrollado en JavaFX.
- Gestión de Catálogo: Administración completa de productos, categorías, proveedores y clientes.
- Control de Operaciones: Registro y control de compras, ventas y guías de entrada/salida de almacén.
- Auditoría de Inventario (Kardex): Historial valorado de movimientos físicos y financieros por producto aplicando el método de Costo Promedio Ponderado (CPP).
- Generación de Reportes: Informes consolidados en formato PDF para análisis de ventas, compras y kardex (individual y general) mediante JasperReports.
- Seguridad y Sesión: Autenticación basada en tokens JWT con expiración automática de sesión tras periodos de inactividad detectados en el cliente.
- Respaldos Automatizados: Copias de seguridad de la base de datos realizables de forma manual y programadas automáticamente al cerrar la aplicación.
El sistema se divide en dos repositorios independientes:
1. Servidor Backend (electro-store-api)
El backend sigue un diseño arquitectónico basado en capas con la siguiente estructura de directorios:
electro-store-api/
├── src/
│ ├── main/
│ │ ├── java/com/electro/store/api/
│ │ │ ├── domain/
│ │ │ │ ├── auth/ # Seguridad, usuarios y JWT
│ │ │ │ ├── buys/ # Compras y transacciones con proveedores
│ │ │ │ ├── client/ # Clientes
│ │ │ │ ├── employee/ # Empleados
│ │ │ │ ├── movement/ # Guías de entrada/salida de almacén
│ │ │ │ ├── product/ # Productos y categorías de inventario
│ │ │ │ ├── report/ # Lógica y servicios de JasperReports (Ventas, Compras, Kardex)
│ │ │ │ └── sale/ # Ventas y facturación
│ │ │ └── shared/ # Excepciones globales, configuraciones y utilidades
│ │ └── resources/
│ │ ├── application.properties # Configuración de base de datos y JWT
│ │ └── reports/ # Plantillas JRXML de JasperReports y logo corporativo
├── docker-compose.yml # Servidor de base de datos SQL Server
└── pom.xml
El frontend de escritorio implementa el patrón Modelo-Vista-Controlador (MVC) adaptado a JavaFX:
inventario/
├── src/
│ ├── main/
│ │ ├── java/com/store/inventario/
│ │ │ ├── component/ # Controladores generales (Dashboard, Ajustes, Login)
│ │ │ ├── module/ # Módulos de negocio alíneados al backend
│ │ │ │ ├── auth/ # Gestión de usuarios y seguridad
│ │ │ │ ├── buy/ # Vistas y servicios de compras
│ │ │ │ ├── movement/ # Vistas y servicios de guías
│ │ │ │ ├── person/ # Clientes y empleados
│ │ │ │ ├── product/ # Productos y categorías
│ │ │ │ ├── report/ # Descarga y generación de reportes PDF
│ │ │ │ └── supplier/ # Proveedores
│ │ │ └── shared/ # Configuraciones de API, portapapeles y notificaciones toast
│ │ └── resources/
│ │ ├── views/ # Plantillas de interfaz en formato FXML (JavaFX)
│ │ └── styles/ # Hojas de estilo CSS del sistema
└── pom.xml
- Java Development Kit (JDK) 21 o superior.
- Apache Maven 3.8 o superior.
- Docker y Docker Compose (para levantar la base de datos).
-
Entre en la carpeta raíz del backend:
cd electro-store-api -
Inicie el contenedor del servidor de base de datos Microsoft SQL Server 2022 mediante Docker Compose:
docker-compose up -d
Nota: Esto iniciará un contenedor llamado
electro_sqlserveren el puerto14330con las credenciales por defecto configuradas en el archivoapplication.properties. -
Verifique que la base de datos
electro_dbesté creada en el servidor (el script de migración Flyway se ejecutará y creará las tablas automáticamente al iniciar el servidor). -
Compile el servidor backend utilizando Maven:
./mvnw clean compile
- Verifique la dirección URL base en la clase de configuración
src/main/java/com/store/inventario/shared/config/ApiConfig.javapara que apunte al puerto del backend (por defectohttp://localhost:8080/api). - Compile el cliente frontend utilizando Maven:
cd inventario ./mvnw clean compile
Para iniciar el sistema completo, debe ejecutar ambos componentes en terminales separadas:
Desde la carpeta raíz del backend (electro-store-api), ejecute el siguiente comando:
./mvnw spring-boot:runEl servidor estará activo una vez que los registros indiquen el puerto de escucha (normalmente 8080).
Desde la carpeta raíz del frontend (inventario), ejecute el siguiente comando para abrir la aplicación de escritorio:
./mvnw javafx:runSe abrirá la ventana de inicio de sesión (Login). Introduzca las credenciales de administrador autorizadas para acceder a la aplicación.