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
(
    @pch_compania char(4),    
    @psi_anio smallint,    
    @pti_mes tinyint,    
    @pch_sucursal char(10),
    @pch_tipo_planilla char(1) = 'E' -- JCL 27-AGO-07
)
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 fco_autorizaciones a
     INNER JOIN 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 fco_autorizaciones a
    INNER JOIN 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 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 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 fco_autorizaciones a
     INNER JOIN 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 fco_autorizaciones a
    INNER JOIN 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 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 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

