-- Venda Diária por Categoria de Item

--Dados da Venda
SELECT	r.nome_empresa,
	r.data_movimento,
	CASE WHEN EXTRACT(DOW FROM r.data_movimento) = 0 THEN 'Dom'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 1 THEN 'Seg'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 2 THEN 'Ter'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 3 THEN 'Qua'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 4 THEN 'Qui'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 5 THEN 'Sex'
	     WHEN EXTRACT(DOW FROM r.data_movimento) = 6 THEN 'Sab' END AS semana,
	r.categoria_item,
	SUM(r.venda_total) AS venda_total
FROM	(
SELECT	se.nome AS nome_empresa,
	mvt.data_movimento,
	ci.denominacao AS categoria_item,
	SUM(ivc.total_bruto - (ivc.desconto + ivc.desconto_automatico + ivc.desconto_rateado + ivc.desconto_ajuste_rateado + ivc.desconto_automatico_rateado + ivc.desconto_fidelidade_rateado)
		+ (ivc.acrescimo + ivc.acrescimo_automatico + ivc.acrescimo_rateado + ivc.acrescimo_ajuste_rateado + ivc.acrescimo_automatico_rateado)) AS venda_total
FROM	movimento_venda_terminal AS mvt
	INNER JOIN venda_cf AS vc ON (vc.id_movimento_venda_terminal = mvt.id_movimento_venda_terminal)
	INNER JOIN item_venda_cf AS ivc ON (ivc.id_venda_cf = vc.id_venda_cf)
	INNER JOIN item AS i ON (ivc.id_item = i.id_item)
	INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = mvt.id_empresa)
WHERE	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
AND	DATE(vc.data_cupom) BETWEEN :DataInicial AND :DataFinal
AND	DATE(ivc.data_venda) BETWEEN :DataInicial AND :DataFinal
AND	mvt.id_empresa = :IdEmpresaObrigatorio
AND	CASE WHEN (:ImprimirProdutosCombustiveis = 'S') THEN (:ImprimirProdutosCombustiveis = 'S') ELSE (ivc.id_bico_combustivel IS NULL) END
AND	(ivc.cancelado = 'N' AND vc.cancelada = 'N')
GROUP BY 1,2,3

UNION ALL

--Dados NFS
SELECT	se.nome AS nome_empresa,
	nfs.emissao AS data_movimento,
	ci.denominacao AS categoria_item,
	SUM(infs.total_item) AS venda_total
FROM	nota_fiscal_saida AS nfs
	INNER JOIN item_nfs AS infs ON (infs.id_nota_fiscal_saida = nfs.id_nota_fiscal_saida)
	INNER JOIN item AS i ON (i.id_item = infs.id_item)
	INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = nfs.id_empresa)
WHERE	nfs.emissao BETWEEN :DataInicial AND :DataFinal
AND	nfs.id_empresa = :IdEmpresaObrigatorio
AND	nfs.situacao = 1 -- Confirmado
AND	EXISTS(SELECT 1 FROM cfop WHERE tipo_movimento_estoque != 4 AND gera_titulo_financeiro = 'S' AND id_tipo_movimento_estoque = 7 AND id_cfop = infs.id_cfop)
AND	EXISTS(SELECT 1 FROM movimento_estoque AS me1 INNER JOIN sis_referencia_registro AS rr1 ON (me1.id_movimento_estoque = rr1.id_chave_registro_b)
		WHERE rr1.id_chave_registro_a = infs.id_item_nfs AND rr1.tipo_referencia = 'ref_1101_0411_movimento_estoque_nfs')
AND	CASE WHEN (:ImprimirProdutosCombustiveis = 'S') THEN (:ImprimirProdutosCombustiveis = 'S') ELSE (infs.id_local_estoque NOT IN (SELECT id_local_estoque FROM local_estoque WHERE tipo = 2)) END
GROUP BY 1,2,3

UNION ALL

--Dados NFE
SELECT	se.nome AS nome_empresa,
	nfe.emissao AS data_venda,
	ci.denominacao AS categoria_item,
	(SUM(infe.total_produto) * -1) AS venda_total
FROM	nota_fiscal_entrada AS nfe
	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)
	INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
WHERE	nfe.emissao BETWEEN :DataInicial AND :DataFinal
AND	nfe.id_empresa = :IdEmpresaObrigatorio
AND	nfe.situacao = 1 -- Confirmado
AND	EXISTS(SELECT 1 FROM cfop WHERE tipo_movimento_estoque != 4 AND id_tipo_movimento_estoque = 3 AND id_cfop = infe.id_cfop)
AND	CASE WHEN (:ImprimirProdutosCombustiveis = 'S') THEN (:ImprimirProdutosCombustiveis = 'S') ELSE (infe.id_local_estoque NOT IN (SELECT id_local_estoque FROM local_estoque WHERE tipo = 2)) END
AND	infe.id_movimento_estoque IS NOT NULL
GROUP BY 1,2,3 ) AS r
GROUP BY r.nome_empresa,
	r.data_movimento,
	r.categoria_item
ORDER BY r.nome_empresa,
	r.data_movimento,
	r.categoria_item