IF OBJECT_ID('dbo.fco_traslados_fpo') IS NOT NULL
    DROP TABLE dbo.fco_traslados_fpo 
GO
CREATE TABLE dbo.fco_traslados_fpo
(compania		char(4)     	NOT NULL,
trabajador		char(10) 	NOT NULL,
FPO_actual		char(10) 	NOT NULL,
FPO_nueva		char(10) 	NULL,
fecha_cambio		smalldatetime  	NOT NULL,
estado          tinyint NOT NULL DEFAULT 0,
	CONSTRAINT pk_fco_traslados_fpo PRIMARY KEY (compania,trabajador, fecha_cambio)
) ON [PRIMARY]

GO
GRANT ALL ON fco_traslados_fpo TO PUBLIC
GO
IF OBJECT_ID('dbo.fco_traslados_eps') IS NOT NULL
    DROP TABLE dbo.fco_traslados_eps 
GO
CREATE TABLE dbo.fco_traslados_eps 
(compania		char(4)      NOT NULL,
trabajador		char(10) 	NOT NULL,
EPS_actual		char(10) 	NOT NULL,
EPS_nueva		char(10) 	NULL,
fecha_cambio    smalldatetime  	NOT NULL,
estado          tinyint NOT NULL DEFAULT 0,
	CONSTRAINT pk_fco_traslados_eps PRIMARY KEY CLUSTERED(compania,trabajador, fecha_cambio)
) ON [PRIMARY]

GO
GRANT ALL ON fco_traslados_eps TO PUBLIC
GO

IF OBJECT_ID('dbo.vw_fco_fpo_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_fpo_trabajador
GO
Create View dbo.vw_fco_fpo_trabajador
As
Select 
	r.compania, r.trabajador,
	d.dato, d.descripcion
From
	rel_trab_agr r,
	datos_agr_trab d
Where
	r.agrupacion = d.agrupacion And
	r.dato = d.dato And
	r.agrupacion = 
    (SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = r.compania AND x.parametro = 'autoliq' AND x.secuencia = 22)
GO
GRANT SELECT ON vw_fco_fpo_trabajador TO PUBLIC
GO
IF OBJECT_ID('dbo.vw_fco_eps_trabajador') IS NOT NULL
    DROP VIEW dbo.vw_fco_eps_trabajador
GO
Create View dbo.vw_fco_eps_trabajador
As
Select 
	r.compania, r.trabajador,
	d.dato, d.descripcion
From
	rel_trab_agr r,
	datos_agr_trab d
Where
	r.agrupacion = d.agrupacion And
	r.dato = d.dato And
	r.agrupacion = 
    (SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = r.compania AND x.parametro = 'autoliq' AND x.secuencia = 21)

GO
GRANT SELECT ON vw_fco_eps_trabajador TO PUBLIC
GO

IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_alta_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_alta_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_alta_traslados_eps(
@i_compania		char(4),
@i_trabajador		char(10),
@i_EPS_actual		char(10),
@i_EPS_nueva		char(10),
@i_fecha_cambio		smalldatetime
)
AS
BEGIN
DECLARE
@i_llave_foranea	TINYINT
	BEGIN TRANSACTION
	INSERT INTO fco_traslados_eps 
    (compania, trabajador, EPS_actual, EPS_nueva, fecha_cambio, estado)
    VALUES 
    (@i_compania,@i_trabajador, @i_EPS_actual, @i_EPS_nueva, @i_fecha_cambio, 0)
	IF @@error <> 0
	  BEGIN
	    ROLLBACK TRANSACTION 
	    RAISERROR 206800 'Error al tratar de insertar en la tabla [fco_traslados_eps]'  
	    RETURN 
	  END
	ELSE
	BEGIN
  		COMMIT TRANSACTION 
	END
END
GO
GRANT EXECUTE ON sp_fco_alta_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_alta_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_alta_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_alta_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@i_fpo_actual		char(10),
@i_fpo_nueva		char(10),
@i_fecha_cambio		smalldatetime
)
AS
BEGIN
	BEGIN TRANSACTION
	INSERT INTO fco_traslados_fpo 
    (compania, trabajador, FPO_actual, FPO_nueva, fecha_cambio, estado)
    VALUES 
	(@i_compania, @i_trabajador, @i_fpo_actual, @i_fpo_nueva, @i_fecha_cambio, 0)
	IF @@error <> 0
	  BEGIN
	    ROLLBACK TRANSACTION 
	    RAISERROR 206800 'Error al tratar de insertar en la tabla [fco_traslados_fpo]'  
	    RETURN 
	  END
	ELSE
	BEGIN
  		COMMIT TRANSACTION 
	END
