SELECT	
        r.nome_empresa,
        r.denominacao_item,
        r.codigo_item,
        SUM(r.quantidade) AS quantidade,
        CASE WHEN (SUM(r.quantidade) != 0) THEN ROUND((SUM(r.total_bruto) / SUM(r.quantidade)), 3)
            ELSE CAST(0 AS DECIMAL(12,3)) END AS venda_bruta_unit,
        SUM(r.total_bruto) AS total_bruto,
        SUM(r.desconto) AS desconto,
        SUM(r.acrescimo) AS acrescimo,
        CASE WHEN (SUM(r.quantidade) != 0) THEN ROUND(COALESCE(((SUM(r.total_bruto) - SUM(r.desconto) + SUM(r.acrescimo)) / SUM(r.quantidade)), 0), 3)
            ELSE CAST(0 AS DECIMAL(12,3)) END AS venda_liq_unit,
        ROUND(COALESCE((SUM(r.total_bruto) - SUM(r.desconto) + SUM(r.acrescimo)), 0), 3) AS venda_liq_total,
        CASE WHEN (SUM(r.quantidade) != 0) THEN ROUND(COALESCE((SUM(r.custo) / SUM(r.quantidade)), 0), 4)
            ELSE CAST(0 AS DECIMAL(12,3)) END AS custo_medio_unit,
        CASE WHEN (SUM(r.quantidade) != 0) THEN ROUND(COALESCE((((SUM(r.total_bruto) - SUM(r.desconto) + SUM(r.acrescimo)) - SUM(r.custo)) / SUM(r.quantidade)), 0), 3)
            ELSE CAST(0 AS DECIMAL(12,3)) END AS lucro_bruto_unit,
        ROUND(COALESCE((SUM(r.total_bruto) - SUM(r.custo) - SUM(r.desconto)+ SUM(r.desconto_financeiro) + SUM(r.acrescimo)), 0), 3) AS lucro_bruto_total,
        SUM(r.custo) AS custo,
		SUM(r.desconto_financeiro) as desconto_financeiro

    FROM	(


        SELECT	
            se.nome AS nome_empresa,
            CASE WHEN ivc.id_abastecimento IS NULL THEN 'OUTROS PRODUTOS' ELSE i.denominacao END AS denominacao_item,
            CASE WHEN ivc.id_abastecimento IS NULL THEN '999' ELSE  i.codigo END AS codigo_item,
            SUM(ivc.quantidade) AS quantidade,
            SUM(
                ROUND((ivc.preco_original * ivc.quantidade), 2) + (
                CASE WHEN ROUND((ivc.preco_original * ivc.quantidade), 2) < ivc.total_item THEN ivc.total_item - ROUND((ivc.preco_original * ivc.quantidade), 2) ELSE 0 END
                )
            ) AS total_bruto,
            SUM(
                CASE WHEN ROUND((ivc.preco_original * ivc.quantidade), 2) > ivc.total_item THEN ROUND((ivc.preco_original * ivc.quantidade), 2) - ivc.total_item ELSE 0 END
            ) AS desconto,            
            SUM(ivc.acrescimo + ivc.acrescimo_automatico + ivc.acrescimo_rateado + ivc.acrescimo_ajuste_rateado + ivc.acrescimo_automatico_rateado) AS acrescimo,
            COALESCE(SUM(me.valor), 0) AS custo,
			0 as desconto_financeiro
        FROM	movimento_venda_terminal AS mvt
            INNER JOIN venda_cf AS vc ON (vc.id_movimento_venda_terminal = mvt.id_movimento_venda_terminal)
            INNER JOIN item_venda_cf AS ivc ON (ivc.id_venda_cf = vc.id_venda_cf)
            INNER JOIN movimento_estoque AS me ON (me.id_movimento_estoque = ivc.id_movimento_estoque)
            INNER JOIN item AS i ON (ivc.id_item = i.id_item)
            INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = mvt.id_empresa)
        WHERE	mvt.id_empresa  IN (:IdEmpresaMultSlc)
        AND	mvt.data_movimento BETWEEN :DataInicial AND :DataFinal
        AND	DATE(vc.data_cupom) BETWEEN :DataInicial AND :DataFinal
        AND	DATE(ivc.data_venda) BETWEEN :DataInicial AND :DataFinal
        AND	(ivc.cancelado = 'N' AND vc.cancelada = 'N')
        GROUP BY 1,2,3

        UNION ALL
		
		--DESCONTO FINANCEIRO
		SELECT	se.nome AS nome_empresa,
			i.denominacao AS denominacao_item,
            i.codigo AS codigo_item,
			0 AS quantidade,
			0 AS total_bruto,
			0 AS desconto,
			0 AS acrescimo,
			0 AS custo,
			SUM(tf.desconto_financeiro + tf.desconto_cobranca) as desconto_financeiro
		FROM	nota_fiscal_entrada AS nfe
			INNER JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
			INNER JOIN item AS i ON (i.id_item = infe.id_item)
			LEFT JOIN local_estoque AS le ON (le.id_item_tanque = i.id_item AND le.id_empresa = nfe.id_empresa)
			INNER JOIN unidade_medida um ON (i.id_unidade_medida = um.id_unidade_medida)
			INNER JOIN categoria_item AS ci ON (ci.id_categoria_item = i.id_categoria_item)
			INNER JOIN parcela_nfe AS pnfe ON (pnfe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
			INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
			INNER JOIN titulo_financeiro AS tf on (tf.id_titulo_financeiro = pnfe.id_titulo_financeiro)
		WHERE nfe.id_empresa IN (:IdEmpresaMultSlc)
		AND infe.id_local_estoque IN (SELECT id_local_estoque FROM local_estoque WHERE tipo = 2)
		AND	nfe.entrada BETWEEN :DataInicial AND :DataFinal
		GROUP BY 1,2,3

		UNION ALL	


        SELECT	se.nome AS nome_empresa,
            i.denominacao AS denominacao_item,
            i.codigo AS codigo_item,
            SUM(infs.quantidade) AS quantidade,
            SUM(infs.total_item + infs.desconto) AS total_bruto,
            SUM(infs.desconto) AS desconto,
            0.00 AS acrescimo,
            COALESCE(SUM(me.valor), 0) AS custo,
			0 as desconto_financeiro
        FROM	nota_fiscal_saida AS nfs
            INNER JOIN item_nfs AS infs ON (infs.id_nota_fiscal_saida = nfs.id_nota_fiscal_saida)
            INNER JOIN sis_referencia_registro AS rr ON (rr.id_chave_registro_a = infs.id_item_nfs AND rr.tipo_referencia = 'ref_1101_0411_movimento_estoque_nfs')
            INNER JOIN movimento_estoque AS me ON (me.id_movimento_estoque = rr.id_chave_registro_b)
            INNER JOIN item AS i ON (i.id_item = infs.id_item)
            LEFT JOIN local_estoque AS le ON (le.id_item_tanque = i.id_item AND le.id_empresa = nfs.id_empresa)
            INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = nfs.id_empresa)
        WHERE	nfs.id_empresa IN (:IdEmpresaMultSlc)
        AND	nfs.emissao BETWEEN :DataInicial AND :DataFinal
        AND	nfs.situacao = 1 
        AND	EXISTS(SELECT 1 FROM cfop WHERE tipo_movimento_estoque != 4 AND gera_titulo_financeiro = 'S' AND id_tipo_movimento_estoque = 7 AND id_cfop = infs.id_cfop)
        GROUP BY 1,2,3

        UNION ALL


        SELECT	
            se.nome AS nome_empresa,
            i.denominacao AS denominacao_item,
            i.codigo AS codigo_item,
            (SUM(infe.quantidade) * -1) AS quantidade,
            (SUM(infe.total_produto + infe.desconto) * -1) AS total_bruto,
            (SUM(infe.desconto) * -1) AS desconto,
            0.00 AS acrescimo,
            (SUM(me.valor) * -1) AS custo,
			0 as desconto_financeiro
        FROM	nota_fiscal_entrada AS nfe
            INNER JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
            INNER JOIN movimento_estoque AS me ON (me.id_movimento_estoque = infe.id_movimento_estoque)
            INNER JOIN item AS i ON (i.id_item = infe.id_item)
            LEFT JOIN local_estoque AS le ON (le.id_item_tanque = i.id_item AND le.id_empresa = nfe.id_empresa)
            INNER JOIN categoria_item AS ci ON (i.id_categoria_item = ci.id_categoria_item)
            INNER JOIN unidade_medida um ON (i.id_unidade_medida = um.id_unidade_medida)
            INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
        WHERE	nfe.id_empresa IN (:IdEmpresaMultSlc)
        AND	nfe.emissao BETWEEN :DataInicial AND :DataFinal
        AND	(0 = 0 OR i.tipo_item = 0)
        AND	me.data_movimento BETWEEN :DataInicial AND :DataFinal
        AND	nfe.situacao = 1 
        AND	EXISTS(SELECT 1 FROM cfop WHERE tipo_movimento_estoque != 4 AND id_tipo_movimento_estoque = 3 AND id_cfop = infe.id_cfop)
        GROUP BY 1,2,3
    ) AS r
    GROUP BY r.nome_empresa,
        r.codigo_item,
        r.denominacao_item
    ORDER BY r.nome_empresa,
        r.codigo_item,
        r.denominacao_item