USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[configuracoes] ADD 
[idnSemprePuxarUltimoPreco] [bit] NULL,
[idnSemprePuxarUltimaCusto] [bit] NULL
GO
-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER FUNCTION [dbo].[CustoProdutoData] 
(
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@dataInf datetime = null
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,
		dscProdutoClasse varchar(500),							
		valor decimal(18,4),
		origemCusto varchar(50),
		idNotaFiscal int NULL
)
AS
BEGIN
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @dataAtual datetime = @dataInf;
	declare @idnConsiderarCustoMedio bit = (select coalesce(idnConsiderarCustoMedioComoCustoProduto, 0) from configuracoes)
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@dataAtual is null)
		SET @dataAtual = (SELECT GETDATE());

	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimaCusto from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;
	
	
	if (@idProdutoClassificacao > 0)
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)), pcu.idNotaFiscal
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao = @idProdutoClassificacao)
		order by pcu.dataVigencia desc
		
		declare @totalClasse int = (select COUNT(*) from @Resultado)
		if (@totalClasse = 0)
		BEGIN
			INSERT INTO @Resultado
			select TOP 1
			pcu.idProduto, pcu.idProdutoClassificacao, 
			(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
			(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)), pcu.idNotaFiscal
			from ProdutoCusto pcu
			inner join produto pr on pr.id = pcu.idProduto
			left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
			where (pcu.dataVigencia <= @dataAtual)
			and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
			and (pcu.idProduto = @idProduto)
			and (pcu.idProdutoClassificacao is null)
			order by pcu.dataVigencia desc	
		END
	END
	ELSE
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)), pcu.idNotaFiscal
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao is null)
		order by pcu.dataVigencia desc	
	END
	
	declare @totalRegistros int
	declare @descricaoSistema varchar(100)
	SET @totalRegistros = (select count(*) from @Resultado)
	SET @descricaoSistema = (select top 1 descricao from Menu where idnPadrao = 1)
	
	if ((@totalRegistros = 0) or (@descricaoSistema = 'NFE'))
	BEGIN
	--Se n?o tem um custo definido, obtem o pre?o de entrada no cadastro do produto
		delete from @Resultado
		if (@idProdutoClassificacao > 0)
		BEGIN
		--Se foi informado classifica??o, obtem os dados da classifica??o
			INSERT INTO @Resultado
				select pc.idProduto, pc.id,
					pr.descricao + ' - ' + coalesce(pc.descricao, '') as dscProdutoClasse,
					(case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) as precoCusto,
					cast('CUSTOPADRAO' as varchar(50)), null
				from ProdutoClassificacao pc
				inner join Produto pr on pr.id = pc.idProduto
				where (pc.id = @idProdutoClassificacao)
		END
		ELSE
		BEGIN
		--Se uma classifica??o n?o foi informada, obtem os dados do cadastro do produto
			INSERT INTO @Resultado
				select pr.id, null,
					pr.descricao,
					pr.precoEntrada,
					cast('CUSTOPADRAO' as varchar(50)), null
				from Produto pr			
				where (pr.id = @idProduto)		
		END
					
	END
	
	RETURN 
