CREATE OR REPLACE PROCEDURE sp_fdt_alta_ciudades_pago
(
    pch_ciudad char,
    pch_nombre varchar2
)
AS
    vti_flag number(1);
BEGIN
    vti_flag := 0;
    BEGIN
	    SELECT 1 INTO vti_flag FROM DUAL 
	    WHERE EXISTS (SELECT 1 FROM fdt_ciudades_pago
		    WHERE ciudad = pch_ciudad);
    EXCEPTION
        WHEN OTHERS THEN vti_flag := 0;	
    END;

    IF vti_flag = 1 THEN
		UPDATE fdt_ciudades_pago
		SET nombre = pch_nombre
		WHERE ciudad = pch_ciudad;
    ELSE
	    INSERT INTO fdt_ciudades_pago (ciudad, nombre)
	    VALUES (pch_ciudad, pch_nombre);
     END IF;


 	COMMIT;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_alta_ciudades_pago FOR ADAM.sp_fdt_alta_ciudades_pago;
GRANT EXECUTE ON sp_fdt_alta_ciudades_pago TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_alta_emb_tipo_nom  
(  
    pch_compania      char,  
    pch_trabajador    char,  
    psi_concepto      NUMBER,
    pti_secuencia     NUMBER,
    pch_tipo_nom	   char,
    pti_alta          NUMBER
)  
/*********************************************************************/  
/*** Modulo:      Módulo Fiscal ADAM V.3 - Embargos                ***/  
/*** Descripcion: Crea o Actualiza los tipos de nomina del embargo ***/  
/*** Autor:   Laura A. Guzmán                                      ***/  
/*** Fecha:   Junio 28 de 2006                                     ***/  
/*** Motor:   SQL Server 7.0 Version interna: 1.00                 ***/  
/*********************************************************************/  
AS  
BEGIN  
    DELETE FROM fdt_embargos_tipo_nom
    WHERE compania = pch_compania And   
    trabajador = pch_trabajador And  
    concepto = psi_concepto And  
    secuencia = pti_secuencia and
    tipo_nomina = pch_tipo_nom;

    IF pti_alta = 1 THEN
        INSERT INTO fdt_embargos_tipo_nom
            (compania,  
             trabajador,  
             concepto,  
             secuencia,  
             tipo_nomina)  
        VALUES  
            (pch_compania,  
             pch_trabajador,  
             psi_concepto,  
             pti_secuencia,  
             pch_tipo_nom);
    END IF;
    COMMIT;

END;
/
CREATE PUBLIC SYNONYM sp_fdt_alta_emb_tipo_nom FOR ADAM.sp_fdt_alta_emb_tipo_nom;
GRANT EXECUTE ON sp_fdt_alta_emb_tipo_nom TO ADAMA;
CREATE OR REPLACE PROCEDURE sp_fdt_alta_oficinas_embargos
(
    pch_compania            char,
    pch_codigo	           char,
    pch_descripcion     varchar2
)
AS
    vti_flag number(1);
BEGIN
    vti_flag := 0;
    BEGIN
	    SELECT 1 INTO vti_flag FROM DUAL 
	    WHERE EXISTS (SELECT 1 FROM fdt_embargos_oficinas
		    WHERE compania = pch_compania And
			    cod_oficina = pch_codigo);
    EXCEPTION
        WHEN OTHERS THEN vti_flag := 0;	
    END;

    IF vti_flag = 1 THEN
		UPDATE fdt_embargos_oficinas
		SET descripcion_oficina = pch_descripcion
		WHERE compania = pch_compania And cod_oficina = pch_codigo;
    ELSE
	    INSERT INTO fdt_embargos_oficinas (compania, cod_oficina, descripcion_oficina)
	    VALUES (pch_compania, pch_codigo, pch_descripcion);
     END IF;

 	COMMIT;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_alta_oficinas_embargos FOR ADAM.sp_fdt_alta_oficinas_embargos;
