# SIG Aerotur — migración a PHP 8 + Laravel 13

Laravel 13 es la versión actual (requiere **PHP 8.3 – 8.5**). Esta carpeta contiene el
código del nuevo sistema; se instala sobre un proyecto Laravel 13 limpio y trabaja con la
**misma base de datos** `aeroturperu_web`, así que el sistema anterior (`sig/`) y el nuevo pueden
funcionar a la vez mientras se migra por fases.

## Qué incluye esta Fase 1

| Área | Estado |
|---|---|
| Login con los usuarios actuales (tabla `usuario`, claves MD5) | ✅ Migrado |
| Menú por usuario (`menu_principal`, `menu_opciones`, `menu_usuarios`) | ✅ Migrado |
| Mantenimientos: Destinos, Hoteles, Habitaciones, Líneas aéreas, Operadores, Tipo seguro, Tipo servicio, Tipo terrestre, Cía. terrestre, Rentadoras, Formas de pago, Tipo tarjeta, Bancos, Cuentas corrientes, Tipo de cambio, Otros, Cruceros | ✅ Migrado |
| Modelos Eloquent de las 117 tablas (`app/Models/Legacy`) | ✅ Generados |
| Cotizaciones, reservas, liquidaciones, vouchers, pagos, abonos, caja, facturación, reportes/Excel, correos | ⏳ Siguen en el sistema anterior (el menú las abre con la etiqueta "anterior") |

### Mejoras respecto al sistema anterior
- **Sin inyección SQL**: todas las consultas son parametrizadas (antes se concatenaban `$_REQUEST`).
- **Permisos reales**: cada mantenimiento verifica `menu_usuarios`; antes cualquiera podía abrir la URL.
- Protección CSRF, límite de 5 intentos de login por minuto, escape de HTML en vistas.
- Fechas de auditoría correctas (el sistema anterior usaba `date("h:m:s")`, que guarda el **mes** en lugar de los minutos y hora de 12 h).
- Validación de datos con mensajes en pantalla, búsqueda y paginación, diseño Bootstrap 5 adaptable a celular.
- Se corrigió el guardado de Operadores (el sistema anterior actualizaba columnas inexistentes: `cta_cte`, `numero`).

## Instalación en Windows (para probar)

1. Instale **PHP 8.3+** y **Composer** (https://getcomposer.org). Verifique con `php -v`.
2. Ejecute `instalar.bat` desde esta carpeta. Crea `..\sig-app` con Laravel 13 y copia el código del SIG.
3. Edite `sig-app\.env`: `DB_HOST`, `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`, `APP_URL`, `SIG_LEGACY_URL`.
4. `cd ..\sig-app` → `php artisan serve` → abra http://127.0.0.1:8000

> **No ejecute `php artisan migrate`.** Se usa la base existente; sesiones y caché van en archivos.

## Publicación en el hosting (cPanel)

1. Suba la carpeta `sig-app` **fuera** de `public_html` (por ejemplo `/home/USUARIO/sig-app`).
2. Cree un subdominio (ej. `sistema.tudominio.com`) con raíz de documentos `/home/USUARIO/sig-app/public`.
3. En "Seleccionar versión de PHP" elija **8.3 o superior** (el servidor ya reporta PHP 8.4).
4. Copie el `.env` con los datos reales y `APP_DEBUG=false`.
5. Por terminal SSH: `php artisan config:cache && php artisan route:cache && php artisan view:cache`.
6. Permisos de escritura para `storage/` y `bootstrap/cache/`.

## Contraseñas

- Hoy las claves están en MD5 (`usuario.clave_usuario`) **y además en texto plano** en la columna
  `usuario.clave`. Recomendación: cuando se apague el sistema anterior, vaciar esa columna.
- `SIG_REHASH_PASSWORDS=false` (por defecto): el nuevo sistema acepta MD5 sin modificarlo, así el
  sistema anterior sigue funcionando.
- `SIG_REHASH_PASSWORDS=true`: al iniciar sesión, la clave se re-guarda con **bcrypt**. Activarlo solo
  cuando ya nadie use el sistema anterior (ese usuario ya no podrá entrar allí).

## Notas técnicas

- `config/catalogos.php` define cada mantenimiento (tabla, campos, validación, eliminación lógica y
  verificaciones "en uso"). Agregar un catálogo nuevo es añadir una entrada, sin escribir controlador.
- El slug del catálogo se vincula al menú por `menu_opciones.descripcion` (ej. `Destinos`).
  "Otros" y "Cruceros" no tienen opción activa en `menu_opciones`; para verlos, activar/crear la opción
  y asignarla en `menu_usuarios`.
- `DB_STRICT=false`: varias tablas tienen columnas `NOT NULL` sin valor por defecto; el sistema
  anterior depende del modo no estricto.
- Si tildes y ñ se ven mal, probar `DB_CHARSET=latin1` (hay tablas latin1 y utf8 mezcladas).
- `hoteles.ruc` es `int(11)`: un RUC de 11 dígitos no cabe. Conviene cambiarlo a `VARCHAR(11)`.
- El archivo `sig/error_log` pesa ~450 MB: revisar los errores y vaciarlo.
- El sistema anterior usa `odbc_exec` y nombres de tabla en MAYÚSCULAS en algunas pantallas
  (`MenuPrincipal.php`, `ST_SEGUROS`, `PROD_AEREOS`), que fallan en PHP 8 / Linux.

## Próximas fases sugeridas

2. **Clientes, Usuarios y permisos, Directorio** (administración del menú desde la web).
3. **Cotizaciones** (TVM) con sus ítems: pasajeros, aéreos, hoteles, traslados, excursiones, autos, seguros, terrestres, otros.
4. **Reservas, Vouchers y Liquidaciones** (incluye PDF/correo).
5. **Pagos a operadores, Pagos de clientes, Abonos, Caja / Caja chica, Orden de pago, Facturación**.
6. **Reportes y exportación a Excel** (reemplazar PHPExcel por PhpSpreadsheet) y apagado del sistema anterior.
