IF OBJECT_ID('dbo.fco_sucursales') IS NULL
CREATE TABLE dbo.fco_sucursales
( 
    compania char(4) NOT NULL,
    sucursal char(10) NOT NULL,
    descripcion varchar(40) NOT NULL,
    direccion varchar(40) NULL,
    cod_ciudad char(3) NULL,
    cod_dpto char(2) NULL,
    telefono varchar(10) NULL,
    fax varchar(10) NULL,
    clase_nomina char(2) NULL,
    nombre_retenedor varchar(60) NULL,
    cedula_retenedor varchar(60) NULL,
    agencias varchar(300) NULL,
    codigo_iss char(3) NULL,
    autoliquida bit NULL,
    CONSTRAINT pk_fco_sucursales PRIMARY KEY (compania, sucursal)
)
GO
GRANT ALL ON fco_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_sucursales_cia') IS NOT NULL
    DROP VIEW dbo.vw_fco_sucursales_cia
GO
CREATE VIEW dbo.vw_fco_sucursales_cia
AS
SELECT 
    rac.compania, 
    dat.dato AS sucursal, 
    ISNULL(suc.descripcion, dat.descripcion) AS descripcion, 
    ISNULL(suc.clase_nomina, '--') clase_nomina
FROM rel_agr_companias rac
INNER JOIN datos_agr_trab dat ON rac.agrupacion = dat.agrupacion 
LEFT JOIN fco_sucursales suc ON suc.compania = rac.compania AND suc.sucursal = dat.dato
WHERE rac.agrupacion = (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)
AND (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) IS NOT NULL
-- SEGURIDAD POR DATO DE AGRUPACION
AND NOT EXISTS
(SELECT 1 FROM rel_usu_agr_trab r 
 WHERE r.agrupacion = dat.agrupacion AND r.dato = dat.dato AND r.usuario = SYSTEM_USER)

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 agrupacion = (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))

GO
GRANT SELECT ON vw_fco_sucursales_cia TO PUBLIC
GO


IF OBJECT_ID('dbo.vw_fco_sucursales') IS NOT NULL
    DROP VIEW dbo.vw_fco_sucursales
GO
CREATE VIEW dbo.vw_fco_sucursales  
AS  
SELECT   
    v.compania, v.sucursal, s.codigo_iss,   
    ISNULL(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, IsNull(Convert(tinyint, s.autoliquida), 1) autoliquida
FROM vw_fco_sucursales_cia v  
LEFT JOIN fco_sucursales s ON v.compania = s.compania AND v.sucursal = s.sucursal
WHERE 
-- SEGURIDAD POR CLASE DE NOMINA
(EXISTS(SELECT 1 FROM rel_usu_clase_nom x 
           WHERE x.clase_nomina = s.clase_nomina
             AND x.usuario = SYSTEM_USER) OR ISNULL(v.clase_nomina, '--') = '--')
GO
GRANT SELECT ON dbo.vw_fco_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_div_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_div_trabajador
GO
CREATE VIEW dbo.vw_fco_div_trabajador
AS
/* Compañías Con Sucursales */
SELECT tg.compania, tg.trabajador, ISNULL(x.sucursal, '0') dato, ISNULL(x.descripcion, 'NO ASIGNADA') descripcion
FROM trabajadores_grales tg
LEFT JOIN 
(SELECT rta.compania, rta.trabajador, s.sucursal, s.descripcion
 FROM vw_fco_sucursales_cia s
 INNER JOIN rel_trab_agr rta ON rta.compania = s.compania AND rta.dato = s.sucursal
   AND rta.agrupacion = (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)) AS x 
    ON tg.compania = x.compania AND tg.trabajador = x.trabajador
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 NOT NULL
AND EXISTS
(SELECT 1 FROM agrupaciones_trab a
 INNER JOIN rel_agr_companias rac ON a.agrupacion = rac.agrupacion
 WHERE a.agrupacion = (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)
   AND rac.compania = tg.compania)

UNION

/* Compañías Sin Sucursales */
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 agrupacion = (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))


