--Hash:EB833373FD4862C093BE3FC038428F6E
SET XACT_ABORT ON
BEGIN TRANSACTION;

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]...';


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]...';


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
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (368,958,'Normatividad Nomina 230 Horas')
GO

COMMIT
GO
