/* Configuración general más excepciones por solicitud. Los cuatro ALTER se basan en las definiciones instaladas y respaldadas el 18/09/2026. Los tres PAs de configuración se ejecutan desde el servicio con transacción y bitácora. */ ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudFraccionamientoList @CveFraccionamiento int, @CveFraccionamientoEtapa int = NULL, @CveTipoTramite int = NULL, @IncluirRequisitos bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; SELECT @CveCliente = F.CveCliente FROM dbo.Fraccionamientos AS F WHERE F.CveFraccionamiento = @CveFraccionamiento; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'El fraccionamiento seleccionado no existe.'; SET @ErrorTipo = 2; RETURN; END; IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; IF @CveFraccionamientoEtapa IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.FraccionamientosEtapas AS E WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa AND E.CveFraccionamiento = @CveFraccionamiento ) BEGIN SET @ErrorMostrar = 'La etapa seleccionada no pertenece al fraccionamiento.'; SET @ErrorTipo = 2; RETURN; END; ;WITH SolicitudesBase AS ( SELECT S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, E.Orden AS OrdenEtapa, S.CveTipoTramite, TT.TipoTramite, TT.Orden AS OrdenTramite, S.CveEstatusSolicitud, ES.EsFinal FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveFraccionamiento = @CveFraccionamiento AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa) AND (@CveTipoTramite IS NULL OR S.CveTipoTramite = @CveTipoTramite) ), Configuracion AS ( SELECT S.CveSolicitud, G.CveTipoDocumento, G.EsRequerido, G.EsCliente, G.TieneVigencia, G.Orden, G.EsActivo FROM SolicitudesBase AS S INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite WHERE NOT EXISTS ( SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P WHERE P.CveSolicitud = S.CveSolicitud AND P.CveTipoDocumento = G.CveTipoDocumento ) UNION ALL SELECT P.CveSolicitud, P.CveTipoDocumento, P.EsRequerido, P.EsCliente, P.TieneVigencia, P.Orden, P.EsActivo FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P INNER JOIN SolicitudesBase AS S ON S.CveSolicitud = P.CveSolicitud ), Filas AS ( /* Documentos que sí están cargados. */ SELECT DS.CveDocumentoSolicitud, SB.CveSolicitud, SB.Folio, SB.CveCliente, SB.CveFraccionamiento, SB.CveFraccionamientoEtapa, SB.Etapa, SB.OrdenEtapa, SB.CveTipoTramite, SB.TipoTramite, SB.OrdenTramite, DS.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DR.EsCliente, DR.TieneVigencia, CONVERT(bit, CASE WHEN DR.EsActivo = 1 THEN DR.EsRequerido ELSE 0 END) AS EsRequerido, DS.FechaDocumento, DS.FechaVencimiento, DS.NombreArchivo, DS.ComentarioAdministrativo AS Nota, DS.EsAprobado, DS.FechaRevision, SB.EsFinal AS EsFinalSolicitud, CONVERT(bit, CASE WHEN NULLIF(LTRIM(RTRIM(DS.RutaArchivo)), '') IS NOT NULL AND NULLIF(LTRIM(RTRIM(DS.NombreArchivo)), '') IS NOT NULL THEN 1 ELSE 0 END) AS TieneArchivo, CONVERT(bit, CASE WHEN SB.EsFinal = 0 AND DS.CveTipoDocumento <> 2 THEN 1 ELSE 0 END) AS PuedeActualizarArchivo, CONVERT(bit, CASE WHEN @EsSuperUsuario = 1 AND SB.EsFinal = 0 THEN 1 ELSE 0 END) AS PuedeRevisar, CONVERT(bit, CASE WHEN DS.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS EsGis, CONVERT(bit, CASE WHEN DS.CveTipoDocumento = 2 AND SB.EsFinal = 0 THEN 1 ELSE 0 END) AS PuedeAdministrarGis, CASE WHEN DS.EsAprobado = 1 THEN 'Aprobado' WHEN DS.EsAprobado = 0 THEN 'Rechazado' ELSE 'Pendiente de revisión' END AS EstadoDocumento, ISNULL(DR.Orden, 2147483647) AS OrdenDocumento FROM SolicitudesBase AS SB INNER JOIN dbo.Tra_DocumentosSolicitud AS DS ON DS.CveSolicitud = SB.CveSolicitud AND DS.EsActivo = 1 INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DS.CveTipoDocumento LEFT JOIN Configuracion AS DR ON DR.CveSolicitud = SB.CveSolicitud AND DR.CveTipoDocumento = DS.CveTipoDocumento UNION ALL /* Requeridos que todavía no se han cargado. */ SELECT 0 AS CveDocumentoSolicitud, SB.CveSolicitud, SB.Folio, SB.CveCliente, SB.CveFraccionamiento, SB.CveFraccionamientoEtapa, SB.Etapa, SB.OrdenEtapa, SB.CveTipoTramite, SB.TipoTramite, SB.OrdenTramite, DR.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DR.EsCliente, DR.TieneVigencia, DR.EsRequerido, CAST(NULL AS date) AS FechaDocumento, CAST(NULL AS date) AS FechaVencimiento, NULL AS NombreArchivo, NULL AS Nota, CAST(NULL AS bit) AS EsAprobado, CAST(NULL AS datetime) AS FechaRevision, SB.EsFinal AS EsFinalSolicitud, CONVERT(bit, 0) AS TieneArchivo, CONVERT(bit, CASE WHEN DR.CveTipoDocumento <> 2 THEN 1 ELSE 0 END) AS PuedeActualizarArchivo, CONVERT(bit, 0) AS PuedeRevisar, CONVERT(bit, CASE WHEN DR.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS EsGis, CONVERT(bit, CASE WHEN DR.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS PuedeAdministrarGis, 'Sin cargar' AS EstadoDocumento, DR.Orden AS OrdenDocumento FROM SolicitudesBase AS SB INNER JOIN Configuracion AS DR ON DR.CveSolicitud = SB.CveSolicitud AND DR.EsActivo = 1 AND (@IncluirRequisitos = 1 OR DR.EsRequerido = 1 OR EXISTS (SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P WHERE P.CveSolicitud = SB.CveSolicitud AND P.CveTipoDocumento = DR.CveTipoDocumento)) INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DR.CveTipoDocumento AND TD.EsActivo = 1 WHERE (@IncluirRequisitos = 1 OR SB.EsFinal = 0) AND NOT EXISTS ( SELECT 1 FROM dbo.Tra_DocumentosSolicitud AS DS WHERE DS.CveSolicitud = SB.CveSolicitud AND DS.CveTipoDocumento = DR.CveTipoDocumento AND DS.EsActivo = 1 ) ) SELECT CveDocumentoSolicitud, CveSolicitud, Folio, CveCliente, CveFraccionamiento, CveFraccionamientoEtapa, Etapa, CveTipoTramite, TipoTramite, CveTipoDocumento, TipoDocumento, EsCliente, TieneVigencia, FechaDocumento, FechaVencimiento, EsRequerido, NombreArchivo, Nota, EsAprobado, FechaRevision, EsFinalSolicitud, TieneArchivo, PuedeActualizarArchivo, PuedeRevisar, EsGis, PuedeAdministrarGis, EstadoDocumento FROM Filas ORDER BY OrdenEtapa, Etapa, OrdenTramite, TipoTramite, OrdenDocumento, TipoDocumento, CveDocumentoSolicitud; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar los documentos del fraccionamiento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudFraccionamientoList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudUploadContextGet @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; DECLARE @EsFinal bit; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; SELECT @CveCliente = S.CveCliente, @EsFinal = ES.EsFinal FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; /* Esto valida que el usuario tenga acceso a los datos del cliente. No es una validación de catálogo. */ IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; -- La disponibilidad por rol y estatus se comprueba en el servicio C#. /* Sólo se valida que el tipo de documento exista y esté activo. NO se exige que aparezca como requerido. */ IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento AS TD WHERE TD.CveTipoDocumento = @CveTipoDocumento AND TD.EsActivo = 1 ) BEGIN SET @ErrorMostrar = 'El tipo de documento no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; SELECT ISNULL(DS.CveDocumentoSolicitud, 0) AS CveDocumentoSolicitud, S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, S.CveTipoTramite, TT.TipoTramite, TD.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, COALESCE(P.EsCliente, DR.EsCliente) AS EsCliente, COALESCE(P.TieneVigencia, DR.TieneVigencia) AS TieneVigencia, DS.FechaDocumento AS FechaDocumentoAnterior, DS.FechaVencimiento AS FechaVencimientoAnterior, TD.ExtensionesPermitidas, TD.TamanoMaximoMb, ES.EsFinal AS EsFinalSolicitud, DS.NombreArchivo AS NombreArchivoAnterior, DS.NombreArchivoFisico AS NombreArchivoFisicoAnterior, DS.RutaArchivo AS RutaArchivoAnterior, DS.ContentType AS ContentTypeAnterior, DS.TamanoBytes AS TamanoBytesAnterior, DS.ComentarioCliente AS ComentarioClienteAnterior, DS.ComentarioAdministrativo AS ComentarioAdministrativoAnterior, DS.EsAprobado AS EsAprobadoAnterior, DS.CveUsuarioRevisa AS CveUsuarioRevisaAnterior, DS.FechaRevision AS FechaRevisionAnterior FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = @CveTipoDocumento LEFT JOIN dbo.Tra_TiposTramiteDocumento AS DR ON DR.CveTipoTramite = S.CveTipoTramite AND DR.CveTipoDocumento = TD.CveTipoDocumento LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud AND P.CveTipoDocumento = TD.CveTipoDocumento LEFT JOIN dbo.Tra_DocumentosSolicitud AS DS ON DS.CveSolicitud = S.CveSolicitud AND DS.CveTipoDocumento = @CveTipoDocumento WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento AND ( (P.CveSolicitud IS NOT NULL AND P.EsActivo = 1) OR (P.CveSolicitud IS NULL AND DR.CveTipoDocumento IS NOT NULL) ); SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar el documento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudUploadContextGet' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudSave @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @NombreArchivo varchar(255), @NombreArchivoFisico varchar(255), @RutaArchivo varchar(1000), @ContentType varchar(100) = NULL, @TamanoBytes bigint = NULL, @ComentarioCliente varchar(1000) = NULL, @FechaDocumento date = NULL, @FechaVencimiento date = NULL, @ActualizarFechas bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SET @NombreArchivo = NULLIF(LTRIM(RTRIM(@NombreArchivo)), ''); SET @NombreArchivoFisico = NULLIF(LTRIM(RTRIM(@NombreArchivoFisico)), ''); SET @RutaArchivo = NULLIF(LTRIM(RTRIM(@RutaArchivo)), ''); SET @ContentType = NULLIF(LTRIM(RTRIM(@ContentType)), ''); SET @ComentarioCliente = NULLIF(LTRIM(RTRIM(@ComentarioCliente)), ''); IF @NombreArchivo IS NULL OR @NombreArchivoFisico IS NULL OR @RutaArchivo IS NULL BEGIN SET @ErrorMostrar = 'Los datos del archivo están incompletos.'; SET @ErrorTipo = 2; RETURN; END; DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; DECLARE @EsFinal bit; DECLARE @CveFraccionamientoEtapa int; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; SELECT @CveCliente = S.CveCliente, @EsFinal = ES.EsFinal, @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; /* Se conserva la autorización sobre los datos del fraccionamiento. No se agrega ninguna validación de catálogo. */ IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; -- La disponibilidad por rol y estatus se comprueba en el servicio C#. /* Sólo se valida que el tipo exista y esté activo. NO se exige EsRequerido. */ IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento AS TD WHERE TD.CveTipoDocumento = @CveTipoDocumento AND TD.EsActivo = 1 ) BEGIN SET @ErrorMostrar = 'El tipo de documento no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion WHERE CveSolicitud = @CveSolicitud AND CveTipoDocumento = @CveTipoDocumento AND EsActivo = 1 ) AND NOT EXISTS ( SELECT 1 FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_TiposTramiteDocumento AS R ON R.CveTipoTramite = S.CveTipoTramite AND R.CveTipoDocumento = @CveTipoDocumento WHERE S.CveSolicitud = @CveSolicitud AND NOT EXISTS ( SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P WHERE P.CveSolicitud = S.CveSolicitud AND P.CveTipoDocumento = @CveTipoDocumento ) ) BEGIN SET @ErrorMostrar = 'El documento no está habilitado para esta solicitud.'; SET @ErrorTipo = 2; RETURN; END; DECLARE @CveDocumentoSolicitud int; DECLARE @NombreArchivoAnterior varchar(255); DECLARE @NombreArchivoFisicoAnterior varchar(255); DECLARE @RutaArchivoAnterior varchar(1000); DECLARE @ContentTypeAnterior varchar(100); DECLARE @TamanoBytesAnterior bigint; DECLARE @ComentarioClienteAnterior varchar(1000); DECLARE @ComentarioAdministrativoAnterior varchar(1000); DECLARE @EsAprobadoAnterior bit; DECLARE @CveUsuarioRevisaAnterior int; DECLARE @FechaRevisionAnterior datetime; DECLARE @EsNuevo bit = 0; DECLARE @FechaDocumentoAnterior date; DECLARE @FechaVencimientoAnterior date; SELECT @CveDocumentoSolicitud = DS.CveDocumentoSolicitud, @NombreArchivoAnterior = DS.NombreArchivo, @NombreArchivoFisicoAnterior = DS.NombreArchivoFisico, @RutaArchivoAnterior = DS.RutaArchivo, @ContentTypeAnterior = DS.ContentType, @TamanoBytesAnterior = DS.TamanoBytes, @ComentarioClienteAnterior = DS.ComentarioCliente, @ComentarioAdministrativoAnterior = DS.ComentarioAdministrativo, @EsAprobadoAnterior = DS.EsAprobado, @CveUsuarioRevisaAnterior = DS.CveUsuarioRevisa, @FechaRevisionAnterior = DS.FechaRevision, @FechaDocumentoAnterior = DS.FechaDocumento, @FechaVencimientoAnterior = DS.FechaVencimiento FROM dbo.Tra_DocumentosSolicitud AS DS WITH (UPDLOCK, HOLDLOCK) WHERE DS.CveSolicitud = @CveSolicitud AND DS.CveTipoDocumento = @CveTipoDocumento; IF @CveDocumentoSolicitud IS NULL BEGIN INSERT INTO dbo.Tra_DocumentosSolicitud ( CveSolicitud, CveFraccionamientoEtapa, FechaDocumento, FechaVencimiento, CveTipoDocumento, NombreArchivo, NombreArchivoFisico, RutaArchivo, ContentType, TamanoBytes, ComentarioCliente, ComentarioAdministrativo, EsAprobado, CveUsuarioCarga, CveUsuarioRevisa, FechaRevision ) VALUES ( @CveSolicitud, @CveFraccionamientoEtapa, @FechaDocumento, @FechaVencimiento, @CveTipoDocumento, @NombreArchivo, @NombreArchivoFisico, @RutaArchivo, @ContentType, @TamanoBytes, @ComentarioCliente, NULL, NULL, @CveUsuarioEjecuta, NULL, NULL ); SET @CveDocumentoSolicitud = CONVERT(int, SCOPE_IDENTITY()); SET @EsNuevo = 1; END ELSE BEGIN /* Al reemplazar/corregir el archivo se elimina la revisión. */ UPDATE dbo.Tra_DocumentosSolicitud SET CveFraccionamientoEtapa = @CveFraccionamientoEtapa, FechaDocumento = CASE WHEN @ActualizarFechas = 1 THEN @FechaDocumento ELSE FechaDocumento END, FechaVencimiento = CASE WHEN @ActualizarFechas = 1 THEN @FechaVencimiento ELSE FechaVencimiento END, EsActivo = 1, NombreArchivo = @NombreArchivo, NombreArchivoFisico = @NombreArchivoFisico, RutaArchivo = @RutaArchivo, ContentType = @ContentType, TamanoBytes = @TamanoBytes, ComentarioCliente = @ComentarioCliente, ComentarioAdministrativo = NULL, EsAprobado = NULL, CveUsuarioCarga = @CveUsuarioEjecuta, CveUsuarioRevisa = NULL, FechaRevision = NULL WHERE CveDocumentoSolicitud = @CveDocumentoSolicitud; END; SELECT DS.CveDocumentoSolicitud, S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, S.CveTipoTramite, TT.TipoTramite, DS.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DS.FechaDocumento, DS.FechaVencimiento, @FechaDocumentoAnterior AS FechaDocumentoAnterior, @FechaVencimientoAnterior AS FechaVencimientoAnterior, DS.NombreArchivo, DS.NombreArchivoFisico, DS.RutaArchivo, DS.ContentType, DS.TamanoBytes, DS.ComentarioCliente, DS.ComentarioAdministrativo, DS.EsAprobado, DS.CveUsuarioRevisa, DS.FechaRevision, @EsNuevo AS EsNuevo, @NombreArchivoAnterior AS NombreArchivoAnterior, @NombreArchivoFisicoAnterior AS NombreArchivoFisicoAnterior, @RutaArchivoAnterior AS RutaArchivoAnterior, @ContentTypeAnterior AS ContentTypeAnterior, @TamanoBytesAnterior AS TamanoBytesAnterior, @ComentarioClienteAnterior AS ComentarioClienteAnterior, @ComentarioAdministrativoAnterior AS ComentarioAdministrativoAnterior, @EsAprobadoAnterior AS EsAprobadoAnterior, @CveUsuarioRevisaAnterior AS CveUsuarioRevisaAnterior, @FechaRevisionAnterior AS FechaRevisionAnterior FROM dbo.Tra_DocumentosSolicitud AS DS INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = DS.CveSolicitud INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DS.CveTipoDocumento WHERE DS.CveDocumentoSolicitud = @CveDocumentoSolicitud; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al guardar el documento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudSave' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_TipoDocumentoDelete @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF EXISTS (SELECT 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoDocumento = @CveTipoDocumento) OR EXISTS (SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion WHERE CveTipoDocumento = @CveTipoDocumento) OR EXISTS (SELECT 1 FROM dbo.Tra_DocumentosSolicitud WHERE CveTipoDocumento = @CveTipoDocumento) BEGIN SELECT @ErrorMostrar = 'El tipo de documento tiene información relacionada y no puede eliminarse. Puede desactivarlo.', @ErrorTipo = 2; RETURN; END; DELETE dbo.Tra_TiposDocumento WHERE CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al eliminar el tipo de documento; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoDocumentoDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE()); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionList @CveFraccionamiento int, @CveSolicitud int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_Solicitudes WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento ) BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; SELECT S.CveSolicitud, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, S.Folio, E.Etapa, T.TipoTramite, ES.EsFinal AS EsFinalSolicitud, D.CveTipoDocumento, D.TipoDocumento, COALESCE(P.EsRequerido, G.EsRequerido, CONVERT(bit, 0)) AS EsRequerido, COALESCE(P.EsCliente, G.EsCliente, CONVERT(bit, 1)) AS EsCliente, COALESCE(P.TieneVigencia, G.TieneVigencia, CONVERT(bit, 0)) AS TieneVigencia, COALESCE(P.Orden, G.Orden, 0) AS Orden, COALESCE(P.EsActivo, G.EsActivo, CONVERT(bit, 1)) AS EsActivo, CONVERT(bit, CASE WHEN P.CveSolicitud IS NOT NULL THEN 1 ELSE 0 END) AS EsParticular, CONVERT(bit, CASE WHEN P.CveSolicitud IS NOT NULL OR G.CveTipoDocumento IS NOT NULL THEN 1 ELSE 0 END) AS EsConfigurado FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud CROSS JOIN dbo.Tra_TiposDocumento AS D LEFT JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite AND G.CveTipoDocumento = D.CveTipoDocumento LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud AND P.CveTipoDocumento = D.CveTipoDocumento WHERE S.CveSolicitud = @CveSolicitud AND (D.EsActivo = 1 OR P.CveSolicitud IS NOT NULL OR G.CveTipoDocumento IS NOT NULL) ORDER BY COALESCE(P.Orden, G.Orden, 0), D.TipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionSave @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @EsRequerido bit, @EsCliente bit, @TieneVigencia bit, @Orden int, @EsActivo bit, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_Solicitudes WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento ) BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento WHERE CveTipoDocumento = @CveTipoDocumento ) BEGIN SET @ErrorMostrar = 'Seleccione un tipo de documento válido.'; SET @ErrorTipo = 2; RETURN; END; IF EXISTS ( SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion WITH (UPDLOCK, HOLDLOCK) WHERE CveSolicitud = @CveSolicitud AND CveTipoDocumento = @CveTipoDocumento ) BEGIN UPDATE dbo.Tra_SolicitudDocumentoConfiguracion SET EsRequerido = @EsRequerido, EsCliente = @EsCliente, TieneVigencia = @TieneVigencia, Orden = @Orden, EsActivo = @EsActivo WHERE CveSolicitud = @CveSolicitud AND CveTipoDocumento = @CveTipoDocumento; END ELSE BEGIN INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion (CveSolicitud, CveTipoDocumento, EsRequerido, EsCliente, TieneVigencia, Orden, EsActivo) VALUES (@CveSolicitud, @CveTipoDocumento, @EsRequerido, @EsCliente, @TieneVigencia, @Orden, @EsActivo); END; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionSave'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionDelete @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_Solicitudes WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento ) BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; DELETE FROM dbo.Tra_SolicitudDocumentoConfiguracion WHERE CveSolicitud = @CveSolicitud AND CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO