IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_incorp_ausentismos_ni') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_incorp_ausentismos_ni
GO
CREATE PROCEDURE dbo.sp_fco_incorp_ausentismos_ni                      
    @pch_compania            CHAR(4)       = NULL,                       
    @pch_tipo_nomina         CHAR(2)       = NULL,                      
    @psi_anio_acumular       SMALLINT      = 0,                       
    @pti_mes_acumular        TINYINT       = 0,                      
    @psi_numero_liquidacion  SMALLINT      = 0,                       
    @pch_trabajador          CHAR(10)      = NULL,                      
    @psd_fecha_liquidacion   SMALLDATETIME = NULL,                      
    @psd_fecha_base          SMALLDATETIME = NULL,                      
    @pch_usuario             CHAR(30)      = NULL,                      
    @psd_sdtmfecha_hoy       SMALLDATETIME                      

AS    
/*********************************************************/    
/*** Modulo:      Modulo Fiscal ADAM v3 - Ausentismos  ***/    
/*** Descripcion: Incorpora ausentismos a una liquidacion***/    
/*** Autor:       Diana Cecilia Rios Peinado           ***/    
/*** Fecha:       Abril 28 de 2008                     ***/
/*********************************************************/    
DECLARE    

@vsi_anio_max smallint, --maximo año de acum concepto
@vti_periodo_max tinyint, --maximo pdo de acum concepto
@vch_clase_nom char(2),
@vsd_fecha_ini_per smalldatetime,

@cin_id_au int,    
@cch_trabajador char(10),    
@csi_concepto smallint,    
@cti_tipo tinyint,    
@cdt_inicio_au smalldatetime,    
@cdt_fin_au smalldatetime,    
@cti_horas decimal(8,3),  
@cdt_accidente smalldatetime,  
@csi_concepto1 smallint,    
@cdt_fin_per smalldatetime,    
@vdt_inicio smalldatetime, /* Fecha inicio del ausentismo dentro del periodo */    
@vdt_fin smalldatetime, /* Fecha fin del ausentismo dentro del periodo */      
@vdc_tiempo decimal(8,3),    
@vti_prorroga tinyint,  
@vdt_fin_au_inicial smalldatetime,  
@vdc_fin_au_inicial decimal(19,6),  
@vdc_fecha_fin_au decimal(19,6),  
@vsi_dias_empresa smallint,  
@vsi_dias_trabajador smallint  


BEGIN

  /* Eliminar las transacciones ya generadas por este incorpora */          
  DELETE liquidaciones_det       
  WHERE compania = @pch_compania AND          
  tipo_nomina = @pch_tipo_nomina AND
  anio_acumular = @psi_anio_acumular AND
  mes_acumular = @pti_mes_acumular AND
	numero_liquidacion =  @psi_numero_liquidacion AND
  trabajador = @pch_trabajador AND
  referencia = 'Ausentismo'

	--hallamos la calse de nomina del trabajador
	SELECT @vch_clase_nom = clase_nomina
	FROM trabajadores_grales
	WHERE compania = @pch_compania
	AND trabajador = @pch_trabajador

	--determinamos el ultimo año que le hayan calculado la nomina normal del trabajador
	SELECT @vsi_anio_max = MAX(anio)
	FROM acum_concepto ac
	WHERE ac.compania = @pch_compania
	AND ac.trabajador = @pch_trabajador
	AND ac.tipo_nomina = @vch_clase_nom

	SELECT @vti_periodo_max = MAX(periodo)
	FROM acum_concepto ac
	WHERE ac.compania = @pch_compania
	AND ac.trabajador = @pch_trabajador
	AND ac.tipo_nomina = @vch_clase_nom
	AND anio = @vsi_anio_max

	--hallamos la fecha de fin de periodo del calendario de procesos, para a partir de ahi tomar la fecha de inicio
	SELECT @vsd_fecha_ini_per = fecha_termino
	FROM calendario_procesos
	WHERE tipo_nomina = @vch_clase_nom
	AND anio = @vsi_anio_max
	AND periodo = @vti_periodo_max