END
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER FUNCTION [dbo].[PrecoProdutos]
(
	@idEmitenteInf int,
	@idGrupoInf int = 0,
	@idMarcaInf int = 0,
	@dataInicialInf datetime = null,
	@dataFinalInf datetime = null
)
RETURNS 
@Resultado TABLE 
(
	idProduto int,
	idProdutoClassificacao int NULL,
	preco decimal(18,4),
	idnOferta bit
)
AS
BEGIN

	declare @idEmitente int = @idEmitenteInf;
	declare @dataAtual datetime = (SELECT GETDATE());
	declare @idGrupo int = @idGrupoInf;
	declare @idMarca int = @idMarcaInf;
	declare @dataInicial datetime = @dataInicialInf;
	declare @dataFinal datetime = @dataFinalInf;
	
	declare @idnAlteradosNoPeriodo bit = 0;
	if (@dataInicial is not null)
		SET @idnAlteradosNoPeriodo = 1;
	
	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimoPreco from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;


	declare @ProdutosLista as ListaProdutos;
	
	INSERT INTO @ProdutosLista
	select distinct p.id, pc.id
	from produto p 
	left join ProdutoClassificacao pc on pc.idProduto = p.id
	where (((p.idEmitente = @idEmitente) or (p.idEmitente is null)) or (@idEmitente = 0))
	and ((p.idnBaixa = 0) or (p.idnBaixa is null))
	and ((p.idGrupo in (select idGrupo from ProdutoGruposFilhos(@idGrupo))) or (@idGrupo = 0))
	and (((pc.idMarca = @idMarca) or ((pc.idMarca is null) and (p.idMarca = @idMarca))) or (@idMarca = 0))
	order by p.id
	
	INSERT INTO @Resultado
	select p.idProduto, p.idProdutoClassificacao, coalesce((select TOP 1 pp.preco from ProdutoPreco pp 
	where (((pp.dataVigencia <= @dataAtual) and (@idnAlteradosNoPeriodo = 0))
	or ((pp.dataVigencia >= @dataInicial) and (pp.dataVigencia <= @dataFinal)))
	and ((pp.idFilial = @idEmitente)  or (@idEmitente = 0))
	and ((pp.idProduto = p.idProduto) 
	and ((pp.idProdutoClassificacao = p.idProdutoClassificacao) or (p.idProdutoClassificacao is null)) or ((pp.idProduto = p.idProduto) and (pp.idProdutoClassificacao is null)))
	order by pp.dataVigencia desc), 0),
	coalesce((select TOP 1 pp.idnOferta from ProdutoPreco pp 
	where (((pp.dataVigencia <= @dataAtual) and (@idnAlteradosNoPeriodo = 0))
	or ((pp.dataVigencia >= @dataInicial) and (pp.dataVigencia <= @dataFinal)))
	and ((pp.idFilial = @idEmitente)  or (@idEmitente = 0))
	and ((pp.idProduto = p.idProduto) 
	and ((pp.idProdutoClassificacao = p.idProdutoClassificacao) or (p.idProdutoClassificacao is null)) or ((pp.idProduto = p.idProduto) and (pp.idProdutoClassificacao is null)))
	order by pp.dataVigencia desc), 0)
	from @ProdutosLista p
	
	UPDATE @Resultado 
	SET	preco = p.vuncom
	FROM (
		SELECT pr.id, pc.id as idProdutoClasse, (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) as vuncom 
		FROM produto pr left join ProdutoClassificacao pc on pc.idProduto = pr.id) p
	WHERE 
		((p.id = idProduto)
		and ((p.idProdutoClasse = idProdutoClassificacao) or (idProdutoClassificacao is null)))
		and (preco = 0)
		and (@idnAlteradosNoPeriodo = 0)
	
	RETURN 
