CREATE OR REPLACE PROCEDURE sp_fco_crea_ausentismo
(
    pch_compania char,
    pin_id_ausentismo int,
    pch_trabajador char,
    psi_concepto smallint,
    pti_tipo number,
    pdt_inicio date,
    pdt_causacion date,
    pdt_pago date,
    pdt_fin date,
    psi_dias smallint,
    pti_tipo_dias number,
    pvc_diagnostico varchar2,
    pvc_observaciones varchar2,
    psi_randomico smallint,
    pin_prorroga  int,  --agregado DCRP Agosto25/2003. Puede venir nulo
    pde_valor_ibc  number,
    pti_calculo_ibc number,
    pdt_ini_real date,
    pdt_fin_real date,
    pdt_accidente date,
    pvc_nro_incapacidad varchar2,
    pti_horas number
)
AS
    vin_id_ausentismo int;
    vti_existe	 number(1);
BEGIN

    IF pti_tipo = 4 THEN --PRORROGA
       vti_existe := 0;
       BEGIN
          SELECT 1
          INTO vti_existe
          FROM fco_ausentismos
          WHERE compania = pch_compania   AND
          trabajador = pch_trabajador AND
          id_ausentismo = pin_prorroga AND
          concepto = psi_concepto AND
          tipo <> 4;
       EXCEPTION
          WHEN OTHERS THEN vti_existe := 0;
       END;

       IF vti_existe = 0 THEN
          RAISE_APPLICATION_ERROR(-20001, 'El registro a prorrogarar en [FCO_AUSENTISMOS] no existe.');
          RETURN;
       END IF;
    END IF;


    IF psi_randomico = 0 THEN /*--UPDATE*/
        UPDATE fco_ausentismos
        SET concepto = psi_concepto,
            tipo = pti_tipo,
            fecha_inicio = pdt_inicio,
            fecha_causacion = pdt_causacion,
            fecha_pago = pdt_pago,
            fecha_fin = pdt_fin,
            dias = psi_dias,
            tipo_dias = pti_tipo_dias,
            diagnostico = pvc_diagnostico,
            observaciones = pvc_observaciones,
            id_origen = pin_prorroga,
            valor_ibc = pde_valor_ibc,
            calculo_ibc = pti_calculo_ibc,
            fecha_ini_real = pdt_ini_real,
            fecha_fin_real = pdt_fin_real,
            fecha_accidente = pdt_accidente,
            nro_incapacidad = pvc_nro_incapacidad,
            horas = pti_horas
        WHERE
            compania = pch_compania And
            id_ausentismo = pin_id_ausentismo;
    ELSE
        BEGIN

            SELECT Nvl(id_ausentismo,0) + 1
            INTO vin_id_ausentismo
            FROM fco_ausentismos_id
            WHERE compania = pch_compania;

            IF Nvl(vin_id_ausentismo, 0) = 0 THEN
                vin_id_ausentismo := 1;
                INSERT INTO fco_ausentismos_id VALUES (pch_compania, 1);
            ELSE
                UPDATE fco_ausentismos_id
                SET id_ausentismo = vin_id_ausentismo
                WHERE compania = pch_compania;
            END IF;


           INSERT INTO fco_ausentismos
           (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, fecha_ini_real, fecha_fin_real, fecha_accidente, nro_incapacidad, horas)
           VALUES
           (
               pch_compania,
               vin_id_ausentismo,
               pch_trabajador,
               psi_concepto,
               pti_tipo,
               pdt_inicio,
               pdt_causacion,
               pdt_pago,
               pdt_fin,
               psi_dias,
               pti_tipo_dias,
               pvc_diagnostico,
               pvc_observaciones,
               pin_prorroga,
               pde_valor_ibc,
               pti_calculo_ibc,
               pdt_ini_real,
               pdt_fin_real,
               pdt_accidente,
               pvc_nro_incapacidad,
               pti_horas
           );

           DELETE fco_ausentismos_id_as;

           COMMIT WORK;

           INSERT INTO fco_ausentismos_id_as VALUES (psi_randomico, vin_id_ausentismo);
        END;

    END IF;
    COMMIT;
END;
/
