CREATE OR REPLACE PROCEDURE sp_fdt_incorpora_embargos_ns 
(
    pch_compania        char,
    psi_id_calendario   smallint,
    pch_clase_nomina    char,
    pch_trabajador      char,
    pvc_usuario         varchar2,
    pdt_fecha_hoy       date
)
AS
/*********************************************************************/
/*** Modulo:      Modulo Fiscal ADAM v3 - Embargos                 ***/
/*** Descripcion: Incorpora embargos a la nómina                   ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 17 de 2002                                 ***/
/*** Revisión:	  Octubre 7 de 2002                                ***/
/*** Motor:	  oracle 8i		Version interna: 1.0       ***/
/*********************************************************************/
    cch_trabajador    char(10);
    csi_concepto      smallint;
    cti_secuencia     smallint;
    cch_agr_base      char(3);
    csi_cnc_base      smallint;
    cti_quinta_parte  smallint;
    cdc_monto_total   number(14,2);
    cdc_saldo_actual  number(14,2);
    cdc_porcentaje    number(4,2);
    cdc_cuota_fija    number(14,2);
    vdc_factor_01     number(15,6);
    vch_referencia    char(10);
    vch_referencia2   char(10);
    vin_cursor        integer;
    vvc_sql           varchar2(2500);
    vin_registros     integer;
    vvc_tabla         varchar2(30);
    vnm_masivo        number(1);
    vch_tipo_nomina   char(2);
    
    vnu_existe        number(1);

    CURSOR cr_embargos IS
    SELECT
        e.trabajador, e.concepto, e.secuencia, e.agr_conceptos_base, 
        Nvl(e.concepto_base,0), Nvl(e.quinta_parte,0), 
        Nvl(e.monto_total,0), Nvl(e.saldo_actual,0),
        Nvl(e.porcentaje,0), Nvl(e.cuota_fija,0)
    FROM
        fdt_embargos e, trabajadores_grales tg, rel_conc_tipo_nomina rctn, fdt_embargos_tipo_nom fetn
    WHERE
	e.compania = tg.compania And e.trabajador = tg.trabajador And
        rctn.compania = e.compania AND rctn.concepto = e.concepto AND rctn.tipo_nomina = vch_tipo_nomina AND
        fetn.compania = e.compania AND fetn.trabajador = e.trabajador AND fetn.concepto = e.concepto AND fetn.secuencia = e.secuencia AND fetn.tipo_nomina = vch_tipo_nomina  AND
        tg.compania = pch_compania And
        tg.clase_nomina = pch_clase_nomina And
        tg.sit_trabajador = 1 And
        e.situacion = 1 And
        ((e.trabajador = pch_trabajador And vnm_masivo=0) OR (vnm_masivo=1)) ;
BEGIN

    --DCR,Jul-17-07: Validando que el periodo este abiero
    vnu_existe := 0;
    BEGIN
        SELECT 1
        INTO vnu_existe
        FROM cal_proc_cias 
        WHERE compania = pch_compania 
        AND id_calendario = psi_id_calendario
        AND sit_periodo = 2;
    EXCEPTION
       WHEN OTHERS THEN vnu_existe := 0;    
    END;
    
    IF vnu_existe = 1 THEN
       RAISE_APPLICATION_ERROR(-20001, 'El periodo está cerrado');
       RETURN;    
    END IF;

    /* Hallar el Tipo de Nómina */  
    SELECT tipo_nomina INTO vch_tipo_nomina FROM calendario_procesos  
    WHERE id_calendario = psi_id_calendario;  

    /* Deducir si el incorpora es masivo o no */
    vnm_masivo := 0;

    IF Nvl(LTrim(RTrim(pch_trabajador))||'0','0') = '0' THEN
        vnm_masivo := 1;
    END IF;

    /* Eliminar las transacciones ya generadas por este incorpora */
    --OJO: DCR,JUL-17-07: Esta tabla para monitores JAVA no va, se comentarea.
