USE [SIGPC]
GO

/****** Object:  StoredProcedure [dbo].[PA_TRABAJOACTIVIDAD]    Script Date: 3/9/2021 1:34:17 PM ******/
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.
-- =============================================

 

CREATE PROCEDURE [dbo].[PA_TRABAJOACTIVIDAD] 
@p_status     VARCHAR(2) = '' OUTPUT
,@p_message    VARCHAR(500) = '' OUTPUT
,@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);

--DECLARE @DateInicio DATE = CAST(CONVERT(varchar,@ANNOINICIO )+'/'+CONVERT(varchar,@MESINICIO )+'/01' as datetime);
--DECLARE @DateFinal DATE = CAST(CONVERT(varchar,@ANNOFINAL )+'/'+CONVERT(varchar,@MESFINAL )+'/01' as datetime);
 




    BEGIN TRANSACTION --EN CASO DE REALIZAR MODIFICACIONES A LA BASE DE DATOS INSERT UPDATE DELETE

IF	 (@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
   ,(SELECT COUNT(PKSOLICITUD) FROM       t_adm_actividad G     INNER JOIN
                                               --t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO NOT IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                                --AND F.PKACTIVIDAD = G.PKACTIVIDAD
                                                t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO NOT IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND  D.FKACTIVIDAD IN (9,1)
                                               AND D.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  D.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND D.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO NOT IN (5,8) ))
                                                LEFT OUTER 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 M ON t_dis_solicitud.FKDEPENDENCIASIGDD = M.PKDEPENDENCIASIGDD AND M.DESCRIPCIONDEPENDENCIASIGDD = A.DESCRIPCIONDEPENDENCIASIGDD INNER JOIN
                                               t_adm_region ON M.FKREGION = t_adm_region.PKREGION --INNER JOIN
       WHERE
       --t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (dbo.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) NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
       GROUP BY G.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,G.NOMBREACTIVIDAD )AS   'Solicitudes Pendientes'
       ,(SELECT COUNT(PKSOLICITUD) FROM       t_adm_actividad G     INNER JOIN
                                               --t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO  IN (5,8) )
                                                --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                                 t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO  IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND  D.FKACTIVIDAD IN (9,1)
                                               AND D.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  D.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND D.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO  IN (5,8) ))
                                                LEFT OUTER 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 M ON t_dis_solicitud.FKDEPENDENCIASIGDD = M.PKDEPENDENCIASIGDD AND M.DESCRIPCIONDEPENDENCIASIGDD = A.DESCRIPCIONDEPENDENCIASIGDD INNER JOIN
                                               t_adm_region ON M.FKREGION = t_adm_region.PKREGION --INNER JOIN
       WHERE
       --t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (dbo.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)
       GROUP BY  G.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,G.NOMBREACTIVIDAD )AS   'Solicitudes Finalizadas'
       ,F.NOMBREACTIVIDAD AS 'Actividad en que se encuentra '


             ,(SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],GETDATE() ))
       FROM  t_adm_actividad E INNER JOIN
       t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD  AND F.PKACTIVIDAD = E.PKACTIVIDAD AND C.FKESTADO NOT IN (5,8)
          AND C.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  C.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND C.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO NOT IN (5,8) )) 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.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (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)   NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
                                                --AND C.FKESTADO  = 3
       )  AS 'Duración promedio por actividad pendiente'
       ,(SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
       FROM  t_adm_actividad E INNER JOIN
       t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD  AND F.PKACTIVIDAD = E.PKACTIVIDAD  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.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (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 finalizada'


       ,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 C.FKACTIVIDAD = 9
       WHERE
       --t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (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 solicitud finalizadas'


       FROM           t_adm_actividad F  INNER JOIN
                                               t_sgm_responsableactividad D ON F.PKACTIVIDAD = D.FKACTIVIDAD  LEFT OUTER 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 --INNER JOIN
       WHERE
       --t_dis_solicitud.FKDEPENDENCIASIGDD = @FKDEPENDENCIA  
       --AND t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       --AND
       (dbo.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) NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
--AND DESCRIPCIONDEPENDENCIASIGDD = 'TilarÃ¡n'
       GROUP BY F.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,F.NOMBREACTIVIDAD , F.PKACTIVIDAD
       --,t_dis_solicitud.FECHAINSERTASOLICITUD
       order by F.ORDENACTIVIDAD ASC ,DESCRIPCIONDEPENDENCIASIGDD DESC




	END
ELSE
 	
	BEGIN 

	SELECT
   F.ORDENACTIVIDAD
   ,(SELECT COUNT(PKSOLICITUD) FROM       t_adm_actividad G     INNER JOIN
                                               --t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO NOT IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                                --AND F.PKACTIVIDAD = G.PKACTIVIDAD
                                                t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO NOT IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND  D.FKACTIVIDAD IN (9,1)
                                               AND D.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  D.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND D.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO NOT IN (5,8) ))
                                                LEFT OUTER 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 M ON t_dis_solicitud.FKDEPENDENCIASIGDD = M.PKDEPENDENCIASIGDD AND M.DESCRIPCIONDEPENDENCIASIGDD = A.DESCRIPCIONDEPENDENCIASIGDD INNER JOIN
                                               t_adm_region ON M.FKREGION = t_adm_region.PKREGION --INNER JOIN
       WHERE
       t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (dbo.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) NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
       GROUP BY G.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,G.NOMBREACTIVIDAD )AS   'Solicitudes Pendientes'
       ,(SELECT COUNT(PKSOLICITUD) FROM       t_adm_actividad G     INNER JOIN
                                               --t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO  IN (5,8) )
                                                --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                                 t_sgm_responsableactividad D ON G.PKACTIVIDAD = D.FKACTIVIDAD AND (D.FKESTADO  IN (5,8) ) AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND F.NOMBREACTIVIDAD =  G.NOMBREACTIVIDAD
                                               --AND  D.FKACTIVIDAD IN (9,1)
                                               AND D.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  D.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND D.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO  IN (5,8) ))
                                                LEFT OUTER 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 M ON t_dis_solicitud.FKDEPENDENCIASIGDD = M.PKDEPENDENCIASIGDD AND M.DESCRIPCIONDEPENDENCIASIGDD = A.DESCRIPCIONDEPENDENCIASIGDD INNER JOIN
                                               t_adm_region ON M.FKREGION = t_adm_region.PKREGION --INNER JOIN
       WHERE
       t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (dbo.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)
       GROUP BY  G.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,G.NOMBREACTIVIDAD )AS   'Solicitudes Finalizadas'
       ,F.NOMBREACTIVIDAD AS 'Actividad en que se encuentra '


             ,(SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],GETDATE() ))
       FROM  t_adm_actividad E INNER JOIN
       t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD  AND F.PKACTIVIDAD = E.PKACTIVIDAD AND C.FKESTADO NOT IN (5,8)
          AND C.PKRESPONSABLEACTIVIDAD IN (SELECT MAX( H.PKRESPONSABLEACTIVIDAD) FROM t_sgm_responsableactividad H WHERE  C.FKPROGRAMACIONSOLICITUD = H.FKPROGRAMACIONSOLICITUD AND C.FKACTIVIDAD = H.FKACTIVIDAD AND (H.FKESTADO NOT IN (5,8) )) 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.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (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)   NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
                                                --AND C.FKESTADO  = 3
       )  AS 'Duración promedio por actividad pendiente'
       ,(SELECT AVG(datediff(DD,[FECHAASIGNACIONRESPONSABLEACTIVIDAD],[FECHADEVOLUCIONRESPONSABLEACTIVIDAD] ))
       FROM  t_adm_actividad E INNER JOIN
       t_sgm_responsableactividad C ON E.PKACTIVIDAD = C.FKACTIVIDAD  AND F.PKACTIVIDAD = E.PKACTIVIDAD  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.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (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 finalizada'


       ,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 C.FKACTIVIDAD = 9
       WHERE
       t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (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 solicitud finalizadas'


       FROM           t_adm_actividad F  INNER JOIN
                                               t_sgm_responsableactividad D ON F.PKACTIVIDAD = D.FKACTIVIDAD  LEFT OUTER 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 --INNER JOIN
       WHERE
       t_dis_solicitud.FKDEPENDENCIASIGDD = @FKDEPENDENCIA  
       AND t_dis_solicitud.[FECHAINSERTASOLICITUD] BETWEEN  @DateInicio  AND    @DateFinal--Filtro
       AND
       (dbo.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) NOT IN (3,5))
                                                             AND (dbo.t_dis_solicitud.ASTATESOLICITUD = 1) AND
                                                (ISNULL(dbo.t_sgm_programacionsolicitud.FKESTADOPROGRAMACION, 1) <> 6)
--AND DESCRIPCIONDEPENDENCIASIGDD = 'TilarÃ¡n'
       GROUP BY F.ORDENACTIVIDAD , DESCRIPCIONREGION,
       DESCRIPCIONDEPENDENCIASIGDD,F.NOMBREACTIVIDAD , F.PKACTIVIDAD
       --,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
 
GO

