ALTER PROCEDURE [dbo].[sp_proEntrada_PorProcesar]
(
	  @etapa int = 0
	, @id_op int = 0
	, @maquina int =0
	, @codbus varchar(50) = ''
	, @ocultasaldo int = 0
	, @np int = 0
    , @codsuc int
	, @tipoOP int
	, @solicitud int = 0
)
AS

IF @ocultasaldo = 0 --Muestra todo

SELECT  proOPEtapas.idOp 
		,proOPEtapas.idsubOP 
		,proOPEtapas.linea 
		,proOPEtapas.lineapre   
		,proOPEtapas.etapa  
		,proOPEtapas.tipo 
		,proOPEtapas.inicio    
		,proOPEtapas.termino   
		,proOPEtapas.maquina   
		,proOPEtapas.cantTotal    
		,proOPEtapas.cantProceso as cantProceso   
		,proOPEtapas.formula    
		,invArticulos.nomart  
		,invArticulos.codbus    
		,proOP.tipoOP          
		,proMaquinas.nomMaquina    
		,0 as estado            
		--,SUM(isnull(proProcesos.cantidad,0)) AS cantproc
		,SUM(isnull(proLiberacion.cantidadBase,0)) AS cantproc
		,SUM(isnull(proLiberacion.cantidadprocesada_alt,0)) AS cantprocalt
		--,SUM(dbo.CantidadPredecesora(proOPEtapas.idOp,proOPEtapas.etapa,invArticulos.codbus ,proOPEtapas.tipo ,proOPEtapas.lineapre)) as cantpred
		,SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) AS cantpred
		--,(proOPEtapas.cantAlt - sum(isnull(proProcesos.cantidad,0))) as saldo
		,CASE
		WHEN (SELECT MIN(etapa) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa THEN (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0)))
		ELSE SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) - SUM(isnull(proLiberacion.cantidadBase,0))
		END AS saldo
		,CASE
		WHEN (SELECT MIN(etapa) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa THEN (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0))) * prorecetaEtapas.factor
		ELSE SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) - SUM(isnull(proLiberacion.cantidadBase,0)) * prorecetaEtapas.factor
		END AS saldosalt
		, dbo.proNotasPedidoPorOP(proOPEtapas.idOp) as notasPedido
		, dbo.proSolicitudesPorOP(proOPEtapas.idOp) as solicitudes
        ,proOPEtapas.periodo
        ,0 as cantProd
		,proOPEtapas.cantalt as cantAlt
		,prorecetaEtapas.factor
FROM   proOPEtapas
		INNER JOIN proOP on proOPEtapas.idOp = proOP.idOP AND proop.codsuc=@codsuc  AND  proOPEtapas.periodo= YEAR(proOP.Fecing)
		INNER JOIN invArticulos on invArticulos.codbus = proOP.codbus
		LEFT OUTER JOIN	 proLiberacion on proOPEtapas.idOp = proLiberacion.idOP and proOPEtapas.linea = proLiberacion.linea and proLiberacion.etapa = proOPEtapas.etapa
		INNER JOIN proMaquinas on proOPEtapas.maquina = proMaquinas.codMaquina AND proOPEtapas.periodo = proMaquinas.periodo
		LEFT OUTER JOIN proOPDetalleNP on proOPEtapas.idOp = proOPDetalleNP.idOP
		LEFT OUTER JOIN proOPDetalleSolicitud on proOPEtapas.idOp = proOPDetalleSolicitud.idOP
		LEFT OUTER JOIN proRecetaEtapas ON proOPEtapas.formula = proRecetaEtapas.codReceta AND proOPEtapas.etapa = proRecetaEtapas.codEtapa AND proOP.codbus = proRecetaEtapas.codArticulo AND proRecetaEtapas.periodo = (SELECT periodo FROM proParametros)

