
WITH recebimento_total AS (	SELECT vcf.id_venda_cf,
							SUM(rv.valor_recebido) AS valor_recebimento_total
							FROM	movimento_venda_terminal AS mvt
							INNER JOIN venda_cf AS vcf ON (vcf.id_movimento_venda_terminal = mvt.id_movimento_venda_terminal)
							INNER JOIN recebimento_venda_cf AS rv ON (rv.id_venda_cf = vcf.id_venda_cf)
							INNER JOIN forma_recebimento AS fr ON (fr.id_forma_recebimento = rv.id_forma_recebimento)
					WHERE	mvt.id_empresa IN (:IdEmpresaMultSlc)
	AND	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
	AND	DATE(vcf.data_cupom) BETWEEN :DataInicial AND :DataFinal
	AND	(:IdTipoRecebimento = -1 OR fr.id_tipo_recebimento = :IdTipoRecebimento)
	AND	vcf.cancelada = 'N'
	AND	rv.cancelado = 'N'
	GROUP BY 1),
	
total_cheque_troco AS (	SELECT vcf.id_venda_cf,
					SUM(COALESCE(ct.valor, 0)) AS valor_troco_cheque
							FROM	movimento_venda_terminal AS mvt
							INNER JOIN venda_cf AS vcf ON (vcf.id_movimento_venda_terminal = mvt.id_movimento_venda_terminal)
							INNER JOIN cheque_emitido AS ct ON (ct.id_venda_cf = vcf.id_venda_cf AND ct.tipo_cheque = 1)
					WHERE	mvt.id_empresa IN (:IdEmpresaMultSlc)
	AND	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
	AND	DATE(vcf.data_cupom) BETWEEN :DataInicial AND :DataFinal
	AND	vcf.cancelada = 'N'
	AND	ct.valor != 0
	GROUP BY 1)


SELECT	se.nome AS nome_empresa,
	tr.denominacao AS tipo_pgto,
	fr.denominacao AS forma_pgto,
	rv.nsu,
	pe.codigo AS codigo_cliente,
	pe.nome AS nome_cliente,
	v.numero_cupom,
	v.data_cupom,
	v.id_ecf,
	v.id_venda_cf,
	(v.duracao_venda / 60) AS duracao_venda_minutos,
	(v.duracao_venda - ((v.duracao_venda / 60) * 60)) AS duracao_venda_segundos,
	v.numero_autorizacao,
	UPPER(v.placa) AS placa,
	v.total_venda,
	SUM(rv.valor_recebido) AS valor_recebido,
	CAST(SUM(rv.valor_troco) AS DECIMAL(12,2)) AS valor_troco,
	(SELECT MAX(p.nome) FROM pessoa AS p INNER JOIN item_venda_cf AS iv ON (iv.id_venda_cf = v.id_venda_cf AND p.id_pessoa = iv.id_atendente)) AS nome_atendente
FROM	movimento_venda_terminal AS mvt
	INNER JOIN venda_cf AS v ON (v.id_movimento_venda_terminal = mvt.id_movimento_venda_terminal)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = mvt.id_empresa)
	INNER JOIN recebimento_venda_cf AS rv ON (rv.id_venda_cf = v.id_venda_cf)
	INNER JOIN recebimento_total AS rt ON (rt.id_venda_cf = v.id_venda_cf)
	LEFT OUTER JOIN total_cheque_troco AS tct ON (tct.id_venda_cf = v.id_venda_cf)
	INNER JOIN forma_recebimento AS fr ON (fr.id_forma_recebimento = rv.id_forma_recebimento)
	INNER JOIN tipo_recebimento AS tr ON (tr.id_tipo_recebimento = fr.id_tipo_recebimento)
	LEFT OUTER JOIN pessoa AS pe ON (pe.id_pessoa = v.id_cliente)
WHERE	mvt.id_empresa IN (:IdEmpresaMultSlc)
AND	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
AND	DATE(v.data_cupom) BETWEEN :DataInicial AND :DataFinal
AND	(:IdTipoRecebimento = -1 OR tr.id_tipo_recebimento = :IdTipoRecebimento)
AND	v.cancelada = 'N'
AND	rv.cancelado = 'N'
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
ORDER BY se.nome,
	tr.denominacao,
	fr.denominacao,
	pe.nome,
	v.data_cupom