END
GO
-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER FUNCTION [dbo].[CustoProdutoDataRelatorio] 
(
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@dataInf datetime = null
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,
		dscProdutoClasse varchar(200),							
		valor decimal(18,4),
		origemCusto varchar(50), 
		idNotaFiscal int null, 
		idAjusteEstoque int null
)
AS
BEGIN
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @dataAtual date = @dataInf;
	declare @idnConsiderarCustoMedio bit = (select coalesce(idnConsiderarCustoMedioComoCustoProduto, 0) from configuracoes)
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@dataAtual is null)
		SET @dataAtual = (SELECT GETDATE());
	
	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimaCusto from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;
	

	if (@idProdutoClassificacao > 0)
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
		pcu.idNotaFiscal, pcu.idAjusteEstoque
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		--and (pcu.idProdutoClassificacao = @idProdutoClassificacao)
		and (pcu.idNotaFiscal is not null)
		order by pcu.dataVigencia desc
		
		declare @totalClasse int = (select COUNT(*) from @Resultado)
		if (@totalClasse = 0)
		BEGIN
			INSERT INTO @Resultado
			select TOP 1
			pcu.idProduto, pcu.idProdutoClassificacao, 
			(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
			(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
			pcu.idNotaFiscal, pcu.idAjusteEstoque
			from ProdutoCusto pcu
			inner join produto pr on pr.id = pcu.idProduto
			left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
			where (pcu.dataVigencia <= @dataAtual)
			and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
			and (pcu.idProduto = @idProduto)
			--and (pcu.idProdutoClassificacao is null)
			and (pcu.idNotaFiscal is not null)
			order by pcu.dataVigencia desc	
		END
	END
	ELSE
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
		pcu.idNotaFiscal, pcu.idAjusteEstoque
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		--and (pcu.idProdutoClassificacao is null)
		and (pcu.idNotaFiscal is not null)
		order by pcu.dataVigencia desc	
	END
	
	declare @totalRegistros int
	SET @totalRegistros = (select count(*) from @Resultado)
	
	if @totalRegistros = 0
	BEGIN
	--Se n?o tem um custo definido, obtem o pre?o de entrada no cadastro do produto
		if (@idProdutoClassificacao > 0)
		BEGIN
		--Se foi informado classifica??o, obtem os dados da classifica??o
			INSERT INTO @Resultado
				select pc.idProduto, pc.id,
					pr.descricao + ' - ' + coalesce(pc.descricao, '') as dscProdutoClasse,
					(case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) as precoCusto,
					cast('CUSTOPADRAO' as varchar(50)),
					null,null
				from ProdutoClassificacao pc
				inner join Produto pr on pr.id = pc.idProduto
				where (pc.id = @idProdutoClassificacao)
		END
		ELSE
		BEGIN
		--Se uma classifica??o n?o foi informada, obtem os dados do cadastro do produto
			INSERT INTO @Resultado
				select pr.id, null,
					pr.descricao,
					pr.precoEntrada,
					cast('CUSTOPADRAO' as varchar(50)),
					null, null
				from Produto pr			
				where (pr.id = @idProduto)		
		END
					
	END
	
	RETURN 
END
GO
-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER FUNCTION [dbo].[PrecoProduto]
(
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@dataInf datetime = null
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,	
		dscProdutoClasse varchar(500),							
		valor decimal(18,4),
		idnOferta bit
)
AS
BEGIN
	
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @dataAtual datetime = @dataInf;
	
	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimoPreco from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;

	if (@dataAtual is null)
		SET @dataAtual = (SELECT GETDATE());
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@idProdutoClassificacao > 0)
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		pcu.preco, COALESCE(pcu.idnOferta, 0)
		from ProdutoPreco pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao = @idProdutoClassificacao)
		order by pcu.dataVigencia desc
		
		declare @totalClasse int = (select COUNT(*) from @Resultado)
		if (@totalClasse = 0)
		BEGIN
			INSERT INTO @Resultado
			select TOP 1
			pcu.idProduto, pcu.idProdutoClassificacao, 
			(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
			pcu.preco, COALESCE(pcu.idnOferta, 0)
			from ProdutoPreco pcu
			inner join produto pr on pr.id = pcu.idProduto
			left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
			where (pcu.dataVigencia <= @dataAtual)
			and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
			and (pcu.idProduto = @idProduto)
			and (pcu.idProdutoClassificacao is null)
			order by pcu.dataVigencia desc
		END
	END
	ELSE
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		pcu.preco, COALESCE(pcu.idnOferta, 0)
		from ProdutoPreco pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao is null)
		order by pcu.dataVigencia desc
	END
	
	declare @totalRegistros int
	declare @descricaoSistema varchar(100)
	SET @totalRegistros = (select count(*) from @Resultado)
	SET @descricaoSistema = (select top 1 descricao from Menu where idnPadrao = 1)
	
	if ((@totalRegistros = 0) or (@descricaoSistema = 'NFE'))
	BEGIN
	--Se n?o tem um custo definido, obtem o pre?o de venda no cadastro do produto
	    delete from @Resultado
		if (@idProdutoClassificacao > 0)
		BEGIN
		--Se foi informado classifica??o, obtem os dados da classifica??o
			INSERT INTO @Resultado
				select pc.idProduto, pc.id,
				pr.descricao + ' - ' + coalesce(pc.descricao, '') as dscProdutoClasse,
				(case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) as preco, 0
				from ProdutoClassificacao pc
				inner join Produto pr on pr.id = pc.idProduto
				where (pc.id = @idProdutoClassificacao)
		END
		ELSE
		BEGIN
		--Se uma classifica??o n?o foi informada, obtem os dados do cadastro do produto
			INSERT INTO @Resultado
				select pr.id, null,
				pr.descricao,
				pr.vuncom, 0
				from Produto pr			
				where (pr.id = @idProduto)		
		END
					
	END
	
	RETURN 
