# Sistema de Arriendos — versión modernizada

Sistema de gestión de arriendos del **Condominio Lagunamar**, con tres roles
(administrador, propietario y conserje), ficha de arriendo en PDF y envío
automático de correos.

---

## 1. Qué cambió respecto a la versión anterior

### Lo que pediste
- **La ficha PDF ahora llega adjunta al correo** con todos los datos ingresados.
  Ocurre en los tres momentos: al registrar un arriendo, al enviar el correo
  manual desde el dashboard, y en los avisos automáticos de ingreso.
- **Se mantuvieron todas las funciones** que ya existían (ver el punto 6).
- **Interfaz completamente rediseñada**: barra lateral, tarjetas de estadísticas,
  tablas con buscador y paginación, y diseño adaptable a celular.

### Seguridad (lo más importante que se corrigió)
| Problema anterior | Ahora |
|---|---|
| Borrar un arrendatario con solo abrir un enlace (`eliminar_arrendatario.php?id=5`) | Solo por POST y con token CSRF |
| Contraseñas y datos de conexión repetidos en 6 archivos | Un solo archivo `config.php` |
| Páginas sin verificar el rol del usuario | Todas verifican rol con `exigir_rol()` |
| Consultas con variables pegadas al SQL | Consultas preparadas en todo el sistema |
| Cierre de sesión que no cerraba la sesión | `cerrar_sesion.php` real |
| Datos mostrados sin escapar (riesgo XSS) | Todo pasa por `e()` |

### Funciones nuevas
- **Bitácora de correos**: historial de todo lo enviado, con buscador.
- **Aviso de lista negra en vivo**: al escribir el RUT en el formulario avisa
  al instante, y también bloquea acompañantes en lista negra.
- **Validación de RUT chileno** (dígito verificador) en pantalla.
- **Gráfico de ocupación**: noches arrendadas por mes, últimos 12 meses.
- **Botones de WhatsApp** junto a cada teléfono.
- **Panel de conserje mejorado**: separa "en curso" de "próximas llegadas",
  muestra acompañantes y estacionamiento.
- **Sin correos duplicados**: si el cron corre varias veces al día, no reenvía.
- **Modo de correo local**: en tu computador los correos se guardan como
  archivos en vez de enviarse (ver punto 4).

---

## 2. Instalación en el hosting (cPanel)

1. **Respalda la base de datos** desde phpMyAdmin (Exportar → SQL).

2. **Sube el archivo de contraseñas FUERA de public_html.**
   Toma `config_arriendos.ejemplo.php`, renómbralo a `config_arriendos.php`,
   escribe dentro tus contraseñas reales y súbelo aquí:

   ```
   /home/cmi88758/config_arriendos.php      ← AQUÍ (fuera de public_html)
   /home/cmi88758/public_html/
   /home/cmi88758/public_html/arriendos/    ← el sistema va aquí
   ```

   Al estar fuera de `public_html`, nadie puede abrirlo desde el navegador.

3. Sube el contenido de la carpeta `arriendos/` por FTP o el Administrador de
   archivos, reemplazando la carpeta anterior. Incluye el archivo `.htaccess`
   (en cPanel activa "Mostrar archivos ocultos").

4. Ejecuta **una vez** el archivo `migracion.sql` en phpMyAdmin
   (pestaña SQL → pegar el contenido → Continuar). Es seguro re-ejecutarlo.

5. Verifica que estas carpetas tengan permiso de escritura (**755** o **775**):
   - `uploads_arrendatarios/`
   - `temp_pdf/`

6. Entra a `https://misarriendos.cl/arriendos/` y prueba iniciar sesión.

> Si el sistema no encuentra `config_arriendos.php` en el hosting, se detiene
> con un mensaje claro en vez de arrancar sin contraseñas.

### Cron de avisos automáticos
En cPanel → *Cron Jobs*, mantén (o crea) la tarea diaria:

```
0 9 * * * curl -s https://misarriendos.cl/arriendos/alertas_arriendos.php
```

Con una sola ejecución diaria envía:

| Para quién | Cuándo | Qué lleva |
|---|---|---|
| Arrendatario | Un día antes de ingresar | Ficha PDF adjunta + código de acceso + QR |
| Arrendatario | El día que ingresa | Ficha PDF adjunta + código de acceso + QR |
| Arrendatario | El día que sale | Recordatorio de salida |
| **Propietarios** | **Un día antes de que ingrese** | Datos del arrendatario, acompañantes, patente |
| **Propietarios** | **Un día antes de que salga** | Datos del arrendatario y horario de salida |

Los avisos a propietarios llegan a **todos** los propietarios del
departamento (ver punto 8). Si el cron corre varias veces al día,
cada aviso sale **una sola vez**.

---

## 3. Estructura de archivos

