-- DITO - reformulado

WITH TOTAIS_PEDIDO AS (
    /* Agrega os totais por pedido */
    SELECT 
        NUMPED, 
        SUM(QT * PVENDA) AS TOTAL_BRUTO,
        COUNT(DISTINCT CODPROD) AS QTD_SKUS,
        SUM(CASE WHEN CODPROD = 48500 THEN (QT * PVENDA) ELSE 0 END) AS TOTAL_FRETE_PED
    FROM PCPEDI
    GROUP BY NUMPED
)
/* --- BLOCO DE VENDAS --- */
SELECT
    V.CODFILIAL                                             AS CODIGO_FILIAL,
    C.CLIENTE                                               AS NOME_CLIENTE,
    C.EMAIL                                                 AS EMAIL_CLIENTE,
    REGEXP_REPLACE(C.CGCENT, '[^0-9]', '')                  AS CPF,
    C.CODCLI                                                AS CODIGO_CLIENTE,
    C.TIPOFJ                                                AS TIPO_PESSOA,
    C.SEXO,
    C.DTNASC                                                AS DATA_NASCIMENTO,
    CID.NOMECIDADE,
    C.TELENT                                                AS TELEFONE,
    C.ENDERENT                                              AS ENDERECO,
    C.NUMEROENT                                             AS NUMERO,
    C.BAIRROENT                                             AS BAIRRO,
    C.ESTENT                                                AS ESTADO,
    C.DTCADASTRO                                            AS DATA_CADASTO,
    C.DTPRIMCOMPRA                                          AS DATA_PRIMEIRA_COMPRA,
    C.DTULTCOMP                                             AS DATA_ULTIMA_COMPRA,
    V.DTSAIDA                                               AS DATA_COMPRA,
    V.NUMPED                                                AS NUMERO_PEDIDO,
    S.NOME                                                  AS NOME_LOJA,
    P.CODSUPERVISOR                                         AS CODIGO_SUPERVISOR,
    U.NOME                                                  AS NOME_VENDEDOR,
    V.CODUSUR                                               AS CODIGO_VENDEDOR,
    COB.COBRANCA                                            AS METODO_PAGAMENTO,
    PL.DESCRICAO                                            AS PLANO_DE_PAGAMENTO,
    TP.TOTAL_BRUTO                                          AS TOTAL_COMPRA,
    TP.QTD_SKUS                                             AS QTD_TOTAL_PRODUTO,
    GREATEST(NVL(P.VLTABELA, 0) - NVL(TP.TOTAL_BRUTO, 0), 0) AS TOTAL_DESCONTO,
    NVL(TP.TOTAL_FRETE_PED, 0)                              AS TOTAL_FRETE,
    V.CODPROD                                               AS ID_PRODUTO,
    PROD.DESCRICAO                                          AS NOME_PRODUTO,
    V.QT                                                    AS QTDE_PRODUTO,
    (V.VLVENDA / DECODE(V.QT, 0, 1, V.QT))                  AS PRECO_PRODUTO,
    'VENDA'                                                 AS TIPO_FATURAMENTO,
    V.VLVENDA                                               AS SUB_TOTAL,
    CAT.CATEGORIA                                           AS CATEGORIA_PRODUTO,
    SEC.DESCRICAO                                           AS SECAO_PRODUTO,
    DEP.DESCRICAO                                           AS DEPARTAMENTO_PRODUTO,
    PARC.NOME                                               AS NOME_PARCEIRO,
    PARC.ID                                                 AS CODIGO_PARCEIRO,
    PARC.TELEFONE                                           AS TELEFONE_PARCEIRO
