# ANÁLISIS COMPARATIVO: GEOCERCA CONTROL vs GEOCERCA VELOCIDAD

## ARCHIVOS ORIGINALES
- **Geocerca Control**: `sistemagps/procesos/dib_poli2.php`
- **Geocerca Velocidad**: `sistemagps/procesos/dib_poli3.php`

---

## PRINCIPALES DIFERENCIAS IDENTIFICADAS

### 1. **TIPO DE GEOCERCA (`tipo_cerca`)**
- **Geocerca Control**: `tipo_cerca = 1`
- **Geocerca Velocidad**: `tipo_cerca = 2`

### 2. **ESTADO POR DEFECTO**
- **Geocerca Control**: `estado = "1"` (activa por defecto)
- **Geocerca Velocidad**: `estado = "0"` (inactiva por defecto)

### 3. **CAMPOS ADICIONALES EN VELOCIDAD**

#### En la creación (`grabar_geocercas3.php`):
- **Campo `velocidad`**: Velocidad máxima permitida (Km/h)
- **Campo `tipo_geo_ciudad`**: Tipo de zona geográfica
  - Valores posibles: `"ci"` (Ciudad), `"vr"` (Vía Rápida), `""` (Resto)

#### En la tabla de visualización:
- **Geocerca Control**: Muestra columnas: Geocerca, Ver, In, Out, Email, Monitor, Taller, General, Estado, Borrar, Grabar
- **Geocerca Velocidad**: Muestra columnas: Geocerca, Ver, Tipo, Vel(Km/h), Estado, Borrar, Grabar
  - **NO tiene**: In, Out, Email, Monitor, Taller, General
  - **SÍ tiene**: Tipo (`tipo_geo_ciudad`), Vel(Km/h) (`velocidad`)

### 4. **FORMULARIO DE CREACIÓN**

#### Campos adicionales en Geocerca Velocidad:
```html
<!-- Campo Velocidad -->
<th>Velocidad :</th>
<td>
    <input type="text" id="velocidad" name="velocidad" />Km/h
</td>

<!-- Campo Tipo -->
<th>Tipo :</th>
<td>
    <select name="tipo" id="tipo">
        <option value="-1">[--Seleccione--]</option>
        <option value="ci">Ciudad</option>
        <option value="vr">Via Rapida</option>
        <option value="">Resto</option>
    </select>
</td>
```

### 5. **CONSULTA SQL DE GEOCERCAS**

#### Geocerca Control:
```sql
SELECT ... FROM geocerca 
WHERE ((id_vehi = ? AND tipo_cerca = 1) OR (id_emp = ? AND tipo_cerca = 1))
```

#### Geocerca Velocidad:
```sql
SELECT id_cerca_total, 
       ANY_VALUE(co_coordx) as co_coordx,
       ANY_VALUE(co_coordy) as co_coordy,
       ANY_VALUE(nombre_geocerca) as nombre_geocerca,
       ANY_VALUE(estado) as estado,
       ANY_VALUE(id_emp) as id_emp,
       ANY_VALUE(tipo_geo_ciudad) as tipo_geo_ciudad,
       ANY_VALUE(velocidad) as velocidad
FROM geocerca 
WHERE ((id_vehi = ? AND tipo_cerca = 2) OR (id_emp = ? AND tipo_cerca = 2))
GROUP BY id_cerca_total
```

### 6. **FUNCIÓN DE GRABAR GEOCERCA**

#### Geocerca Control (`grabar_geocercas2.php`):
```php
// Solo envía: id_vehi, array (puntos)
mysql_query("INSERT INTO geocerca 
    (co_coordx, co_coordy, id_vehi, id_cerca_total, tipo_cerca, estado, id_emp) 
    VALUES (...)");
// tipo_cerca = 1, estado = 1
```

#### Geocerca Velocidad (`grabar_geocercas3.php`):
```php
// Envía: id_vehi, velocidad, tipo, array (puntos)
mysql_query("INSERT INTO geocerca 
    (co_coordx, co_coordy, id_vehi, id_cerca_total, tipo_cerca, estado, id_emp, tipo_geo_ciudad, velocidad) 
    VALUES (...)");
// tipo_cerca = 2, estado = 0
```

### 7. **FUNCIÓN DE ACTUALIZAR GEOCERCA**

#### Geocerca Control (`actualizar_geocercas.php`):
```php
// Actualiza: nombre_geocerca, estado, id_emp
// También actualiza opciones_geocerca: entrada, salida, email, monitor, taller
mysql_query("UPDATE geocerca SET nombre_geocerca='...', estado='...', id_emp='...' WHERE id_cerca_total='...'");
mysql_query("UPDATE opciones_geocerca SET entrada='...', salida='...', email='...', monitor='...', taller='...' WHERE id_cerca_total='...'");
```