```
arriendos/
├── config.php              ← contraseñas y datos del condominio (ÚNICO lugar)
├── conexion.php            ← conexión a la base de datos
├── includes/
│   ├── auth.php            ← sesiones, roles y CSRF
│   ├── helpers.php         ← utilidades (RUT, fechas, lista negra)
│   ├── layout.php          ← diseño común (barra lateral + encabezado)
│   ├── mailer.php          ← correos y plantilla HTML
│   └── pdf_ficha.php       ← generación de la ficha PDF
├── assets/css/app.css      ← estilos
├── assets/js/app.js        ← JavaScript común
├── plantillas/             ← PDF base de la ficha
├── lib/                    ← PHPMailer, FPDF y FPDI
├── uploads_arrendatarios/  ← imágenes de códigos de acceso
├── temp_pdf/               ← PDFs temporales (se borran solos)
└── migracion.sql           ← mejoras a la base de datos (ejecutar 1 vez)
```

---

## 4. Probar en tu computador (XAMPP)

1. Inicia Apache y MySQL en XAMPP.
2. Crea la base `cmi88758_sistema_arriendos` en phpMyAdmin e importa el
   archivo `cmi88758_sistema_arriendos.sql`.
3. En `config.php`, revisa el bloque de desarrollo local (usuario `root`,
   sin contraseña, puerto 3306 — ajústalo si tu XAMPP usa otro).
4. Abre `http://localhost/SistemaArriendos/arriendos/`.

**Importante:** en local los correos **no se envían**. Se guardan como archivos
`.eml` en la carpeta `correos_locales/`, que puedes abrir con doble clic para
ver exactamente cómo llegan, con el PDF adjunto incluido. Así puedes probar
todo sin enviarle correos a los arrendatarios. Para forzar envíos reales desde
local, cambia `MAIL_ENVIO_REAL` a `true` en `config.php`.

---

## 5. Datos de acceso

Los usuarios y contraseñas del hosting **no cambiaron**. Los roles son:

| Rol | Puede hacer |
|---|---|
| **Administrador** | Propietarios, conserjes, lista negra, bitácora |
| **Propietario** | Sus arrendatarios, calendario, envío de fichas |
| **Conserje** | Registrar llegadas y salidas, ver fichas |

---

## 6. Funciones anteriores que se mantuvieron

Login por rol · registro y edición de arrendatarios · acompañantes con
autocompletado · carga de imagen del código de acceso · URL externa (QR de
Comunidad Feliz) · lista negra · ficha PDF sobre la plantilla original ·
enlace público de la ficha por token (`ver_ficha.php?token=…`) · registro de
llegada y salida por el conserje · calendario de arriendos · avisos automáticos
por correo · cambio de contraseña · crear/editar/eliminar conserjes y
propietarios · bloquear y desbloquear usuarios · resetear contraseñas.

---

## 7. Solicitudes de arriendo (formulario público)

Cada propietario tiene su **enlace propio**, que aparece arriba en la pantalla
"Solicitudes" con un botón para copiarlo o mandarlo por WhatsApp:

```
https://misarriendos.cl/arriendos/solicitar.php?depto=1031
```

Quien reciba el enlace llena sus datos, fechas y acompañantes. El sistema:

1. **Bloquea fechas ocupadas.** Compara fecha *y hora* juntas, así que el mismo
   día puede tener dos arriendos distintos: si uno sale a las 12:00, el
   siguiente puede entrar desde esa misma hora. Si hay choque, le muestra el
   rango ocupado y no lo deja enviar.
2. **Revisa la lista negra en silencio.** Si el titular o algún acompañante
   está en tu lista negra, el solicitante **no se entera de nada**: la
   solicitud se recibe igual y queda marcada en rojo solo para ti.
3. **Te avisa por correo** (a ti y a tu copropietario) con todos los datos.

En "Solicitudes" decides: **Aceptar** (se crea el arriendo y las fechas quedan
ocupadas) o **Rechazar** (puedes escribir un motivo, que se le envía por
correo; la lista negra nunca se menciona).

> Al aceptar **no se envía la ficha automáticamente**. El arriendo aparece en
> tu dashboard y le mandas la ficha PDF cuando quieras con el botón de correo.

La disponibilidad se valida también en el servidor, así que no sirve de nada
saltarse el JavaScript.

---

## 8. Departamentos con más de un propietario

Un departamento puede tener varios propietarios (por ejemplo un matrimonio).
Para lograrlo, en *Nuevo Propietario* crea la segunda cuenta con **el mismo
número de departamento**. A partir de ahí, ambos:

- ven los mismos arriendos, calendario y bitácora;
- reciben los dos correos de aviso del cron;
- reciben y pueden aceptar o rechazar las mismas solicitudes.

No hay que hacer nada más: el sistema agrupa por número de departamento.

---

## 9. Respaldo

La versión anterior quedó intacta en la carpeta `proyecto_original/`, por si
necesitas consultar o recuperar algo.