--invArticulos 
--		INNER JOIN	proOP ON invArticulos.codbus = proOP.codbus
--		INNER JOIN	proOPEtapas ON proOP.idOP = proOPEtapas.idOp
--		--LEFT OUTER JOIN	proProcesos ON proOPEtapas.idOp = proProcesos.idOP AND proOPEtapas.linea = proProcesos.lineaEtapa
--		--NUEVO
--		LEFT OUTER JOIN	 proLiberacion on proOPEtapas.idOp = proLiberacion.idOP and proOPEtapas.linea = proLiberacion.linea and proLiberacion.etapa = proOPEtapas.etapa
--		INNER JOIN proMaquinas on proOPEtapas.maquina = proMaquinas.codMaquina 
		
WHERE	(proOP.nulo = 0)
		AND (proOPEtapas.etapa = @etapa ) 
		AND (proOPEtapas.idOP = @id_op OR @id_op = 0)
		AND (proOPEtapas.maquina = @maquina OR @maquina= 0)	
		AND (proOP.codbus = @codbus OR @codbus = '')
		AND (proOPDetalleNP.NP = @np or @np= 0)
		AND (proOP.tipoOP = @tipoOP or @tipoOP= 0)
		AND (proOPDetalleSolicitud.numdoc= @solicitud or @solicitud = 0)
		AND ISNULL(ultimaliberacion,0) <> 1

GROUP BY proOPEtapas.idOp
		,proOP.tipoOP
		,proOPEtapas.idsubOP
		,proOPEtapas.linea
		,proOPEtapas.lineapre
		,proOPEtapas.etapa
		,proOPEtapas.tipo
		,proOPEtapas.inicio
		,proOPEtapas.termino
		,proOPEtapas.maquina
		,proOPEtapas.cantTotal
		,proOPEtapas.cantProceso
		,proOPEtapas.formula
		,invArticulos.nomart
		,invArticulos.codbus
		,proMaquinas.nomMaquina
        ,proOpetapas.periodo
		,proOPEtapas.cantalt
		,prorecetaEtapas.factor
--HAVING (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0))) >= 0
HAVING (
    CASE
        WHEN (SELECT MIN(isnull(etapa,0)) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa 
        THEN (isnull(proOPEtapas.cantProceso,0) - sum(isnull(proLiberacion.cantidadBase,0)))
        ELSE SUM(isnull(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre),0)) - SUM(isnull(proLiberacion.cantidadBase,0))
    END
) >= 0

	ELSE --Muestra Solo saldo mayor a 0

SELECT   proOPEtapas.idOp
		,proOPEtapas.idsubOP
		,proOPEtapas.linea
		,proOPEtapas.lineapre
		,proOPEtapas.etapa
		,proOPEtapas.tipo
		,proOPEtapas.inicio
		,proOPEtapas.termino
		,proOPEtapas.maquina
		,proOPEtapas.cantTotal
		,proOPEtapas.cantProceso as cantProceso
		,proOPEtapas.formula
		,invArticulos.nomart
		,invArticulos.codbus
		,proOP.tipoOP
		,proMaquinas.nomMaquina
		,0 as estado
		--,SUM(isnull(proProcesos.cantidad,0)) AS cantproc
		,SUM(isnull(proLiberacion.cantidadBase,0)) AS cantproc
		,SUM(isnull(proLiberacion.cantidadprocesada_alt,0)) AS cantprocalt
		--,SUM(dbo.CantidadPredecesora(proOPEtapas.idOp,proOPEtapas.etapa,invArticulos.codbus ,proOPEtapas.tipo ,proOPEtapas.lineapre)) as cantpred
		,SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) AS cantpred
		--,(proOPEtapas.cantAlt - sum(isnull(proProcesos.cantidad,0))) as saldo
		,CASE
		WHEN (SELECT MIN(etapa) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa THEN (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0)))
		ELSE SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) - SUM(isnull(proLiberacion.cantidadBase,0))
		END AS saldo
		,CASE
		WHEN (SELECT MIN(etapa) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa THEN (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0))) * prorecetaEtapas.factor
		ELSE SUM(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre)) - SUM(isnull(proLiberacion.cantidadBase,0)) * prorecetaEtapas.factor
		END AS saldosalt
		--,(proOPEtapas.cantalt - sum(isnull(proLiberacion.cantidadprocesada_alt,0))) as saldosalt
		,dbo.proNotasPedidoPorOP(proOPEtapas.idOp) as notasPedido
		,dbo.proSolicitudesPorOP(proOPEtapas.idOp) as solicitudes
	    ,proOPetapas.periodo
        ,0 as cantProd
		,proOPEtapas.cantalt as cantAlt
		,prorecetaEtapas.factor