/*
print '@vsi_anio_max: ' + ltrim(@vsi_anio_max)
print '@vti_periodo_max: ' + ltrim(@vti_periodo_max)
print '@vch_clase_nom: ' + ltrim(@vch_clase_nom)
print '@vsd_fecha_ini_per: ' + ltrim(@vsd_fecha_ini_per)
*/

	--le sumamos 1 dia a la ultima fecha procesada del calendario de procesos
	SELECT @vsd_fecha_ini_per = DATEADD(day, 1, @vsd_fecha_ini_per)


    /* Recorrer los ausentismos del periodo */    
    DECLARE cr_ausentismos CURSOR FOR    
    SELECT au.id_ausentismo, au.trabajador, au.concepto, au.tipo, au.fecha_inicio, au.fecha_fin, au.horas, au.fecha_accidente,
		au.fecha_fin
    FROM fco_ausentismos au  
    INNER JOIN trabajadores_grales tg ON au.compania = tg.compania And au.trabajador = tg.trabajador  
    WHERE au.compania = @pch_compania   
      And tg.clase_nomina = @vch_clase_nom   
      And tg.sit_trabajador = 1   
      And au.fecha_fin >= @vsd_fecha_ini_per  
      And au.fecha_inicio <= au.fecha_fin
      And (au.trabajador = @pch_trabajador Or @pch_trabajador = '')  
    
    OPEN cr_ausentismos    
    FETCH NEXT FROM cr_ausentismos    
    INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo, @cdt_inicio_au, @cdt_fin_au, @cti_horas, @cdt_accidente, @cdt_fin_per
    
    WHILE @@Fetch_Status = 0    
    BEGIN      

        /* Hallar si es prorroga o no */    
        SET @vti_prorroga = 0    
        IF @cti_tipo = 4 SET @vti_prorroga = 1    
  
        If @csi_concepto In (Select valor From criterios_valores_col   
                             Where campo = 'tipo_ausentismo' And item In (0, 3))  
        Begin /* Conceptos EG o AT */  
             Execute sp_calcula_dias_ausentismo    
                @pch_compania, @cch_trabajador, @csi_concepto, @cin_id_au,        
                @cdt_inicio_au, @cdt_fin_au, @vsd_fecha_ini_per, @cdt_fin_per, @cdt_accidente,  
                @vsi_dias_empresa Out, @vsi_dias_trabajador Out               