END
GO
-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER FUNCTION [dbo].[CustoProduto] 
(
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,
		dscProdutoClasse varchar(500),							
		valor decimal(18,4),
		origemCusto varchar(50)
)
AS
BEGIN
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @dataAtual datetime = (SELECT GETDATE());
	declare @idnConsiderarCustoMedio bit = (select coalesce(idnConsiderarCustoMedioComoCustoProduto, 0) from configuracoes)
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;

	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimaCusto from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;
	

	
	if (@idProdutoClassificacao > 0)
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50))
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao = @idProdutoClassificacao)
		order by pcu.dataVigencia desc
		
		declare @totalClasse int = (select COUNT(*) from @Resultado)
		if (@totalClasse = 0)
		BEGIN
			INSERT INTO @Resultado
			select TOP 1
			pcu.idProduto, pcu.idProdutoClassificacao, 
			(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
			(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50))
			from ProdutoCusto pcu
			inner join produto pr on pr.id = pcu.idProduto
			left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
			where (pcu.dataVigencia <= @dataAtual)
			and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
			and (pcu.idProduto = @idProduto)
			and (pcu.idProdutoClassificacao is null)
			order by pcu.dataVigencia desc	
		END
	END
	ELSE
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50))
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		and (pcu.idProdutoClassificacao is null)
		order by pcu.dataVigencia desc	
	END
	
	declare @totalRegistros int
	declare @descricaoSistema varchar(100)
	
	SET @totalRegistros = (select count(*) from @Resultado)
	SET @descricaoSistema = (select top 1 descricao from Menu where idnPadrao = 1)
	
	
	if ((@totalRegistros = 0) or (@descricaoSistema = 'NFE'))
	BEGIN
	--Se n?o tem um custo definido, obtem o pre?o de entrada no cadastro do produto
		delete from @Resultado
		if (@idProdutoClassificacao > 0)
		BEGIN
		--Se foi informado classifica??o, obtem os dados da classifica??o
			INSERT INTO @Resultado
				select pc.idProduto, pc.id,
					pr.descricao + ' - ' + coalesce(pc.descricao, '') as dscProdutoClasse,
					(case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) as precoCusto,
					cast('CUSTOPADRAO' as varchar(50))
				from ProdutoClassificacao pc
				inner join Produto pr on pr.id = pc.idProduto
				where (pc.id = @idProdutoClassificacao)
		END
		ELSE
		BEGIN
		--Se uma classifica??o n?o foi informada, obtem os dados do cadastro do produto
			INSERT INTO @Resultado
				select pr.id, null,
					pr.descricao,
					pr.precoEntrada,
					cast('CUSTOPADRAO' as varchar(50))
				from Produto pr			
				where (pr.id = @idProduto)		
		END
					
	END
	
	RETURN 
END
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO) VALUES(378, 636, GETDATE());