IF OBJECT_ID('dbo.sp_fco_pi_autorizaciones') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_pi_autorizaciones
GO
CREATE PROCEDURE dbo.sp_fco_pi_autorizaciones -- TSEN
(  
    @pch_compania char(4),      
    @psi_anio smallint,      
    @pti_mes tinyint,      
    @pch_sucursal char(10),
    @pch_tipo_planilla char(1)
)  
AS  
BEGIN  
    /***********************************************************************/  
    /* Autorizaciones por Enfermedad General (Nro. y Valor por Trabajador) */      
    /***********************************************************************/  
    -- Autorizaciones donde el trabajador continua activo y en la misma EPS (se pueden mostrar a nivel de trabajadores en la planilla)  
    -- Además la autorización se reportó detallada  
    UPDATE fco_integrada_det  
    SET nro_aut_IGE = x.numero, vlr_aut_IGE = x.valor  
    FROM  
    (SELECT a.compania, a.sucursal, a.tipo_planilla, a.cod_entidad, b.trabajador,   
     Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
     MAX(a.numero) numero, SUM(b.valor) valor  
     FROM vw_fco_autorizaciones a  
     INNER JOIN vw_fco_autorizaciones_det b ON a.compania = b.compania AND a.autorizacion = b.autorizacion  
     WHERE a.tipo_incapacidad = 0  
     GROUP BY a.compania, a.sucursal, a.tipo_planilla, a.cod_entidad, b.trabajador, a.periodo) x  
    WHERE fco_integrada_det.compania = x.compania   
      AND (fco_integrada_det.sucursal = x.sucursal OR @pch_sucursal = '')  
      AND fco_integrada_det.tipo_planilla = x.tipo_planilla
      AND fco_integrada_det.cod_EPS = x.cod_entidad  
      AND fco_integrada_det.trabajador = x.trabajador  
      AND fco_integrada_det.anio = x.anio   
      AND fco_integrada_det.mes = x.mes  
      AND fco_integrada_det.compania = @pch_compania   
      AND fco_integrada_det.anio = @psi_anio       
      AND fco_integrada_det.mes = @pti_mes   
      AND (fco_integrada_det.sucursal = @pch_sucursal OR @pch_sucursal = '')    
      AND fco_integrada_det.tipo_planilla = @pch_tipo_planilla
  
    DELETE fco_autorizaciones_ext  
    WHERE compania = @pch_compania  
      AND (sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND tipo_planilla = @pch_tipo_planilla
      AND anio = @psi_anio  
      AND mes = @pti_mes  
      AND tipo = 0  
  
    -- Autorizaciones donde el trabajador está retirado o en otra EPS (no se pueden mostrar a nivel de trabajadores en la planilla)  
    INSERT INTO fco_autorizaciones_ext  
    (compania, sucursal, tipo_planilla, cod_EPS, anio, mes, tipo, trabajador, numero, valor)  
    SELECT @pch_compania, @pch_sucursal, @pch_tipo_planilla, cod_entidad, 
           Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
           tipo_incapacidad, b.trabajador, MAX(a.numero), SUM(b.valor)  
    FROM vw_fco_autorizaciones a  
    INNER JOIN vw_fco_autorizaciones_det b ON a.compania = b.compania AND a.autorizacion = b.autorizacion  
    WHERE a.compania = @pch_compania  
      AND a.periodo = RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)  
      AND a.tipo_incapacidad = 0  
      AND (a.sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND a.tipo_planilla = @pch_tipo_planilla
      AND NOT EXISTS  
        (SELECT 1 FROM fco_integrada_det x  
         WHERE x.compania = a.compania   
           AND (x.sucursal = a.sucursal OR @pch_sucursal = '')  
           AND x.tipo_planilla = a.tipo_planilla
           AND x.cod_EPS = a.cod_entidad  
           AND x.trabajador = b.trabajador  
           AND RTrim(x.anio) + Right('00' + RTrim(x.mes), 2) = a.periodo  
        )  
    GROUP BY a.cod_entidad, a.periodo, a.tipo_incapacidad, b.trabajador  
      
    -- Autorizaciones que no se reportaron detalladamente  
    INSERT INTO fco_autorizaciones_ext  
    (compania, sucursal, tipo_planilla, cod_EPS, anio, mes, tipo, trabajador, numero, valor)  
    SELECT @pch_compania, @pch_sucursal, @pch_tipo_planilla, cod_entidad, Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
           tipo_incapacidad, '', MAX(numero), SUM(valor_total)  
    FROM vw_fco_autorizaciones a  
    WHERE compania = @pch_compania  
      AND periodo = RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)  
      AND tipo_incapacidad = 0  
      AND (sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND tipo_planilla = @pch_tipo_planilla
      AND NOT EXISTS  
        (SELECT 1 FROM vw_fco_autorizaciones_det b  
         WHERE a.compania = b.compania AND a.autorizacion = b.autorizacion  
        )  
    GROUP BY a.cod_entidad, a.periodo, a.tipo_incapacidad  
  
    /***********************************************************************/  
    /* Autorizaciones por Licencia de Maternidad (Nro. y Valor por Trabajador) */      
    /***********************************************************************/  
    -- Autorizaciones donde el trabajador continua activo y en la misma EPS (se pueden mostrar a nivel de trabajadores en la planilla)  
    -- Además la autorización se reportó detallada  
    UPDATE fco_integrada_det  
    SET nro_aut_LMA = x.numero, vlr_aut_LMA = x.valor  
    FROM  
    (SELECT a.compania, a.sucursal, a.tipo_planilla, a.cod_entidad, b.trabajador,   
     Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
     MAX(a.numero) numero, SUM(b.valor) valor  
     FROM vw_fco_autorizaciones a  
     INNER JOIN vw_fco_autorizaciones_det b ON a.compania = b.compania AND a.autorizacion = b.autorizacion  
     WHERE a.tipo_incapacidad = 1  
     GROUP BY a.compania, a.sucursal, a.tipo_planilla, a.cod_entidad, b.trabajador, a.periodo) x  
    WHERE fco_integrada_det.compania = x.compania   
      AND (fco_integrada_det.sucursal = x.sucursal OR @pch_sucursal = '')  
      AND fco_integrada_det.tipo_planilla = x.tipo_planilla
      AND fco_integrada_det.cod_EPS = x.cod_entidad  
      AND fco_integrada_det.trabajador = x.trabajador  
      AND fco_integrada_det.anio = x.anio   
      AND fco_integrada_det.mes = x.mes  
      AND fco_integrada_det.compania = @pch_compania   
      AND fco_integrada_det.anio = @psi_anio       
      AND fco_integrada_det.mes = @pti_mes   
      AND (fco_integrada_det.sucursal = @pch_sucursal OR @pch_sucursal = '')    
      AND fco_integrada_det.tipo_planilla = @pch_tipo_planilla
  
    DELETE fco_autorizaciones_ext  
    WHERE compania = @pch_compania  
      AND (sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND tipo_planilla = @pch_tipo_planilla
      AND anio = @psi_anio  
      AND mes = @pti_mes  
      AND tipo = 1  
  
    -- Autorizaciones donde el trabajador está retirado o en otra EPS (no se pueden mostrar a nivel de trabajadores en la planilla)  
    INSERT INTO fco_autorizaciones_ext  
    (compania, sucursal, tipo_planilla, cod_EPS, anio, mes, tipo, trabajador, numero, valor)  
    SELECT @pch_compania, @pch_sucursal, @pch_tipo_planilla, cod_entidad, 
           Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
           tipo_incapacidad, b.trabajador, MAX(a.numero), SUM(b.valor)  
    FROM vw_fco_autorizaciones a  
    INNER JOIN vw_fco_autorizaciones_det b ON a.compania = b.compania AND a.autorizacion = b.autorizacion  
    WHERE a.compania = @pch_compania  
      AND a.periodo = RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)  
      AND a.tipo_incapacidad = 1  
      AND (a.sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND a.tipo_planilla = @pch_tipo_planilla
      AND NOT EXISTS  
        (SELECT 1 FROM fco_integrada_det x  
         WHERE x.compania = a.compania   
           AND (x.sucursal = a.sucursal OR @pch_sucursal = '')  
           AND x.tipo_planilla = a.tipo_planilla
           AND x.cod_EPS = a.cod_entidad  
           AND x.trabajador = b.trabajador  
           AND RTrim(x.anio) + Right('00' + RTrim(x.mes), 2) = a.periodo  
        )  
    GROUP BY a.cod_entidad, a.periodo, a.tipo_incapacidad, b.trabajador  
      
    -- Autorizaciones que no se reportaron detalladamente  
    INSERT INTO fco_autorizaciones_ext  
    (compania, sucursal, tipo_planilla, cod_EPS, anio, mes, tipo, trabajador, numero, valor)  
    SELECT @pch_compania, @pch_sucursal, @pch_tipo_planilla, cod_entidad, Convert(smallint, Left(a.periodo, 4)) anio, Convert(tinyint, Right(a.periodo, 2)) mes,  
           tipo_incapacidad, '', MAX(numero), SUM(valor_total)  
    FROM vw_fco_autorizaciones a  
    WHERE compania = @pch_compania  
      AND periodo = RTrim(@psi_anio) + Right('00' + RTrim(@pti_mes), 2)  
      AND tipo_incapacidad = 1  
      AND (sucursal = @pch_sucursal OR @pch_sucursal = '')  
      AND tipo_planilla = @pch_tipo_planilla
      AND NOT EXISTS  
        (SELECT 1 FROM vw_fco_autorizaciones_det b  
         WHERE a.compania = b.compania AND a.autorizacion = b.autorizacion  
        )  
    GROUP BY a.cod_entidad, a.periodo, a.tipo_incapacidad  
  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_pi_autorizaciones TO PUBLIC
GO