GRANT EXECUTE ON sp_fdt_alta_oficinas_embargos TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_aum_embargos_ns
(
    pch_compania      char,
    psi_id_calendario number
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: aumenta cuota fija de embargos                   ***/
/*** Autor:	  Laura A. Guzman M                                    ***/
/*** Fecha:	  Junio 29 de 2006                                     ***/
/*** Motor:	  SQL Server 2000	Version interna: 1.00              ***/
/*********************************************************************/
AS
    vch_tipo_nom    char(2);
    vsi_anio        number(4);
    vsi_periodo     number(3);
    vsi_mes         number(2);

BEGIN
    SELECT tipo_nomina, anio, periodo, mes_acumular
    INTO vch_tipo_nom, vsi_anio, vsi_periodo, vsi_mes
    FROM calendario_procesos
    WHERE id_calendario = psi_id_calendario;


    INSERT INTO fdt_hist_aum_emb (compania, trabajador, concepto, secuencia, id_calendario,
      cuota_anterior, cuota_nueva, porcentaje_aum, valor_aum, tipo_nomina, anio, periodo)
    SELECT pch_compania, a.trabajador, a.concepto, a.secuencia, psi_id_calendario, a.cuota_fija, 
    a.cuota_fija + (a.cuota_fija * (To_Number(b.dato) / 100)),
    To_Number(b.dato), 0, vch_tipo_nom, vsi_anio, vsi_periodo
    FROM fdt_embargos a, fdt_parametros b
    WHERE a.compania = b.compania
    AND b.secuencia = a.porcentaje_aumento
    AND a.compania = pch_compania
    AND a.situacion = 1
    AND a.porcentaje_aumento = b.secuencia
    AND b.parametro = 'otros'
    AND NVL(a.porcentaje_aumento,0) > 0
    AND a.mes_aumento = vsi_mes
    AND a.anio_desde >= vsi_anio;


    INSERT INTO fdt_hist_aum_emb (compania, trabajador, concepto, secuencia, id_calendario,
      cuota_anterior, cuota_nueva, porcentaje_aum, valor_aum, tipo_nomina, anio, periodo)
    SELECT pch_compania, a.trabajador, a.concepto, a.secuencia, psi_id_calendario, a.cuota_fija, a.cuota_fija + a.valor_aumento,
    0, a.valor_aumento, vch_tipo_nom, vsi_anio, vsi_periodo
    FROM fdt_embargos a, fdt_parametros b
    WHERE a.compania = b.compania
    AND b.secuencia = a.porcentaje_aumento
    AND a.compania = pch_compania
    AND a.situacion = 1
    AND a.porcentaje_aumento = b.secuencia
    AND b.parametro = 'otros'
    AND NVL(a.valor_aumento,0) > 0
    AND a.mes_aumento = vsi_mes
    AND a.anio_desde >= vsi_anio;

    UPDATE
        fdt_embargos
    SET
        cuota_fija = 
       (SELECT cuota_nueva FROM fdt_hist_aum_emb a
        WHERE a.compania = fdt_embargos.compania And
        a.trabajador = fdt_embargos.trabajador And
        a.concepto = fdt_embargos.concepto And
        a.secuencia = fdt_embargos.secuencia And
        a.id_calendario = psi_id_calendario)
    WHERE 
        situacion = 1 and exists
     (SELECT 1 FROM fdt_hist_aum_emb a
        WHERE a.compania = fdt_embargos.compania And
        a.trabajador = fdt_embargos.trabajador And
        a.concepto = fdt_embargos.concepto And
        a.secuencia = fdt_embargos.secuencia And
        a.id_calendario = psi_id_calendario);

    COMMIT;

END;
/
GRANT EXECUTE ON sp_fdt_aum_embargos_ns TO ADAMA;
CREATE PUBLIC SYNONYM sp_fdt_aum_embargos_ns FOR ADAM.sp_fdt_aum_embargos_ns;

CREATE OR REPLACE PROCEDURE sp_fdt_baja_ciudades_pago
(
    pch_ciudad char
)
AS
BEGIN

		DELETE fdt_ciudades_pago
		WHERE ciudad = pch_ciudad;

 	COMMIT;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_baja_ciudades_pago FOR ADAM.sp_fdt_baja_ciudades_pago;
GRANT EXECUTE ON sp_fdt_baja_ciudades_pago TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_baja_embargos
(
    pch_compania    char,
    pch_trabajador  char,
    psi_concepto    smallint,
    pti_secuencia   smallint
)
AS
BEGIN
    BEGIN
        UPDATE fdt_embargos	
        SET situacion = 2, fecha_baja = sysdate
        WHERE compania = pch_compania And
              trabajador = pch_trabajador And
              concepto = psi_concepto And
              secuencia = pti_secuencia;
    EXCEPTION
	WHEN OTHERS THEN
	raise_application_error(-20001, 'Error al actualizar la tabla [fdt_Embargos]');
	return;
    END;
    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_baja_embargos FOR ADAM.sp_fdt_baja_embargos;
GRANT EXECUTE ON sp_fdt_baja_embargos TO adama;

CREATE OR REPLACE PROCEDURE sp_fdt_baja_oficinas_embargos
(
    pch_compania            char,
    pch_codigo	           char,
    pch_descripcion     varchar2
)
AS
BEGIN
	DELETE fdt_embargos_oficinas
	WHERE compania = pch_compania And cod_oficina = pch_codigo;

 	COMMIT;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_baja_oficinas_embargos FOR ADAM.sp_fdt_baja_oficinas_embargos;
GRANT EXECUTE ON sp_fdt_baja_oficinas_embargos TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_cierre_embargos_ns
(
    pch_compania      char,
    psi_id_calendario smallint
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: Actualiza saldos y controla situacion            ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 14 de 2002                                 ***/
/*** Motor:	  Oracle 8i		Version interna: 1.0       ***/
/*********************************************************************/
AS
    vdt_fecha_pago    date;
    vvc_sql           varchar2(2500);
    vin_id_cursor     integer;
    vin_rows          integer;
BEGIN
    SELECT
        fecha_pago
    INTO
        vdt_fecha_pago 
    FROM
        calendario_procesos
    WHERE
        id_calendario = psi_id_calendario;

    vvc_sql :=
    'UPDATE ' ||
        'fdt_embargos ' ||
    'SET ' ||
        'saldo_actual = saldo_actual - ' ||
        '(SELECT importe FROM transacciones_ns tns ' ||
          'WHERE tns.compania = fdt_embargos.compania ' ||
            'And tns.trabajador = fdt_embargos.trabajador ' ||
            'And tns.concepto = fdt_embargos.concepto ' ||
            'And tns.factor_02 = fdt_embargos.secuencia ' ||
            'And tns.compania = ''' || pch_compania || ''' ' ||
            'And tns.id_calendario = ' || To_Char(psi_id_calendario) || ') ' ||
    'WHERE ' ||
        'compania = ''' || pch_compania || ''' And ' ||
        'monto_total > 0 And ' ||
        'situacion = 1 And ' ||
        'EXISTS ' ||
         '(SELECT 1 FROM transacciones_ns tns ' ||
          'WHERE tns.compania = fdt_embargos.compania ' ||
            'And tns.trabajador = fdt_embargos.trabajador ' ||
            'And tns.concepto = fdt_embargos.concepto ' ||
            'And tns.factor_02 = fdt_embargos.secuencia ' ||
            'And tns.compania = ''' || pch_compania || '''' ||
            'And tns.id_calendario = ' || To_Char(psi_id_calendario) || ')';
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Embargos - Error al actualizar tabla');
    END;

    COMMIT;

    UPDATE
        fdt_embargos
    SET
        saldo_actual = 0, situacion = 2, fecha_baja = vdt_fecha_pago
    WHERE
        compania = pch_compania And
        monto_total > 0 And
        situacion = 1 And
        saldo_actual <= 0;
    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_cierre_embargos_ns FOR ADAM.sp_fdt_cierre_embargos_ns;
GRANT EXECUTE ON sp_fdt_cierre_embargos_ns TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_crea_embargo
(
    pch_compania      char,
    pch_trabajador    char,
    psi_concepto      smallint,
    pti_secuencia     smallint,
    pdt_fecha_embargo date,
    pdc_oficina       number,
    pti_clase         smallint,
    pvc_expediente    varchar2,
    pdc_juzgado       number,
    pti_banco         smallint,
    pdc_cuenta        number,
    pti_tipo_id_dem   smallint,
    pdc_id_demandante number,
    pvc_apellidos     varchar2,
    pvc_nombres       varchar2,
    pch_agr_conceptos char,
    psi_cnc_base      smallint,
    pti_quinta_parte  smallint,
    pdc_monto_total   number,
    pdc_porcentaje    number,
    pdc_cuota_fija    number,
    pdc_saldo_actual  number,
    pch_OfOrigen      char,
    pch_OfDestino     char,
    pch_ciudad_pago   char,
    pti_porcentaje_aum number,
    pti_valor_aum     number,
    pti_mes_aum       number,
    pin_anio_desde    number

)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal ADAM V.3 - Embargos                ***/
/*** Descripcion: Crea o Actualiza el embargo para el trabajador   ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 14 de 2002                                 ***/
/*** Motor:	  Oracle 8i		Version interna: 1.0       ***/
/*********************************************************************/
AS
    vnm_existe number(1);
BEGIN
    vnm_existe := 0;
    BEGIN
        SELECT 1 INTO vnm_existe
        FROM DUAL
        WHERE EXISTS (
            SELECT 1 FROM fdt_embargos
            WHERE compania = pch_compania And 
                  trabajador = pch_trabajador And
                  concepto = psi_concepto And
                  secuencia = pti_secuencia);
    EXCEPTION
        WHEN OTHERS THEN vnm_existe := 0;	
    END;
    IF vnm_existe = 0 THEN
        INSERT INTO fdt_embargos
            (compania,
             trabajador,
             concepto,
             secuencia,
             fecha_alta,
             situacion,
             consecutivo_oficina,
             oficina_origen,
             oficina_destino,
             clase_deposito,
             numero_expediente,
             codigo_juzgado,
             banco,
             cuenta,
             tipo_id_demandante,
             id_demandante,
             apellido_demandante,
             nombre_demandante,
             agr_conceptos_base,
             concepto_base,
             quinta_parte,
             monto_total,
             saldo_actual,
             porcentaje,
             cuota_fija,
             ciudad_pago,
             porcentaje_aumento,
             valor_aumento,
             mes_aumento,
             anio_desde)
        VALUES
            (pch_compania,
             pch_trabajador,
             psi_concepto,
             pti_secuencia,
             pdt_fecha_embargo,
             1,
             pdc_oficina,
             pch_OfOrigen,
             pch_OfDestino,
             pti_clase,
             pvc_expediente,
             pdc_juzgado,
             pti_banco,
             pdc_cuenta,
             pti_tipo_id_dem,
             pdc_id_demandante,
             pvc_apellidos,
             pvc_nombres,
             pch_agr_conceptos,
             psi_cnc_base,
             pti_quinta_parte,
             pdc_monto_total,
             pdc_monto_total,
             pdc_porcentaje,
             pdc_cuota_fija,
             pch_ciudad_pago,
             pti_porcentaje_aum,
             pti_valor_aum,
             pti_mes_aum,
             pin_anio_desde);
    ELSE
        UPDATE fdt_embargos
        SET  fecha_alta = pdt_fecha_embargo,
             consecutivo_oficina = pdc_oficina,
             clase_deposito = pti_clase,
             numero_expediente = pvc_expediente,
             codigo_juzgado = pdc_juzgado,
             banco = pti_banco,
             cuenta = pdc_cuenta,
             tipo_id_demandante = pti_tipo_id_dem,
             id_demandante = pdc_id_demandante,
             apellido_demandante = pvc_apellidos,
             nombre_demandante = pvc_nombres,
             agr_conceptos_base = pch_agr_conceptos,
             concepto_base = psi_cnc_base,
             quinta_parte = pti_quinta_parte, 
             monto_total = pdc_monto_total,
             porcentaje = pdc_porcentaje,
             cuota_fija = pdc_cuota_fija,
             saldo_actual = pdc_saldo_Actual,
             oficina_origen = pch_OfOrigen,
             oficina_destino = pch_OfDestino,
             ciudad_pago = pch_ciudad_pago,
             porcentaje_aumento = pti_porcentaje_aum,
             valor_aumento = pti_valor_aum,
             mes_aumento = pti_mes_aum,
             anio_desde = pin_anio_desde
        WHERE
            compania = pch_compania And
            trabajador = pch_trabajador And
            concepto = psi_concepto And
            secuencia = pti_secuencia;
    END IF;

    COMMIT WORK;

END;
/
CREATE PUBLIC SYNONYM sp_fdt_crea_embargo FOR ADAM.sp_fdt_crea_embargo;
GRANT EXECUTE ON sp_fdt_crea_embargo TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_incorpora_embargos_ni
(
    pch_compania           	char,
    pch_tipo_nomina        	char,
    psi_anio_acumular      	smallint, 
    pti_mes_acumular       	smallint,
    psi_numero_liquidacion 	smallint, 
    pch_trabajador		char,
    pdt_fecha_liquidacion	date,
    pch_usuario            	char,
    pdt_fecha_hoy		date
)
/*********************************************************************/
/*** Modulo:      Modulo Fiscal Embargos                           ***/
/*** Descripcion: Incorpora embargos a la liquidación              ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 14 de 2002                                 ***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.00      ***/
/*********************************************************************/
AS
    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);

    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 = pch_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 = pch_tipo_nomina  AND
        e.compania = pch_compania And
        tg.sit_trabajador = 1 And
        e.situacion = 1 And
        (
         (LTrim(RTrim(tg.trabajador)) = LTrim(RTrim(pch_trabajador)) And Nvl(LTrim(RTrim(pch_trabajador)) || 'vacio', 'vacio') <> 'vacio') OR
         (Nvl(LTrim(RTrim(pch_trabajador))||'vacio', 'vacio') = 'vacio' And 
          tg.trabajador in (SELECT trabajador FROM liquidaciones_enc 
                            WHERE compania = pch_compania And
                                  numero_liquidacion = psi_numero_liquidacion))
        );


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
        origen_transaccion = 9 And
        (
         (trabajador = pch_trabajador And Nvl(LTrim(RTrim(pch_trabajador))||'vacio', 'vacio') <> 'vacio') OR
         (Nvl(LTrim(RTrim(pch_trabajador))||'vacio', 'vacio') = 'vacio')
        );


    /* 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 := cch_agr_base;
                vch_referencia2 := 'A';
            END IF;
            
            sp_alta_liquidaciones_det
		(
                pch_compania,
                pch_tipo_nomina,
                psi_anio_acumular,
                pti_mes_acumular,
                psi_numero_liquidacion,
                csi_concepto,
                cch_trabajador,
                vch_referencia,    /* referencia */
                null,    	   /* secuencia */
                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 */
                null,              /* coleccion_1 */
                null,              /* coleccion_2 */
                null,              /* coleccion_2 */
                9,    		   /* origen_transaccion */
                pch_usuario, 	   /* usuario_registro */
                pdt_fecha_hoy,	   /* fecha_registro */
                null,    	   /* usuario_proceso */
                null,		   /* fecha_proceso */
                null,              /* usuario_aplico */
                null,              /* fecha_aplico */
                1);    	           /* sit_transaccion */

           END IF; /* IF (cdc_monto_total + cdc_saldo_actual > 0) OR (cdc_monto_total = 0) */

    END LOOP; /* END LOOP */

    CLOSE cr_embargos;

    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_incorpora_embargos_ni FOR ADAM.sp_fdt_incorpora_embargos_ni;
GRANT EXECUTE ON sp_fdt_incorpora_embargos_ni TO adama;
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);

    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
    /* 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 */
    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 := cch_agr_base;
                vch_referencia2 := 'A';
            END IF;
            sp_alta_transacciones_din
            (
                pch_compania,
                pch_clase_nomina,
                psi_id_calendario,
                csi_concepto,
                cch_trabajador,
                vch_referencia,   /* referencia */
                NULL,    		/* secuencia */
                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;
CREATE OR REPLACE PROCEDURE sp_fdt_rea_aum_emb_ns
(
    pch_compania      char,
    psi_id_calendario number
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: aumenta cuota fija de embargos                   ***/
/*** Autor:	  Laura A. Guzman M                                    ***/
/*** Fecha:	  Junio 29 de 2006                                     ***/
/*** Motor:	  SQL Server 2000	Version interna: 1.00              ***/
/*********************************************************************/
AS
BEGIN
    UPDATE
        fdt_embargos
    SET
        cuota_fija = 
        (SELECT cuota_anterior FROM fdt_hist_aum_emb a
         WHERE a.compania = fdt_embargos.compania And
          a.trabajador = fdt_embargos.trabajador And
          a.concepto = fdt_embargos.concepto And
          a.secuencia = fdt_embargos.secuencia And
          a.id_calendario = psi_id_calendario)
    WHERE 
        compania = pch_compania And
        EXISTS (SELECT 1 FROM fdt_hist_aum_emb a
         WHERE a.compania = fdt_embargos.compania And
          a.trabajador = fdt_embargos.trabajador And
          a.concepto = fdt_embargos.concepto And
          a.secuencia = fdt_embargos.secuencia And
          a.id_calendario = psi_id_calendario);

    DELETE
        fdt_hist_aum_emb
    WHERE
        compania = pch_compania And
        id_calendario = psi_id_calendario;
    

    COMMIT;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_rea_aum_emb_ns  FOR ADAM.sp_fdt_rea_aum_emb_ns;
GRANT EXECUTE ON sp_fdt_rea_aum_emb_ns TO ADAMA;

CREATE OR REPLACE PROCEDURE sp_fdt_reapertura_embargos_ns
(
    pch_compania      char,
    psi_id_calendario smallint
)
/*********************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano - Embargos              ***/
/*** Descripcion: Proceso contrario al cierre de embargos          ***/
/*** Autor:	  Juan Carlos Leguizamon                           ***/
/*** Fecha:	  Junio 18 de 2002                                 ***/
/*** Motor:	  Oracle 8i		Version interna: 1.0       ***/
/*********************************************************************/
AS
    vdt_fecha_pago    date;
    vvc_sql           varchar2(2500);
    vin_id_cursor     integer;
    vin_rows          integer;
BEGIN
    SELECT
        fecha_pago
    INTO
        vdt_fecha_pago 
    FROM
        calendario_procesos
    WHERE
        id_calendario = psi_id_calendario;

    vvc_sql :=
    'UPDATE ' ||
        'fdt_embargos ' ||
    'SET ' ||
        'saldo_actual = saldo_actual + ' ||
        '(SELECT importe FROM transacciones_ns tns ' ||
          'WHERE tns.compania = fdt_embargos.compania ' ||
            'And tns.trabajador = fdt_embargos.trabajador ' ||
            'And tns.concepto = fdt_embargos.concepto ' ||
            'And tns.factor_02 = fdt_embargos.secuencia ' ||
            'And tns.compania = ''' || pch_compania || ''' ' ||
            'And tns.id_calendario = ' || To_Char(psi_id_calendario) || ') ' ||
    'WHERE ' ||
        'compania = ''' || pch_compania || ''' And ' ||
        'monto_total > 0 And ' ||
        'EXISTS ' ||
         '(SELECT 1 FROM transacciones_ns tns ' ||
          'WHERE tns.compania = fdt_embargos.compania ' ||
            'And tns.trabajador = fdt_embargos.trabajador ' ||
            'And tns.concepto = fdt_embargos.concepto ' ||
            'And tns.factor_02 = fdt_embargos.secuencia ' ||
            'And tns.compania = ''' || pch_compania || '''' ||
            'And tns.id_calendario = ' || To_Char(psi_id_calendario) || ')';
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Embargos - Error al actualizar tabla');
    END;

    COMMIT;

    UPDATE
        fdt_embargos
    SET
        situacion = 1, fecha_baja = null
    WHERE
        compania = pch_compania And
        monto_total > 0 And
        situacion = 2 And
        saldo_actual > 0;
    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_reapertura_embargos_ns FOR ADAM.sp_fdt_reapertura_embargos_ns;
GRANT EXECUTE ON sp_fdt_reapertura_embargos_ns TO adama;

CREATE OR REPLACE PROCEDURE sp_var_ailiq_refe
(
    bcalind number,
    pch_compania char,
    pch_clase_nomina char,
    psi_id_cal smallint,
    pch_tipo_nomina char,
    psi_anio smallint,
    pti_periodo smallint,
    pdt_fec_termino date,
    pch_trabajador char,
    psi_concepto smallint,
    pch_referencia char,
    psi_secuencia smallint, 
    chsub_var1 varchar2,
    chsub_var2	varchar2,
    mvar_value	IN OUT number, 
    chvar_value IN OUT varchar
)
AS 
/*****************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano ADAM V.3 - Embargos ***/
/*** Descripcion: Halla el valor base en tiempo de cálculo     ***/
/*** Revision:    Juan Carlos Leguizamón                       ***/
/*** Fecha:	  Junio 17 2002                                ***/
/*** Motor:	  Oracle 8i		Version interna: 1.0   ***/
/*****************************************************************/
    vdc_valor number(19,6);
    vch_clave char(10);
    vin_id_cursor integer;
    vin_registros integer;
    vvc_varname varchar(40);
    vti_status smallint;
    vvc_valor varchar2(40); 
    vch_varclass char(2);
    vti_flag smallint;
    vsi_anio_acumular smallint;
    vti_mes_acumular smallint;
    vch_tipo_nomina char(2);
    vsi_numero_liquidacion smallint;
   
BEGIN 
 
    vdc_valor := 0;
    mvar_value := 0;
    chvar_value := NULL;

    IF pti_periodo > 0 THEN
        RETURN;
    END IF;

    /*** Se obtiene la información necesaria para la consulta ***/
    vvc_varname := 'anio_acumular';
    sp_varname 
       (vvc_varname, 
        vdc_valor,
	vvc_valor,
	vch_varclass,
	vti_flag,
	vti_status);
    vsi_anio_acumular := vdc_valor;

    vvc_varname := 'mes_acumular';
    sp_varname 
       (vvc_varname,
	vdc_valor,
	vvc_valor,
	vch_varclass,
	vti_flag,
	vti_status);
    vti_mes_acumular := vdc_valor;

    vvc_varname := 'numero_liquidacion';
    sp_varname
       (vvc_varname,
	vdc_valor,
	vvc_valor,
	vch_varclass,
	vti_flag,
	vti_status);
    vsi_numero_liquidacion := vdc_valor;

    vvc_varname := 'tipo_nomina';
    sp_varname
       (vvc_varname,
	vdc_valor,
	vvc_valor,
	vch_varclass,
	vti_flag,
	vti_status);
    vch_tipo_nomina := vvc_valor;

    BEGIN
        SELECT
            referencia2
        INTO
            vch_clave
        FROM
            liquidaciones_det
        WHERE
            compania = pch_compania And
            tipo_nomina = vch_tipo_nomina And
            anio_acumular = vsi_anio_acumular And
            concepto = psi_concepto And
            numero_liquidacion = vsi_numero_liquidacion And
            trabajador = pch_trabajador And
            referencia = pch_referencia And
            secuencia = psi_secuencia;
    EXCEPTION
        WHEN OTHERS THEN vch_clave := '';
    END;

    IF LTrim(RTrim(vch_clave)) = 'A' THEN  -- La base es una agrupación de conceptos
        SELECT
            Sum(Nvl(Decode(signo,'-',-1*importe,importe),0))
        INTO
            vdc_valor
        FROM
            liquidaciones_det liq, rel_conceptos_agr rca
	WHERE
            liq.compania = rca.compania And liq.concepto = rca.concepto And
            liq.compania = pch_compania And
            liq.tipo_nomina  = pch_tipo_nomina And
            liq.anio_acumular = vsi_anio_acumular And
            liq.numero_liquidacion = vsi_numero_liquidacion And
            liq.trabajador = pch_trabajador And
            rca.agr_conceptos = LTrim(RTrim(pch_referencia));

    ELSE -- La base es un concepto
        SELECT
            Sum(Nvl(importe,0))
        INTO
            vdc_valor
        FROM
            liquidaciones_det
	WHERE
            compania = pch_compania And
            tipo_nomina  = pch_tipo_nomina And
            anio_acumular = vsi_anio_acumular And
            numero_liquidacion = vsi_numero_liquidacion And
            trabajador = pch_trabajador And
            concepto = LTrim(RTrim(pch_referencia));
    END IF;

    mvar_value := Nvl(vdc_valor,0);
    RETURN;
END;
/
CREATE PUBLIC SYNONYM sp_var_ailiq_refe FOR ADAM.sp_var_ailiq_refe;
GRANT EXECUTE ON sp_var_ailiq_refe TO adama;
CREATE OR REPLACE PROCEDURE sp_var_aiper_refe
(
    bcalind            number,
    pch_compania       char,
    pch_clase_nomina   char,
    psi_id_cal         smallint,
    pch_tipo_nomina    char,
    psi_anio	        smallint,
    pti_periodo        smallint,
    pdt_fec_termino	date,
    pch_trabajador     char,
    psi_concepto       smallint,
    pch_referencia     char,
    psi_secuencia      smallint, 
    chsub_var1	        varchar2,
    chsub_var2	        varchar2,
    mvar_value	        IN OUT number,
    chvar_value        IN OUT varchar2
)
AS 
/*****************************************************************/
/*** Modulo:      Módulo Fiscal Colombiano ADAM V.3 - Embargos ***/
/*** Descripcion: Halla el valor base en tiempo de cálculo     ***/
/*** Autor:	  Laura Guzman / 2001                          ***/
/*** Revision:    Juan Carlos Leguizamón                       ***/
/*** Fecha:	  Junio 17 2002                                ***/
/*** Motor:	  Oracle 8i             Version interna: 1.00  ***/
/*****************************************************************/
    vdc_valor     number(19,6);
    vch_clave     char(10);
    vin_id_cursor integer;
    vin_registros integer;
BEGIN  
    vdc_valor := 0;
    mvar_value := 0;
    chvar_value := NULL;

    IF pti_periodo = 0 THEN
        RETURN;
    END IF;

    BEGIN
        SELECT
            referencia2
        INTO
            vch_clave
        FROM
            transacciones_ns
        WHERE
            compania = pch_compania And
            clase_nomina = pch_clase_nomina And
            id_calendario = psi_id_cal And
            concepto = psi_concepto And
            trabajador = pch_trabajador And
            referencia = pch_referencia And
            secuencia = psi_secuencia;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            vch_clave := 'vacio';
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor,
             ' SELECT referencia2' ||
             ' FROM TT' || RTrim(pch_compania) || RTrim(To_Char(psi_id_cal)) ||
             ' WHERE compania = ''' || pch_compania || '''' ||
             ' AND clase_nomina = ''' || pch_clase_nomina || '''' ||
             ' AND id_calendario = ' || To_Char(psi_id_cal) ||
             ' AND concepto = ' || To_Char(psi_concepto) || 
             ' AND trabajador = ''' || pch_trabajador || '''' ||
             ' AND referencia = ''' || pch_referencia || '''' ||
             ' AND secuencia = ' || To_Char(psi_secuencia), dbms_sql.v7);

             dbms_sql.define_column_char(vin_id_cursor, 1, vch_clave, 10);
             vin_registros := dbms_sql.execute(vin_id_cursor);
             IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
                 dbms_sql.column_value_char(vin_id_cursor, 1, vch_clave);
             END IF;
             dbms_sql.close_cursor(vin_id_cursor);
    END;

    IF LTrim(RTrim(vch_clave)) = 'A' THEN -- La base es una agrupación de conceptos
        SELECT
            Sum(Nvl(Decode(signo,'-',-1*importe,importe),0))
        INTO
            vdc_valor
        FROM
            transacciones_ns tns, rel_conceptos_agr rca
	WHERE
            tns.compania = rca.compania And tns.concepto = rca.concepto And
            tns.compania = pch_compania And
            tns.clase_nomina  = pch_clase_nomina And
            tns.id_calendario = psi_id_cal And
            tns.trabajador = pch_trabajador And
            rca.agr_conceptos = LTrim(RTrim(pch_referencia));

    ELSE -- La base es un concepto

        SELECT
            Sum(Nvl(importe,0))
        INTO
            vdc_valor
        FROM
            transacciones_ns
	WHERE
            compania = pch_compania And
            clase_nomina  = pch_clase_nomina And
            id_calendario = psi_id_cal And
            concepto = LTrim(RTrim(pch_referencia)) And
            trabajador = pch_trabajador;
    END IF;

    mvar_value := Nvl(vdc_valor,0);
    RETURN;
END;
/
CREATE PUBLIC SYNONYM sp_var_aiper_refe FOR ADAM.sp_var_aiper_refe;
GRANT EXECUTE ON sp_var_aiper_refe TO adama;

