IF EXISTS (
    SELECT 1
    FROM sys.triggers
    WHERE parent_id = OBJECT_ID('Clientes')
      AND name = 'CT_Clientes_Hist_Upd'
)
BEGIN
    DROP TRIGGER CT_Clientes_Hist_Upd;
END

GO


CREATE TRIGGER CT_Clientes_Hist_Upd ON Clientes
AFTER UPDATE
AS 
SET NOCOUNT ON
DECLARE @Id_Cliente					INT
DECLARE @Id_Tipo_Cli				SMALLINT
DECLARE @Id_Cobrador				VARCHAR(10)
DECLARE @Fecha_Alta					DATETIME
DECLARE @Id_Motivo_Est				SMALLINT
DECLARE @Fecha_Baja					DATETIME
DECLARE @Id_Cliente_Externo			VARCHAR(14)
DECLARE @Id_Tarjeta					VARCHAR(10)
DECLARE @Tar_Nro					VARCHAR(25)
DECLARE @Tar_Fecha_Alta				DATETIME
DECLARE @Tar_Fecha_Baja				DATETIME
DECLARE @Id_Cliente_Ref				INT
DECLARE @UltimoItem					SMALLINT
DECLARE @Flag_Grabar				INT
DECLARE @Id_Usuario					SMALLINT
DECLARE @Id_Cli_Relac				SMALLINT

SET @Flag_Grabar =  dbo.CF_xParam('Cli_Hist')
IF(ISNULL(@Flag_Grabar,0) <> 0)
BEGIN
	IF ISNUMERIC(SYSTEM_USER) = 1
		SET @Id_Usuario =  SYSTEM_USER 
    ELSE
		SET @Id_Usuario =  0

	DECLARE clientes_hist_update CURSOR FOR
	SELECT	I.Id_Cliente,						ISNULL(I.Id_Tipo_Cli, 0),		ISNULL(I.Id_Cobrador, ''),
			I.Fecha_Alta,						ISNULL(I.Id_Motivo_Est, 0),	I.Fecha_Baja,
			ISNULL(I.Id_Cliente_Externo, ''),	ISNULL(I.Id_Tarjeta, ''),		ISNULL(I.Tar_Nro, ''),
			I.Tar_Fecha_Alta,					I.Tar_Fecha_Baja,				ISNULL(I.Id_Cliente_Ref, 0),
			I.Id_Cli_Relac
			FROM Inserted I, Deleted D
			WHERE I.Id_Cliente = D.Id_Cliente
			AND (
				(I.Id_Tipo_Cli <> D.Id_Tipo_Cli) OR
				(I.Id_Cobrador <> D.Id_Cobrador) OR
				(ISNULL(I.Fecha_Alta, '19000101') <> ISNULL(D.Fecha_Alta, '19000101')) OR 
				(I.Id_Motivo_Est <> D.Id_Motivo_Est) OR
				(ISNULL(I.Fecha_Baja, '19000101') <> ISNULL(D.Fecha_Baja, '19000101')) OR		
				(I.Id_Cliente_Externo <> D.Id_Cliente_Externo) OR				
				(I.Id_Tarjeta  <> D.Id_Tarjeta) OR				
				(I.Tar_Nro <> D.Tar_Nro) OR
				(ISNULL(I.Tar_Fecha_Alta, '19000101') <> ISNULL(D.Tar_Fecha_Alta, '19000101')) OR
				(ISNULL(I.Tar_Fecha_Baja, '19000101') <> ISNULL(D.Tar_Fecha_Baja, '19000101')) OR
				(I.Id_Cliente_Ref <> D.Id_Cliente_Ref) OR
				(I.Id_Cli_Relac <> D.Id_Cli_Relac)
			)


	OPEN clientes_hist_update
	FETCH NEXT FROM clientes_hist_update 
								INTO @Id_Cliente, @Id_Tipo_Cli, @Id_Cobrador, @Fecha_Alta, @Id_Motivo_Est, @Fecha_Baja, 
								@Id_Cliente_Externo, @Id_Tarjeta, @Tar_Nro, @Tar_Fecha_Alta, @Tar_Fecha_Baja, @Id_Cliente_Ref,@Id_Cli_Relac

	WHILE (@@FETCH_STATUS = 0)
	BEGIN

   
		SET @UltimoItem = ISNULL((SELECT ISNULL(MAX(Item), 0) FROM Clientes_Hist WHERE Id_Cliente = @Id_Cliente),0) + 1
	
		INSERT INTO Clientes_Hist	(Id_Cliente,		Item,			Fecha,
										Id_Tipo_Cli,		Id_Cobrador,	Fecha_Alta,
										Id_Motivo_Est,		Fecha_Baja,		Id_Cliente_Externo,
										Id_Tarjeta,			Tar_Nro,		Tar_Fecha_Alta,
										Tar_Fecha_Baja,		Id_Cliente_Ref, Id_Usuario,
										Id_Cli_Relac)
			VALUES						(@Id_Cliente,		@UltimoItem,		GETDATE(),
										@Id_Tipo_Cli,		@Id_Cobrador,	@Fecha_Alta,
										@Id_Motivo_Est,		@Fecha_Baja,	@Id_Cliente_Externo,
										@Id_Tarjeta,		@Tar_Nro,		@Tar_Fecha_Alta,
										@Tar_Fecha_Baja,	@Id_Cliente_Ref,@Id_Usuario,
										@Id_Cli_Relac)
	
		FETCH NEXT FROM clientes_hist_update 
								INTO @Id_Cliente, @Id_Tipo_Cli, @Id_Cobrador, @Fecha_Alta, @Id_Motivo_Est, @Fecha_Baja, 
								@Id_Cliente_Externo, @Id_Tarjeta, @Tar_Nro, @Tar_Fecha_Alta, @Tar_Fecha_Baja, @Id_Cliente_Ref,@Id_Cli_Relac
	END

	CLOSE clientes_hist_update
	DEALLOCATE clientes_hist_update
END
