TFS_ANTIGUO/ReportesSIGPC/Query/PA_TRABAJOACTIVIDAD.sql
kledezma 290b81b54d SIGPC
git-tfs-id: [http://192.168.1.10:8080/tfs/AyA]$/SINORT;C518
2021-01-22 14:59:35 +00:00

286 lines
No EOL
26 KiB
Transact-SQL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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