#### Geocerca Velocidad (`actualizar_geocercas3.php`):
```php
// Actualiza: nombre_geocerca, estado, velocidad, tipo_geo_ciudad
// NO actualiza opciones_geocerca
mysql_query("UPDATE geocerca SET nombre_geocerca='...', estado='...', velocidad='...', tipo_geo_ciudad='...' WHERE id_cerca_total='...'");
```

### 8. **RENDERIZADO DE TABLA**

#### Geocerca Control:
- Muestra checkboxes para: In, Out, Email, Monitor, Taller, General, Estado
- Campo "General" con color rojo/azul según `id_emp`

#### Geocerca Velocidad:
- Muestra campos de texto editables: Tipo (`tipo_geo_ciudad`), Vel(Km/h) (`velocidad`)
- Muestra checkbox solo para: Estado
- NO muestra: In, Out, Email, Monitor, Taller, General

---

## RESUMEN DE CAMBIOS A IMPLEMENTAR

### ✅ SIMILITUDES (Mantener igual que Geocerca Control)
1. Estructura general del formulario (Empresa, Flota, Vehículo)
2. Campo de dirección y búsqueda
3. Modo Personalizado/Automático con radio
4. Campo Radio (metros) para modo automático
5. Botones Borrar y Grabar
6. Mapa de Google Maps
7. Funciones de dibujar polígono en el mapa
8. Función de mostrar geocerca en el mapa
9. Función de borrar geocerca

### 🔄 CAMBIOS ESPECÍFICOS PARA VELOCIDAD

#### 1. **Título**
- Cambiar de "GEOCERCA CONTROL" a "GEOCERCA VELOCIDAD"

#### 2. **Campos adicionales en formulario**
- Agregar campo "Velocidad" (input text) con label "Km/h"
- Agregar campo "Tipo" (select) con opciones: [--Seleccione--], Ciudad (ci), Via Rapida (vr), Resto (vacío)

#### 3. **API: Obtener geocercas**
- Cambiar `tipo_cerca = 1` a `tipo_cerca = 2`
- Agregar `tipo_geo_ciudad` y `velocidad` al SELECT
- Crear: `gpsphonnex/src/api/operaciones/get-geocercas-velocidad.php`

#### 4. **API: Grabar geocerca**
- Cambiar `tipo_cerca = 1` a `tipo_cerca = 2`
- Cambiar `estado = "1"` a `estado = "0"`
- Agregar parámetros `velocidad` y `tipo` (tipo_geo_ciudad)
- Insertar en geocerca: `velocidad` y `tipo_geo_ciudad`
- Crear: `gpsphonnex/src/api/operaciones/guardar-geocerca-velocidad.php`

#### 5. **API: Actualizar geocerca**
- Actualizar campos: `nombre_geocerca`, `estado`, `velocidad`, `tipo_geo_ciudad`
- NO actualizar `opciones_geocerca` (no se usan en velocidad)
- Crear: `gpsphonnex/src/api/operaciones/actualizar-geocerca-velocidad.php`

#### 6. **Tabla de geocercas (renderGeocercasTable)**
- **Columnas a mostrar**:
  - Geocerca (input text editable)
  - Ver (botón con lupa)
  - Tipo (input text editable - `tipo_geo_ciudad`)
  - Vel(Km/h) (input text editable - `velocidad`)
  - Estado (checkbox)
  - Borrar (botón)
  - Grabar (botón)
- **Eliminar columnas**: In, Out, Email, Monitor, Taller, General

#### 7. **Función grabar geocerca (grabarGeocerca)**
- Agregar lectura de campo `velocidad`
- Agregar lectura de campo `tipo` (select)
- Enviar estos parámetros a la API

#### 8. **Función actualizar geocerca (grabaropciones1)**
- Leer `tipo_geo_ciudad[$a]` del formulario
- Leer `velocidad[$a]` del formulario
- Enviar a API de actualización

---

## ESTRUCTURA DE DATOS

### Tabla `geocerca` - Campos relevantes:
- `id_cerca_total`: ID único
- `co_coordx`, `co_coordy`: Coordenadas
- `id_vehi`: ID vehículo
- `id_emp`: ID empresa (para geocercas generales)
- `tipo_cerca`: **2** (para velocidad)
- `estado`: **0** (por defecto inactiva)
- `nombre_geocerca`: Nombre de la geocerca
- `tipo_geo_ciudad`: Tipo (ci, vr, o vacío)
- `velocidad`: Velocidad máxima (Km/h)

### Tabla `opciones_geocerca`:
- **NO se usa** en geocerca velocidad (a diferencia de control)

---

## ARCHIVOS A CREAR/MODIFICAR

