# CHANGELOG v1.5.37 - ESEA: Corrección de Formato de Fechas en "Realizar nueva consulta"

**Fecha**: 24 de enero de 2026  
**Versión**: 1.5.37  
**Tipo**: Fix - Corrección crítica de formato de fechas

---

## 📋 Resumen

Corrección del formato de fechas cuando el usuario hace "Realizar nueva consulta" en módulo ESEA. El código JavaScript estaba generando fechas en formato incorrecto (`19925-19926-19927...`) en lugar del formato requerido por API v2 (`dd-mm-yyyy/dd-mm-yyyy`).

---

## 🔍 Problema Detectado

### Síntoma Observado
URL generada con fechas mal formateadas:

```
❌ INCORRECTO (v1.5.36):
http://192.168.100.137:8081/simafir_api/ws/public/v1/esea/obtenerDatos/444/3?fechaInicio=19925-19926-19927-19928-19929-199210-199211-199212-19931-19932-19933-19934-19935-19936-19937-19938-&fechaFin=19925-19926-19927-19928-19929-199210-199211-199212-19931-19932-19933-19934-19935-19936-19937-19938-
```

### Causa Raíz
El JavaScript en `assets/js/App.js` estaba concatenando años y periodos sin formato correcto:

```javascript
// ANTES (Incorrecto):
for (var i = parseInt(first_per); i <= parseInt(last_per); i++) {
    finalString = finalString + parseInt(first_year) + i + "-";
}
// Generaba: "19925-19926-19927-..." (año+mes sin separación)
```

**Resultado**: API devuelve **HTTP 404** porque no puede parsear las fechas.

---

## ✅ Cambios Realizados

### Archivo Modificado

**`assets/js/App.js`**

### Cambios Específicos

#### 1. Períodos Mensuales (Líneas ~405-420)

**ANTES (v1.5.36):**
```javascript
} else {
    if (parseInt(first_year) == parseInt(last_year)) {
        for (var i = parseInt(first_per); i <= parseInt(last_per); i++) {
            finalString = finalString + parseInt(first_year) + i + "-";
        }
    } else {
        for (var i = parseInt(first_per); i <= 12; i++) {
            firstString = firstString + parseInt(first_year) + i + "-";
        }
        for (var x = 1; x <= parseInt(last_per); x++) {
            secondString = secondString + parseInt(last_year) + x + "-";
        }
        for (var y = parseInt(first_year) + 1; y <= parseInt(last_year) - 1; y++) {
            for (var j = 1; j <= 12; j++) {
                thirdString = thirdString + y.toString() + j + "-";
            }
        }
        var finalString = firstString + thirdString + secondString;
    }
}
```

**DESPUÉS (v1.5.37):**
```javascript
} else {
    // FORMATO API v2: dd-mm-yyyy/dd-mm-yyyy (fechaInicio/fechaFin)
    // Construir fechas en formato correcto
    if (parseInt(first_year) == parseInt(last_year)) {
        // Mismo año: usar primer día del primer mes y último día del último mes
        var firstMonth = parseInt(first_per).toString().padStart(2, '0');
        var lastMonth = parseInt(last_per).toString().padStart(2, '0');
        var lastDay = new Date(parseInt(first_year), parseInt(last_per), 0).getDate(); // Último día del mes
        
        finalString = `01-${firstMonth}-${first_year}/${lastDay}-${lastMonth}-${first_year}`;
    } else {
        // Años diferentes: desde primer día del primer mes del primer año hasta último día del último mes del último año
        var firstMonth = parseInt(first_per).toString().padStart(2, '0');
        var lastMonth = parseInt(last_per).toString().padStart(2, '0');
        var lastDay = new Date(parseInt(last_year), parseInt(last_per), 0).getDate();
        
        finalString = `01-${firstMonth}-${first_year}/${lastDay}-${lastMonth}-${last_year}`;
    }
}
```

#### 2. Períodos Trimestrales (Líneas ~340-400)

**ANTES (v1.5.36):**
```javascript
if ($('#extra-per-last').data('mouth') == undefined) {
    if (parseInt(first_year) == parseInt(last_year)) {
        for (var i = parseInt(first_per); i <= parseInt(last_per); i++) {
            if (i == 1) {
                finalString = finalString + parseInt(first_year) + "I" + "-";
            } else if (i == 2) {
                finalString = finalString + parseInt(first_year) + "II" + "-";
            }
            // ...etc
        }
    } else {
        // ...código complejo anidado con múltiples loops
    }
}
```