/*
print '@csi_concepto ' + ltrim(@csi_concepto)
print '@cdt_inicio_au ' + ltrim(@cdt_inicio_au)
print '@cdt_fin_au ' + ltrim(@cdt_fin_au)
print '@vsd_fecha_ini_per ' + ltrim(@vsd_fecha_ini_per)
print '@cdt_fin_per ' + ltrim(@cdt_fin_per)
print '@cdt_accidente ' + ltrim(@cdt_accidente)
print '@vsi_dias_empresa '  + ltrim(@vsi_dias_empresa)
print '@vsi_dias_trabajador ' + ltrim(@vsi_dias_trabajador)
*/
            -- Definir los conceptos  
            /* EG */  
            If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 0 And valor = @csi_concepto)  
                Set @csi_concepto1 = 310 /* Buscar luego la forma de que quede paramétrico */  
  
            /* AT */  
            If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 3 And valor = @csi_concepto)  
                Set @csi_concepto1 = 335 /* Buscar luego la forma de que quede paramétrico */  
  
            If @vsi_dias_empresa > 0  
            Begin  
               Set @vdt_fin_au_inicial = Dateadd(dd, @vsi_dias_empresa, @cdt_inicio_au)  
               Set @vdc_fin_au_inicial = Convert(decimal(19,6), @vdt_fin_au_inicial)  

							 IF EXISTS (SELECT 1 FROM rel_conc_tipo_nomina WHERE compania = @pch_compania AND concepto = @csi_concepto AND tipo_nomina = @pch_tipo_nomina)
							 BEGIN--DCR,MAY-27-2008        
		             EXECUTE sp_alta_liquidaciones_det                     
		                 @pch_compania,                      
		                 @pch_tipo_nomina,                      
		                 @psi_anio_acumular,                      
		                 @pti_mes_acumular,                      
		                 @psi_numero_liquidacion,                      
		                 @csi_concepto,                      
		                 @cch_trabajador,                      
		                 'Ausentismo',      /* referencia */                      
		                 null,              /* secuencia */                      
		                 '',                /* referencia2 */                      
		                 @psd_sdtmfecha_hoy,    /* fecha */                      
		                 @psd_sdtmfecha_hoy,    /* fecha2*/                    
		                 @vsi_dias_empresa,     /* tiempo */                      
		                 @vdc_fin_au_inicial, /* factor_01 */                      
		                 @cin_id_au,        /* factor_02 */                      
		                 @vti_prorroga,     /* factor_03 */                      
		                 0,                 /* importe_reportado */                      
		                 0,                 /* importado */                      
		                 null,              /* turno_trn */                      
		                 null,              /* puesto_trn */                      
		                 null,              /* agrupacion_01_trn */                      
		                 null,              /* dato_01_trn */                      
		                 null,              /* agrupacion_02_trn */                      
		                 null,              /* dato_02_trn */                      
		                 null,              /* agrupacion_03_trn */                      
		                 null,              /* dato_03_trn */                      
		                 null,              /* agrupacion_04_trn */                      
		                 null,              /* dato_04_trn */                
		                 null,              /* coleccion 1 */                      
		                 null,              /* coleccion 2 */                      
		                 null,              /* coleccion 3 */                      
		                 1,                 /* origen_transaccion */                      
		                 @pch_usuario,      /* usuario_registro */                      
		                 @psd_sdtmfecha_hoy, /* fecha_registro */                      
		                 null,              /* usuario_proceso */                      
		                 null,              /* fecha_proceso */                      
		                 null,              /* usuario_cambio */                      
		                 null,              /* fecha_cambio */                      
		                 1                  /* sit_transaccion */                       
							 END--DCR,MAY-27-2008        
            End  
  
            If @vsi_dias_trabajador > 0        
            Begin  
                Set @vdc_fecha_fin_au = Convert(decimal(19,6), @cdt_fin_au)        

							 IF EXISTS (SELECT 1 FROM rel_conc_tipo_nomina WHERE compania = @pch_compania AND concepto = @csi_concepto1 AND tipo_nomina = @pch_tipo_nomina)
							 BEGIN--DCR,MAY-27-2008        
		             EXECUTE sp_alta_liquidaciones_det                     
		                 @pch_compania,                      
		                 @pch_tipo_nomina,                      
		                 @psi_anio_acumular,                      
		                 @pti_mes_acumular,                      
		                 @psi_numero_liquidacion,                      
		                 @csi_concepto1,                      
		                 @cch_trabajador,                      
		                 'Ausentismo',      /* referencia */                      
		                 null,              /* secuencia */                      
		                 '',                /* referencia2 */                      
		                 @psd_sdtmfecha_hoy,    /* fecha */                      
		                 @psd_sdtmfecha_hoy,    /* fecha2*/                    
		                 @vsi_dias_trabajador,     /* tiempo */                      
		                 @vdc_fecha_fin_au, /* factor_01 */                      
		                 @cin_id_au,        /* factor_02 */                      
		                 @vti_prorroga,     /* factor_03 */                      
		                 0,                 /* importe_reportado */                      
		                 0,                 /* importado */                      
		                 null,              /* turno_trn */                      
		                 null,              /* puesto_trn */                      
		                 null,              /* agrupacion_01_trn */                      
		                 null,              /* dato_01_trn */                      
		                 null,              /* agrupacion_02_trn */                      
		                 null,              /* dato_02_trn */                      
		                 null,              /* agrupacion_03_trn */                      
		                 null,              /* dato_03_trn */                      
		                 null,              /* agrupacion_04_trn */                      
		                 null,              /* dato_04_trn */                
		                 null,              /* coleccion 1 */                      
		                 null,              /* coleccion 2 */                      
		                 null,              /* coleccion 3 */                      
		                 1,                 /* origen_transaccion */                      
		                 @pch_usuario,      /* usuario_registro */                      
		                 @psd_sdtmfecha_hoy, /* fecha_registro */                      
		                 null,              /* usuario_proceso */                      
		                 null,              /* fecha_proceso */                      
		                 null,              /* usuario_cambio */                      
		                 null,              /* fecha_cambio */                      
		                 1                  /* sit_transaccion */                       
							 END--DCR,MAY-27-2008        
            End  
        End  
        Else  
        Begin /* Otros conceptos de ausentismo */  
            If IsNull(@cti_horas, 0) = 0  
            Begin  
                /* Calcular las fechas del ausentismo en el periodo */    
                IF @cdt_inicio_au < @vsd_fecha_ini_per    
                    SET @vdt_inicio = @vsd_fecha_ini_per    
                ELSE    
                    SET @vdt_inicio = @cdt_inicio_au    
            
                IF @cdt_fin_au > @cdt_fin_per    
                    SET @vdt_fin = @cdt_fin_per    
                ELSE    
                    SET @vdt_fin = @cdt_fin_au    
            
                /* Hallar el numero de dias del ausentismo para el periodo */    
                SET @vdc_tiempo = Datediff(dd, @vdt_inicio, @vdt_fin) + 1    
            End  
            Else  
                Set @vdc_tiempo = @cti_horas  
                    
            IF @vdc_tiempo > 0     
						BEGIN
							 IF EXISTS (SELECT 1 FROM rel_conc_tipo_nomina WHERE compania = @pch_compania AND concepto = @csi_concepto AND tipo_nomina = @pch_tipo_nomina)
							 BEGIN--DCR,MAY-27-2008        
		             EXECUTE sp_alta_liquidaciones_det                     
		                 @pch_compania,                      
		                 @pch_tipo_nomina,                      
		                 @psi_anio_acumular,                      
		                 @pti_mes_acumular,                      
		                 @psi_numero_liquidacion,                      
		                 @csi_concepto,                      
		                 @cch_trabajador,                      
		                 'Ausentismo',      /* referencia */                      
		                 null,              /* secuencia */                      
		                 '',                /* referencia2 */                      
		                 @psd_sdtmfecha_hoy,    /* fecha */                      
		                 @psd_sdtmfecha_hoy,    /* fecha2*/                    
		                 @vdc_tiempo,     /* tiempo */                      
		                 @cti_tipo, /* factor_01 */                      
		                 @cin_id_au,        /* factor_02 */                      
		                 @vti_prorroga,     /* factor_03 */                      
		                 0,                 /* importe_reportado */                      
		                 0,                 /* importado */                      
		                 null,              /* turno_trn */                      
		                 null,              /* puesto_trn */                      
		                 null,              /* agrupacion_01_trn */                      
		                 null,              /* dato_01_trn */                      
		                 null,              /* agrupacion_02_trn */                      
		                 null,              /* dato_02_trn */                      
		                 null,              /* agrupacion_03_trn */                      
		                 null,              /* dato_03_trn */                      
		                 null,              /* agrupacion_04_trn */                      
		                 null,              /* dato_04_trn */                
		                 null,              /* coleccion 1 */                      
		                 null,              /* coleccion 2 */                      
		                 null,              /* coleccion 3 */                      
		                 1,                 /* origen_transaccion */                      
		                 @pch_usuario,      /* usuario_registro */                      
		                 @psd_sdtmfecha_hoy, /* fecha_registro */                      
		                 null,              /* usuario_proceso */                      
		                 null,              /* fecha_proceso */                      
		                 null,              /* usuario_cambio */                      
		                 null,              /* fecha_cambio */                      
		                 1                  /* sit_transaccion */                       
							 END--DCR,MAY-27-2008        
						END
        End  
    
        FETCH NEXT FROM cr_ausentismos    
        INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo, @cdt_inicio_au, @cdt_fin_au, @cti_horas, @cdt_accidente, @cdt_fin_per
    END /* BEGIN BAJO EL WHILE */    
    
    CLOSE cr_ausentismos    
    DEALLOCATE cr_ausentismos    


END
GO
GRANT EXECUTE ON dbo.sp_fco_incorp_ausentismos_ni TO PUBLIC
GO
