--Hash:22A59ACE3935F3B18FAEE2F526C53000

-- 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 = 958)
BEGIN
    PRINT N'Scripts_958.sql: la version 958 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 < 958
)
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'Altering View [dbo].[VNominaValorHora]...';
IF OBJECT_ID(N'dbo.VNominaValorHora', N'V') IS NULL
    EXEC(N'CREATE VIEW [dbo].[VNominaValorHora] AS SELECT 1 AS Dummy;');

GO
ALTER VIEW VNominaValorHora
AS
SELECT        
   IdEncab, 
   IdCliente, 
   MAX(ValorBase) / CAST(COALESCE((SELECT ValParametro FROM Parametros WHERE CodParametro = 47), 240) AS NUMERIC(28,6)) AS ValorHora
FROM            dbo.Nomina_Movimientos
WHERE IdItem IN (100, 101, 102)
GROUP BY IdEncab, IdCliente
GO
PRINT N'Altering Procedure [dbo].[GenerarCrucesCont]...';
IF OBJECT_ID(N'dbo.GenerarCrucesCont', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE [dbo].[GenerarCrucesCont] AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE GenerarCrucesCont

@IdEncabs NVARCHAR(max) = '',
@EsOverride bit=0

AS
BEGIN

DECLARE 

@IdEncabCont INT,
@CruceDoc nvarchar(500),
@contCruce INT,
@CodDocumento nvarchar(5),
@NumDocumento  nvarchar(20),
@EmpresaNombre nvarchar(100),
@Prefijo nvarchar(10),
@NombresClienteCont nvarchar(1000),
@Vence nvarchar(20),
@Total nvarchar(50),
@IdAbona int,
@IdEncab int,
@EncabsOk nvarchar(1000)=''


DECLARE doccruces CURSOR FOR
SELECT IdEncabCont, CruceDoc,IdEncab
from Encabezados_Cont 
where CruceDoc is not null and
IdEncab IN(select number from iter$simple_intlist_to_tbl(@IdEncabs))
and (IdAbonaDoc is null OR @EsOverride=1)


OPEN doccruces

FETCH NEXT FROM doccruces INTO @IdEncabCont, @CruceDoc,@IdEncab


WHILE @@FETCH_STATUS = 0
BEGIN

select @CodDocumento=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=1
select @NumDocumento=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=2
select @EmpresaNombre=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=3
select @Prefijo=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=4
select @NombresClienteCont=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=5
select @Vence=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=6
select @Total=str from [dbo].[iter$charlist_to_tbl](@CruceDoc,'|')where listpos=7

set @IdAbona=null

select top(1) @IdAbona=idencabCont
from VEncabezadosCont_Det
where 
CodDocumento=@CodDocumento AND 
CAST(NumDocumento as nvarchar(20))=@NumDocumento AND 
(@EmpresaNombre = '' OR EmpresaNombre = @EmpresaNombre) AND 
(@Prefijo = '' OR IdPrefijo = (SELECT TOP 1 IdPrefijo FROM Prefijos WHERE NomPrefijo = @Prefijo)) AND
(@NombresClienteCont = '' OR NombresClienteCont = @NombresClienteCont) AND
(@Vence = '' OR CONVERT(VARCHAR(10), Vence, 103) = @Vence) AND
(@Total = '' OR (ABS(debito-credito) = ABS(CASE WHEN ISNUMERIC(@total) = 1 THEN CONVERT(DECIMAL(28, 6), @total) ELSE NULL END))) AND
IdAbonaDoc is not null

update Encabezados_Cont
set IdAbonaDoc=@IdAbona
where IdEncabCont=@IdEncabCont

if @IdAbona is not null
set @EncabsOk=@EncabsOk+','+cast(@IdEncab as nvarchar(100))+','



FETCH NEXT FROM doccruces INTO @IdEncabCont, @CruceDoc,@IdEncab
END

CLOSE doccruces
DEALLOCATE doccruces


select IdEncab,case when @EncabsOk like '%,'+cast(IdEncab as nvarchar(100))+',%' then 1 else 0 end EsCruzado
from Encabezados_Cont where 
IdEncab IN(select number from iter$simple_intlist_to_tbl(@IdEncabs))
group by IdEncab


END
GO
PRINT N'Refreshing Procedure [dbo].[GetDesprendibleNomina]...';


GO
EXECUTE sp_refreshsqlmodule N'[dbo].[GetDesprendibleNomina]';


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)]					
	--------------------------------------------------------------------------------------
	*/

	UPDATE Parametros SET ValParametro = 230 Where CodParametro = 47
GO

GO
PRINT N'Update complete.';


GO



--Actualizar datos de la version
IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 958)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (368, 958, 'Normatividad Nomina 230 Horas');
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
