Versión actual: 2.1
--- v2.1 --- 02/09/2026
MAILER MANUAL (nuevo módulo)
- Nuevo mailer manual: envío manual del aviso de revisión, alternativa
al mailer automático (cron) para reenviar avisos puntuales
- Búsqueda por rango de fechas de próxima revisión (desde/hasta), "desde" precargado
a 3 meses atrás y "hasta" a la fecha actual; búsqueda automática al abrir la página
- Filtro opcional por empresa concreta (autocomplete, mismo patrón que en Stock)
- Tabla de resultados ordenable (DataTable) con checkboxes para seleccionar clientes,
botón "Ver equipos" (modal) y botón de vista previa por cliente
- Vista previa del email en iframe, con datos reales del
cliente seleccionado o datos de ejemplo si no hay ninguno
- Plantilla HTML del correo compartida entre el envío real y la vista previa
- Columna VENCIMIENTO añadida a la tabla de equipos del correo
- Acceso desde el menú Administrar y desde el panel de accesos rápidos
CONJUNTOS DE FORMACIÓN (nuevo módulo, solo empleados)
- Nueva pestaña "Formación" en el navbar, fijada a la
empresa SERVIGASA SPECIAL JOBS
- Lista solo los conjuntos en los que TODOS los equipos tienen "formación" (con o
sin tilde) en la ubicación o el localizador
- Regla de kits con localizador "MF...": deben incluir al menos un equipo con
normativa EN355, EN358, EN397 y EN361 (o cualquier normativa compuesta que la
contenga, p.ej. "EN358 EN361"); si falta alguno, el estado se muestra como
"NO COMPLETA" en vez del estado habitual
- Ficha del conjunto: si el conjunto "MF..." está incompleto, muestra un aviso en la
página y una alerta emergente (SvgsSwal) indicando el nombre de la normativa que
falta (para EN361, lista las alternativas separadas por "o")
- Botón "Volver a Formación" junto a "Volver a conjuntos", visible en cualquier
conjunto con "formación" en ubicación o localizador
- Corregido bug de datos: el REF de la normativa del casco en la tabla normativas
tiene un espacio final ("EN397 "), lo que rompía las comparaciones exactas;
cambiado a TRIM(normativa) en las consultas de formación
CORREO / CREDENCIALES
- Cuenta de envío unificada a revisiones@servigasa.com (antes servigasa@servigasa.com
en unos mailers y credenciales desactualizadas en otros) en los tres mailers
del sistema; host unificado a smtp.ionos.es
- Corregido bug de sintaxis en el mailer de cambios de ubicación (paréntesis extra alrededor de
un method chaining rompían el parser en PHP 5.6, el script nunca se ejecutaba)
NAVEGACIÓN / CABECERA
- Botón para quitar la empresa seleccionada junto al desplegable
de cliente en el navbar de empleados
- "Sub-usuarios" añadido al menú Administrar cuando no hay empresa seleccionada,
redirige a los sub-usuarios de SERVIGASA SPECIAL JOBS
- Quitado el botón "Sub-usuarios" de los accesos rápidos del panel de empleados (se
mantiene accesible desde el header)
- Panel de empleados: el botón "Clientes" cambia a "Equipos"
en cuanto hay un cliente seleccionado
--- v2.1 --- 04/06/2026
SWEETALERT2 — Sustitución de alert() y confirm() nativos
- Integrado SweetAlert2 v11 (js/sweetalert2.all.min.js, bundle JS+CSS)
- Definido window.SvgsSwal(): wrapper con colores corporativos
(#d9230f), soporte automático de modo oscuro y tipografía compacta
- Reemplazados alert() y confirm() en 23 archivos PHP:
caducidades, conjuntos, editanexo, editequipo, editinstalacion, editkit,
editnorm, editpartetrabajo, editrevis, edituser, edit_doc_anex, edit_doc_int,
equipos, infoequipo, normativas, partetrabajo, rescate, revisiones,
searchequipos, stock, subusuarios, usuarios, verconjunto
- confirm() refactorizados al patrón async .then(function(r){ if(r.isConfirmed){} })
TEMA OSCURO
- Nuevo archivo css/dark.css con overrides completos para modo oscuro
- Botón luna/sol en el navbar para alternar tema
- Preferencia guardada en localStorage (clave svgs-theme) y aplicada sin flash
mediante IIFE en head antes de renderizar
- Variables CSS custom (--ck-*, --bs-*) sobreescritas con html[data-theme="dark"]
para ganar especificidad sobre estilos inline de la página de inicio y el panel de empleados
- Dropdowns autocomplete globales migrados a clase
CSS svgs-ac-drop / svgs-ac-item para que dark.css pueda estilizarlos correctamente
(los estilos inline JS se normalizan a rgb() y no son seleccionables por CSS)
- Cobertura: panels, forms, tablas, modales, DataTables, jQuery UI, datetimepicker,
alerts, footer, tabs, estados APTO/NO APTO, partes de trabajo y páginas CK
--- v2.1 --- 03/06/2026
RESUMEN DE REVISIONES
- Normativa EN360 (anticaídas retráctil): el resumen agrupa por rangos de longitud
(hasta 3 m / 3-9 m / 10 m o más) usando la longitud registrada en la revisión
- Diferenciación por marca IRUDEK en el resumen para normativas EN1496, EN360 y EN795 B
STOCK DE EQUIPOS (nuevo módulo)
- Nueva página de Stock para empleados: registro de equipos sin asignar a empresa
- Nuevo equipo de stock: redirige a la edición de equipo con propietario=0
- Columna fecha_stock registrada automáticamente al dar de alta un equipo en stock
- Modal de asignación a empresa con buscador autocomplete (jQuery UI)
- Eliminación de equipos de stock con confirmación
- Pestaña "Altas en stock": historial de equipos dados de alta, con buscador por serie,
normativa, marca, modelo y rango de fechas
- Pestaña "Asignaciones": historial de asignaciones a empresas con fecha_asignacion
registrada automáticamente, buscador y resumen agrupado por empresa y normativa
- Resumen Lista/Resumen en pestañas Altas y Asignaciones (mismo patrón que revisiones)
- Acceso desde el menú Administrar y desde el panel de accesos rápidos
CADUCIDADES POR MARCA (nuevo módulo)
- Nueva página de Caducidades: configuración de caducidades por marca sin tocar código
- Tabla marcas_caducidad con keyword de búsqueda (LIKE) y años desde última revisión
- Tabla marcas_caducidad_condiciones: múltiples condiciones por marca con rangos de fecha
de fabricación (fabricado antes de / después de), años fabricación y años 1ª utilización
- Cada condición puede tener normativas específicas (tabla marcas_caducidad_condiciones_normativas);
si no se asignan, aplica a todas las normativas de la marca
- Tabla marcas_caducidad_normativas: normativas globales de la marca como fallback
- Marcas almacenadas en mayúsculas; autocomplete desde marcas reales de equipos
- Pre-poblado automático con las 17 marcas y 10 normativas existentes en el cron de caducidades
- Miguel Miranda unificado como una sola entrada "MIGUEL MIRANDA"
- Cron de caducidades reescrito: lee condiciones desde BD en lugar de queries hardcodeadas
- Migración para ejecución manual en producción
- Acceso desde el menú Administrar y desde el panel de accesos rápidos
REVISIONES
- Verificación "fin de vida útil" (tipo vida): resultado por defecto cambiado a B
en nuevas revisiones (anteriormente NP)
- El comentario con la fecha estimada de caducidad se muestra abierto por defecto
PANEL DE EMPLEADOS
- Botones de acceso rápido a Stock, Caducidades y Sub-usuarios
- Sub-usuarios: redirige a los sub-usuarios de la empresa padre del empleado
si no hay cliente seleccionado
- Botones reorganizados en dos filas con tamaño reducido
--- v2.0 --- 19/05/2026
MIGRACIÓN TÉCNICA
- Migración completa de Bootstrap 3 a Bootstrap 5.3.3
- Migración de PHP 5 a PHP 7+ (mysqli OOP, password_hash, etc.)
- Compatibilidad mantenida con PHP 5.6.40 (entorno de producción)
- Iconos: Glyphicons (BS3) reemplazados por Bootstrap Icons 1.11.3
- jQuery actualizado a 3.7.1, DataTables 1.13.8 con integración BS5
- Adaptación completa de componentes JS: modales, collapses, toggles, datepicker
- Aislamiento de sesión respecto a /revision: nombre de sesión SVGSR2SID y
cookie path /revision2/ para evitar conflictos entre ambas aplicaciones
SISTEMA MULTI-USUARIO POR EMPRESA
- Nueva columna master_id en usuarios: NULL = cuenta maestra, valor = sub-usuario
- Nueva columna permisos (completo/lectura) para controlar acceso de sub-usuarios
- Nueva página de gestión de sub-usuarios por parte del master
- Sub-usuarios comparten los datos de equipos y revisiones de la empresa master
- Acceso configurable por sub-usuario: completo (ver y exportar) o solo lectura
- Los empleados pueden crear sub-usuarios para el cliente que tienen seleccionado
- Enlace "Mis usuarios" en el navbar para cuentas master
- Enlace "Sub-usuarios" en el dropdown de cliente para empleados
- Restricción de visibilidad por ubicación y/o localizador asignable a sub-usuarios
(nuevas columnas filtro_ubicacion y filtro_localizador en usuarios)
- Restricciones aplicadas en: equipos, revisiones, kits de rescate, conjuntos e inicio
- Empleados vinculados a SERVIGASA como empresa master (master_id=35)
LOGO DE EMPRESA EN DOCUMENTOS
- Nueva carpeta logos_clientes/ para almacenar logos por empresa
- Subida de logo desde el perfil del cliente o desde la ficha de usuario (empleados)
- Clientes master pueden subir su propio logo desde "Perfil"
- Imprimir conjunto e imprimir conjuntos: si la empresa tiene logo, se muestra en
la cabecera del PDF en lugar del nombre de empresa en texto
IMPRIMIR CONJUNTO / IMPRIMIR CONJUNTOS
- Cabecera rediseñada: nombre de empresa (o logo) en título principal
- Localizador mostrado centrado en fuente grande entre dos líneas separadoras
- Logo SERVIGASA en el pie de página (centrado, encima del texto)
- FECHA DE CONTROL muestra la fecha de puesta en servicio si es futura
(MAX(primera_util) del conjunto vs. fecha actual)
- Rutas de imágenes convertidas a absolutas (dirname(__FILE__)) para compatibilidad
en producción
PÁGINA DE INICIO (dashboard)
- Corregido bug que excluía equipos del conteo por INNER JOIN innecesario con normativas
- Contadores de aptos, no aptos, pendientes, ausentes y caducados ahora reflejan
el total real de equipos de la empresa
- Filtros de ubicación y localizador aplicados también a los contadores del dashboard
- Sub-usuarios con restricciones solo ven datos de su zona asignada
REVISIONES Y EQUIPOS
- Al crear una revisión de tipo "P. en servicio" se actualiza automáticamente
la fecha de primera puesta en servicio (primera_util) del equipo
- Equipos dados como NO APTO (apto=0) no cambian de estado al crear una nueva
revisión (evita que el cron los marque posteriormente como CADUCADO)
CORRECCIONES DE BUGS
- Corregido ALTER TABLE con sintaxis IF NOT EXISTS (MySQL 8+)
incompatible con MySQL 5.7; columna autor añadida correctamente
- Variables $modelos y $carros inicializadas antes del bucle en el listado de equipos
- Búsqueda avanzada: acceso a $_SESSION['cliente'] protegido con isset()
- Empleados no pueden eliminar otros empleados ni a sí mismos
- Cookies de "Recordar mis datos" limitadas a path /revision2/
CONTROL DE ACCESO
- Nuevas funciones helper puede_ver_cliente() y puede_exportar()
reemplazando +16 comprobaciones manuales dispersas por el código
- filtro_equipo_sql() para aplicar restricciones de sub-usuarios de forma centralizada
- Sub-usuarios de solo lectura no ven botones de acción en listado de equipos
INTERFAZ
- "Mi contraseña" renombrado a "Perfil" en el menú de usuario
- Reconocimiento de texto en fotos de etiquetas de equipo (OCR)
- Búsqueda avanzada de equipos mejorada
- Página de inicio con resumen visual de estado de la flota (dashboard)
- Conjuntos de equipos: nueva vista y generación de PDF por localizador
--- v1.93--- 15/01/2020
Añadida opción de búsqueda por referencia/nº de serie
Añadidos cambios generales de control de usuarios en "panel de control"
Añadida sección de otros en las fichas de revisión
--- v1.92--- 29/10/2019
Añadida pagina para empleados de control de EPIs y cursos "selección de programas"
redireccionadas revisiones a nuevo "panel de control"
--- v1.91--- 15/02/2019
Añadida opción de instalación de cookies para iniciar sesión.
El botón "Volver" recupera la última búsqueda realizada en la gestión de equipos con los resultados actualizados.
--- v1.9--- 27/11/2018
Diseño mejorado para reducir el tamaño de tablas y formularios.
Foco automatico en el primer campo del formulario al abrir una búsqueda.
Ocultación automática de los formularios al realizar una búsqueda.
Posibilidad de buscar con la tecla "INTRO".
NO APTO automático al marcar una verificación como D.
Revisiones ordenadas por Referencia en información de EPI.
Solucionado bug en ordenación de revisiones por fecha.
Código QR en Fichas de Revisión para acceder al informe web (requiere autenticación).
Código de colores en estado de verificaciones de las fichas de revisión. (Solo español).
Mensaje de confirmación al guardar datos de equipos y revisiones.
Advertencia al duplicar equipos sin cambiar el número de serie.
Datos de longitud para cada revisión (no retroactivo), para equipos con posibilidad de ser recortados.
Eliminado el campo "Localización" siendo reemplazado por "Ubicación".
--- v1.83--- 07/09/2017
Nueva funcion de copiado para dar de alta equipos en base a equipos existentes.
Limitada la posibilidad de realizar varias revisiones de un equipo el mismo día.
--- v1.82--- 06/06/2017
Los listados ahora recuerdan el número de registros mostrados por página durante la misma sesión.
Las imágenes de los anexos ya no incluyen el nombre del archivo en el pie de foto.
Aviso en caso de que el usuario pulse el botón PDF sin revisiones seleccionadas.
--- v1.81--- 12/05/2017
Añadido listado de autocompletado de empresas instaladoras y de mantenimiento para los campos correspondientes en la edición de equipos.
--- v1.8--- 02/03/2017
Redirección a la página de origen tras login.
Acceso directo mediante enlace a informacion de equipos, informacion de revisiones y fichas. (Posibilidad de acceso directo mediante código QR)
Selección automática de cliente al acceder mediante enlace con cuenta de empleado.
Nuevo estado "pendiente" para equipos con revisión caducada.
Cambios de interfaz y usabilidad:
-Columna "Estado" mostrada por defecto en listado de equipos
-Cambiados botones de "Imprimir" por "Descargar PDF"
-Menú superior desplegable con el nombre del cliente seleccionado.
Limpieza de código
--- v1.73--- 17/02/2017
Añadida opcion de impresión de certificados de kit de rescate para los propietarios.
Nuevo campo en búsqueda y listados "Ubicación" para instalaciones fijas.
Campo Anticaídas/Carro autocompletado.
--- v1.72--- 16/12/2016
Solucionado bug ordenación por fecha.
--- v1.71--- 22/09/2016
Selección de lenguaje para las fichas por cliente.
Plantillas de revisión en inglés.
Formatos actualizados.
--- v1.70--- 12/09/2016
Formularios de búsqueda colapsables.
Añadida función de comentarios para los empleados.
Correción de varios bugs.
--- v1.61--- 26/07/2016
Añadido nuevo tipo de revisión Semestral para equipos utilizados en instalaciones eléctricas.
--- v1.60--- 15/07/2016
Rediseño del programa y la Base de Datos para mantener integridad con numeros de serie duplicados.
Busqueda de equipos por rango de fechas de última revisión.
Nueva vista resumen de listado de revisiones, agrupando por normativa.
Cambiado el sistema de multiselección mediante sistema operativo (CTRL/shift+click) en listado de revisiones.
Añadidos listados de autocompletado en los campos "Estructura de soporte" y "Ubicación".
Eliminado recursivo de los anexos y revisiones al eliminar un equipo (usar con cuidado la opción de eliminar).
Mejora de la busqueda de empresas enlazada con el sistema de facturación.
--- v1.50--- 05/07/2016
Nuevo módulo para kits de rescate.
Mejora en búsqueda parcial por numero serie.
--- v1.45--- 24/06/2016
Redimensionado automático de las imágenes de los anexos a 640x480.
Copiado de anexo de la revisión anterior si existiese.
Solucionado bug en la copia de datos desde revisión anterior.
--- v1.44--- 17/06/2016
Envío mensual de mail recordando caducidad de revisiones.
--- v1.43--- 31/05/2016
Nuevos formatos para redes de seguridad y para EPIS con longitud (cuerdas, evacuadores, etc)
--- v1.42--- 30/05/2016
Nuevos campos en listado de revisiones: Localizador, Localización, Tipo de equipo, Tipo de revisión...
Opción de editar un EPI al intentar introducir un NS existente si pertenece al mismo propietario.
--- v1.41--- 19/04/2016
Conversión automática de numero de serie MMAA_NNN[N] para equipos Camp y Miguel Miranda con numero de serie corto siempre que se introduzca fecha de fabricación.
Modificada plantilla de lineas de vida ampliando el espacio para Ubicación.
Corregidos varios bugs en guardado de normativas y anexos.
---v1.40--- 22/03/2016
Añadidas plantillas y esquema de datos para líneas de vida y puntos de anclaje fijos.
Cambio automatico de esquema al seleccionar la normativa.
Añadido pequeño script para convertir automaticamente los equpos de Camp
con numero de serie con formato NNNN a MMAA_NNNN para evitar duplicidades en numero de serie.
---v1.30--- 16/03/2016
Añadida función listado desplegable en campos Localizador y Localización.
Añadida función de listados desplegables para campos Marca y Modelo en función de los equipos en la base de datos.
---v1.2--- 11/03/2016
Añadidos anexos con imágenes.
---v1.11--- 04/02/2016
Añadido footer con Copyright y versión.
Corrección de fallos y limpieza de código
---v1.1--- 26/02/2016
Añadidos selectores de fecha con rango variable (MM/AAAA)
Añadida funcion autocompletar en cascada para fechas
Corrección de varios bugs en formularios
Exportación a excel y copia limitadas a columnas visibles
Corregido problema con impresión multiple de fichas
---v1.0---
Primera versión en producción