# GiadocGenerator - Generador de Informes PDF

## Descripción
Aplicación web en PHP que genera informes PDF a partir de datos de Google Sheets recibidos mediante Google Apps Script.

## Requisitos del Sistema
- PHP 7.4 o superior
- Composer
- Extensiones PHP requeridas:
  - json
  - curl
  - gd (para procesamiento de imágenes)
  - mbstring

## Instalación

### 1. Instalar dependencias con Composer
```bash
cd c:\wamp64\www\giadocgenerator
composer install
```

### 2. Configurar permisos
Asegúrate de que el directorio `logs` tenga permisos de escritura:
```bash
chmod 755 logs/
```

### 3. Configurar el servidor web
- Apunta el dominio/subdominio al directorio del proyecto
- Asegúrate de que el archivo `.htaccess` esté funcionando

## Estructura del Proyecto

```
giadocgenerator/
├── config.php              # Configuración principal
├── index.php               # Punto de entrada
├── composer.json           # Dependencias
├── .htaccess               # Configuración Apache
├── src/                    # Clases PHP
│   ├── Logger.php          # Sistema de logging
│   ├── PDFGenerator.php    # Generador principal
│   └── ValidationHelper.php # Validación de datos
├── templates/              # Plantillas PDF
│   ├── BaseTemplate.php    # Plantilla base
│   ├── InspeccionTemplate.php # Plantilla de inspección
│   └── MantenimientoTemplate.php # Plantilla de mantenimiento
├── vendor/                 # Dependencias Composer
└── logs/                   # Archivos de log
```

## Uso

### Desde Google Apps Script
Envía una solicitud POST al endpoint con el siguiente formato JSON:

```javascript
const data = {
  "idVisita": "VIS-001",
  "fechaInforme": "2024-01-15",
  "dataVisita": {
    "idVisita": "VIS-001",
    "cliente": "Cliente Ejemplo",
    "direccion": "Calle Ejemplo 123",
    "tecnico": "Juan Pérez",
    "horaInicio": "09:00",
    "horaFin": "12:00"
  },
  "dataInformes": {
    "tipoServicio": "mantenimiento_preventivo",
    "tipoInforme": "GENERAL",
    "fechaEjecucion": "2024-01-15",
    "observaciones": "Servicio realizado satisfactoriamente"
  },
  "dataSeguridad": [
    {"item": "Extintores", "estado": "OK", "observaciones": "Vigentes"}
  ],
  "dataObservacion": [
    {
      "observacion": "Registro fotográfico",
      "foto1": "https://drive.google.com/uc?id=1234567890"
    }
  ],
  "download": false
};

const response = UrlFetchApp.fetch('https://tu-dominio.com/giadocgenerator/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  payload: JSON.stringify(data)
});
```

### Tipos de Plantilla Soportados
- `inspeccion`: Para informes de inspección
- `mantenimiento`: Para informes de mantenimiento  
- `instalacion`: Usa plantilla de inspección
- `reparacion`: Usa plantilla de mantenimiento

## Configuración

### Variables de Configuración (config.php)
- `DEBUG_MODE`: Activar/desactivar modo debug
- `ALLOWED_ORIGINS`: Dominios permitidos para CORS
- `ENABLE_LOGGING`: Activar/desactivar logging
- Configuración de márgenes PDF
- Configuración de imágenes

### Logging
Los logs se guardan en el directorio `logs/` con el formato:
- `app_YYYY-MM-DD.log`

Niveles de log: DEBUG, INFO, WARNING, ERROR

## Seguridad
- Validación de origen de solicitudes (CORS)
- Validación de datos de entrada
- Sanitización de strings
- Limitación de tamaño de imágenes
- Headers de seguridad configurados

## Personalización

### Agregar Nueva Plantilla
1. Crear clase en `templates/` extendiendo `BaseTemplate`
2. Implementar método `generateContent()`
3. Registrar en `PDFGenerator::$templateClasses`

### Modificar Validaciones
Editar `ValidationHelper` para agregar/modificar validaciones específicas.

## Troubleshooting

### Error: "No se recibieron datos"
- Verificar que la solicitud sea POST
- Verificar que el Content-Type sea application/json

### Error: "Origen no permitido"
- Agregar el dominio a `ALLOWED_ORIGINS` en config.php

### Imágenes no se cargan
- Verificar que las URLs sean públicas
- Verificar conectividad desde el servidor
- Revisar logs para errores específicos

## Logs Útiles
```bash
# Ver logs en tiempo real
tail -f logs/app_$(date +%Y-%m-%d).log

# Buscar errores
grep "ERROR" logs/app_*.log
```