USE [SIGPC]
GO

/****** Object:  StoredProcedure [dbo].[PA_DESGLOCEGESTIONESGRAFICO]    Script Date: 1/14/2021 11:51:34 AM ******/
DROP PROCEDURE [dbo].[PA_DESGLOCEGESTIONESGRAFICO]
GO

/****** Object:  StoredProcedure [dbo].[PA_DESGLOCEGESTIONESGRAFICO]    Script Date: 1/14/2021 11:51:34 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.
-- =============================================

 

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



    BEGIN TRANSACTION --EN CASO DE REALIZAR MODIFICACIONES A LA BASE DE DATOS INSERT UPDATE DELETE
	IF @OtroMes < @Mes
	BEGIN
	  SET @OtroMes = @Mes
	END

IF @Mes != 0 AND (@Mes < @OtroMes  OR @Mes = @OtroMes) AND @Mes IS NOT NULL  AND @OtroMes IS NOT NULL
	BEGIN
			SELECT 
			[MESDESGLOCEGESTIONES] AS 'Numero Mes'
			,FORMAT(CAST('01/'+CONVERT(varchar,[MESDESGLOCEGESTIONES] )+'/2020' as date) , 'MMM') AS 'Mes'
			,([CANCELADADESGLOCEGESTIONES] +[BLOQUEADADESGLOCEGESTIONES] + [FINALIZADADESGLOCEGESTIONES]+[PENDIENTEDESGLOCEGESTIONES]) -[CANCELADADESGLOCEGESTIONES] -[BLOQUEADADESGLOCEGESTIONES] AS Ingresadas
			,[PENDIENTEDESGLOCEGESTIONES] AS Pendientes
			FROM
			[SIGPC].[dbo].[t_rpt_desglocegestiones]
			WHERE 
			ANNODESGLOCEGESTIONES = @Anno
			AND 
			[MESDESGLOCEGESTIONES] BETWEEN @Mes AND @OtroMes
	END
ELSE IF   @Mes != 0 AND (@OtroMes IS NULL OR  @OtroMes = 0)
	BEGIN
		SELECT 
			[MESDESGLOCEGESTIONES] AS 'Numero Mes'
			,FORMAT(CAST('01/'+CONVERT(varchar,[MESDESGLOCEGESTIONES] )+'/2020' as date) , 'MMM') AS 'Mes'
			,([CANCELADADESGLOCEGESTIONES] +[BLOQUEADADESGLOCEGESTIONES] + [FINALIZADADESGLOCEGESTIONES]+[PENDIENTEDESGLOCEGESTIONES]) -[CANCELADADESGLOCEGESTIONES] -[BLOQUEADADESGLOCEGESTIONES] AS Ingresadas
			,[PENDIENTEDESGLOCEGESTIONES] AS Pendientes
			FROM
			[SIGPC].[dbo].[t_rpt_desglocegestiones]
			WHERE 
			[MESDESGLOCEGESTIONES] = @Mes
			AND
			ANNODESGLOCEGESTIONES = @Anno
	END
ELSE  
	BEGIN 
			SELECT 
			[MESDESGLOCEGESTIONES] AS 'Numero Mes'
			,FORMAT(CAST('01/'+CONVERT(varchar,[MESDESGLOCEGESTIONES] )+'/2020' as date) , 'MMM') AS 'Mes'
			,([CANCELADADESGLOCEGESTIONES] +[BLOQUEADADESGLOCEGESTIONES] + [FINALIZADADESGLOCEGESTIONES]+[PENDIENTEDESGLOCEGESTIONES]) -[CANCELADADESGLOCEGESTIONES] -[BLOQUEADADESGLOCEGESTIONES] AS Ingresadas
			,[PENDIENTEDESGLOCEGESTIONES] AS Pendientes
			FROM
			[SIGPC].[dbo].[t_rpt_desglocegestiones]
			WHERE 
			ANNODESGLOCEGESTIONES = @Anno
	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