GO
GRANT ALL ON dbo.vw_fco_div_trabajador TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_alta_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_alta_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_alta_sucursales
(
    @pch_compania char(4),
    @pch_sucursal char(10),
    @pvc_descripcion varchar(40),
    @pvc_direccion varchar(40),
    @pch_cod_dpto char(2),
    @pch_cod_ciudad char(3),
    @pvc_telefono varchar(10),
    @pvc_fax varchar(10),
    @pvc_nombre_retenedor varchar(60),
    @pvc_cedula_retenedor varchar(60),
    @pvc_agencias varchar(300),
    @pch_codigo_iss char(3)
)
AS
BEGIN
    IF EXISTS(
		SELECT 1 FROM fco_sucursales
        WHERE compania = @pch_compania 
          AND sucursal = @pch_sucursal)
    BEGIN
		RAISERROR ('El registro a insertar en [fco_sucursales] ya existe', 16, 1)
		RETURN
	END

    DECLARE @vch_agr char(10)

    SELECT @vch_agr = ISNULL(dato, 'SUC') 
    FROM vw_fdt_parametros 
    WHERE pais = 'COL' 
      AND compania = @pch_compania 
      AND parametro = 'autoliq' 
      AND secuencia = 23

    IF EXISTS (SELECT 1 FROM datos_agr_trab
               WHERE agrupacion = @vch_agr
                 AND dato = @pch_sucursal)
        EXEC sp_cambio_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
    ELSE
        EXEC sp_alta_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion

	INSERT INTO fco_sucursales
	(compania, sucursal, descripcion, direccion, cod_dpto, 
     cod_ciudad, telefono, fax, nombre_retenedor, cedula_retenedor, 
     agencias, codigo_iss, clase_nomina)
	VALUES
	(@pch_compania, @pch_sucursal, @pvc_descripcion, @pvc_direccion, @pch_cod_dpto, 
     @pch_cod_ciudad, @pvc_telefono, @pvc_fax, @pvc_nombre_retenedor, @pvc_cedula_retenedor, 
     @pvc_agencias, @pch_codigo_iss, '--')
END
GO
GRANT EXECUTE ON dbo.sp_fco_alta_sucursales TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fco_baja_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_baja_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_baja_sucursales
(
    @pch_compania char(4),
    @pch_sucursal char(10)
)
AS
BEGIN
    DELETE FROM fco_sucursales
    WHERE compania = @pch_compania AND sucursal = @pch_sucursal
END
GO
GRANT EXECUTE ON sp_fco_baja_sucursales TO PUBLIC
GO




IF OBJECT_ID('dbo.sp_fco_cambio_sucursales') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_cambio_sucursales
GO
CREATE PROCEDURE dbo.sp_fco_cambio_sucursales  
(  
    @pch_compania char(4),  
    @pch_sucursal char(10),  
    @pvc_descripcion varchar(40),  
    @pvc_direccion varchar(40),  
    @pch_cod_dpto char(2),  
    @pch_cod_ciudad char(3),  
    @pvc_telefono varchar(10),  
    @pvc_fax varchar(10),  
    @pvc_nombre_retenedor varchar(60),  
    @pvc_cedula_retenedor varchar(60),  
    @pvc_agencias varchar(300),  
    @pch_codigo_iss char(3),
    @pbi_autoliquida bit
)  
AS  
BEGIN  
    IF NOT EXISTS(  
        SELECT 1 FROM fco_sucursales  
        WHERE compania = @pch_compania   
          AND sucursal = @pch_sucursal)  
        EXEC sp_fco_alta_sucursales  
            @pch_compania, @pch_sucursal,   @pvc_descripcion, @pvc_direccion, @pch_cod_dpto, 
            @pch_cod_ciudad, @pvc_telefono, @pvc_fax, @pvc_nombre_retenedor, @pvc_cedula_retenedor, 
            @pvc_agencias, @pch_codigo_iss
    ELSE
    BEGIN
        DECLARE @vch_agr char(10)
    
        SELECT @vch_agr = ISNULL(dato, 'SUC') 
        FROM vw_fdt_parametros 
        WHERE pais = 'COL' 
          AND compania = @pch_compania 
          AND parametro = 'autoliq' 
          AND secuencia = 23
    
        IF EXISTS (SELECT 1 FROM datos_agr_trab
                   WHERE agrupacion = @vch_agr
                     AND dato = @pch_sucursal)
            EXEC sp_cambio_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
        ELSE
            EXEC sp_alta_datos_agr_trab @vch_agr, @pch_sucursal, @pvc_descripcion
    
        UPDATE fco_sucursales  
        SET descripcion = @pvc_descripcion,  
            direccion = @pvc_direccion,  
            cod_dpto = @pch_cod_dpto,  
            cod_ciudad = @pch_cod_ciudad,  
            telefono = @pvc_telefono,  
            fax = @pvc_fax,  
            nombre_retenedor = @pvc_nombre_retenedor,  
            cedula_retenedor = @pvc_cedula_retenedor,  
            agencias = @pvc_agencias,  
            codigo_iss = @pch_codigo_iss,
            autoliquida = @pbi_autoliquida
        WHERE compania = @pch_compania   
          AND sucursal = @pch_sucursal  
    END    
END  
GO
GRANT EXECUTE ON dbo.sp_fco_cambio_sucursales TO PUBLIC
GO