**DESPUÉS (v1.5.37):**
```javascript
if ($('#extra-per-last').data('mouth') == undefined) {
    // TRIMESTRES (I, II, III, IV) - Convertir a formato dd-mm-yyyy/dd-mm-yyyy
    // Trimestre I = Enero-Marzo, II = Abril-Junio, III = Julio-Sept, IV = Oct-Dic
    var trimestreMap = {
        1: { inicio: '01-01', fin: '31-03' },
        2: { inicio: '01-04', fin: '30-06' },
        3: { inicio: '01-07', fin: '30-09' },
        4: { inicio: '01-10', fin: '31-12' }
    };
    
    if (parseInt(first_year) == parseInt(last_year)) {
        // Mismo año: desde inicio del primer trimestre hasta fin del último trimestre
        var fechaInicio = `${trimestreMap[first_per].inicio}-${first_year}`;
        var fechaFin = `${trimestreMap[last_per].fin}-${first_year}`;
        finalString = `${fechaInicio}/${fechaFin}`;
    } else {
        // Años diferentes: desde inicio del primer trimestre del primer año hasta fin del último trimestre del último año
        var fechaInicio = `${trimestreMap[first_per].inicio}-${first_year}`;
        var fechaFin = `${trimestreMap[last_per].fin}-${last_year}`;
        finalString = `${fechaInicio}/${fechaFin}`;
    }
}
```

---

## 📊 Ejemplos de Transformación

### Períodos Mensuales

#### Caso 1: Mismo año
**Entrada del usuario:**
- Año inicio: 1992
- Mes inicio: 5 (Mayo)
- Año fin: 1992
- Mes fin: 8 (Agosto)

**Salida:**

| Versión | finaldates Generado | Resultado |
|---------|---------------------|-----------|
| **v1.5.36** | `19925-19926-19927-19928-` | ❌ HTTP 404 |
| **v1.5.37** | `01-05-1992/31-08-1992` | ✅ API acepta |

#### Caso 2: Años diferentes
**Entrada del usuario:**
- Año inicio: 1992
- Mes inicio: 11 (Noviembre)
- Año fin: 1993
- Mes fin: 2 (Febrero)

**Salida:**

| Versión | finaldates Generado | Resultado |
|---------|---------------------|-----------|
| **v1.5.36** | `199211-199212-19931-19932-` | ❌ HTTP 404 |
| **v1.5.37** | `01-11-1992/28-02-1993` | ✅ API acepta |

### Períodos Trimestrales

#### Caso 1: Mismo año
**Entrada del usuario:**
- Año inicio: 2021
- Trimestre inicio: 1 (Ene-Mar)
- Año fin: 2021
- Trimestre fin: 3 (Jul-Sep)

**Salida:**

| Versión | finaldates Generado | Resultado |
|---------|---------------------|-----------|
| **v1.5.36** | `2021I-2021II-2021III-` | ❌ HTTP 404 |
| **v1.5.37** | `01-01-2021/30-09-2021` | ✅ API acepta |

#### Caso 2: Años diferentes
**Entrada del usuario:**
- Año inicio: 2020
- Trimestre inicio: 4 (Oct-Dic)
- Año fin: 2021
- Trimestre fin: 2 (Abr-Jun)

**Salida:**

| Versión | finaldates Generado | Resultado |
|---------|---------------------|-----------|
| **v1.5.36** | `2020IV-2021I-2021II-` | ❌ HTTP 404 |
| **v1.5.37** | `01-10-2020/30-06-2021` | ✅ API acepta |

---

## 🎯 Resultados Esperados

### URL Final Correcta

```
✅ CORRECTO (v1.5.37):
http://192.168.100.137:8081/simafir_api/ws/public/v1/esea/obtenerDatos/444/3?fechaInicio=01-05-1992&fechaFin=31-08-1992
```

### Formato de Parámetros

- **fechaInicio**: Formato `dd-mm-yyyy` (primer día del período seleccionado)
- **fechaFin**: Formato `dd-mm-yyyy` (último día del período seleccionado)
- **Separador**: `/` entre fechaInicio y fechaFin en el parámetro `finaldates`

---

## 🔧 Lógica Implementada

### Meses

```javascript
// Calcular el último día del mes correctamente
var lastDay = new Date(año, mes, 0).getDate();
// Ejemplo: new Date(1992, 5, 0) = 30 (último día de mayo)

// Formato de meses con cero a la izquierda
var firstMonth = parseInt(first_per).toString().padStart(2, '0');
// Ejemplo: 5 → "05", 12 → "12"
```

### Trimestres

```javascript
// Mapeo de trimestres a fechas
var trimestreMap = {
    1: { inicio: '01-01', fin: '31-03' },  // Q1: Ene-Mar
    2: { inicio: '01-04', fin: '30-06' },  // Q2: Abr-Jun
    3: { inicio: '01-07', fin: '30-09' },  // Q3: Jul-Sep
    4: { inicio: '01-10', fin: '31-12' }   // Q4: Oct-Dic
};
```

---

## 🔄 Historial de Versiones ESEA

