SELECT	r.nome_empresa,
	r.codigo,
	r.forma_recebimento,
	r.taxa_administracao,
	ROUND(SUM(r.total_recebido), 2) AS total_recebido
FROM	(
	SELECT	se.nome AS nome_empresa,
		v.numero_cupom,
		ci.denominacao AS categoria_item,
		iv.total_item AS total_item,
		v.total_venda,
		fr.codigo,
		fr.denominacao AS forma_recebimento,
		fr.taxa_administracao,
		(iv.total_item / v.total_venda * (rv.valor_recebido - rv.valor_troco - COALESCE(ct.valor, 0))) AS total_recebido,
		ci.id_categoria_item
	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 item_venda_cf AS iv ON (iv.id_venda_cf = v.id_venda_cf)
		INNER JOIN recebimento_venda_cf AS rv ON (rv.id_venda_cf = v.id_venda_cf)
		INNER JOIN forma_recebimento AS fr ON (fr.id_forma_recebimento = rv.id_forma_recebimento)
		INNER JOIN item AS i ON (i.id_item = iv.id_item)
		INNER JOIN categoria_item AS ci ON (ci.id_categoria_item = i.id_categoria_item)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = mvt.id_empresa)
		LEFT OUTER JOIN cheque_emitido AS ct ON (ct.id_venda_cf = v.id_venda_cf AND ct.tipo_cheque = 1)
	WHERE	mvt.id_empresa = :IdEmpresaObrigatorio
	AND	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
	AND	DATE(v.data_cupom) BETWEEN :DataInicial AND :DataFinal
	AND	DATE(iv.data_venda) BETWEEN :DataInicial AND :DataFinal
	AND	iv.cancelado = 'N'
	AND	v.cancelada = 'N'
	AND	rv.cancelado = 'N' ) AS r

GROUP BY r.nome_empresa,
	r.codigo,
	r.forma_recebimento,
	r.taxa_administracao
	
ORDER BY r.nome_empresa,
	r.codigo,
	r.forma_recebimento