FROM   proOPEtapas
		INNER JOIN proOP on proOPEtapas.idOp = proOP.idOP  
			AND proop.codsuc=@codsuc   
			AND  proOPEtapas.periodo= YEAR(proOP.Fecing)
		INNER JOIN invArticulos on invArticulos.codbus = proOP.codbus
		LEFT OUTER JOIN	 proLiberacion on proOPEtapas.idOp = proLiberacion.idOP 
			AND proOPEtapas.linea = proLiberacion.linea 
			AND proLiberacion.etapa = proOPEtapas.etapa
		INNER JOIN proMaquinas on proOPEtapas.maquina = proMaquinas.codMaquina 
			AND proOPEtapas.periodo = proMaquinas.periodo
		LEFT OUTER JOIN proOPDetalleNP on proOPEtapas.idOp = proOPDetalleNP.idOP
		LEFT OUTER JOIN proOPDetalleSolicitud on proOPEtapas.idOp = proOPDetalleSolicitud.idOP
		LEFT OUTER JOIN proRecetaEtapas ON proOPEtapas.formula = proRecetaEtapas.codReceta
			AND proOPEtapas.etapa = proRecetaEtapas.codEtapa 
			AND proOP.codbus = proRecetaEtapas.codArticulo
			AND proRecetaEtapas.periodo = (SELECT periodo FROM proParametros)
WHERE	(proOP.nulo = 0)
		AND (proOPEtapas.etapa = @etapa ) 
		AND (proOPEtapas.idOP = @id_op OR @id_op = 0)
		AND (proOPEtapas.maquina = @maquina OR @maquina= 0)			
		AND (proOP.codbus = @codbus OR @codbus = '')
		AND (proOPDetalleNP.NP = @np or @np= 0)
		AND (proOP.tipoOP = @tipoOP or @tipoOP= 0)
		AND (proOPDetalleSolicitud.numdoc= @solicitud or @solicitud = 0)
		AND ISNULL(ultimaliberacion,0) <> 1
GROUP BY proOPEtapas.idOp
		,proOP.tipoOP
		,proOPEtapas.idsubOP
		,proOPEtapas.linea
		,proOPEtapas.lineapre
		,proOPEtapas.etapa
		,proOPEtapas.tipo
		,proOPEtapas.inicio
		,proOPEtapas.termino
		,proOPEtapas.maquina
		,proOPEtapas.cantTotal
		,proOPEtapas.cantProceso
		,proOPEtapas.formula
		,invArticulos.nomart
		,invArticulos.codbus
		,proMaquinas.nomMaquina
        ,proOpetapas.periodo
		,proOPEtapas.cantalt
		,prorecetaEtapas.factor
--HAVING (proOPEtapas.cantProceso - sum(isnull(proLiberacion.cantidadBase,0))) > 0
HAVING (
    CASE
        WHEN (SELECT MIN(isnull(etapa,0)) FROM proOPEtapas WHERE idOp = proOPEtapas.idOp) = proOPEtapas.etapa 
        THEN (isnull(proOPEtapas.cantProceso,0) - sum(isnull(proLiberacion.cantidadBase,0)))
        ELSE SUM(isnull(dbo.CantidadPredecesora(proOPEtapas.idOp, proOPEtapas.lineapre, invArticulos.codbus, proOPEtapas.tipo, proOPEtapas.lineapre),0)) - SUM(isnull(proLiberacion.cantidadBase,0))
    END
) > 0