-- Compras Efetuadas no Período por Item
WITH RECURSIVE niveis(id_categoria_item, id_categoria_item_pai) AS (
	SELECT	id_categoria_item,
		id_categoria_item_pai,
		1 AS nivel
	FROM	categoria_item
	WHERE	id_categoria_item IN (:IdCategoriaItemMultSlc)
	UNION ALL
	SELECT	ci.id_categoria_item,
		ci.id_categoria_item_pai,
		nv.nivel +1
	FROM	categoria_item AS ci
		INNER JOIN niveis AS nv ON (nv.id_categoria_item = ci.id_categoria_item_pai))
SELECT		
	nfe.numero,
	nfe.emissao,
	nfe.entrada,
	p.codigo AS cod_fornecedor,
	p.nome AS nom_fornecedor,
	i.codigo AS cod_item,
	i.denominacao AS desc_item,
	um.sigla AS sigla_unidade_medida,
	infe.icms_substituicao,
	CASE WHEN infe.quantidade_convertida = 0 THEN 0 
		 WHEN nfe.frete = 0 THEN ROUND((infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao) / infe.quantidade_convertida, 5) 
		 ELSE ROUND((infe.rateio_frete + infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao) / infe.quantidade_convertida, 5) END AS valor_unitario_original,
	CASE WHEN infe.quantidade_convertida = 0 THEN 0 
		 ELSE ROUND((infe.rateio_frete + infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao) / infe.quantidade_convertida, 5) END as valor_unitario,
	se.codigo AS cod_empresa,
	se.nome AS desc_empresa,
	le.denominacao AS local_estoque,
	SUM(infe.quantidade_convertida) AS quantidade_convertida,
	SUM(CASE WHEN infe.quantidade_convertida = 0 THEN 0
			 WHEN nfe.frete = 0 THEN (infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao) 
			 ELSE (infe.rateio_frete + infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao) END) AS total_custo_item_original,
	SUM(CASE WHEN infe.quantidade_convertida = 0 THEN 0
			 ELSE infe.rateio_frete + infe.rateio_seguro + infe.rateio_despesa_acessoria + infe.total_produto + infe.icms_substituicao END) as total_custo_item,
	SUM(CASE WHEN nfe.frete = 0 THEN infe.rateio_frete ELSE 0 END) AS rateio_CTE
FROM	nota_fiscal_entrada AS nfe
	INNER JOIN pessoa AS p ON (p.id_pessoa = nfe.id_fornecedor)
	INNER JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
	INNER JOIN item AS i ON (i.id_item = infe.id_item)
	LEFT OUTER JOIN local_estoque AS le ON (le.id_local_estoque = infe.id_local_estoque)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
	INNER JOIN unidade_medida AS um ON (um.id_unidade_medida = i.id_unidade_medida)
	INNER JOIN categoria_item AS ci ON (ci.id_categoria_item = i.id_categoria_item)
WHERE	nfe.id_empresa IN (:IdEmpresaMultSlc)
AND	nfe.entrada BETWEEN :DataInicial AND :DataFinal
AND	(:IdCredorDevedorNaoObrigatorio = -1 OR p.id_pessoa = :IdCredorDevedorNaoObrigatorio)
AND	ci.id_categoria_item IN (SELECT id_categoria_item FROM niveis)
AND	(:IdItemNaoObrigatorio = -1 OR infe.id_item = :IdItemNaoObrigatorio)
AND	(:IdTipoItemNO = -1 OR i.tipo_item = :IdTipoItemNO)
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14
ORDER BY se.nome,
	i.denominacao,
	nfe.emissao