-- Extrato de Vendas por Cliente
SELECT	e.nome AS empresa,
        p.codigo,
	p.nome,
	it.codigo AS codigo_item,
	it.denominacao AS denominacao_item,
	ivc.preco,
	SUM(ivc.quantidade) AS quantidade,
    SUM (ivc.total_item - (ivc.desconto_rateado + ivc.desconto_ajuste_rateado + ivc.desconto_automatico_rateado + ivc.desconto_fidelidade_rateado)
            + (ivc.acrescimo_rateado + ivc.acrescimo_ajuste_rateado + ivc.acrescimo_automatico_rateado)) AS total_item

FROM	movimento_venda_terminal AS mv
	INNER JOIN venda_cf AS v ON (v.id_movimento_venda_terminal = mv.id_movimento_venda_terminal)
	INNER JOIN item_venda_cf AS ivc ON (ivc.id_venda_cf = v.id_venda_cf)
	INNER JOIN item AS it ON (it.id_item = ivc.id_item)
	INNER JOIN pessoa AS p ON (p.id_pessoa = v.id_cliente)
	INNER JOIN cliente AS cli ON (cli.id_cliente = p.id_pessoa)
	INNER JOIN sis_empresa AS e ON (e.id_empresa = mv.id_empresa)
	LEFT OUTER JOIN veiculo_cliente AS vc ON (vc.id_veiculo_cliente = v.id_veiculo_cliente)
	LEFT OUTER JOIN motorista_cliente AS mc ON (mc.id_motorista_cliente = v.id_motorista_cliente)
WHERE	
	mv.data_movimento BETWEEN :DataInicial AND :DataFinal
AND (:IdClienteNaoObrigatorio = -1 OR v.id_cliente = :IdClienteNaoObrigatorio)
AND	(:IdMotorista = -1 OR v.id_motorista_cliente = :IdMotorista)
AND	(:IdCombustivel = -1 OR it.id_item = :IdCombustivel)
AND	(regexp_replace(:PlacaVeiculo, '[^a-zA-Z0-9]', '', 'g') = '' OR (regexp_replace(vc.placa, '[^a-zA-Z0-9]', '', 'g') ~* regexp_replace(:PlacaVeiculo, '[^a-zA-Z0-9]', '', 'g') OR regexp_replace(v.placa, '[^a-zA-Z0-9]', '', 'g') ~* regexp_replace(:PlacaVeiculo, '[^a-zA-Z0-9]', '', 'g')))
AND	v.cancelada = 'N'
AND	ivc.cancelado = 'N'
GROUP BY 1,2,3,4,5,6
ORDER BY e.nome,
	p.nome,
	it.denominacao