--Hash:94FDC39FE44004C59D4C5EC645982097

-- 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 = 995)
BEGIN
    PRINT N'Scripts_995.sql: la version 995 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 < 995
)
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
PRINT N'Altering Procedure [dbo].[GetNominaHorasExtra]...';

IF OBJECT_ID(N'dbo.GetNominaHorasExtra', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.GetNominaHorasExtra AS BEGIN SET NOCOUNT ON; RETURN 0; END');

GO
ALTER PROCEDURE [dbo].[GetNominaHorasExtra]

@IdEncab INT,
@IdCliente INT

AS
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

declare @hMes INT
 		
Select @hMes = CAST(ValParametro AS INT)
From Parametros Where CodParametro = 47

IF COALESCE(@hMes,0) = 0
 SET @hMes = 240

DECLARE @EsRound INT, @NumDig INT

--Senal que indica si se hace redondeo
SELECT @EsRound = ISNULL(ValParametro,0) FROM PARAMETROS WHERE CodParametro = 54
--Numero de decimales a redondear
SELECT @NumDig = ISNULL(ValParametro,0) FROM PARAMETROS WHERE CodParametro = 45

IF @EsRound = 0
 SET @NumDig = 6
    
SELECT 
COALESCE(cli.Nombre1 + ' ','') + COALESCE(cli.Apellido1 + ' ','') as ClienteNombre,
cliTiId.NomTipoIdent + ' ' + CAST(cli.Identificacion as NVARCHAR(100)) + CASE WHEN COALESCE(cli.DVCliente, '-1') = '-1' THEN '' ELSE '-' + cli.DVCliente END as ClienteIdent,cliEmp.IdCentroCosto,
q1.*
FROM
(
SELECT 
 IdCliente, 
 SUM(ValorBase) as ValorBase,
 SUM(VlrHora) as VlrHora,
 SUM(HED) as HED, SUM(HED_Total) as HED_Total,
 SUM(HEN) as HEN, SUM(HEN_Total) as HEN_Total,
 SUM(RN) as RN, SUM(RN_Total) as RN_Total,
 SUM(RDF) as RDF, SUM(RDF_Total) as RDF_Total,
 SUM(HEDD) as HEDD, SUM(HEDD_Total) as HEDD_Total,
 SUM(HEND) as HEND, SUM(HEND_Total) as HEND_Total,
 SUM(HD) as HD, SUM(HD_Total) as HD_Total,
 SUM(HE1) as HE1, SUM(HE1_Total) as HE1_Total,
 SUM(HE2) as HE2, SUM(HE2_Total) as HE2_Total,
 SUM(HE3) as HE3, SUM(HE3_Total) as HE3_Total,
 SUM(HE4) as HE4, SUM(HE4_Total) as HE4_Total,
 SUM(HE5) as HE5, SUM(HE5_Total) as HE5_Total,
 SUM(HE6) as HE6, SUM(HE6_Total) as HE6_Total,
 SUM(HE7) as HE7, SUM(HE7_Total) as HE7_Total,
 SUM(HE8) as HE8, SUM(HE8_Total) as HE8_Total,
 SUM(HED_Total) + SUM(HEN_Total) + SUM(RN_Total) + SUM(RDF_Total) + SUM(HEDD_Total) + SUM(HEND_Total) + SUM(HD_Total)+ SUM(HE1_Total)+ SUM(HE2_Total)+ SUM(HE3_Total)+ SUM(HE4_Total) + SUM(HE5_Total)+ SUM(HE6_Total)+ SUM(HE7_Total)+ SUM(HE8_Total)as Totales
 FROM
 (
  SELECT 
   nomM.IdCliente,
   CASE WHEN nomI.IdItem in (100,101,102)  THEN COALESCE(nomM.ValorBase,0) ELSE 0 END as ValorBase,
   CASE WHEN nomI.IdItem in (100,101,102)  THEN ROUND(COALESCE(nomM.ValorBase,0) / CAST(@hMes as FLOAT), @NumDig) ELSE 0 END as VlrHora,
   nomI.AbrevItem, 
   nomM.Cantidad,
   nomI.AbrevItem + '_Total' as abrev_Tot,
   ROUND(COALESCE(nomM.Cantidad,0) * (COALESCE(nomM.ValorUnit,0) / COALESCE(nomM.ValorUnitInferior,1)), @NumDig) as Totales
  FROM 
   Nomina_Movimientos nomM LEFT JOIN Nomina_Items nomI ON
   nomM.IdItem = nomI.IdItem and nomI.IdClasif in (1,2)
  WHERE
   IdEncab = @IdEncab 
  UNION ALL 
  SELECT 
   nomM.IdCliente, 0, 0,
   nomI.AbrevItem, 0,nomI.AbrevItem + '_Total' as abrev_Tot, 0
  FROM 
   Nomina_Movimientos nomM CROSS JOIN Nomina_Items nomI
  WHERE
   IdEncab = @IdEncab and
   nomI.IdClasif = 2
  ) q
 PIVOT
 (
  SUM(Cantidad)
  FOR AbrevItem IN 
   ([HED],[HEN],[RN],[RDF],[HEDD],[HEND],[HD],[HE1],[HE2],[HE3],[HE4],[HE5],[HE6],[HE7],[HE8])
 ) as _pvtTable
 PIVOT
 (
  SUM(Totales)
  FOR Abrev_Tot IN
   ([HED_Total],[HEN_Total],[RN_Total],[RDF_Total],[HEDD_Total],[HEND_Total],[HD_Total],[HE1_Total],[HE2_Total],[HE3_Total],[HE4_Total],[HE5_Total],[HE6_Total],[HE7_Total],[HE8_Total])
 ) as pvtTable
 GROUP BY IdCliente
) q1 INNER JOIN Clientes cli ON
  q1.IdCliente = cli.IdCliente INNER JOIN Clientes_TiposIdent cliTiId ON
  cli.IdTipoIdent = cliTiId.IdTipoIdent INNER JOIN dbo.Clientes_Empleados AS cliEmp
  ON cliEmp.IdCliente=q1.IdCliente
  

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



--ACTUALIZACION NORMATIVA NOMINA 2026
UPDATE Parametros SET ValParametro = 210 Where CodParametro = 47 

--ACTUALIZACION NORMATIVA HORAS EXTRAS REFORMA LABORAL 
--//
update Nomina_Items set DivParteSuperior = 1.90,  PorcRecargo = 1.90 WHERE IdItem=106
GO

update Nomina_Items set DivParteSuperior = 2.15,  PorcRecargo = 2.15 WHERE IdItem=107
GO

update Nomina_Items set DivParteSuperior = 2.55,  PorcRecargo = 2.55 WHERE IdItem=108
GO
--//

IF NOT EXISTS(SELECT 1 FROM Nomina_Items where IdItem = 250)
  INSERT INTO dbo.Nomina_Items (IdItem, NomItem, DescripItem, AbrevItem, EsActivo, EsSistema, IdClasif, IdClasifPrint, IdTipo, IdTipoAporte, PorcRecargo, DivParteSuperior, DivParteInferior, EsFondo, EsAuxTransp, EsFondoSolid, FactorPrima, FactorGeneral, EsReversion, EsAuxTranspDias, FactorProv, OcultarDesprendible, EsValorBase, EsCargarCantidad, FactorReteFte, IdTipoReteFte, FactorReteFte384, IdTipoReteFte384, EsPagoUgpp, IdClasifNe) 
  VALUES (250, N'RECARGO DOMINICAL NOCTURNO O FESTIVO NOCTURNO', N'Es el recargo que el trabajador tiene derecho cuando labora un domingo o festivo nocturno.', N'RDFN', 1, 1, 2, 2, 1, 1, 1.25, 1.25, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 21);
GO


--Actualizar datos de la version

IF NOT EXISTS (SELECT 1 FROM dbo.ZiurVersiones WHERE NumVersion = 995)
BEGIN
    INSERT INTO dbo.ZiurVersiones (IdVersion, NumVersion, Descripcion)
    VALUES (405, 995, 'Normatividad HE + Disminucion Horas AUV (42)');
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
