ALTER PROCEDURE dbo.sp_fco_baja_ausentismos  
(  
    @pch_compania    char(4),  
    @pin_id_ausentismo  int  
)  
AS  
DECLARE
@vsd_fecha_ini smalldatetime,
@vsd_fecha_fin smalldatetime,
@vch_clase_nom char(2),
@vch_trabajador char(10),

@csi_id_cal smallint,
@vvc_tabla char(30),
@vvc_sql varchar(2000)

BEGIN
--Revision: DCR, Abr-29-2008: Se necesita revisar que el ausentismo no se haya incorporado en alguna nomina
--se hace uso de una tabla creada: fco_ausentismos_trans

	--trayendo la informacion del ausentismo
	SELECT @vsd_fecha_ini = fecha_inicio,
	@vsd_fecha_fin = fecha_fin,
	@vch_trabajador = trabajador
	FROM fco_ausentismos
	WHERE compania = @pch_compania
	AND id_ausentismo = @pin_id_ausentismo

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

	--hallamos los id_calendario que esten dentro del rango de fechas del ausentismo
	DECLARE cr_id_cal_au CURSOR FOR
	SELECT a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b
	WHERE a.id_calendario = b.id_calendario
	AND b.compania = @pch_compania
	AND a.tipo_nomina = @vch_clase_nom
	AND b.sit_periodo = 2
	AND fecha_termino >= @vsd_fecha_ini
	AND fecha_inicio <= @vsd_fecha_fin

  OPEN cr_id_cal_au    
  FETCH NEXT FROM cr_id_cal_au    
  INTO @csi_id_cal

    WHILE @@Fetch_Status = 0    
    BEGIN      

				SET @vvc_tabla = 'trans_' + LTRIM(RTRIM(@pch_compania)) + '_' + LTRIM(RTRIM(@csi_id_cal))

				SET @vvc_sql = 'INSERT INTO fco_ausentismos_trans (compania, id_ausentismo, id_calendario) ' +
									 'SELECT DISTINCT compania, factor_02, id_calendario ' +
									 'FROM ' + LTRIM(RTRIM(@vvc_tabla)) +
									 ' WHERE compania = ''' + @pch_compania + '''' +
									 ' AND clase_nomina = ''' + @vch_clase_nom + '''' +
									 ' AND id_calendario = ' + LTRIM(@csi_id_cal) +
									 ' AND trabajador = ''' + @vch_trabajador + '''' +
									 ' AND referencia = ''Ausentismo''' +
									 ' AND factor_02 = ' + LTRIM(@pin_id_ausentismo)

--print @vvc_sql

				EXEC (@vvc_sql)

        FETCH NEXT FROM cr_id_cal_au    
        INTO @csi_id_cal
    END /* BEGIN BAJO EL WHILE */    
		CLOSE cr_id_cal_au
		DEALLOCATE cr_id_cal_au

		IF EXISTS (SELECT 1 FROM fco_ausentismos_trans WHERE compania = @pch_compania AND id_ausentismo = @pin_id_ausentismo)
		BEGIN
			RAISERROR 206800 'Este ausentismo tiene registros en nominas cerradas y no se puede eliminar'

			DELETE fco_ausentismos_trans
			WHERE compania = @pch_compania
			AND id_ausentismo = @pin_id_ausentismo
  
			RETURN
		END

--Fin: DCR, Abr-29-2008:  
    INSERT INTO fco_ausentismos_historico  
    (compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion,   
     fecha_pago, fecha_fin, dias, tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc)  
    SELECT compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion,   
     fecha_pago, fecha_fin, dias, tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc  
    FROM fco_ausentismos  
    WHERE compania = @pch_compania And   
          id_ausentismo = @pin_id_ausentismo  
  
    DELETE fco_ausentismos  
    WHERE compania = @pch_compania And   
          id_ausentismo = @pin_id_ausentismo  
  
    IF @@ERROR <> 0   
        RAISERROR 206800 'Error al eliminar el registro de la tabla [fco_ausentismos]'  
END  
