-- Extrato de Vendas por Cliente
SELECT  e.nome AS empresa,
    p.codigo,
    p.nome,
    CASE WHEN v.placa = '' OR v.placa IS NULL THEN 'Não informada' ELSE UPPER(REPLACE(REPLACE(TRIM(v.placa), '-', ''), ' ', '')) END AS placa,
    mv.data_movimento,
    v.numero_cupom,
    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,
    case when v.odometro = 0 then v.quilometragem else v.odometro end as odometro,
    case when mc.nome is null then v.motorista else mc.nome end  AS motorista
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.id_empresa IN (:IdEmpresaMultSlc)
AND mv.data_movimento BETWEEN :DataInicial AND :DataFinal
AND (:IdClienteNaoObrigatorio = -1 OR v.id_cliente = :IdClienteNaoObrigatorio)
AND (:IdClasseCliente = -1 OR cli.id_classe_cliente = :IdClasseCliente)
AND v.cancelada = 'N'
AND ivc.cancelado = 'N'
GROUP BY 1,2,3,4,5,6,7,8,9,12,13
ORDER BY e.nome,
    p.nome,
    placa,
    mv.data_movimento,
    it.denominacao