--Hash:740531D55C2F58662C3BEBBB82CD3FF5

-- Bloqueo exclusivo por base de datos
--//
SET NOCOUNT ON;

DECLARE @__ZiurDbScriptLockResource NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
DECLARE @__ZiurDbScriptLockResult INT;
EXEC @__ZiurDbScriptLockResult = sp_getapplock
    @Resource = @__ZiurDbScriptLockResource,
    @LockMode = N'Exclusive',
    @LockOwner = N'Session',
    @LockTimeout = 600000; -- 10 min

IF (@__ZiurDbScriptLockResult < 0)
BEGIN
    RAISERROR(N'No se pudo obtener el bloqueo exclusivo de actualizacion para esta base de datos.', 16, 1);
    SET NOEXEC ON;
END

/* Idempotencia a nivel de script: si la version ya existe, no ejecutar nada. */
IF EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 965)
BEGIN
    PRINT N'Scripts_965.sql: la version 965 ya esta aplicada. Se omite ejecucion.';
    EXEC sp_releaseapplock @Resource = @__ZiurDbScriptLockResource, @LockOwner = N'Session';
    SET NOEXEC ON;
END

SET XACT_ABORT ON;
GO

SET DATEFORMAT mdy;

--Validar que no existan scripts que no se hayan ejecutado
--//
IF EXISTS
(
	SELECT a.NumVersion + 1 AS HuecoInicio
	FROM ZiurVersiones a
	LEFT JOIN ZiurVersiones b ON a.NumVersion + 1 = b.NumVersion
	WHERE a.NumVersion>830 AND b.NumVersion IS NULL
	AND a.NumVersion + 1 < 965
)
RAISERROR('Error : hay un script que no se ejecuto , debe ejecutarlo manualmente.', 20, -1) with log
--//

--Colocar contenido de script diferencial aqui (Ziur.Database.publish.sql)

GO
/*
 Plantilla de script anterior a la implementación							
--------------------------------------------------------------------------------------
 Este archivo contiene instrucciones de SQL que se ejecutarán antes del script de compilación	
 Use la sintaxis de SQLCMD para incluir un archivo en el script anterior a la implementación			
 Ejemplo:      :r .\miArchivo.sql								
 Use la sintaxis de SQLCMD para hacer referencia a una variable en el script anterior a la implementación		
 Ejemplo:      :setvar TableName miTabla							
               SELECT * FROM [$(TableName)]					
--------------------------------------------------------------------------------------
*/
GO

GO
PRINT N'Creating Table [dbo].[DocElectronicos]...';


GO
IF OBJECT_ID(N'dbo.DocElectronicos', N'U') IS NULL
BEGIN
CREATE TABLE [dbo].[DocElectronicos] (
    [IdDoc]       INT                        IDENTITY (1, 1) NOT NULL,
    [RowGuid]     UNIQUEIDENTIFIER           ROWGUIDCOL NOT NULL DEFAULT (NEWID()),
    [FechaRecep]  DATE                       NOT NULL,
    [Fecha]       DATE                       NOT NULL,
    [Prefijo]     NVARCHAR (10)              NOT NULL,
    [NroDoc]      NVARCHAR (20)              NOT NULL,
    [TipoDoc]     NVARCHAR (40)              NOT NULL,
    [NitEmisor]   NVARCHAR (100)             NOT NULL,
    [Emisor]      NVARCHAR (50)              NOT NULL,
    [Resultado]   NVARCHAR (50)              NOT NULL,
    [EstRadian]   NVARCHAR (50)              NOT NULL,
    [Total]       DECIMAL (28, 6)            NOT NULL,
    [FileName]    NVARCHAR (255)             NOT NULL,
    [FileData]    VARBINARY (MAX) FILESTREAM NOT NULL,
    [CreatedDate] DATETIME                   NOT NULL DEFAULT (GETDATE()),
    CONSTRAINT [PK_Documentos_Electronicos] PRIMARY KEY CLUSTERED ([IdDoc] ASC),
    UNIQUE NONCLUSTERED ([RowGuid] ASC)
) FILESTREAM_ON [FILESTREAMZ];
END


GO
PRINT N'Altering Procedure [dbo].[ClientesDeleteALL]...';
IF OBJECT_ID(N'dbo.ClientesDeleteALL', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[ClientesDeleteALL] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE ClientesDeleteALL
	@IdCliente INT = 0,
	@InfoUsuario NVARCHAR(100),
	@Exito INT = 0 output
As
BEGIN 

BEGIN TRAN

	BEGIN TRY
		
	exec CrearContextoUsuario @InfoUsuario

	DELETE FROM Clientes_Contactos WHERE IdCliente = @IdCliente
    DELETE FROM Clientes_Asociacion WHERE IdCliente = @IdCliente
    DELETE FROM Clientes_Direcciones WHERE IdCliente = @IdCliente
    DELETE FROM Clientes_Archivos WHERE IdCliente = @IdCliente
    DELETE FROM dbo.Clientes_Empleados WHERE IdCliente = @IdCliente
    DELETE FROM Clientes_Especial WHERE IdCliente = @IdCliente
    DELETE FROM Clientes_ResponFiscal where IdCliente = @IdCliente
    DELETE FROM Clientes_Tributos where IdCliente = @IdCliente
    --Quitar el cliente asociado al prospecto
    update dbo.Clientes_Prospectos
    set IdClienteConv=null
    where IdClienteConv=@IdCliente

    DELETE FROM Clientes WHERE IdCliente = @IdCliente

    SET @Exito = 1
	
	COMMIT TRAN
	
    RETURN
    END TRY 
			 
    BEGIN CATCH 
	IF @@error =547 SET @Exito = 0
	ROLLBACK TRAN
    END CATCH
       
END
GO
	/*
	Plantilla de script posterior a la implementación							
	--------------------------------------------------------------------------------------
	 Este archivo contiene instrucciones de SQL que se anexarán al script de compilación.		
	 Use la sintaxis de SQLCMD para incluir un archivo en el script posterior a la implementación.			
	 Ejemplo:      :r .\miArchivo.sql								
	 Use la sintaxis de SQLCMD para hacer referencia a una variable en el script posterior a la implementación.		
	 Ejemplo:      :setvar TableName miTabla							
				   SELECT * FROM [$(TableName)]					
	--------------------------------------------------------------------------------------
	*/
GO

GO
PRINT N'Update complete.';


GO

--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 965)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (375, 965, 'Scrappy docs Dian y correcciones');
END
GO
/* Liberar bloqueo exclusivo por base de datos */
DECLARE @__ZiurDbScriptLockResourceEnd NVARCHAR(200) = N'ZiurSoft:DbScriptLock:' + CAST(DB_ID() AS NVARCHAR(20));
EXEC sp_releaseapplock
    @Resource = @__ZiurDbScriptLockResourceEnd,
    @LockOwner = N'Session';
GO
