--Hash:FFE6E9B2ABB3B799896B16B3F73E0665
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 < 939
)
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 View [dbo].[VNominaValorHora]...';


GO

ALTER VIEW VNominaValorHora
AS
SELECT        IdEncab, IdCliente, MAX(ValorBase) / 235 AS ValorHora
FROM            dbo.Nomina_Movimientos
WHERE        (IdItem IN (100, 101, 102))
GROUP BY IdEncab, IdCliente
GO
PRINT N'Altering Procedure [dbo].[GetReteFteDet]...';


GO
ALTER PROCEDURE GetReteFteDet

@IdEncab int,
@FechaIni1 NVARCHAR(10) = '',
@FechaFin1 NVARCHAR(10) = '',
@FechaIni2 NVARCHAR(10) = '',
@FechaFin2 NVARCHAR(10) = ''

AS
BEGIN


DECLARE

@FechaIni1T DATETIME,
@FechaFin1T DATETIME,
@FechaIni2T DATETIME,
@FechaFin2T DATETIME

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET NOCOUNT ON;	

SET @FechaIni1T = CAST(CONVERT(DATETIME, @FechaIni1, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFin1T = CAST(CONVERT(DATETIME, @FechaFin1, 103) + ' 23:59:59' AS DATETIME)
SET @FechaIni2T = CAST(CONVERT(DATETIME, @FechaIni2, 103) + ' 00:00:00' AS DATETIME)
SET @FechaFin2T = CAST(CONVERT(DATETIME, @FechaFin2, 103) + ' 23:59:59' AS DATETIME)

;with tempTer(IdContrato, IdCliente)
as(
    select IdContrato,IdCliente
    from Nomina_Movimientos movCli 
    where IdEncab=@IdEncab
    group by IdContrato,IdCliente
),

tempMov(IdEncab, IdContrato, IdItem, ValorUnit, ValorUnitInferior, Cantidad, Fecha)
AS(
    SELECT mov.IdEncab, mov.IdContrato, mov.IdItem, mov.ValorUnit, 
    mov.ValorUnitInferior, mov.Cantidad, enc.Fecha
    FROM Nomina_Movimientos mov
    LEFT JOIN Nomina_Movimientos movBase ON mov.IdEncabNomMovBase = movBase.IdEncabNomMov
    LEFT JOIN Nomina_Items itemBase ON movBase.IdItem = itemBase.IdItem
    LEFT JOIN Encabezados enc ON mov.IdEncab = enc.IdEncab
    WHERE COALESCE(itemBase.IdTipoReteFteUsu, itemBase.IdTipoReteFte) > 0
    OR COALESCE(itemBase.IdTipoReteFteUsu, itemBase.IdTipoReteFte) IS NULL
)

select q1.IdContrato,q1.IdCliente,Identificacion+'-'+LTRIM(RTRIM(Nombres + ' ' + Apellidos)) AS NomEmpleado,
q1.IdItem,NomItem,FactorReteFte,Factor,q1.IdTipoReteFte,tipoRete.NomTipoReteFte,
coalesce(coalesce(rete.Valor1,q1.Valor1),0) as Valor1,coalesce(coalesce(rete.Valor2,q1.Valor2),0) as Valor2,coalesce(coalesce(rete.Valor3,q1.Valor384),0) as Valor384,
cast(Es383 as bit)Es383,cast(Es384 as bit)Es384
from
(
    select q.IdContrato,q.IdCliente,q.IdItem,NomItem,FactorReteFte,Factor,IdTipoReteFte,sum(q.Valor1)Valor1,sum(q.Valor2)Valor2,sum(Valor384) as Valor384,
    max(Es383)as Es383,max(Es384)as Es384
    from
    (
        --Registros metodo1
        SELECT q.IdContrato, q.IdCliente, item.IdItem, item.NomItem, 
        COALESCE(item.FactorReteFteUsu, item.FactorReteFte) AS FactorReteFte,
        CASE WHEN COALESCE(item.FactorReteFteUsu, item.FactorReteFte) > 0 THEN '(+)' ELSE '(-)' END AS Factor,
        SUM(mov.ValorUnit / mov.ValorUnitInferior * mov.Cantidad) AS Valor1, 0 AS Valor2, 0 AS Valor384,
        COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte) AS IdTipoReteFte, 1 AS Es383,0 AS Es384
        FROM tempTer AS q 
        CROSS JOIN Nomina_Items item 
        LEFT JOIN tempMov AS mov ON q.IdContrato = mov.IdContrato AND item.IdItem = mov.IdItem
        WHERE COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte) > 0 
        AND (mov.Fecha BETWEEN @FechaIni1T AND @FechaFin1T OR mov.IdEncab IS NULL)
        GROUP BY q.IdContrato, q.IdCliente, item.IdItem, item.NomItem, 
        COALESCE(item.FactorReteFteUsu, item.FactorReteFte), 
        COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte)

        UNION ALL

        --Registros metodo2
        SELECT q.IdContrato, q.IdCliente, item.IdItem, item.NomItem,
        COALESCE(item.FactorReteFteUsu, item.FactorReteFte) AS FactorReteFte,
        CASE WHEN COALESCE(item.FactorReteFteUsu, item.FactorReteFte) > 0 THEN '(+)' ELSE '(-)' END AS Factor,
        0 AS Valor1, SUM(mov.ValorUnit / mov.ValorUnitInferior * mov.Cantidad) AS Valor2, 0 AS Valor384, 
        COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte) AS IdTipoReteFte, 1 as Es383,0 as Es384
        FROM tempTer AS q
        CROSS JOIN Nomina_Items item 
        LEFT JOIN tempMov AS mov ON q.IdContrato = mov.IdContrato AND item.IdItem = mov.IdItem
        WHERE COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte) > 0 
        AND (mov.Fecha BETWEEN @FechaIni1T AND @FechaFin1T OR mov.IdEncab IS NULL)
        GROUP BY q.IdContrato, q.IdCliente, item.IdItem, item.NomItem, 
        COALESCE(item.FactorReteFteUsu, item.FactorReteFte), 
        COALESCE(item.IdTipoReteFteUsu, item.IdTipoReteFte)

        UNION ALL

        --Registros metodo1 384
        select  q.IdContrato,q.IdCliente,item.IdItem,NomItem,coalesce(FactorReteFte384Usu,FactorReteFte384)as FactorReteFte,
        case when coalesce(FactorReteFte384Usu,FactorReteFte384)>0 then '(+)' else '(-)' end as Factor,
        0 as Valor1,0 as Valor2,sum(mov.ValorUnit/mov.ValorUnitInferior*Cantidad) as Valor384,coalesce(IdTipoReteFte384Usu,IdTipoReteFte384)  as IdTipoReteFte,
        0 as Es383,1 as Es384
        from
        tempTer as q cross join Nomina_Items item left join 
        Nomina_Movimientos mov on q.IdContrato=mov.IdContrato and item.IdItem=mov.IdItem left join
        Encabezados enc on mov.IdEncab=enc.IdEncab 
        where coalesce(IdTipoReteFte384Usu,IdTipoReteFte384)>0 
        and (Fecha between @FechaIni1T and @FechaFin1T or enc.IdEncab is null)
        group by q.IdContrato,q.IdCliente,item.IdItem,NomItem,coalesce(FactorReteFte384Usu,FactorReteFte384),coalesce(IdTipoReteFte384Usu,IdTipoReteFte384)
    )as q 
    group by q.IdContrato,q.IdCliente,q.IdItem,NomItem,FactorReteFte,Factor,IdTipoReteFte
)as q1 left join Nomina_Retefuente rete on rete.IdContrato=q1.IdContrato and rete.IdItem=q1.IdItem and rete.IdEncab=@IdEncab
inner join VClientes2 cli on cli.IdCliente=q1.IdCliente
left join [dbo].[Nomina_TiposReteFte] tipoRete on tipoRete.IdTipoReteFte=q1.IdTipoReteFte
where coalesce(Operacion,0)<2

      
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 = 235 Where CodParametro = 47 
GO

GO
PRINT N'Update complete.';


GO

--Actualizar datos de la version
INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (349,939,'ACTUALIZACION NORMATIVA NOMINA')
GO

COMMIT
GO
