-- FechamentoFinRecebESaidaEfetuadosNaData

WITH fechamento_caixa AS (

	SELECT	
		SUM(mvt.venda_produto) AS venda_produto,
		SUM(mvt.venda_servico) AS venda_servico,
		SUM(mvt.venda_combustivel) AS venda_combustivel,
		SUM(mvt.cheque_troco) AS cheque_troco,
		SUM(mvt.recebimento_especie_fisica) AS recebimento_especie_fisica,
		SUM(mvt.recebimento_especie_digital) AS recebimento_especie_digital,
		SUM(mvt.recebimento_cartao_credito) AS recebimento_cartao_credito,
		SUM(mvt.recebimento_cartao_debito) AS recebimento_cartao_debito,
		SUM(mvt.recebimento_cheque_predatado) AS recebimento_cheque_predatado,
		SUM(mvt.recebimento_cheque_a_vista) AS recebimento_cheque_a_vista,
		SUM(mvt.recebimento_nota_a_prazo) AS recebimento_nota_a_prazo,
		SUM(mvt.recebimento_vale_frete) AS total_vale_frete,
		SUM(mvt.recebimento_ticket) AS total_ticket,
		SUM(mvt.sobra_caixa) AS sobra_caixa,
		SUM(mvt.falta_caixa) AS falta_caixa,
		SUM(mvt.vale_credito) AS vale_credito,
		SUM(mvt.vale_motorista) AS vale_motorista,
		SUM(mvt.pagamento_despesa) AS pagamento_despesa,
		SUM(mvt.recebimento_pagamento_antecipado) AS recebimento_pagamento_antecipado,
		SUM(mvt.pagamento_antecipado) AS pagamento_antecipado,
		SUM(mvt.recebimento_titulo) AS recebimento_titulo,
		SUM(mvt.adiantamento_recebido) AS adiantamento_recebido,
		SUM(mvt.suprimento) AS suprimentos,
		SUM(mvt.sangria) AS sangrias
	FROM	movimento_venda_terminal AS mvt
	WHERE	mvt.data_movimento = :DataMovimento
	AND	mvt.id_empresa = :__ID_EMPRESA
	AND	mvt.fechamento IS NOT NULL
),

saidas AS (

	SELECT
		'Venda Combustivel' AS tipo,
		venda_combustivel AS valor
	FROM fechamento_caixa WHERE venda_combustivel > 0
	UNION ALL
	SELECT
		'Venda Produtos(Lub/Filtros/Outros)' AS tipo,
		venda_produto AS valor
	FROM fechamento_caixa WHERE venda_produto > 0
	UNION ALL
	SELECT
		'Venda Serviços' AS tipo,
		venda_servico AS valor
	FROM fechamento_caixa WHERE venda_servico > 0
	UNION ALL
	SELECT
		'Suprimentos' AS tipo,
		suprimentos AS valor
	FROM fechamento_caixa WHERE suprimentos > 0
	UNION ALL
		SELECT
		'Recebimento de Título' AS tipo,
		recebimento_titulo AS valor
	FROM fechamento_caixa WHERE recebimento_titulo > 0
	UNION ALL
	SELECT
		'Adiantamento Recebimento (Haver)' AS tipo,
		adiantamento_recebido AS valor
	FROM fechamento_caixa WHERE adiantamento_recebido > 0
	UNION ALL
	SELECT
		'Cheque Troco' AS tipo,
		cheque_troco AS valor
	FROM fechamento_caixa WHERE cheque_troco > 0
	UNION ALL
		SELECT
		'Vale Crédito' AS tipo,
		vale_credito AS valor
	FROM fechamento_caixa WHERE vale_credito > 0
	UNION ALL
	SELECT
		'Pagamento Anteciado (Haver)' AS tipo,
		recebimento_pagamento_antecipado AS valor
	FROM fechamento_caixa WHERE recebimento_pagamento_antecipado > 0

),

entradas AS (
	SELECT
		'Espécie Física' AS tipo,
		recebimento_especie_fisica AS valor
	FROM fechamento_caixa WHERE recebimento_especie_fisica > 0
	UNION ALL
	SELECT
		'Espécie Digital' AS tipo,
		recebimento_especie_digital AS valor
	FROM fechamento_caixa WHERE recebimento_especie_digital > 0
	UNION ALL
	SELECT
		'Sangrias' AS tipo,
		sangrias AS valor
	FROM fechamento_caixa WHERE sangrias > 0
	UNION ALL
	SELECT
		'Vale Motorista' AS tipo,
		vale_motorista AS valor
	FROM fechamento_caixa WHERE vale_motorista > 0
	UNION ALL
	SELECT
		'Pagamento Despesa' AS tipo,
		pagamento_despesa AS valor
	FROM fechamento_caixa WHERE pagamento_despesa > 0
	UNION ALL
	SELECT
		'Cheque à Vista' AS tipo,
		recebimento_cheque_a_vista AS valor
	FROM fechamento_caixa WHERE recebimento_cheque_a_vista > 0
	UNION ALL
	SELECT
		'Cheque Pré-Datado' AS tipo,
		recebimento_cheque_predatado AS valor
	FROM fechamento_caixa WHERE recebimento_cheque_predatado > 0
	UNION ALL
	SELECT
		'Cartão Débito' AS tipo,
		recebimento_cartao_debito AS valor
	FROM fechamento_caixa WHERE recebimento_cartao_debito > 0
	UNION ALL
	SELECT
		'Cartão Crédito' AS tipo,
		recebimento_cartao_credito AS valor
	FROM fechamento_caixa WHERE recebimento_cartao_credito > 0
	UNION ALL
	SELECT
		'Nota à Prazo' AS tipo,
		recebimento_nota_a_prazo AS valor
	FROM fechamento_caixa WHERE recebimento_nota_a_prazo > 0
	UNION ALL
	SELECT
		'Vale Frete' AS tipo,
		total_vale_frete AS valor
	FROM fechamento_caixa WHERE total_vale_frete > 0
	UNION ALL
	SELECT
		'Ticket' AS tipo,
		total_ticket AS valor
	FROM fechamento_caixa WHERE total_ticket > 0
	UNION ALL
	SELECT
		'Pagamento Antecipado' AS tipo,
		pagamento_antecipado AS valor
	FROM fechamento_caixa WHERE pagamento_antecipado > 0

)

SELECT 
	'MOVIMENTO' as cabecalho,
	'Saidas' AS movimento,
	tipo,
	valor
FROM saidas
UNION ALL
SELECT 
	'MOVIMENTO' as cabecalho,
	'Saidas' AS movimento,
	'TOTAL' AS tipo,
	SUM(valor) AS valor
FROM saidas

UNION ALL

SELECT 
	'MOVIMENTO' as cabecalho,
	'Entradas' AS movimento,
	tipo,
	valor
FROM entradas
UNION ALL
SELECT 
	'MOVIMENTO' as cabecalho,
	'Entradas' AS movimento,
	'TOTAL' AS tipo,
	SUM(valor) AS valor
FROM entradas

UNION ALL

SELECT 
	'MOVIMENTO' as cabecalho,
	'Diferença Caixa' AS movimento,
	'(Entradas - Saidas)' AS tipo,
	SUM(r.valor) AS valor
FROM (

	SELECT 
		SUM(valor) * -1 AS valor
	FROM saidas
	UNION ALL
	SELECT 
		SUM(valor) AS valor
	FROM entradas
) AS r