END
GO
GRANT EXECUTE ON sp_fco_alta_traslados_fpo TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_baja_traslados_eps(
@i_compania		char(4),
@i_trabajador	char(10),
@pdt_fecha smalldatetime
)
AS
BEGIN
	BEGIN TRANSACTION
	DELETE  fco_traslados_eps
		WHERE compania = @i_compania
		AND trabajador = @i_trabajador
        AND fecha_cambio = @pdt_fecha
	IF @@error <> 0
	   BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION 
END 
GO
GRANT EXECUTE ON sp_fco_baja_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_baja_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_baja_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_baja_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@pdt_fecha smalldatetime
)
AS
BEGIN
	BEGIN TRANSACTION
	DELETE  fco_traslados_fpo
		WHERE compania = @i_compania
		AND trabajador = @i_trabajador
        AND fecha_cambio = @pdt_fecha
	IF @@error <> 0
	   BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION 
END 
GO
GRANT EXECUTE ON sp_fco_baja_traslados_fpo TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_traslados_eps]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_cambio_traslados_eps(
@i_compania		char(4),
@i_trabajador		char(10),
@i_EPS_actual		char(10),
@i_EPS_nueva		char(10),
@i_fecha_cambio		smalldatetime)
AS
BEGIN
	BEGIN TRANSACTION
	UPDATE fco_traslados_eps
	SET 
        EPS_actual = @i_EPS_actual,	
    	EPS_nueva   = @i_EPS_nueva,
        estado = 2
	WHERE compania = @i_compania
	AND trabajador = @i_trabajador
	AND fecha_cambio  = @i_fecha_cambio
	
	IF @@error <> 0
	BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION
END 

GO
GRANT EXECUTE ON sp_fco_cambio_traslados_eps TO Public
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_cambio_traslados_fpo]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_cambio_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_cambio_traslados_fpo(
@i_compania		char(4),
@i_trabajador		char(10),
@i_fpo_actual		char(10),
@i_fpo_nueva		char(10),
@i_fecha_cambio		smalldatetime)
AS
BEGIN
	BEGIN TRANSACTION
	UPDATE fco_traslados_fpo
	SET fpo_actual = @i_fpo_actual,	
	    fpo_nueva   = @i_fpo_nueva,
        estado = 2
	WHERE compania = @i_compania
	AND trabajador = @i_trabajador
	AND fecha_cambio  = @i_fecha_cambio
	IF @@error <> 0
	BEGIN
		ROLLBACK TRANSACTION
		RETURN
	END
	COMMIT TRANSACTION
END 
GO
GRANT EXECUTE ON sp_fco_cambio_traslados_fpo TO Public
GO
IF OBJECT_ID('dbo.sp_fco_proc_traslados_eps') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_proc_traslados_eps
GO
CREATE PROCEDURE dbo.sp_fco_proc_traslados_eps
(
    @pch_compania    char(4), 
    @psm_anio        smallint,
    @ptn_mes         tinyint
)
AS
DECLARE	@cch_trabajador char(10),
	@cch_actual     char(10),
	@cch_nueva      char(10)

DECLARE cr_traslados CURSOR FOR
SELECT	trabajador, EPS_actual, EPS_nueva
FROM	fco_traslados_eps
WHERE	compania = @pch_compania AND
trabajador In (SELECT trabajador FROM trabajadores_grales
               WHERE compania = @pch_compania And
               clase_nomina is not null And
               clase_nomina in 
                (SELECT clase_nomina 
                 FROM rel_usu_clase_nom 
                 WHERE usuario = system_user
                 )) AND