| Versión | Cambio | Descripción |
|---------|--------|-------------|
| **v1.5.32** | Fix dates | Pasar fechas directamente a `esea_allData2()` |
| **v1.5.33** | Fix field | `idDetalle` → `idFormulario` en shortcodes |
| **v1.5.34** | Fix API | Usar `subject` dinámico |
| **v1.5.35** | Fix else | Actualizar bloques legacy |
| **v1.5.36** | Fix param | Usar `chartID` numérico |
| **v1.5.37** | **Fix dates format** | **Formato correcto dd-mm-yyyy/dd-mm-yyyy en JavaScript** |

---

## ⚠️ Notas Importantes

### Compatibilidad

- ✅ **Trimestres**: Totalmente compatible con API v2
- ✅ **Meses**: Totalmente compatible con API v2
- ✅ **Días**: No aplica (ESEA no usa días)

### Caché del Navegador

Después de desplegar v1.5.37, los usuarios deben:

```bash
# Limpiar caché del navegador
Ctrl+Shift+R (Windows/Linux)
Cmd+Shift+R (Mac)
```

O usar modo incógnito para forzar la descarga del nuevo JavaScript.

### Validación

Para verificar que el JavaScript se actualizó:

1. Abrir DevTools (F12)
2. Pestaña "Network"
3. Buscar `App.js`
4. Verificar que muestra el nuevo código con `dd-mm-yyyy`

---

## 📝 Testing

### Checklist de Pruebas

- [ ] **Períodos mensuales - mismo año**: Seleccionar May-1992 a Ago-1992
- [ ] **Períodos mensuales - años diferentes**: Seleccionar Nov-1992 a Feb-1993
- [ ] **Trimestres - mismo año**: Seleccionar Q1-2021 a Q3-2021
- [ ] **Trimestres - años diferentes**: Seleccionar Q4-2020 a Q2-2021
- [ ] **Verificar URL generada**: Comprobar formato `dd-mm-yyyy/dd-mm-yyyy`
- [ ] **Verificar respuesta API**: HTTP 200 con datos
- [ ] **Verificar tabla**: Datos mostrados correctamente
- [ ] **Error log limpio**: Sin errores en `inc/errorlog.txt`

### Comandos de Prueba

```bash
# Verificar logs de API
tail -f inc/errorlog.txt

# Buscar uso de finaldates en JavaScript
grep -n "finaldates" assets/js/App.js

# Verificar versión del plugin
grep "Version:" secmca-api.php
```

---

## 🚀 Despliegue

### Pasos de Instalación

1. **Backup del plugin actual**
   ```bash
   cp -r wp-content/plugins/secmca-api wp-content/plugins/secmca-api-backup-v1.5.36
   ```

2. **Descomprimir nueva versión**
   ```bash
   unzip secmca-api-v1.5.37-ESEA-FIX-DATES-FORMAT.zip
   ```

3. **Reemplazar archivos**
   ```bash
   cp -r secmca-api/* wp-content/plugins/secmca-api/
   ```

4. **Limpiar caché**
   - Caché de WordPress (si existe plugin de caché)
   - Caché del navegador de todos los usuarios

5. **Verificar versión**
   - Admin → Plugins → secmca-api → Versión 1.5.37

6. **Probar "Realizar nueva consulta"**
   - Ir a cualquier página ESEA
   - Seleccionar períodos personalizados
   - Verificar URL generada
   - Confirmar que muestra datos

---

## ⚡ Urgencia

Este fix es **CRÍTICO** porque:

1. ❌ **v1.5.36 no funciona**: Todas las consultas personalizadas fallan con HTTP 404
2. 🔴 **Afecta funcionalidad principal**: "Realizar nueva consulta" completamente rota
3. 🚨 **Usuarios afectados**: Cualquiera que intente filtrar por períodos personalizados

**Prioridad**: 🔴 **ALTA** - Desplegar lo antes posible

---

## 🔙 Rollback

Si se presenta algún problema:

```bash
# Restaurar versión anterior
rm -rf wp-content/plugins/secmca-api
cp -r wp-content/plugins/secmca-api-backup-v1.5.36 wp-content/plugins/secmca-api
```

**Nota**: v1.5.36 también tiene problemas con la API (HTTP 404), pero al menos la funcionalidad de vista inicial funciona.

---

## 📞 Soporte

Si después del despliegue:

- ✅ **URLs correctas pero sigue HTTP 404**: Verificar que API acepta formato `dd-mm-yyyy`
- ✅ **JavaScript no cambia**: Limpiar caché del navegador
- ✅ **Otros errores**: Revisar `inc/errorlog.txt` y consola del navegador

---

## 👨‍💻 Desarrollador

**Cambios realizados por**: GitHub Copilot  
**Fecha**: 24 de enero de 2026  
**Contexto**: Corrección urgente de formato de fechas en consultas personalizadas ESEA  
**Archivos modificados**: 2 (`assets/js/App.js`, `secmca-api.php`)