### Nuevos archivos:
1. `gpsphonnex/src/operaciones/geocerca-velocidad.php` (vista principal)
2. `gpsphonnex/src/operaciones/css/geocerca-velocidad.css` (estilos)
3. `gpsphonnex/src/operaciones/js/geocerca-velocidad.js` (lógica JavaScript)
4. `gpsphonnex/src/api/operaciones/get-geocercas-velocidad.php` (obtener geocercas)
5. `gpsphonnex/src/api/operaciones/guardar-geocerca-velocidad.php` (crear geocerca)
6. `gpsphonnex/src/api/operaciones/actualizar-geocerca-velocidad.php` (actualizar geocerca)
7. `gpsphonnex/src/api/operaciones/borrar-geocerca-velocidad.php` (borrar geocerca - puede reutilizar el de control)

### Archivos base a copiar:
- `geocerca-control.php` → `geocerca-velocidad.php`
- `geocerca-control.css` → `geocerca-velocidad.css`
- `geocerca-control.js` → `geocerca-velocidad.js`
- `get-geocercas.php` → `get-geocercas-velocidad.php`

---

## CHECKLIST DE IMPLEMENTACIÓN

### Fase 1: Estructura Base
- [ ] Copiar archivos base de geocerca-control
- [ ] Renombrar clases y funciones (GeocercaControl → GeocercaVelocidad)
- [ ] Cambiar título a "Geocerca Velocidad"

### Fase 2: Formulario
- [ ] Agregar campo "Velocidad" (input text) con label "Km/h"
- [ ] Agregar campo "Tipo" (select) con opciones: Ciudad, Via Rapida, Resto
- [ ] Mantener campos: Empresa, Flota, Vehículo, Dirección, Radio, Modo

### Fase 3: APIs
- [ ] Crear `get-geocercas-velocidad.php` (tipo_cerca=2, incluir velocidad y tipo_geo_ciudad)
- [ ] Crear `guardar-geocerca-velocidad.php` (tipo_cerca=2, estado=0, incluir velocidad y tipo_geo_ciudad)
- [ ] Crear `actualizar-geocerca-velocidad.php` (actualizar velocidad y tipo_geo_ciudad, NO opciones_geocerca)
- [ ] Reutilizar `borrar-geocerca-velocidad.php` o crear nuevo

### Fase 4: Tabla
- [ ] Modificar `renderGeocercasTable` para mostrar columnas: Geocerca, Ver, Tipo, Vel(Km/h), Estado, Borrar, Grabar
- [ ] Eliminar columnas: In, Out, Email, Monitor, Taller, General
- [ ] Agregar inputs editables para Tipo y Vel(Km/h)

### Fase 5: JavaScript
- [ ] Modificar `grabarGeocerca` para leer `velocidad` y `tipo`
- [ ] Modificar `grabaropciones1` para leer `tipo_geo_ciudad` y `velocidad` del array
- [ ] Actualizar URLs de APIs
- [ ] Mantener lógica de mapa (igual que control)

### Fase 6: Validaciones
- [ ] Validar que velocidad sea numérico
- [ ] Validar que tipo esté seleccionado al grabar
- [ ] Validar que vehículo esté seleccionado

---

## NOTAS IMPORTANTES

1. **Estado inicial**: Las geocercas de velocidad se crean con `estado = 0` (inactivas) por defecto, a diferencia de control que son activas (`estado = 1`).

2. **Opciones de geocerca**: Las geocercas de velocidad NO usan la tabla `opciones_geocerca` (entrada, salida, email, etc.), solo usan campos directos de la tabla `geocerca`.

3. **Campo General**: NO existe en geocerca velocidad, por lo que todas las geocercas se aplican específicamente al vehículo (aunque técnicamente se puede tener `id_emp`, no se muestra en la UI).

4. **Tipo de zona**: El campo `tipo_geo_ciudad` puede ser:
   - `"ci"`: Ciudad
   - `"vr"`: Vía Rápida
   - `""` o vacío: Resto

5. **Velocidad**: Campo numérico que representa la velocidad máxima permitida en Km/h dentro de la geocerca.

---

## CONCLUSIÓN

La implementación de Geocerca Velocidad es muy similar a Geocerca Control, pero con las siguientes diferencias clave:
- Tipo de geocerca: 2 en lugar de 1
- Estado por defecto: 0 (inactiva) en lugar de 1 (activa)
- Campos adicionales: velocidad y tipo_geo_ciudad
- Tabla simplificada: solo muestra Tipo, Velocidad, Estado (sin opciones de entrada/salida/email/etc.)
- NO usa opciones_geocerca: solo campos directos de la tabla geocerca

La lógica del mapa, dibujo de polígonos, y estructura general se mantiene igual.

