--Hash:4D116EE2F56561F0CF6DEE7345312AF1
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 < 898
)
RAISERROR('Error : hay un script que no se ejecuto , debe ejecutarlo manualmente.', 20, -1) with log
--//

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

ALTER PROCEDURE [dbo].[GetDesprendibleNomina]  
  
@IdEncab INT,  
@IdContrato NVARCHAR(MAX) = '',  
@IdEmpresa INT,
@EsNe BIT = 0
  
  
AS  
BEGIN  
  
DECLARE  
  
@EsCentroCosto BIT=0  
  
set @EsCentroCosto=(select ValParametro from Parametros where CodParametro=193)  
  
  
;with tmpChilds(IdEncabNomMov,CantidadChild)  
as  
(  
	SELECT mov.IdEncabNomMov,sum(case when item1.IdClasif=1 and item1.FactorProv=1 then Mov1.Cantidad else 0 end)Cantidad  
	FROM dbo.Nomina_Movimientos Mov INNER JOIN  
	dbo.Nomina_Movimientos Mov1 ON Mov1.IdEncabNomMovBase=Mov.IdEncabNomMov  LEFT JOIN  
	dbo.Nomina_Contratos Cont ON Mov.IdContrato = Cont.IdContrato INNER JOIN  
	dbo.Nomina_Items item ON Mov.IdItem=item.IdItem  INNER JOIN  
	dbo.Nomina_Items item1 ON Mov1.IdItem=item1.IdItem    
	where item.IdTipoAporte=1 and mov.IdEncab=@IdEncab   
	and Mov.IdContrato IN(select number from iter$simple_intlist_to_tbl(@IdContrato)) and item1.IdClasif=1  
	group by mov.IdEncabNomMov  
)  
  
select q1.*,  
cli.Identificacion+'-'+cli.Nombre1+' '+COALESCE(cli.Nombre2,'')+' '+COALESCE(cli.Apellido1,'')+' '+COALESCE(cli.Apellido2,'') NomCliente,NomCentroCosto,tipoIdent.DescripTipoIdent,tipoIdent.NomTipoIdent  
from
(  
	SELECT IdCLiente,NomCargo,IdTipo,Nomtipo,IdClasif,NomClasif,SUM(Valor) Valor,SUM(ValorReal) ValorReal,  
	CASE WHEN IdClasif NOT IN (5,6) THEN sum (Cantidad) ELSE (MAX(coalesce(ConfiDivParteSuperior,itemDivParteSuperior)/coalesce(ConfiDivParteInferior,itemDivParteInferior)))*100 END cantidad,  
	OcultarDesprendible,max(FactorProv)FactorProv,max (NomMovRetiro)NomMovRetiro,  
	case when max(IdClasifSistem)=1 then sum(ISNULL(CantidadChild,Cantidad)) else max(ISNULL(CantidadChild,Cantidad)) end as CantidadChild,   
	sum(case when IdClasifSistem=1 and FactorProv=1 then Cantidad else 0 end)as CantidadLaborados,  
	max(ISNULL(CantidadChild,0))as CantidadLaboradosChild,  
	CASE WHEN @EsCentroCosto=1 THEN IdCentroCosto ELSE NULL END as IdCentroCosto, Max(NominaNota) NotaNomina, case when Max(SueldoActivo) > 0 then Max(SueldoActivo) else Max(SueldoInactivo) end Sueldo  
	from  
	(  
		select distinct mov.IdEncabNomMov, Mov.IdCLiente,NomCargo,Tipo.IdTipo,Tipo.Nomtipo,Clasif.IdClasif,Clasif.NomClasif,ValorHora,  
		case when PorcDesprendible is not null then ValorHora*PorcDesprendible*Cantidad else ValorUnit/cast(ValorUnitInferior as float)*Cantidad end Valor,  
		ValorUnit/cast(ValorUnitInferior as float)*Cantidad as ValorReal,  
		Confi.DivParteSuperior as ConfiDivParteSuperior,item.DivParteSuperior as itemDivParteSuperior,Confi.DivParteInferior as ConfiDivParteInferior,item.DivParteInferior as itemDivParteInferior,Cantidad,  
		item.OcultarDesprendible,FactorProv, NomMovRetiro,CantidadChild, item.IdClasif as IdClasifSistem, item.FactorGeneral,IdCentroCosto, nomnot.Nota as NominaNota, 
		case when Cont.EsActivo = 1 then Cont.SueldoIni else 0 end as SueldoActivo, case when Cont.EsActivo = 0 then Cont.SueldoIni else 0 end as SueldoInactivo   
		from dbo.Nomina_Movimientos Mov LEFT JOIN  
		dbo.Nomina_Contratos Cont ON  Mov.IdContrato = Cont.IdContrato LEFT JOIN  
		dbo.Nomina_Cargos Carg ON Cont.IdCargo=Carg.IdCargo INNER JOIN  
		dbo.Nomina_Items item ON Mov.IdItem=item.IdItem INNER JOIN  
		dbo.Nomina_Clasificacion Clasif ON (CASE WHEN @EsNe = 0 THEN item.IdClasifPrint ELSE COALESCE(item.IdClasifNe,item.IdClasifPrint) END)=Clasif.IdClasif INNER JOIN  
		dbo.Nomina_Tipos Tipo ON item.IdTipo=Tipo.IdTipo LEFT JOIN   
		dbo.Nomina_Configuracion Confi ON Mov.IdItem=Confi.IdItem and Cont.Idplantilla=Confi.IdPlantilla left join  
		dbo.VNominaValorHora VHora ON VHora.IdEncab=Mov.IdEncab and VHora.IdCliente=Mov.IdCliente LEFT JOIN  
		dbo.Nomina_Motivos_Retiro as NomMotRet ON Cont.IdMovRetiro= NomMotRet.IdMovRetiro  LEFT JOIN  
		tmpChilds on tmpChilds.IdEncabNomMov=Mov.IdEncabNomMov LEFT JOIN  
		dbo.Nomina_Notas nomnot ON Mov.IdEncab = nomnot.IdEncab AND Mov.IdCliente = nomnot.IdCliente   
		where IdTipoAporte=1 and mov.IdEncab=@IdEncab 
		and Mov.IdContrato IN(select number from iter$simple_intlist_to_tbl(@IdContrato))  
		and (COALESCE (Mov.FactorMov, 1) = 1) and coalesce(Cont.IdEmpresa,@IdEmpresa)=@IdEmpresa   
	)as q  
	group by IdCLiente,NomCargo,IdTipo,Nomtipo,IdClasif,NomClasif,OcultarDesprendible,  
	CASE WHEN @EsCentroCosto=1 THEN IdCentroCosto ELSE NULL END  
)as q1 INNER JOIN  
dbo.Clientes cli ON q1.IdCliente=cli.IdCliente INNER JOIN  
dbo.Clientes_TiposIdent tipoIdent on cli.IdTipoIdent=tipoIdent.IdTipoIdent  
 LEFT JOIN  
dbo.CentroCostos ccos ON q1.IdCentroCosto=ccos.IdCentroCosto
END  
GO

INSERT INTO ZiurVersiones (IdVersion, NumVersion, Descripcion)
VALUES (308,898,N'Desprendibles Nomina')
GO

COMMIT;
GO
