286 lines
No EOL
26 KiB
Transact-SQL
286 lines
No EOL
26 KiB
Transact-SQL
USE [SIGPC]
|
||
GO
|
||
/****** Object: StoredProcedure [dbo].[PA_TRABAJOACTIVIDAD] Script Date: 1/21/2021 9:01:33 AM ******/
|
||
SET ANSI_NULLS ON
|
||
GO
|
||
SET QUOTED_IDENTIFIER ON
|
||
GO
|
||
|
||
|
||
|
||
-- =============================================
|
||
-- Author: Juan Pablo Monge Delgado CR-ATESA 13/07/2020
|
||
-- Create date: 14/02/2018
|
||
-- Description: Carga el último consecutivo obtenido por sigla
|
||
-- Modificado: Juan Pablo Monge Delgado CR-ATESA 13/07/2020
|
||
-- Actualiza el consecutivo en la tabla dependencia
|
||
-- Construye el nombre del documento
|
||
-- Se agrega codigo para el manejo de las transacciones y el aislamiento de recursos para evitar lectura sucia o fantasma.
|
||
-- =============================================
|
||
|
||
|
||
|
||
ALTER PROCEDURE [dbo].[PA_TRABAJOACTIVIDAD]
|
||
@p_status VARCHAR(2) = '' OUTPUT
|
||
,@p_message VARCHAR(500) = '' OUTPUT
|
||
, @FKACTIVIDAD INT
|
||
,@FKREGION INT
|
||
,@FKDEPENDENCIA INT
|
||
,@ANNOINICIO INT
|
||
,@MESINICIO INT
|
||
,@ANNOFINAL INT
|
||
,@MESFINAL INT
|
||
|
||
WITH EXECUTE AS OWNER
|
||
AS
|
||
|
||
|
||
|
||
BEGIN
|
||
--CONFIGURACION DE LA CONSULTA
|
||
SET NOCOUNT ON --ACTIVA EL CONTEO DE REGISTROS QUE SE VERAN AFECTADOS EN LA TRANSACCION
|
||
SET XACT_ABORT ON --SI UNA INSTRUCCION TRANSACT-SQL GENERA UN ERROR EN TIEMPO DE EJECUCION, SE TERMINA TODA LA TRANSACCION Y SE REVIERTE
|
||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ; --NO PERMITE LECTURA DEL REGISTRO ACTUAL, NI MODIFICACION O INSERCION DE OTRO REGISTRO QUE PUDIESE TENER CLAVE DUPLICADA
|
||
BEGIN TRY
|
||
--DECLARACION DE VARIABLES
|
||
DECLARE @ErrorMessage NVARCHAR(4000);
|
||
DECLARE @ErrorSeverity INT;
|
||
DECLARE @ErrorState INT;
|
||
|
||
IF @ANNOFINAL < @ANNOINICIO
|
||
BEGIN
|
||
SET @ANNOFINAL=@ANNOINICIO
|
||
END
|
||
|
||
|
||
DECLARE @DateInicio DATE = CAST('01/'+CONVERT(varchar,@MESINICIO )+'/'+CONVERT(varchar,@ANNOINICIO ) as datetime);
|
||
DECLARE @DateFinal DATE = CAST('01/'+CONVERT(varchar,@MESFINAL )+'/'+CONVERT(varchar,@ANNOFINAL ) as datetime);
|
||
|
||
|
||
BEGIN TRANSACTION --EN CASO DE REALIZAR MODIFICACIONES A LA BASE DE DATOS INSERT UPDATE DELETE
|
||
|
||
IF (@FKACTIVIDAD IS NULL OR @FKACTIVIDAD = 0) OR (@FKDEPENDENCIA IS NULL OR @FKDEPENDENCIA = 0) OR
|
||
(@FKREGION IS NULL OR @FKREGION = 0) OR (@MESINICIO IS NULL OR @MESINICIO = 0) OR
|
||
(@ANNOINICIO IS NULL OR @ANNOINICIO = 0) OR (@MESFINAL IS NULL OR @MESFINAL = 0) OR
|
||
(@ANNOFINAL IS NULL OR @ANNOFINAL = 0)
|
||
BEGIN
|
||
SELECT
|
||
F.ORDENACTIVIDAD
|
||
,COUNT(PKSOLICITUD) AS 'Cantidad de Solicitudes'
|
||
,F.NOMBREACTIVIDAD AS 'Actividad en que se encuentra '
|
||
,
|
||
(
|
||
SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
|
||
FROM t_adm_actividad E INNER JOIN
|
||
t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON C.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd B ON t_dis_solicitud.FKDEPENDENCIASIGDD = B.PKDEPENDENCIASIGDD
|
||
AND A.DESCRIPCIONDEPENDENCIASIGDD = B.DESCRIPCIONDEPENDENCIASIGDD AND E.NOMBREACTIVIDAD = F.NOMBREACTIVIDAD
|
||
|
||
WHERE (t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE
|
||
(FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) IN (3))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND C.FKESTADO IN (5,8)
|
||
|
||
) AS 'Duración promedio por actividad'
|
||
|
||
,A.DESCRIPCIONDEPENDENCIASIGDD AS 'Oficina'
|
||
,t_adm_region.DESCRIPCIONREGION AS 'Región'
|
||
,
|
||
(
|
||
SELECT AVG(datediff(DD,FECHAINSERTASOLICITUD,[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
|
||
FROM t_adm_actividad E
|
||
INNER JOIN t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON C.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd B ON t_dis_solicitud.FKDEPENDENCIASIGDD = B.PKDEPENDENCIASIGDD
|
||
AND A.DESCRIPCIONDEPENDENCIASIGDD = B.DESCRIPCIONDEPENDENCIASIGDD AND FKACTIVIDAD = 9
|
||
|
||
WHERE (t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE (FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) IN (3))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND C.FKESTADO IN (5,8)
|
||
|
||
|
||
) 'Duración Promedio por solicitud',
|
||
CAST(t_dis_solicitud.FECHAINSERTASOLICITUD AS date) as 'Fecha de Inicio Consulta',
|
||
CAST(t_dis_solicitud.FECHAINSERTASOLICITUD AS date) as 'Fecha de Finalización Consulta'
|
||
FROM t_adm_actividad F
|
||
INNER JOIN t_sgm_responsableactividad D ON F.PKACTIVIDAD = D.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON D.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd A ON t_dis_solicitud.FKDEPENDENCIASIGDD = A.PKDEPENDENCIASIGDD
|
||
INNER JOIN t_adm_region ON A.FKREGION = t_adm_region.PKREGION
|
||
|
||
WHERE (dbo.t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE
|
||
(FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
--AND [FECHACANCELARSOLICITUD] <= CAST(CONVERT(varchar, 2025)+'-'+CONVERT(varchar, 05)+'-01' AS datetime) --Filtro
|
||
--AND [FECHACANCELARSOLICITUD] >= CAST(CONVERT(varchar, 2015)+'-'+CONVERT(varchar, 05)+'-01' AS datetime) --Filtro
|
||
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) NOT IN (3,5))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND D.FKESTADO NOT IN (5,8)
|
||
|
||
|
||
GROUP BY F.ORDENACTIVIDAD , DESCRIPCIONREGION,DESCRIPCIONDEPENDENCIASIGDD,F.NOMBREACTIVIDAD, t_dis_solicitud.FECHAINSERTASOLICITUD
|
||
order by F.ORDENACTIVIDAD ASC ,DESCRIPCIONDEPENDENCIASIGDD DESC
|
||
END
|
||
ELSE
|
||
|
||
BEGIN
|
||
|
||
SELECT
|
||
F.ORDENACTIVIDAD
|
||
,COUNT(PKSOLICITUD) AS 'Cantidad de Solicitudes'
|
||
,F.NOMBREACTIVIDAD AS 'Actividad en que se encuentra '
|
||
,
|
||
(
|
||
SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
|
||
FROM t_adm_actividad E INNER JOIN
|
||
t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON C.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd B ON t_dis_solicitud.FKDEPENDENCIASIGDD = B.PKDEPENDENCIASIGDD
|
||
AND A.DESCRIPCIONDEPENDENCIASIGDD = B.DESCRIPCIONDEPENDENCIASIGDD AND E.NOMBREACTIVIDAD = F.NOMBREACTIVIDAD
|
||
|
||
WHERE (t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE
|
||
(FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) IN (3))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND C.FKESTADO IN (5,8)
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] >= @DateInicio --Filtro
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] <= @DateFinal --Filtro
|
||
AND E.PKACTIVIDAD = @FKACTIVIDAD --Filtro
|
||
) AS 'Duración promedio por actividad'
|
||
|
||
,A.DESCRIPCIONDEPENDENCIASIGDD AS 'Oficina'
|
||
,t_adm_region.DESCRIPCIONREGION AS 'Región'
|
||
,
|
||
(
|
||
SELECT AVG(datediff(DD,FECHAINSERTASOLICITUD,[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
|
||
FROM t_adm_actividad E
|
||
INNER JOIN t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON C.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd B ON t_dis_solicitud.FKDEPENDENCIASIGDD = B.PKDEPENDENCIASIGDD
|
||
AND A.DESCRIPCIONDEPENDENCIASIGDD = B.DESCRIPCIONDEPENDENCIASIGDD AND FKACTIVIDAD = 9
|
||
|
||
WHERE (t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE (FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) IN (3))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND C.FKESTADO IN (5,8)
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] >= @DateInicio --Filtro
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] <= @DateFinal --Filtro
|
||
|
||
) 'Duración Promedio por solicitud',
|
||
CAST(t_dis_solicitud.FECHAINSERTASOLICITUD AS date) as 'Fecha de Inicio Consulta',
|
||
CAST(t_dis_solicitud.FECHAINSERTASOLICITUD AS date) as 'Fecha de Finalización Consulta'
|
||
FROM t_adm_actividad F
|
||
INNER JOIN t_sgm_responsableactividad D ON F.PKACTIVIDAD = D.FKACTIVIDAD
|
||
INNER JOIN t_sgm_programacionsolicitud ON D.FKPROGRAMACIONSOLICITUD = t_sgm_programacionsolicitud.PKPROGRAMACIONSOLICITUD
|
||
INNER JOIN t_dis_solicitud ON t_sgm_programacionsolicitud.FKSOLICITUD = t_dis_solicitud.PKSOLICITUD
|
||
INNER JOIN t_adm_dependenciasigdd A ON t_dis_solicitud.FKDEPENDENCIASIGDD = A.PKDEPENDENCIASIGDD
|
||
INNER JOIN t_adm_region ON A.FKREGION = t_adm_region.PKREGION
|
||
|
||
WHERE (dbo.t_dis_solicitud.PKSOLICITUD NOT IN
|
||
(
|
||
SELECT FKSOLICITUD
|
||
FROM dbo.t_dis_cancelarsolicitud
|
||
WHERE
|
||
(FKSOLICITUD = dbo.t_dis_solicitud.PKSOLICITUD)
|
||
--AND [FECHACANCELARSOLICITUD] <= CAST(CONVERT(varchar, 2025)+'-'+CONVERT(varchar, 05)+'-01' AS datetime) --Filtro
|
||
--AND [FECHACANCELARSOLICITUD] >= CAST(CONVERT(varchar, 2015)+'-'+CONVERT(varchar, 05)+'-01' AS datetime) --Filtro
|
||
|
||
)
|
||
)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) NOT IN (3,5))
|
||
AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1)
|
||
AND (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
|
||
AND D.FKESTADO NOT IN (5,8)
|
||
AND F.PKACTIVIDAD = @FKACTIVIDAD --Filtro
|
||
AND A.PKDEPENDENCIASIGDD = @FKDEPENDENCIA --Filtro
|
||
AND t_adm_region.PKREGION = @FKREGION --Filtro
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] >= @DateInicio --Filtro
|
||
AND t_dis_solicitud.[FECHAINSERTASOLICITUD] <= @DateFinal --Filtro
|
||
|
||
GROUP BY F.ORDENACTIVIDAD , DESCRIPCIONREGION,DESCRIPCIONDEPENDENCIASIGDD,F.NOMBREACTIVIDAD, t_dis_solicitud.FECHAINSERTASOLICITUD
|
||
order by F.ORDENACTIVIDAD ASC ,DESCRIPCIONDEPENDENCIASIGDD DESC
|
||
|
||
|
||
|
||
END
|
||
|
||
|
||
--EN CASO DE OCUPAR SUBIR UN ERROR PERSONALIZADO UTILIZAR EL RAISERROR
|
||
--EJEMPLO
|
||
--SELECT @ErrorMessage = 'El consecutivo ya existe en la base de datos. Consecutivo actual:' + convert( NVARCHAR(100), @CONSECUTIVODOCUMENTO)
|
||
-- SET @p_status = '99'
|
||
-- SET @p_message = @ErrorMessage
|
||
|
||
-- RAISERROR(@ErrorMessage,14,16)
|
||
|
||
COMMIT TRANSACTION --CONVIERTE LOS CAMBIOS DE LA TRANSACCION EN PARTE PERMANENTE DE LA BD Y LIBERA LOS RECURSOS POR EJEMPLO BLOQUEOS
|
||
|
||
END TRY
|
||
BEGIN CATCH
|
||
|
||
IF @@TRANCOUNT > 0
|
||
ROLLBACK TRANSACTION
|
||
|
||
SET @p_status = '99'
|
||
|
||
SET @p_message = 'Error Número: '+CONVERT(VARCHAR(10),ERROR_NUMBER())+', '+ERROR_MESSAGE()
|
||
|
||
|
||
|
||
SELECT @ErrorMessage = ERROR_MESSAGE(),
|
||
@ErrorSeverity = ERROR_SEVERITY(),
|
||
@ErrorState = ERROR_STATE();
|
||
RAISERROR (@ErrorMessage, -- Message text.
|
||
@ErrorSeverity, -- Severity.
|
||
@ErrorState -- State.
|
||
);
|
||
|
||
|
||
END CATCH
|
||
END
|
||
|