/*    vin_cursor := dbms_sql.open_cursor;
    vvc_tabla := 'tt' || rtrim(pch_compania) || to_char(psi_id_calendario);
    vvc_sql := ' DELETE ' || vvc_tabla ||
               ' WHERE compania = ''' || pch_compania || '''' ||
               ' AND clase_nomina = ''' || pch_clase_nomina || '''' ||
               ' AND id_calendario = ' || To_Char(psi_id_calendario) ||
               ' AND origen_transaccion = 9' ||
               ' AND ((trabajador = ''' || pch_trabajador || ''' And ' || To_Char(vnm_masivo) || '=0) OR (' || To_Char(vnm_masivo) || '=1))';
     dbms_sql.parse(vin_cursor, vvc_sql, dbms_sql.v7);
     vin_registros := dbms_sql.execute(vin_cursor);
     dbms_sql.close_cursor(vin_cursor);
*/
    DELETE FROM
        transacciones_ns
    WHERE
        compania = pch_compania And
        clase_nomina = pch_clase_nomina And
        id_calendario = psi_id_calendario And
        origen_transaccion = 9 And
        ((trabajador = pch_trabajador And vnm_masivo=0) OR (vnm_masivo=1));
    /* Recorrer los embargos activos */
    OPEN cr_embargos;
    LOOP
        FETCH cr_embargos
        INTO cch_trabajador, csi_concepto, cti_secuencia, cch_agr_base, csi_cnc_base,
             cti_quinta_parte, cdc_monto_total, cdc_saldo_actual, cdc_porcentaje, cdc_cuota_fija;
        EXIT WHEN cr_embargos%NOTFOUND;
        IF (cdc_monto_total + cdc_saldo_actual > 0) OR (cdc_monto_total = 0) THEN
            /* factor_01 */
            IF cdc_monto_total + cdc_saldo_actual > 0 THEN
                IF cdc_saldo_actual - cdc_cuota_fija > 0 THEN
                    vdc_factor_01 := cdc_cuota_fija;
                ELSE
                    vdc_factor_01 := cdc_saldo_actual;
                END IF;
	      ELSE
                vdc_factor_01 := cdc_cuota_fija;
        END IF;
            /* referencias */                        
            IF csi_cnc_base > 0 THEN
                vch_referencia := To_Char(csi_cnc_base);
                vch_referencia2 := 'C';
            ELSE
                vch_referencia := NVL(cch_agr_base,' ');
                vch_referencia2 := 'A';
            END IF;

--            sp_alta_transacciones_din
             sp_alta_transacciones_ns
            (
                pch_compania,
                pch_clase_nomina,
                psi_id_calendario,
                csi_concepto,
                cch_trabajador,
                vch_referencia,   /* referencia */
                cti_secuencia,    /* secuencia */ --DCR: Adecuando, de acuerdo a cambio de JCL NOV-02-06
                vch_referencia2,	/* referencia2 */
                pdt_fecha_hoy,	/* fecha */
                pdt_fecha_hoy,    	/* fecha2*/
                cdc_porcentaje,	/* tiempo */
                vdc_factor_01,    /* factor_01 */
                cti_secuencia, 	/* factor_02 */
                cti_quinta_parte,   	/* factor_03 */
                0,       		/* importe_reportado */
                0,       		/* importe */
                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 */
                9,    		/* origen_transaccion */
                pvc_usuario, 	/* usuario_registro */
                pdt_fecha_hoy,	/* fecha_registro */
                null,    		/* usuario_proceso */
                null,		/* fecha_proceso */
                null,    		/* usuario_cambio */
                null,    		/* fecha_cambio */
                1,    		/* sit_transaccion */
                1		        /* checa bajas del periodo */
            );
        END IF; /* (cdc_monto_total + cdc_saldo_actual > 0) OR (cdc_monto_total = 0) */
    END LOOP; /* LOOP */
    CLOSE cr_embargos;
    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_incorpora_embargos_ns FOR ADAM.sp_fdt_incorpora_embargos_ns;
GRANT EXECUTE ON sp_fdt_incorpora_embargos_ns TO adama;
