--Hash:F55DC6AD351DD226DF3BBB2521618754
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 < 922
)
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)

/*
 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 Procedure [dbo].[GetCalcularDiasLiquidados]...';


GO
ALTER PROCEDURE GetCalcularDiasLiquidados

@FechaIni DATE,
@FechaFin DATE,
@IdContrato NVARCHAR(MAX),
@DiasNomina NUMERIC(28,6)

AS
BEGIN

DECLARE

@FechaIniPeriodo DATE,
@FechaFinPeriodo DATE

SET @FechaIniPeriodo = DATEADD(DAY, 1, EOMONTH(@FechaIni, -1))
SET @FechaFinPeriodo = EOMONTH(@FechaFin)

;WITH tmpDaysLiquidated(IdCliente, IdContrato, LiquidatedDays, Descripcion) --Dias que ya fueron liquidados
AS
(
	SELECT s.IdCliente, s.IdContrato,
	CASE WHEN s.tDifContDias > 0 THEN @DiasNomina ELSE s.EstaEnRango * tDifContrato1 END tDifContrato,
	CASE WHEN s.tDifContDias <= 0 THEN 'Dias Contrato:' + CONVERT(NVARCHAR(20),s.EstaEnRango * tDifContrato1) + ' (' + CONVERT(NVARCHAR(20), s.FechaIni, 103) + '-' + CONVERT(NVARCHAR(20), s.tFin, 103) +')' ELSE NULL END AS Descripcion
	FROM 
	(
		SELECT 
		t.*,
		DATEDIFF(DAY, tInicio, tFin)+1 AS tDifContrato1,
		DATEDIFF(DAY, tInicio, tFin)+1 - @DiasNomina AS tDifContDias
		FROM 
		(
			SELECT 
			u.*,
			CASE WHEN u.tFin1<@FechaFin THEN u.tFin1 ELSE @FechaFin END AS tFin,
			CASE WHEN @FechaIni <= tFin1 and FechaIni <= @FechaFin THEN 1 ELSE 0 END as EstaEnRango
			FROM
			(
				SELECT 
				IdCliente, 
				IdContrato,
				FechaIni,
				FechaFin,
				CASE WHEN FechaIni>@FechaIni THEN FechaIni ELSE @FechaIni END AS tInicio, 
				COALESCE(FechaRetiro,FechaFin,@FechaFin) AS tFin1
				FROM Nomina_Contratos cont
				WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
			) u
		) t
	) s


	UNION ALL

	--Dias Novedades
	SELECT q3.IdCliente, q3.IdContrato, -1*SUM(q3.Cantidad) AS Cantidad,
	(
		CASE WHEN SUM(q3.Cantidad) = 0 THEN NULL
		ELSE ('Novedades: ' + FORMAT(SUM(q3.Cantidad), '##,##')) END
	) AS Descripcion
	FROM
	(
		SELECT cont.IdCliente, cont.IdContrato, 
		(
			(DATEDIFF(DD, NoMo.FechaIniVac, NoMo.FechaFinVac) + 1) -
			CASE WHEN @FechaFin < NoMo.FechaIniVac OR @FechaIni > NoMo.FechaFinVac THEN (DATEDIFF(DD, NoMo.FechaIniVac, NoMo.FechaFinVac) + 1)
			ELSE
				( CASE WHEN @FechaIni > NoMo.FechaIniVac THEN DATEDIFF(DD, NoMo.FechaIniVac, @FechaIni) ELSE 0 END +
				CASE WHEN @FechaFin < NoMo.FechaFinVac THEN DATEDIFF(DD, @FechaFin, NoMo.FechaFinVac) ELSE 0 END )
			END
		) AS Cantidad
		FROM Nomina_Contratos cont
		INNER JOIN Nomina_Movimientos NoMo ON NoMo.IdContrato = cont.IdContrato
		INNER JOIN Nomina_Items NoIt ON NoIt.IdItem = NoMo.IdItem
		INNER JOIN Encabezados Enc ON  Enc.IdEncab = NoMo.IdEncab
		WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato)) 
		AND FechaFinVac >= @FechaIniPeriodo AND FechaFinVac <= @FechaFinPeriodo
		AND NoIt.FactorProv = 1
		AND NoIt.IdClasif = 1
		AND Enc.EsAnulado = 0 
	) AS q3
	GROUP BY q3.IdCliente, q3.IdContrato

	UNION ALL

	--Dias Laborados
	SELECT q4.IdCliente, q4.IdContrato, -1*SUM(q4.Cantidad) AS Cantidad,
	(
		CASE WHEN SUM(q4.Cantidad) = 0 THEN NULL
		ELSE ('Dias Sueldo: ' + FORMAT(SUM(q4.Cantidad), '##,##')) END
	) AS Descripcion
	FROM 
	(	
		SELECT enc.IdEncab, cont.IdCliente, cont.IdContrato,  
		(
			Cantidad -
			CASE WHEN enc.FechaIni > @FechaFin OR enc.FechaFin < @FechaIni THEN Cantidad
			ELSE
				( CASE WHEN enc.FechaIni <= @FechaIni THEN (DATEDIFF(DD, enc.FechaIni, @FechaIni)) ELSE 0 END +
				CASE WHEN enc.FechaFin >= @FechaFin THEN (DATEDIFF(DD, @FechaFin, enc.FechaFin)) ELSE 0 END )
			END
		) AS Cantidad
		FROM Nomina_Contratos cont
		INNER JOIN Nomina_Movimientos NoMo ON NoMo.IdContrato = cont.IdContrato
		INNER JOIN Encabezados enc ON enc.IdEncab = NoMo.IdEncab
		WHERE cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
		AND enc.FechaIni >= @FechaIniPeriodo AND enc.FechaFin <= @FechaFinPeriodo
		AND NoMo.IdItem = 101
		AND enc.EsAnulado = 0
	) AS q4
	GROUP BY q4.IdCliente, q4.IdContrato
)

--Consulta Final
SELECT 
Cont.IdCliente, 
Cont.IdContrato,	
SUM(LiquidatedDays) AS LiquidatedDays,
(
	STUFF
	(	
		(
			SELECT Descripcion + ',' 
			FROM tmpDaysLiquidated tmpDL
			WHERE tmpDL.IdContrato = Cont.IdContrato
			AND tmpDL.IdCliente = Cont.IdCliente
			FOR XML PATH ('')
		), 1, 0, ''
	) 
) AS Descripcion
FROM Nomina_Contratos Cont
LEFT JOIN tmpDaysLiquidated tmp ON tmp.IdContrato = Cont.IdContrato
WHERE Cont.IdContrato IN (SELECT number FROM iter$simple_intlist_to_tbl(@IdContrato))
GROUP BY Cont.IdCliente, Cont.IdContrato

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)]					
	--------------------------------------------------------------------------------------
	*/
	
	--Nuevos controles para el reenviar de FE
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl=1024)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1024, 'btnReenviarFE')

	--Nuevos Permisos_ControlesPorInterface
	--Para Factura de Venta
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856954)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856954, 2, 1024)

	--Para FindDocs
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856955)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856955, 140, 1024)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856956)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856956, 296, 1024)
	--------------------------------------------------------------------------------------

	--Nuevos controles para Descargar Documentos de FE
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl=1025)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1025, 'btnDescargarDocsFE')

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl = 1026)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1026, 'btnDescargarPDFFE')

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl = 1027)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1027, 'btnDescargarXMLFE')

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl = 1028)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1028, 'btnDescargarAttachDocFE')

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControl = 1029)
	INSERT INTO Permisos_Controles (IdControl, NomControl)
	VALUES (1029, 'btnDescargarZIPFE')

	--Nuevos Permisos_ControlesPorInterface
	--Para Factura de Venta
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856957)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856957, 2, 1025)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856958)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856958, 2, 1026)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856959)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856959, 2, 1027)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856960)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856960, 2, 1028)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856961)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856961, 2, 1029)

	--Para FindDocs
	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856962)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856962, 140, 1025)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856963)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856963, 140, 1026)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856964)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856964, 140, 1027)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856965)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856965, 140, 1028)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856966)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856966, 140, 1029)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856967)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856967, 296, 1025)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856968)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856968, 296, 1026)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856969)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856969, 296, 1027)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856970)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856970, 296, 1028)

	IF NOT EXISTS(SELECT * FROM dbo.Permisos_ControlesPorInterface WHERE IdControlInt=856971)
	INSERT INTO Permisos_ControlesPorInterface (IdControlInt, IdInterface, IdControl)
	VALUES (856971, 296, 1029)
	--------------------------------------------------------------------------------------
GO

GO
PRINT N'Update complete.';

--Actualizar datos de la version
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (332,922,'Reenvios y descargas de facturas para ZiurOne')
GO

COMMIT
GO
