Sistema de gestão ELIGO

Relatório de vendas por tipo de produto e valor de PIS e COFINS

ELIGO.FAQ-6720
SELECT tprod.tipo_produto, query.ncm, sum(query.valor) as total, sum(query.valor * query.pis / 100::double precision) AS valor_pis, sum(query.valor * query.cofins / 100::double precision) AS valor_cofins
FROM (


SELECT
   p.tipo_produto_id
       , ncm.ncm AS ncm
           , cf.estabelecimento_id
               , to_char(cf.data_emissao, 'YYYY-MM-DD'::text) AS data_emissao
                   , sum( icf.quantidade * icf.valor_unitario ) AS valor
                       , ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'PIS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS pis
                           , ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'COFINS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS cofins
                           FROM itens_doc_entradas_saidas icf
                           JOIN doc_entradas_saidas cf ON cf.id = icf.documento_id
                           JOIN produtos p ON icf.produto_id = p.id
                           JOIN tipos_produtos tp ON tp.id = p.tipo_produto_id
                           join cfops cfop on cfop.id = icf.cfop_id
                           left join classificacoes_ncm ncm on tp.ncm_id = ncm.id
                           WHERE cf.situacao_documento not in ('C','M','X' ) and cf.tipo_emitente = 'P' and cf.tipo_operacao='S'  and  ((cfop.cfop like '5.102' or cfop.cfop like '5.403' or cfop.cfop like '5.405' ) or (cfop.cfop like '6.1%' or cfop.cfop like '6.40%' ))
                           GROUP BY p.tipo_produto_id, ncm.ncm, tp.tipo_produto, cf.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text)

union

SELECT p.tipo_produto_id, ncm.ncm AS ncm, ec.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text) AS data_emissao, sum(
                  CASE
                                      WHEN cf.valor_desconto_acrescimo <> 0::double precision THEN icf.valor_total + icf.valor_total / (cf.valor_total_mercadorias - cf.valor_desconto_acrescimo) * cf.valor_desconto_acrescimo
                                                          ELSE icf.valor_total
                                                                          END) AS valor, ( SELECT rt.aliquota
                                                                                             FROM regras_tributos rt
                                                                                                           JOIN tributos t ON t.id = rt.tributo_id
                                                                                                                        WHERE t.sigla = 'PIS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text
                                                                                                                                     ORDER BY rt.prioridade
                                                                                                                                                 LIMIT 1) AS pis, ( SELECT rt.aliquota
                                                                                                                                                                    FROM regras_tributos rt
                                                                                                                                                                                  JOIN tributos t ON t.id = rt.tributo_id
                                                                                                                                                                                               WHERE t.sigla = 'COFINS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text
                                                                                                                                                                                                            ORDER BY rt.prioridade
                                                                                                                                                                                                                        LIMIT 1) AS cofins
                                                                                                                                                                                                                                   FROM itens_cupons_fiscais icf
                                                                                                                                                                                                                                         JOIN cupons_fiscais cf ON cf.id = icf.cupom_fiscal_id
                                                                                                                                                                                                                                            JOIN produtos p ON icf.produto_id = p.id
                                                                                                                                                                                                                                               JOIN tipos_produtos tp ON tp.id = p.tipo_produto_id
                                                                                                                                                                                                                                                  JOIN ecfs_estabelecimentos ec ON ec.id = cf.ecf_estabelecimento_id
                                                                                                                                                                                                                                                     left join classificacoes_ncm ncm on tp.ncm_id = ncm.id
                                                                                                                                                                                                                                                       WHERE icf.situacao::text = 'N'::text AND cf.situacao::text = 'E'::text
                                                                                                                                                                                                                                                         GROUP BY p.tipo_produto_id, ncm.ncm, tp.tipo_produto, ec.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text)


) query
                           
                           inner join tipos_produtos tprod on tprod.id = query.tipo_produto_id
                           where estabelecimento_id != 1333 and data_emissao between '2011-06-01' and '2011-06-30'
                           group by tprod.tipo_produto, ncm
                           order by total;