FROM view_vendas_resumo_faturamento V
INNER JOIN PCPRODUT     PROD ON V.CODPROD    = PROD.CODPROD
INNER JOIN PCCLIENT     C    ON V.CODCLI     = C.CODCLI
INNER JOIN PCPEDC       P    ON V.NUMPED     = P.NUMPED
INNER JOIN PCUSUARI     U    ON V.CODUSUR    = U.CODUSUR
INNER JOIN PCCOB        COB  ON V.CODCOB     = COB.CODCOB
INNER JOIN PCPLPAG      PL   ON V.CODPLPAG   = PL.CODPLPAG
INNER JOIN PCDEPTO      DEP  ON PROD.CODEPTO = DEP.CODEPTO
INNER JOIN PCSECAO      SEC  ON PROD.CODSEC  = SEC.CODSEC
INNER JOIN PCSUPERV     S    ON P.CODSUPERVISOR = S.CODSUPERVISOR
LEFT JOIN  TOTAIS_PEDIDO TP  ON V.NUMPED     = TP.NUMPED
LEFT JOIN  PCCIDADE     CID  ON C.CODCIDADE  = CID.CODCIDADE
LEFT JOIN  ESTPARCEIRO  PARC ON P.CODUSUR3   = PARC.ID
LEFT JOIN  PCCATEGORIA  CAT  ON (PROD.CODSEC = CAT.CODSEC AND PROD.CODCATEGORIA = CAT.CODCATEGORIA)
WHERE V.CONDVENDA IN (1, 7)
  AND V.CODCLI NOT IN (1)
  AND V.CODPROD NOT IN (48500) -- REMOVE O PRODUTO FRETE
  AND V.DTSAIDA >= TRUNC(SYSDATE) - (365*4)

UNION ALL

/* --- BLOCO DE DEVOLUÇÃO --- */
SELECT
    D.CODFILIAL,
    C.CLIENTE,
    C.EMAIL,
    REGEXP_REPLACE(C.CGCENT, '[^0-9]', ''),
    C.CODCLI,
    C.TIPOFJ,
    C.SEXO,
    C.DTNASC,
    CID.NOMECIDADE,
    C.TELENT,
    C.ENDERENT,
    C.NUMEROENT,
    C.BAIRROENT,
    C.ESTENT,
    C.DTCADASTRO,
    C.DTPRIMCOMPRA,
    C.DTULTCOMP,
    D.DTENT,
    D.NUMPED,
    S.NOME,
    P.CODSUPERVISOR,
    U.NOME,
    D.CODUSUR,
    COB.COBRANCA,
    PL.DESCRICAO,
    D.VLDEVOLUCAO * -1,
    1,
    0,
    0,
    D.CODPROD,
    PROD.DESCRICAO,
    D.QT * -1,
    (D.VLDEVOLUCAO / DECODE(D.QT, 0, 1, D.QT)) * -1,
    'DEVOLUCAO',
    D.VLDEVOLUCAO * -1,
    CAT.CATEGORIA,
    SEC.DESCRICAO,
    DEP.DESCRICAO,
    PARC.NOME,
    PARC.ID,
    PARC.TELEFONE
FROM view_devol_resumo_faturamento D
INNER JOIN PCPEDC       P    ON D.NUMPED     = P.NUMPED
INNER JOIN PCPRODUT     PROD ON D.CODPROD    = PROD.CODPROD
INNER JOIN PCCLIENT     C    ON D.CODCLI     = C.CODCLI
INNER JOIN PCUSUARI     U    ON D.CODUSUR    = U.CODUSUR
INNER JOIN PCCOB        COB  ON D.CODCOB     = COB.CODCOB
INNER JOIN PCPLPAG      PL   ON D.CODPLPAG   = PL.CODPLPAG
INNER JOIN PCDEPTO      DEP  ON PROD.CODEPTO = DEP.CODEPTO
INNER JOIN PCSECAO      SEC  ON PROD.CODSEC  = SEC.CODSEC
INNER JOIN PCSUPERV     S    ON P.CODSUPERVISOR = S.CODSUPERVISOR
LEFT JOIN  PCCIDADE     CID  ON C.CODCIDADE  = CID.CODCIDADE
LEFT JOIN  ESTPARCEIRO  PARC ON P.CODUSUR3   = PARC.ID
LEFT JOIN  PCCATEGORIA  CAT  ON (PROD.CODSEC = CAT.CODSEC AND PROD.CODCATEGORIA = CAT.CODCATEGORIA)
WHERE D.CONDVENDA IN (1, 7, 8)
  AND D.CODCLI NOT IN (1)
  AND D.CODPROD NOT IN (48500) -- REMOVE O PRODUTO FRETE
  AND D.DTCANCEL IS NULL
  AND D.DTENT >= TRUNC(SYSDATE) - (365*4);


-- batendo valores

  SELECT
    'QUERY_2' AS ORIGEM,
    SUM(CASE 
            WHEN TIPO_FATURAMENTO = 'VENDA' 
            THEN SUB_TOTAL 
            ELSE 0 
        END) AS FATURAMENTO_BRUTO,
    SUM(CASE 
            WHEN TIPO_FATURAMENTO = 'DEVOLUCAO' 
            THEN SUB_TOTAL 
            ELSE 0 
        END) AS DEVOLUCAO,
    SUM(SUB_TOTAL) AS FATURAMENTO_LIQUIDO
