IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes
GO
CREATE TABLE dbo.fco_reportes
( 
	cod_rep  tinyint NOT NULL,
	descripcion varchar (100) NULL,
	proc_generacion varchar (30) NULL,
	proc_borrado varchar(30) NULL,
	operacion char(8) NULL, --porque se lleva las formas a RI y solo se quiere que se vean esos reportes  
	  CONSTRAINT PK_fco_reportes PRIMARY KEY (cod_rep)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_aut]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_aut
GO
CREATE TABLE dbo.fco_reportes_aut
( cod_rep  tinyint NOT NULL,
  compania   char(4) NOT NULL,
  usuariow   varchar(30) NOT NULL,
    CONSTRAINT PK_fco_reportes_aut PRIMARY KEY (cod_rep, compania, usuariow)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_aut TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_cias]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_cias
GO
CREATE TABLE dbo.fco_reportes_cias
(   cod_rep tinyint NOT NULL,
    compania     char(4) NOT NULL,
    CONSTRAINT PK_fco_reportes_cias PRIMARY KEY (cod_rep, compania)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_cias TO Public
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_mm]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_mm
GO
CREATE TABLE dbo.fco_reportes_mm
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar(30) NOT NULL,
	cod_rep  tinyint NOT NULL,
  sec_archivo tinyint NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla ri_interfase_rutas
	secuencia  smallint NULL,
	registros  varchar(2000) NULL
)
GO
GRANT ALL ON fco_reportes_mm TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[fco_reportes_par]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    DROP TABLE dbo.fco_reportes_par
GO
CREATE TABLE dbo.fco_reportes_par
( cod_rep  tinyint NOT NULL,
  secuencia tinyint NOT NULL,
  orden tinyint NOT NULL,
  tit_campo varchar(40) NOT NULL,
  tipo_campo tinyint NOT NULL,
  CONSTRAINT PK_fco_reportes_par PRIMARY KEY (cod_rep, secuencia)
)
ON [PRIMARY]
GO 
GRANT ALL ON fco_reportes_par TO Public
GO


/*

xxxxxxxxxxxxxxxxxxx
x TIPOS DE CAMPO: x
xxxxxxxxxxxxxxxxxxx
 1. Compañía
 2. Trabajador
 3. Concepto
 4. Agr. Concepto,
 5. Agr de Trabajador
 6. Dato Agr de Trabajador
 7. Clase de Nomina
 8. Tipo de Nomina
 9. Valor Entero
 10. Valor numerico con decimales
 11. Valor alfanumerico
 12. fecha
 13. variable del trabajador
 14. variable de nomina
 15. coleccion de trabajador
 16. sucursales
 17. Si/No
 18. Ciudades Pago de embargos
 19. Numero de liquidacion (NI)
*/  

IF OBJECT_ID('dbo.fdt_rutas') IS NULL
CREATE TABLE dbo.fdt_rutas
( 
    operacion char(8) NOT NULL, -- dependiendo del desarrollo, INT(interfase), REP(reportes), BCO(Bancos)
    codigo  tinyint NOT NULL,
    tipo tinyint NOT NULL, --1 (reporte), 2(medio magnetico)
    secuencia smallint NOT NULL,
    archivo varchar(50) NOT NULL,
    ruta varchar(500) NOT NULL,
    tabla varchar(30) NOT NULL,  --donde se guardara la info para ser invocado el reporte
    CONSTRAINT PK_fdt_rutas PRIMARY KEY NONCLUSTERED (operacion, codigo, tipo, secuencia)
)
GRANT ALL ON fdt_rutas TO PUBLIC
GO

SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_reportes]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_reportes
GO
CREATE PROCEDURE dbo.sp_fco_del_reportes
(
  @pch_compania char(4),
  @pti_cod_rep tinyint,
  @pch_operacion char(8)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros de las tablas fco_reportes      ***/
/*** y fco_reportes_cias, fco_reportes_par, fdt_rutas             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
DECLARE
  @vvc_parametro   varchar(10)
BEGIN--1
      
    IF EXISTS (SELECT 1 FROM fco_reportes_cias
      				 WHERE cod_rep = @pti_cod_rep AND compania <> @pch_compania)
		BEGIN
				RAISERROR('Este reporte no se puede eliminar porque tiene relación con otras compañías', 16, 1)
        RETURN;        
    END
        
    SET @vvc_parametro = 'report_' + LTRIM(RTRIM(@pti_cod_rep))
    DELETE FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep
    DELETE FROM fco_reportes_par WHERE cod_rep = @pti_cod_rep
    DELETE FROM fdt_rutas WHERE codigo = @pti_cod_rep AND operacion = @pch_operacion
    DELETE FROM fco_reportes WHERE cod_rep = @pti_cod_rep
    DELETE FROM fdt_parametros WHERE pais = 'COL' AND compania = @pch_compania
    AND parametro = @vvc_parametro

		IF NOT EXISTS (SELECT 1 FROM fco_reportes_cias WHERE compania <> @pch_compania AND cod_rep = @pti_cod_rep)
		BEGIN
	    DELETE FROM fdt_parametros WHERE pais = 'COL' AND compania = '0'
	    AND parametro = @vvc_parametro
		END
        
END--1
GO
GRANT EXECUTE ON sp_fco_del_reportes TO Public
go
SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_del_reportes_par]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_del_reportes_par
GO
CREATE PROCEDURE dbo.sp_fco_del_reportes_par
(
  @pti_cod_rep tinyint,
  @pnu_secuencia tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros de las tablas fco_reportes_par  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005						 ***/
BEGIN--1
      DELETE fco_reportes_par
      WHERE cod_rep = @pti_cod_rep
      AND secuencia = @pnu_secuencia
      
END
GO
GRANT EXECUTE ON sp_fco_del_reportes_par TO Public
go
SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes
GO
CREATE PROCEDURE dbo.sp_fco_upd_reportes
(
  @pch_compania char(4),
  @pti_relacionado tinyint,
  @pti_cod_rep tinyint,
  @pvc_descripcion varchar(100),
  @pti_operacion tinyint = 1, --1:alta, 2:modificacion
  @pch_operacion char(8),    
  @pvc_nombre_proc varchar(30) = NULL,
  @pvc_proc_borrado varchar(30) = NULL
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes       ***/
/*** y ri_intefase_cias                                           ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Agosto 26/2005									***/
BEGIN

		IF EXISTS(SELECT 1 FROM fco_reportes WHERE cod_rep = @pti_cod_rep)
		BEGIN--1
		  IF @pti_operacion = 1
      BEGIN
				 RAISERROR('El codigo del reporte que quiere insertar ya existe. verifique por favor.', 16, 1)
         RETURN
      END
  		
      IF @pti_operacion = 2
			BEGIN
		      UPDATE fco_reportes 
          SET descripcion = @pvc_descripcion,
          proc_generacion = @pvc_nombre_proc, 
          proc_borrado = @pvc_proc_borrado,
          operacion = @pch_operacion
          WHERE cod_rep = @pti_cod_rep
      END
    END--1
    ELSE
         INSERT INTO fco_reportes (cod_rep, descripcion, proc_generacion, proc_borrado, operacion) VALUES(@pti_cod_rep, @pvc_descripcion, @pvc_nombre_proc, @pvc_proc_borrado, @pch_operacion)

    IF @pti_relacionado = 1 --2
		BEGIN
			IF NOT EXISTS (SELECT 1 FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep)
					INSERT INTO fco_reportes_cias (compania, cod_rep) VALUES (@pch_compania, @pti_cod_rep)
		END        
    ELSE
       DELETE FROM fco_reportes_cias WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep
    
END
GO
GRANT EXECUTE ON sp_fco_upd_reportes TO Public
go
SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes_aut]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes_aut
GO
CREATE PROCEDURE sp_fco_upd_reportes_aut
(
  @pch_compania char(4),
  @pti_cod_rep tinyint,
  @pti_relacionado tinyint,    
  @pvc_usuario varchar(30)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes_aut   ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 8 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 26/2005							***/
BEGIN

    IF @pti_relacionado = 1 --2
    BEGIN
      IF NOT EXISTS (SELECT 1 FROM fco_reportes_aut 
        						WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep AND usuariow = @pvc_usuario)
         INSERT INTO fco_reportes_aut (cod_rep, compania, usuariow) VALUES (@pti_cod_rep, @pch_compania, @pvc_usuario)
    END
    ELSE
       DELETE FROM fco_reportes_aut WHERE compania = @pch_compania AND cod_rep = @pti_cod_rep AND usuariow = @pvc_usuario
    
END
GO
GRANT EXECUTE ON sp_fco_upd_reportes_aut TO Public
go
SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_upd_reportes_par]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_upd_reportes_par
GO
CREATE PROCEDURE dbo.sp_fco_upd_reportes_par
( @pti_cod_rep tinyint,
  @pnu_secuencia tinyint = NULL,
  @pnu_orden tinyint,
  @pvc_tit_campo varchar(40),
  @pnu_tipo_campo tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fco_reportes_par   ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/
/*** Pasado a SQL, Diana C. Rios, Septiembre 25/2005							***/
DECLARE
  @vnu_secuencia tinyint
BEGIN

IF ISNULL(@pnu_secuencia,0) = 0 -- es un registro nuevo
BEGIN--1
		SELECT @vnu_secuencia = MAX(secuencia)
		FROM fco_reportes_par
		WHERE cod_rep = @pti_cod_rep;

		SET @vnu_secuencia = ISNULL(@vnu_secuencia,0) + 1;

    INSERT INTO fco_reportes_par (cod_rep, secuencia, orden, tit_campo, tipo_campo)
    VALUES (@pti_cod_rep, @vnu_secuencia, @pnu_orden, @pvc_tit_campo, @pnu_tipo_campo);
END--1
ELSE
BEGIN--2
     --revisando que el orden no exista ya en otra secuencia
     IF NOT EXISTS(SELECT 1 FROM fco_reportes_par
					        WHERE cod_rep = @pti_cod_rep
					        AND secuencia <> @pnu_secuencia
					        AND orden = @pnu_orden)
         UPDATE fco_reportes_par
         SET orden = @pnu_orden,
         tit_campo = @pvc_tit_campo,
         tipo_campo = @pnu_tipo_campo
         WHERE cod_rep = @pti_cod_rep
         AND secuencia = @pnu_secuencia
     ELSE
		 BEGIN
				RAISERROR('El valor del orden que digito ya existe en otro registro', 16, 1)
        RETURN
     END
END --2

END
GO
GRANT EXECUTE ON sp_fco_upd_reportes_par TO Public
go
IF OBJECT_ID('dbo.sp_fdt_del_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_del_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_del_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: borra registros en las tablas fdt_rutas ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
     DELETE fdt_rutas
     WHERE operacion = @pch_tipo_cod
     AND codigo = @pti_codigo
     AND tipo = @pti_tipo
     AND secuencia = @psi_secuencia
END
GO
GRANT EXECUTE ON dbo.sp_fdt_del_rutas TO PUBLIC
GO

IF OBJECT_ID('dbo.sp_fdt_upd_rutas') IS NOT NULL
    DROP PROCEDURE dbo.sp_fdt_upd_rutas
GO
CREATE PROCEDURE dbo.sp_fdt_upd_rutas
( 
    @pch_tipo_cod char(8),
    @pti_codigo tinyint,
    @psi_secuencia smallint,
    @pti_tipo tinyint,
    @pvc_archivo varchar(50),
    @pvc_ruta varchar(500),
    @pvc_tabla varchar(30)
)
AS
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: crea registros en las tablas fdt_rutas          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 26 de 2005                                      ***/
/********************************************************************/
BEGIN
    DECLARE @vsi_secuencia smallint

    IF ISNULL(@psi_secuencia,0) = 0 -- es un registro nuevo
    BEGIN    
        SELECT @vsi_secuencia = MAX(secuencia)
        FROM fdt_rutas
        WHERE operacion = @pch_tipo_cod
        AND codigo = @pti_codigo
        AND tipo = @pti_tipo
    
        SET @vsi_secuencia = ISNULL(@vsi_secuencia,0) + 1
    
        INSERT INTO fdt_rutas (operacion, codigo, tipo, secuencia, archivo, ruta, tabla)
        VALUES (@pch_tipo_cod ,@pti_codigo, @pti_tipo, @vsi_secuencia, @pvc_archivo, @pvc_ruta, @pvc_tabla)  
    END
    ELSE
        UPDATE fdt_rutas
        SET archivo = @pvc_archivo,
            ruta = @pvc_ruta,
            tabla = @pvc_tabla
        WHERE operacion = @pch_tipo_cod
          AND codigo = @pti_codigo
          AND tipo = @pti_tipo
          AND secuencia = @psi_secuencia    
END
GO
GRANT EXECUTE ON sp_fdt_upd_rutas TO PUBLIC
GO
