WITH compras AS ( SELECT 'COMPRA' AS tipoOperacao, TO_CHAR(d.data_emissao, 'YYYY-MM') AS periodo, SUM(CAST(item.produto -> 'prod' ->> 'vprod' AS NUMERIC)) AS valor FROM document d JOIN jsonb_array_elements(d.data -> 'nfe' -> 'infNFe' -> 'det') item(produto) ON TRUE WHERE d.cnpj_addressee = ? AND d.type IN ('NFE_4_0', 'NFE_3_1') AND ((null) is NULL OR d.key IN (null)) AND d.data_emissao BETWEEN ? AND ? AND item.produto -> 'prod' ->> 'cfop' IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) AND d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie' = COALESCE(cast(? as text), d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie') GROUP BY TO_CHAR(d.data_emissao, 'YYYY-MM') ), devolucoes AS ( SELECT 'DEVOLUCAO' AS tipoOperacao, TO_CHAR(d.data_emissao, 'YYYY-MM') AS periodo, SUM(CAST(item.produto -> 'prod' ->> 'vprod' AS NUMERIC)) AS valor FROM document d JOIN jsonb_array_elements(d.data -> 'nfe' -> 'infNFe' -> 'det') item(produto) ON TRUE WHERE d.cnpj_addressee = ? AND d.type IN ('NFE_4_0', 'NFE_3_1') AND ((null) is NULL OR d.key IN (null)) AND d.data_emissao BETWEEN ? AND ? AND item.produto -> 'prod' ->> 'cfop' IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) AND d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie' = COALESCE(cast(? as text), d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie') GROUP BY TO_CHAR(d.data_emissao, 'YYYY-MM') ), canceladas AS ( SELECT 'CANCELADA' AS tipoOperacao, TO_CHAR(d.data_emissao, 'YYYY-MM') AS periodo, SUM(CAST(item.produto -> 'prod' ->> 'vprod' AS NUMERIC)) AS valor FROM document d JOIN document_status ds ON d.key = ds.key AND d.cnpj_issuer = ds.cnpj_issuer AND d.protocol = ds.protocol AND d.nsu = ds.nsu AND d.type = ds.type JOIN jsonb_array_elements(d.data -> 'nfe' -> 'infNFe' -> 'det') item(produto) ON TRUE WHERE d.cnpj_addressee = ? AND d.type IN ('NFE_4_0', 'NFE_3_1') AND ((null) is NULL OR d.key IN (null)) AND d.data_emissao BETWEEN ? AND ? AND ds.status = '3' AND d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie' = COALESCE(cast(? as text), d.data -> 'nfe' -> 'infNFe' -> 'dest' ->> 'ie') GROUP BY TO_CHAR(d.data_emissao, 'YYYY-MM') ) SELECT tipoOperacao, periodo, valor FROM ( SELECT * FROM compras UNION ALL SELECT * FROM devolucoes UNION ALL SELECT * FROM canceladas ) totais ORDER BY periodo |
17
|
802
|
51
|
|
0.00
|