drop table fco_sucursales;
CREATE TABLE fco_sucursales
( compania	char(4) NOT NULL,
  sucursal	char(10) NOT NULL,
  descripcion   varchar2(40),
  direccion varchar2(40),
  cod_ciudad char(3),
  cod_dpto char(2),
  telefono varchar2(10),
  fax varchar2(10),
  clase_nomina char(2),
  nombre_retenedor varchar2(60),
  cedula_retenedor varchar2(60),
  agencias varchar2(300),
  codigo_iss  char(3),
  autoliquida number(1),
  CONSTRAINT pk_fco_sucursales PRIMARY KEY (compania,sucursal)
  USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_sucursales FOR ADAM.fco_sucursales;

GRANT ALL ON fco_sucursales TO ADAMA;

CREATE OR REPLACE VIEW VW_FCO_SUCURSALES_CIA AS
SELECT
    rac.compania,
    dat.dato AS sucursal,
    NVL((SELECT x.descripcion FROM fco_sucursales x 
         WHERE x.compania = rac.compania AND x.sucursal = dat.dato), dat.descripcion) AS descripcion,
    NVL((SELECT x.clase_nomina FROM fco_sucursales x 
         WHERE x.compania = rac.compania AND x.sucursal = dat.dato), '--') clase_nomina
FROM rel_agr_companias rac, datos_agr_trab dat
WHERE rac.agrupacion = dat.agrupacion
AND RTRIM(rac.agrupacion) =
RTRIM((SELECT x.dato FROM vw_fdt_parametros x
           WHERE x.pais = 'COL' AND x.compania = rac.compania
            AND x.parametro = 'autoliq' AND x.secuencia = 23))
UNION
SELECT
    cias.compania,
    ' ',
    'Cia. sin Sucursales',
    '--'
FROM companias cias
WHERE (SELECT x.dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = cias.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NULL
OR
NOT EXISTS
(SELECT 1 FROM agrupaciones_trab a
 WHERE RTRIM(agrupacion) = RTRIM((SELECT x.dato FROM vw_fdt_parametros x
                           WHERE x.pais = 'COL' AND x.compania = cias.compania
                             AND x.parametro = 'autoliq' AND x.secuencia = 23)));

CREATE PUBLIC SYNONYM vw_fco_sucursales_cia FOR ADAM.vw_fco_sucursales_cia;
GRANT ALL ON vw_fco_sucursales_cia TO ADAMA;

CREATE OR REPLACE VIEW vw_fco_sucursales  
AS  
SELECT   
    v.compania, v.sucursal, s.codigo_iss,   
    NVL(v.descripcion, s.descripcion) AS descripcion,   
    s.direccion, s.cod_dpto, s.cod_ciudad, s.telefono, s.fax,    
    s.nombre_retenedor, s.cedula_retenedor, s.agencias, s.autoliquida
FROM vw_fco_sucursales_cia v, fco_sucursales s
WHERE s.compania(+) = v.compania
AND s.sucursal(+) = v.sucursal;

CREATE PUBLIC SYNONYM vw_fco_sucursales FOR ADAM.vw_fco_sucursales;
GRANT ALL ON vw_fco_sucursales TO ADAMA;

CREATE OR REPLACE VIEW vw_fco_div_trabajador
AS
SELECT rta.compania, rta.trabajador, NVL(s.sucursal, '0') dato, NVL(s.descripcion, 'SIN DATO') descripcion
FROM vw_fco_sucursales_cia s, rel_trab_agr rta, agrupaciones_trab a
WHERE a.agrupacion = rta.agrupacion
AND rta.compania = s.compania(+)
AND rta.dato = s.sucursal(+)
AND RTRIM(rta.agrupacion) = RTRIM(NVL((SELECT x.dato FROM vw_fdt_parametros x
                           WHERE x.pais = 'COL' AND x.compania = s.compania
                             AND x.parametro = 'autoliq' AND x.secuencia = 23),'SUC'))
UNION
SELECT tg.compania, tg.trabajador, '', 'Cia. sin sucursales'
FROM trabajadores_grales tg
WHERE (SELECT x.dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = tg.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 23) IS NULL
OR
NOT EXISTS
(SELECT 1 FROM agrupaciones_trab a
 WHERE RTRIM(agrupacion) = RTRIM((SELECT x.dato FROM vw_fdt_parametros x
                           WHERE x.pais = 'COL' AND x.compania = tg.compania
                           AND x.parametro = 'autoliq' AND x.secuencia = 23)));

CREATE PUBLIC SYNONYM vw_fco_div_trabajador FOR ADAM.vw_fco_div_trabajador;
GRANT ALL ON vw_fco_div_trabajador TO ADAMA;

CREATE OR REPLACE PROCEDURE sp_fco_alta_sucursales
(
    i_compania		char,
    i_sucursal	    	char,
    i_descripcion  	varchar2,
    i_direccion    	varchar2,
    i_cod_dpto     	char,
    i_cod_ciudad   	char,
    i_telefono     	varchar2,
    i_fax          	varchar2,
    i_nombre_retenedor 	varchar2,
    i_cedula_retenedor 	varchar2,
    i_agencias 		varchar2,
    i_codigo_iss 	char,
    i_autoliquida       number
)
AS
	vnm_existe	number(1);
  vch_agr char(10);
  
BEGIN
	vnm_existe := 0;

	BEGIN
		SELECT 1 INTO vnm_existe 
		FROM fco_sucursales
    WHERE compania = i_compania 
		And sucursal = i_sucursal;
	EXCEPTION
		WHEN OTHERS THEN vnm_existe := 0;
	END;

	IF vnm_existe = 1 THEN
		raise_application_error(-20001, 'El registro a insertar en [fco_sucursales] ya existe');
		return;
	END IF;

  BEGIN
    SELECT NVL(dato, 'SUC')
    INTO vch_agr
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = i_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 23;
	EXCEPTION
			WHEN OTHERS THEN vch_agr := 'SUC';	
  END;
    
  vnm_existe := 0;
  BEGIN
    SELECT 1 INTO vnm_existe
    FROM datos_agr_trab
    WHERE agrupacion = vch_agr
    AND dato = i_sucursal;
	EXCEPTION
			WHEN OTHERS THEN vnm_existe := 0;	
  END;

  IF vnm_existe = 1 THEN
        sp_cambio_datos_agr_trab(vch_agr, i_sucursal, i_descripcion);
  ELSE
        sp_alta_datos_agr_trab(vch_agr, i_sucursal, i_descripcion);
  END IF;
      
	BEGIN
    		INSERT INTO fco_sucursales
    		(compania, sucursal, descripcion,
     		direccion, cod_dpto, cod_ciudad, telefono, fax, 
     		nombre_retenedor, cedula_retenedor, agencias, codigo_iss, clase_nomina, autoliquida)
    		VALUES
    		(i_compania, i_sucursal, i_descripcion,
     		i_direccion, i_cod_dpto, i_cod_ciudad, i_telefono, i_fax, 
     		i_nombre_retenedor, i_cedula_retenedor, i_agencias, i_codigo_iss, '--', i_autoliquida);
	EXCEPTION
		WHEN OTHERS THEN 
		raise_application_error(-20001, 'El registro a insertar en la tabla [fco_sucursales]');
		return;
	END;
	COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_alta_sucursales FOR ADAM.sp_fco_alta_sucursales;
GRANT EXECUTE ON sp_fco_alta_sucursales TO adama;

CREATE OR REPLACE PROCEDURE sp_fco_baja_sucursales
(
    i_compania      char,
    i_sucursal	    char
)
AS
	vnm_existe	number(1);
BEGIN
	vnm_existe := 0;    
	BEGIN
		SELECT 1 INTO vnm_existe
		FROM fco_sucursales
    WHERE compania = i_compania And
    sucursal = i_sucursal;
	EXCEPTION
		WHEN OTHERS THEN
		raise_application_error(-20001, 'El registro a eliminar en [fco_sucursales] no existe');
		return;
	END;

	BEGIN	
    DELETE FROM fco_sucursales
    WHERE
      	compania = i_compania And
      	sucursal = i_sucursal;
	EXCEPTION
		WHEN OTHERS THEN
		raise_application_error(-20001, 'Error al eliminar de la tabla [fco_sucursales]');
		return;
	END;
	COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_baja_sucursales FOR ADAM.sp_fco_baja_sucursales;
GRANT EXECUTE ON sp_fco_baja_sucursales TO adama;



CREATE OR REPLACE PROCEDURE sp_fco_cambio_sucursales
(
    i_compania		char,
    i_sucursal	    	char,
    i_descripcion  	varchar2,
    i_direccion    	varchar2,
    i_cod_dpto     	char,
    i_cod_ciudad   	char,
    i_telefono     	varchar2,
    i_fax          	varchar2,
    i_nombre_retenedor 	varchar2,
    i_cedula_retenedor 	varchar2,
    i_agencias    	varchar2,
    i_codigo_iss  	char,
    i_autoliquida       number
)
AS
	vnm_existe	number(1);
  vch_agr char(10);  
BEGIN
	vnm_existe := 0;
	BEGIN
      SELECT 1 INTO vnm_existe 
      FROM fco_sucursales
      WHERE compania = i_compania And
      RTrim(sucursal) = RTrim(i_sucursal);
	EXCEPTION
		WHEN NO_DATA_FOUND THEN vnm_existe := 0;
	END;

	IF vnm_existe = 0 THEN --no existe
    sp_fco_alta_sucursales(i_compania, i_sucursal, i_descripcion, i_direccion, i_cod_dpto, 
        i_cod_ciudad, i_telefono, i_fax, i_nombre_retenedor, i_cedula_retenedor, 
        i_agencias, i_codigo_iss, i_autoliquida);
  ELSE
    BEGIN
      SELECT NVL(dato, 'SUC')
      INTO vch_agr
      FROM vw_fdt_parametros 
      WHERE pais = 'COL' 
        AND compania = i_compania 
        AND parametro = 'autoliq' 
        AND secuencia = 23;
  	EXCEPTION
  			WHEN OTHERS THEN vch_agr := 'SUC';	
    END;
      
    vnm_existe := 0;
    BEGIN
      SELECT 1 INTO vnm_existe
      FROM datos_agr_trab
      WHERE agrupacion = vch_agr
      AND dato = i_sucursal;
  	EXCEPTION
  			WHEN OTHERS THEN vnm_existe := 0;	
    END;
  
    IF vnm_existe = 1 THEN
          sp_cambio_datos_agr_trab(vch_agr, i_sucursal, i_descripcion);
    ELSE
          sp_alta_datos_agr_trab(vch_agr, i_sucursal, i_descripcion);
    END IF;
  	
  	BEGIN
	    	UPDATE fco_sucursales
    		SET descripcion = i_descripcion,
        	direccion = i_direccion, 
        	cod_dpto = i_cod_dpto,
        	cod_ciudad = i_cod_ciudad,
        	telefono = i_telefono,
        	fax = i_fax,
        	nombre_retenedor = i_nombre_retenedor,
        	cedula_retenedor = i_cedula_retenedor,
        	agencias = i_agencias,
        	codigo_iss = i_codigo_iss,
		autoliquida = i_autoliquida
    		WHERE
        	compania = i_compania And
        	sucursal = i_sucursal;
  	EXCEPTION
  		WHEN OTHERS THEN
  		raise_application_error(-20001, 'Error al actualizar la tabla [fco_sucursales]');
  		return;
  	END;
 	END IF; --no existe

	COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_cambio_sucursales FOR ADAM.sp_fco_cambio_sucursales;
GRANT EXECUTE ON sp_fco_cambio_sucursales TO adama;