FROM (
		WITH TOTAIS_PEDIDO AS (
    /* Agrega os totais por pedido */
    SELECT 
        NUMPED, 
        SUM(QT * PVENDA) AS TOTAL_BRUTO,
        COUNT(DISTINCT CODPROD) AS QTD_SKUS,
        SUM(CASE WHEN CODPROD = 48500 THEN (QT * PVENDA) ELSE 0 END) AS TOTAL_FRETE_PED
    FROM PCPEDI
    GROUP BY NUMPED
)
/* --- BLOCO DE VENDAS --- */
SELECT
    V.CODSUPERVMOV                                          AS CODIGO_FILIAL,
    C.CLIENTE                                               AS NOME_CLIENTE,
    C.EMAIL                                                 AS EMAIL_CLIENTE,
    REGEXP_REPLACE(C.CGCENT, '[^0-9]', '')                  AS CPF,
    C.CODCLI                                                AS CODIGO_CLIENTE,
    C.TIPOFJ                                                AS TIPO_PESSOA,
    C.SEXO,
    C.DTNASC                                                AS DATA_NASCIMENTO,
    CID.NOMECIDADE,
    C.TELENT                                                AS TELEFONE,
    C.ENDERENT                                              AS ENDERECO,
    C.NUMEROENT                                             AS NUMERO,
    C.BAIRROENT                                             AS BAIRRO,
    C.ESTENT                                                AS ESTADO,
    C.DTCADASTRO                                            AS DATA_CADASTO,
    C.DTPRIMCOMPRA                                          AS DATA_PRIMEIRA_COMPRA,
    C.DTULTCOMP                                             AS DATA_ULTIMA_COMPRA,
    V.DTSAIDA                                               AS DATA_COMPRA,
    V.NUMPED                                                AS NUMERO_PEDIDO,
    S.NOME                                                  AS NOME_LOJA,
    P.CODSUPERVISOR                                         AS CODIGO_SUPERVISOR,
    U.NOME                                                  AS NOME_VENDEDOR,
    V.CODUSUR                                               AS CODIGO_VENDEDOR,
    COB.COBRANCA                                            AS METODO_PAGAMENTO,
    PL.DESCRICAO                                            AS PLANO_DE_PAGAMENTO,
    TP.TOTAL_BRUTO                                          AS TOTAL_COMPRA,
    TP.QTD_SKUS                                             AS QTD_TOTAL_PRODUTO,
    GREATEST(NVL(P.VLTABELA, 0) - NVL(TP.TOTAL_BRUTO, 0), 0) AS TOTAL_DESCONTO,
    NVL(TP.TOTAL_FRETE_PED, 0)                              AS TOTAL_FRETE,
    V.CODPROD                                               AS ID_PRODUTO,
    PROD.DESCRICAO                                          AS NOME_PRODUTO,
    V.QT                                                    AS QTDE_PRODUTO,
    (V.VLVENDA / DECODE(V.QT, 0, 1, V.QT))                  AS PRECO_PRODUTO,
    'VENDA'                                                 AS TIPO_FATURAMENTO,
    V.VLVENDA                                               AS SUB_TOTAL,
    CAT.CATEGORIA                                           AS CATEGORIA_PRODUTO,
    SEC.DESCRICAO                                           AS SECAO_PRODUTO,
    DEP.DESCRICAO                                           AS DEPARTAMENTO_PRODUTO,
    PARC.NOME                                               AS NOME_PARCEIRO,
    PARC.ID                                                 AS CODIGO_PARCEIRO,
    PARC.TELEFONE                                           AS TELEFONE_PARCEIRO
FROM view_vendas_resumo_faturamento V
INNER JOIN PCPRODUT     PROD ON V.CODPROD    = PROD.CODPROD
INNER JOIN PCCLIENT     C    ON V.CODCLI     = C.CODCLI
INNER JOIN PCPEDC       P    ON V.NUMPED     = P.NUMPED
INNER JOIN PCUSUARI     U    ON V.CODUSUR    = U.CODUSUR
INNER JOIN PCCOB        COB  ON V.CODCOB     = COB.CODCOB
INNER JOIN PCPLPAG      PL   ON V.CODPLPAG   = PL.CODPLPAG
INNER JOIN PCDEPTO      DEP  ON PROD.CODEPTO = DEP.CODEPTO
INNER JOIN PCSECAO      SEC  ON PROD.CODSEC  = SEC.CODSEC
INNER JOIN PCSUPERV     S    ON P.CODSUPERVISOR = S.CODSUPERVISOR
LEFT JOIN  TOTAIS_PEDIDO TP  ON V.NUMPED     = TP.NUMPED
LEFT JOIN  PCCIDADE     CID  ON C.CODCIDADE  = CID.CODCIDADE
LEFT JOIN  ESTPARCEIRO  PARC ON P.CODUSUR3   = PARC.ID
LEFT JOIN  PCCATEGORIA  CAT  ON (PROD.CODSEC = CAT.CODSEC AND PROD.CODCATEGORIA = CAT.CODCATEGORIA)
WHERE V.CONDVENDA IN (1, 7)
  --AND V.CODCLI NOT IN (1)
  --AND V.CODPROD NOT IN (48500) -- REMOVE O PRODUTO FRETE
  AND V.DTSAIDA >= TRUNC(SYSDATE) - (365*4)

UNION ALL

/* --- BLOCO DE DEVOLUÇÃO --- */
SELECT
    D.CODSUPERVMOV,
    C.CLIENTE,
    C.EMAIL,
    REGEXP_REPLACE(C.CGCENT, '[^0-9]', ''),
    C.CODCLI,
    C.TIPOFJ,
    C.SEXO,
    C.DTNASC,
    CID.NOMECIDADE,
    C.TELENT,
    C.ENDERENT,
    C.NUMEROENT,
    C.BAIRROENT,
    C.ESTENT,
    C.DTCADASTRO,
    C.DTPRIMCOMPRA,
    C.DTULTCOMP,
    D.DTENT,
    D.NUMPED,
    S.NOME,
    P.CODSUPERVISOR,
    U.NOME,
    D.CODUSUR,
    COB.COBRANCA,
    PL.DESCRICAO,
    D.VLDEVOLUCAO * -1,
    1,
    0,
    0,
    D.CODPROD,
    PROD.DESCRICAO,
    D.QT * -1,
    (D.VLDEVOLUCAO / DECODE(D.QT, 0, 1, D.QT)) * -1,
    'DEVOLUCAO',
    D.VLDEVOLUCAO * -1,
    CAT.CATEGORIA,
    SEC.DESCRICAO,
    DEP.DESCRICAO,
    PARC.NOME,
    PARC.ID,
    PARC.TELEFONE
FROM view_devol_resumo_faturamento D
INNER JOIN PCPEDC       P    ON D.NUMPED     = P.NUMPED
INNER JOIN PCPRODUT     PROD ON D.CODPROD    = PROD.CODPROD
INNER JOIN PCCLIENT     C    ON D.CODCLI     = C.CODCLI
INNER JOIN PCUSUARI     U    ON D.CODUSUR    = U.CODUSUR
INNER JOIN PCCOB        COB  ON D.CODCOB     = COB.CODCOB
INNER JOIN PCPLPAG      PL   ON D.CODPLPAG   = PL.CODPLPAG
INNER JOIN PCDEPTO      DEP  ON PROD.CODEPTO = DEP.CODEPTO
INNER JOIN PCSECAO      SEC  ON PROD.CODSEC  = SEC.CODSEC
INNER JOIN PCSUPERV     S    ON P.CODSUPERVISOR = S.CODSUPERVISOR
LEFT JOIN  PCCIDADE     CID  ON C.CODCIDADE  = CID.CODCIDADE
LEFT JOIN  ESTPARCEIRO  PARC ON P.CODUSUR3   = PARC.ID
LEFT JOIN  PCCATEGORIA  CAT  ON (PROD.CODSEC = CAT.CODSEC AND PROD.CODCATEGORIA = CAT.CODCATEGORIA)
WHERE D.CONDVENDA IN (1, 7, 8)
  --AND D.CODCLI NOT IN (1)
  --AND D.CODPROD NOT IN (48500) -- REMOVE O PRODUTO FRETE
  -- comentario de teste
  AND D.DTCANCEL IS NULL
  AND D.DTENT >= TRUNC(SYSDATE) - (365*4)
)
WHERE DATA_COMPRA >= DATE '2025-01-01'
  AND DATA_COMPRA <  DATE '2026-01-01'