-- Evolução de Vendas de Combustível Mês a Mês
SELECT	r.empresa,
	r.nome,
	CAST(EXTRACT('MONTH' FROM (DATE(r.data))) AS INTEGER) AS mes,
	CASE WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 1 THEN 'Janeiro'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 2 THEN 'Fevereiro'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 3 THEN 'Março'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 4 THEN 'Abril'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 5 THEN 'Maio'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 6 THEN 'Junho'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 7 THEN 'Julho'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 8 THEN 'Agosto'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 9 THEN 'Setembro'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 10 THEN 'Outubro'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 11 THEN 'Novembro'
		WHEN EXTRACT('MONTH' FROM (DATE(r.data))) = 12 THEN 'Dezembro' END AS mes_extenso,
	SUM(r.quantidade) AS quantidade,
	SUM(r.total_bruto) AS total_bruto,
	SUM(r.desconto) AS desconto,
	SUM(r.acrescimo) AS acrescimo,
	SUM(r.custo) AS custo
FROM	(
	SELECT	se.nome AS empresa,
		p.nome,
		DATE(vc.data_cupom) AS data,
		ivc.quantidade,
		ivc.total_bruto,
		(ivc.desconto + ivc.desconto_automatico + ivc.desconto_rateado + ivc.desconto_ajuste_rateado + ivc.desconto_automatico_rateado + ivc.desconto_fidelidade_rateado) AS desconto,
		(ivc.acrescimo + ivc.acrescimo_automatico + ivc.acrescimo_rateado + ivc.acrescimo_ajuste_rateado + ivc.acrescimo_automatico_rateado) AS acrescimo,
		me.valor AS custo
	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 abastecimento AS a ON (a.id_abastecimento = ivc.id_abastecimento)
		INNER JOIN movimento_estoque AS me ON (me.id_movimento_estoque = ivc.id_movimento_estoque)
		INNER JOIN item AS i ON (i.id_item = ivc.id_item)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = mvt.id_empresa)
		INNER JOIN pessoa As p ON p.id_pessoa = vc.id_cliente
	WHERE	mvt.id_empresa = :IdEmpresaObrigatorio
	AND	
	CAST(EXTRACT('YEAR' FROM DATE(vc.data_cupom)) AS INTEGER) = :Ano
	AND	(:IdCombustivel = -1 OR i.id_item = :IdCombustivel) 
	AND	p.id_pessoa = :IdCliente

	UNION ALL

	SELECT	se.nome AS nome_empresa,
		p.nome,
		nfs.emissao AS data,
		infs.quantidade,
		(infs.total_item + infs.desconto) AS total_bruto,
		infs.desconto,
		0.00 AS acrescimo,
		me.valor AS custo
	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 sis_referencia_registro AS rr ON (rr.id_chave_registro_a = infs.id_item_nfs AND rr.tipo_referencia = 'ref_1101_0411_movimento_estoque_nfs')
		INNER JOIN movimento_estoque AS me ON (me.id_movimento_estoque = rr.id_chave_registro_b)
		INNER JOIN item AS i ON (i.id_item = infs.id_item)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = nfs.id_empresa)
		INNER JOIN pessoa AS p ON p.id_pessoa = nfs.id_cliente
	WHERE	CAST(EXTRACT('YEAR' FROM DATE(nfs.emissao)) AS INTEGER) = :Ano
	AND	nfs.id_empresa = :IdEmpresaObrigatorio
	AND	nfs.situacao = 1 -- Confirmado
	AND	EXISTS(SELECT 1 FROM cfop AS c WHERE c.tipo_movimento_estoque != 4 AND c.gera_titulo_financeiro = 'S' AND c.id_tipo_movimento_estoque = 7 AND c.id_cfop = infs.id_cfop)
	AND	p.id_pessoa = :IdCliente
	AND	infs.id_item IN (SELECT id_item_tanque FROM local_estoque 
				WHERE	tipo = 2 AND id_empresa = :IdEmpresaObrigatorio
				AND	(:IdCombustivel = -1 OR id_item_tanque = :IdCombustivel))

	UNION ALL

	SELECT	se.nome AS nome_empresa,
		p.nome,
		nfe.emissao AS data,
		(infe.quantidade * -1) AS quantidade,
		((infe.total_produto + infe.desconto) * -1) AS total_bruto,
		(infe.desconto * -1) AS desconto,
		0.00 AS acrescimo,
		(me.valor * -1) AS custo
	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 movimento_estoque AS me ON (me.id_movimento_estoque = infe.id_movimento_estoque)
		INNER JOIN item AS i ON (i.id_item = infe.id_item)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
		INNER JOIN pessoa AS p ON p.id_pessoa = nfe.id_fornecedor
	WHERE	CAST(EXTRACT('YEAR' FROM DATE(nfe.emissao)) AS INTEGER) = :Ano
	AND	nfe.id_empresa = :IdEmpresaObrigatorio
	AND	nfe.situacao = 1 -- Confirmado
	AND	infe.id_movimento_estoque IS NOT NULL
	AND	p.id_pessoa = :IdCliente
	AND	EXISTS(SELECT 1 FROM cfop WHERE tipo_movimento_estoque != 4 AND id_tipo_movimento_estoque = 3 AND id_cfop = infe.id_cfop)
	AND	infe.id_item IN (SELECT id_item_tanque FROM local_estoque 
				WHERE	tipo = 2 AND id_empresa = :IdEmpresaObrigatorio
				AND	(:IdCombustivel = -1 OR id_item_tanque = :IdCombustivel))
) AS r
GROUP BY r.empresa,
	r.nome,
	mes,
	mes_extenso
ORDER BY r.nome,
	mes