-- ============================================
-- Script SQL para crear la tabla de versionamiento
-- de Solicitudes Adicionales.
--
-- Cada vez que se edita una solicitud adicional
-- (SolicitudesAdicionalesController::editAction), se guarda
-- automáticamente una copia completa del estado previo en esta tabla,
-- para conservar el histórico de todas las ediciones realizadas.
-- ============================================

CREATE TABLE IF NOT EXISTS `solicitudes_adicionales_versions` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `IdSolicitud` int(11) NOT NULL,
  `Periodo` varchar(100) DEFAULT NULL,
  `FechaInicio` date DEFAULT NULL,
  `FechaFin` date DEFAULT NULL,
  `Honorarios` varchar(100) DEFAULT NULL,
  `NumeroMaterial` varchar(100) DEFAULT NULL,
  `NivelAcademico` varchar(100) DEFAULT NULL,
  `NoDocumento` varchar(50) DEFAULT NULL,
  `Nombre` varchar(255) DEFAULT NULL,
  `Correo` varchar(255) DEFAULT NULL,
  `HonorariosPar` varchar(100) DEFAULT NULL,
  `NoDocumentoPar` varchar(50) DEFAULT NULL,
  `NombrePar` varchar(255) DEFAULT NULL,
  `CorreoPar` varchar(255) DEFAULT NULL,
  `Contacto` varchar(100) DEFAULT NULL,
  `ContactoPar` varchar(100) DEFAULT NULL,
  `Modulo` varchar(255) DEFAULT NULL,
  `Area` varchar(255) DEFAULT NULL,
  `ProgramaAcademico` varchar(255) DEFAULT NULL,
  `ActividadRealizar` text,
  `Ceco` varchar(50) DEFAULT NULL,
  `DescripcionCeco` varchar(255) DEFAULT NULL,
  `Observaciones` text,
  `ObservacionPar` text,
  `ObservacionAprobador` text,
  `IdAprobador` int(11) DEFAULT NULL,
  `ObservacionAprobadorPar` text,
  `IdAprobadorPar` int(11) DEFAULT NULL,
  `ObservacionAprobadorTalento` text,
  `IdAprobadorTalento` int(11) DEFAULT NULL,
  `FechaAprobadorTalento` datetime DEFAULT NULL,
  `ObservacionAprobadorParTalento` text,
  `IdAprobadorParTalento` int(11) DEFAULT NULL,
  `FechaAprobadorParTalento` datetime DEFAULT NULL,
  `CiudadExpedicionPar` varchar(255) DEFAULT NULL,
  `DireccionPar` varchar(255) DEFAULT NULL,
  `TipoCandidato` varchar(100) DEFAULT NULL,
  `TipoCandidatoPar` varchar(100) DEFAULT NULL,
  `EstadoProceso` int(11) DEFAULT NULL,
  `EstadoProcesoPar` int(11) DEFAULT NULL,
  `NumeroContrato` varchar(100) DEFAULT NULL,
  `NumeroContratoPar` varchar(100) DEFAULT NULL,
  `OrdenCompra` varchar(100) DEFAULT NULL,
  `Radicacion` varchar(100) DEFAULT NULL,
  `Solped` varchar(100) DEFAULT NULL,
  `SolpedPar` varchar(100) DEFAULT NULL,
  `Estado` tinyint(4) DEFAULT 1,
  `UsuarioRegistro` int(11) DEFAULT NULL,
  `FechaRegistro` datetime DEFAULT NULL,
  `FechaAprobacion` datetime DEFAULT NULL,
  `FechaAprobacionTalento` datetime DEFAULT NULL,
  `FechaAprobacionPar` datetime DEFAULT NULL,
  `FechaAprobacionParTalento` datetime DEFAULT NULL,
  `FechaRecibidoContratacion` datetime DEFAULT NULL,
  `IdRecibidoContratacion` varchar(100) DEFAULT NULL,
  `FechaContratacion` datetime DEFAULT NULL,
  `IdContratacion` varchar(100) DEFAULT NULL,
  `FechaContratacionPar` datetime DEFAULT NULL,
  `IdContratacionPar` varchar(100) DEFAULT NULL,
  `IdAprobacionPago` varchar(100) DEFAULT NULL,
  `FechaAprobacionPago` datetime DEFAULT NULL,
  `IdAprobacionPagoPar` varchar(100) DEFAULT NULL,
  `FechaAprobacionPagoPar` datetime DEFAULT NULL,
  `Minuta` varchar(255) DEFAULT NULL,
  `Respuestas` text,
  `IdUsuarioVersion` int(11) DEFAULT NULL,
  `FechaVersion` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `idx_id_solicitud` (`IdSolicitud`),
  KEY `idx_id_usuario_version` (`IdUsuarioVersion`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- Vista con JOIN a usuarios, para resolver el nombre de quien hizo
-- cada edición (IdUsuarioVersion -> usuarios.Id) sin guardar el nombre
-- como texto plano. Usada únicamente por SolicitudesAdicionalesVersionsModel
-- para listados (getAllView/getAll); el detalle de una versión puntual
-- sigue leyendo de la tabla base (`solicitudes_adicionales_versions`).
-- ============================================

CREATE OR REPLACE VIEW `vista_solicitudes_adicionales_versions` AS
SELECT
  sav.*,
  TRIM(CONCAT(COALESCE(u.Nombre, ''), ' ', COALESCE(u.Apellido, ''))) AS `UsuarioVersionNombre`
FROM `solicitudes_adicionales_versions` sav
LEFT JOIN `usuarios` u ON u.Id = sav.IdUsuarioVersion;