DatePart(Year, fecha_cambio) = @psm_anio AND
DatePart(Month, fecha_cambio) = @ptn_mes
BEGIN

	OPEN cr_traslados
	FETCH cr_traslados 
	INTO @cch_trabajador, @cch_actual, @cch_nueva

	WHILE @@FETCH_STATUS = 0 
            BEGIN

		UPDATE 	rel_trab_agr
		SET	dato = @cch_nueva
		WHERE	compania = @pch_compania
		AND	trabajador = @cch_trabajador
		AND	agrupacion = isnull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = rel_trab_agr.compania AND x.parametro = 'autoliq' AND x.secuencia = 21), 'EPS')

		FETCH cr_traslados INTO @cch_trabajador, @cch_actual, @cch_nueva
            END
	CLOSE cr_traslados
	DEALLOCATE cr_traslados
	
	UPDATE fco_traslados_eps
    SET estado = 1
	WHERE	compania = @pch_compania AND
  trabajador In (SELECT trabajador FROM trabajadores_grales
                 WHERE compania = @pch_compania And
                 clase_nomina is not null And
                 clase_nomina in 
                  (SELECT clase_nomina 
                   FROM rel_usu_clase_nom 
                   WHERE usuario = system_user
                   )) AND
		DatePart(Year, fecha_cambio) = @psm_anio AND
		DatePart(Month, fecha_cambio) = @ptn_mes

END

GO
GRANT EXECUTE ON sp_fco_proc_traslados_eps TO Public
GO
IF OBJECT_ID('dbo.sp_fco_proc_traslados_fpo') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_proc_traslados_fpo
GO
CREATE PROCEDURE dbo.sp_fco_proc_traslados_fpo
(
	@i_compania       char(4), 
	@i_anio		  int,
	@i_mes		  int
)
AS
DECLARE	@w_trabajador 	varchar(10),
	@w_nueva	varchar(10)

DECLARE cr_traslados CURSOR FOR
SELECT	trabajador, fpo_nueva
FROM	fco_traslados_fpo
WHERE	compania = @i_compania AND
trabajador In (SELECT trabajador FROM trabajadores_grales
               WHERE compania = @i_compania And
               clase_nomina is not null And
               clase_nomina in 
                (SELECT clase_nomina 
                 FROM rel_usu_clase_nom 
                 WHERE usuario = system_user
                 )) AND
DatePart(Year, fecha_cambio) = @i_anio AND
DatePart(Month, fecha_cambio) = @i_mes
BEGIN
	OPEN cr_traslados
	FETCH cr_traslados 
	INTO @w_trabajador, @w_nueva

	WHILE @@FETCH_STATUS = 0 
            BEGIN

		UPDATE 	REL_TRAB_AGR
		SET	dato = @w_nueva
		WHERE	compania = @i_compania
		AND	trabajador = @w_trabajador
		AND	agrupacion = isnull((SELECT dato FROM vw_fdt_parametros x
     WHERE x.pais = 'COL' AND x.compania = rel_trab_agr.compania AND x.parametro = 'autoliq' AND x.secuencia = 22), 'FPO')

		FETCH cr_traslados INTO @w_trabajador, @w_nueva
            END
	CLOSE cr_traslados
	DEALLOCATE cr_traslados

	UPDATE fco_traslados_fpo
    SET estado = 1
	WHERE	compania = @i_compania AND
                trabajador In (SELECT trabajador FROM trabajadores_grales
                               WHERE compania = @i_compania And
                               clase_nomina is not null And
                               clase_nomina in 
                                (SELECT clase_nomina 
                                 FROM rel_usu_clase_nom 
                                 WHERE usuario = system_user
                                 )) AND
		DatePart(Year, fecha_cambio) = @i_anio AND
		DatePart(Month, fecha_cambio) = @i_mes
END

GO
GRANT EXECUTE ON sp_fco_proc_traslados_fpo TO Public
GO
