-- =============================================================================
-- sarweb_views.sql
-- Views PostgreSQL para o projeto SARWeb
-- Gerado a partir da análise do SAR Android (sincronização ERP <-> App)
-- =============================================================================
-- IMPORTANTE: Este arquivo cobre os dois schemas operacionais (gerente e sig).
--   Se o seu banco usa apenas UM dos schemas, remova o bloco UNION ALL
--   correspondente ao schema ausente em cada view, ou a criação falhará.
--
-- Para saber qual schema o seu banco usa, execute:
--   SELECT schemaname FROM pg_tables WHERE tablename='pedidos' AND schemaname NOT IN ('sarpalm');
--
-- STATUS — mapeamento normalizado por sistema:
--   GERENTE: situa 1=Pendente | 2=Liberado | 3=Faturado | 4=Cancelado
--   SIG:     situa 1=Pendente | 2=Liberado | 4=Faturado | 5=Cancelado
-- =============================================================================

CREATE SCHEMA IF NOT EXISTS sarweb;

-- =============================================================================
-- 1. EMPRESAS
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_empresas AS
SELECT
    e.id_empresa,
    e.nome,
    e.razao_social,
    e.cnpj,
    e.estado           AS uf,
    e.id_matriz,
    e.id_portador_padrao,
    s.origem_descmax,
    s.tp_estoque,
    s.bloq_preco_pedido,
    s.ativar_prod_pauta,
    s.preco_padrao,
    s.preco_com_ipi,
    (
        SELECT COALESCE(schemaname, 'gerente')
        FROM pg_tables
        WHERE tablename  = 'pedidos'
          AND schemaname NOT IN ('sarpalm')
        LIMIT 1
    ) AS sistema,
    (
        SELECT COALESCE(b1.id_empresa_tabcomp, e.id_empresa)
        FROM gestao.empresa a1
        LEFT JOIN gestao.tabcomp b1
               ON b1.id_empresa = a1.id_empresa AND b1.nome_tabcomp = 'produtos'
        WHERE a1.id_empresa = e.id_empresa
    ) AS id_empresa_prod,
    (
        SELECT COALESCE(b1.id_empresa_tabcomp, e.id_empresa)
        FROM gestao.empresa a1
        LEFT JOIN gestao.tabcomp b1
               ON b1.id_empresa = a1.id_empresa AND b1.nome_tabcomp = 'grupos'
        WHERE a1.id_empresa = e.id_empresa
    ) AS id_empresa_grup
FROM gestao.empresa e
LEFT JOIN gestao.sarcfg s ON s.id_empresa = e.id_empresa;

-- =============================================================================
-- 2. REPRESENTANTES / VENDEDORES
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_representantes AS
SELECT
    v.id_vendedor,
    v.id_empresa        AS id_empresa_matriz,
    v.codigo,
    v.nome,
    v.exp_sar           AS habilitado_sar,
    v.taxa_com,
    v.forma_pag         AS forma_pag_comissao,
    v.cod_supervisor,
    v.taxa_com_super,
    v.forma_pag_super,
    v.desconto_max,
    v.permitir_flex,
    COALESCE(f.saldo_flex, 0) AS saldo_flex,
    v.vl_ped_minimo,
    v.desc_rateio_com,
    v.origem_com,
    v.cod_pauta1,
    v.cod_pauta2,
    v.cod_pauta3,
    v.cod_pauta4,
    v.cod_pauta5,
    v.cod_pauta6
FROM gestao.vendedor v
LEFT JOIN gestao.flex f
       ON f.id_vendedor = v.id_vendedor;

-- =============================================================================
-- 3. CLIENTES  (gerente.clientes UNION sig.corrent)
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_clientes AS

-- --- GERENTE ---
SELECT
    'gerente'                                           AS sistema,
    c.id_empresa,
    c.id_cliente                                        AS id_cliente,
    c.ativo,
    c.nome,
    c.razao,
    c.pesso                                             AS pessoa,   -- 0=PJ 1=PF
    c.consfinal,
    c.cgcpf,
    c.suf_cgcpf,
    c.inscr                                             AS inscricao_estadual,
    c.ender                                             AS endereco,
    COALESCE(c.num_endereco, '')                        AS num_endereco,
    c.bairr                                             AS bairro,
    c.id_municipio,
    c.cep,
    c.ddd,
    c.telef                                             AS telefone,
    c.e_mail                                            AS email,
    c.data                                              AS dt_cadastro,
    c.obs,
    c.cod_formapag,
    (
        SELECT fp.id_formapag
        FROM gestao.formapag fp
        WHERE fp.id_empresa = c.id_empresa
          AND fp.codigo     = c.cod_formapag
        LIMIT 1
    )                                                   AS id_formapag,
    c.indicador_ie,
    c.cod_pauta,
    c.st_especifica,
    COALESCE(c.limcred, 0)                              AS limite_credito,
    c.cod_vendedor,
    COALESCE(c.desc_cliente_rede, 0)                    AS desc_cliente_rede,
    c.dt_atual
FROM gerente.clientes c

UNION ALL

-- --- SIG ---
SELECT
    'sig'                                               AS sistema,
    c.id_empresa,
    c.id_corrent                                        AS id_cliente,
    c.ativo,
    c.nome,
    c.razao,
    c.pesso                                             AS pessoa,
    c.consfinal,
    c.cgcpf,
    c.suf_cgcpf,
    c.inscr                                             AS inscricao_estadual,
    c.endereco                                          AS endereco,
    COALESCE(c.num_endereco, '')                        AS num_endereco,
    c.bairr                                             AS bairro,
    c.id_municipio,
    c.cep,
    c.ddd,
    c.telef                                             AS telefone,
    c.e_mail                                            AS email,
    c.data                                              AS dt_cadastro,
    c.obs,
    c.cod_formapag,
    (
        SELECT fp.id_formapag
        FROM gestao.formapag fp
        LEFT JOIN gestao.empresa e ON e.id_empresa = c.id_empresa
        WHERE fp.id_empresa = COALESCE(e.id_matriz, c.id_empresa)
          AND fp.codigo     = c.cod_formapag
        LIMIT 1
    )                                                   AS id_formapag,
    c.indicador_ie,
    c.cod_pauta,
    c.st_especifica,
    COALESCE(c.limcred, 0)                              AS limite_credito,
    c.cod_vendedor,
    0                                                   AS desc_cliente_rede,
    c.dt_atual
FROM sig.corrent c;

-- =============================================================================
-- 4. MUNICÍPIOS
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_municipios AS
SELECT
    id_municipio,
    nome,
    estado AS uf,
    codigo_ibge
FROM gestao.municipio;

-- =============================================================================
-- 5. FORMAS DE PAGAMENTO
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_formas_pagamento AS
SELECT
    id_formapag,
    id_empresa,
    codigo,
    descr                           AS descricao,
    ativa,
    numparc                         AS num_parcelas,
    desco                           AS desconto_perc,
    COALESCE(vl_ped_minimo, 0)      AS vl_ped_minimo,
    COALESCE(libera_credito, 0)     AS libera_credito,
    COALESCE(acresc, 0)             AS tx_acrescimo,
    integrar_sar,
    dt_atual
FROM gestao.formapag;

-- =============================================================================
-- 6. PRODUTOS
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_produtos AS
SELECT
    p.id_empresa,
    p.id_erp,
    p.codigo,
    p.referencia,
    p.descricao,
    p.descr_det,
    p.ativo,
    p.cod_barra,
    p.unidade,
    p.tipo,
    p.vl_preco1,
    COALESCE(p.vl_preco2, 0)            AS vl_preco2,
    COALESCE(p.vl_preco3, 0)            AS vl_preco3,
    p.cod_grupo,
    grp.descricao                        AS grupo,
    p.cod_subgrupo,
    sub.descricao                        AS subgrupo,
    sub.desc_max,
    COALESCE(p.grupo_st, '')             AS grupo_st,
    p.cod_marca,
    COALESCE(mrc.nome, 'Sem Marca')      AS marca,
    p.classe_abc,
    p.taxa_comissao,
    p.cod_st,
    st.aliq_ipi,
    COALESCE(st.desc_ipi_bc, 0)          AS desc_ipi_bc,
    p.peso_liquido,
    p.qtd_volume,
    COALESCE(p.lote_mul_venda, 1)        AS lote_mul_venda,
    COALESCE(p.permitir_dif_lote, 0)     AS permitir_dif_lote,
    COALESCE(p.id_prodvinc, 0)           AS id_prodvinc,
    COALESCE(p.preco_promocional, 0)     AS preco_promocional,
    COALESCE(p.tx_desc_lote, 0)          AS tx_desc_lote,
    p.lista_pauta,
    CASE WHEN p.dt_atual > sub.da THEN p.dt_atual ELSE sub.da END AS dt_atual
FROM gestao.produto p
LEFT JOIN gestao.grupo grp ON grp.codigo    = p.cod_grupo    AND grp.id_empresa = p.id_empresa
LEFT JOIN gestao.grupo sub ON sub.codigo    = p.cod_subgrupo AND sub.id_empresa = p.id_empresa
LEFT JOIN gestao.marca mrc ON mrc.codigo    = p.cod_marca    AND mrc.id_empresa = p.id_empresa
LEFT JOIN gestao.st    st  ON st.codigo     = p.cod_st
WHERE p.id_erp IS NOT NULL;

-- =============================================================================
-- 7. ESTOQUE
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_estoque AS
SELECT
    p.id_empresa,
    p.id_erp,
    cfg.tp_estoque,
    CASE cfg.tp_estoque
        WHEN 'E' THEN COALESCE(e.qtdade, 0) - COALESCE(e.qtd_empenhada, 0)
        WHEN 'P' THEN COALESCE(e.qtdade, 0) - COALESCE(e.qtd_empenhada, 0) - COALESCE(e.qtd_pedidos, 0)
        WHEN 'Z' THEN 0
        ELSE          COALESCE(e.qtdade, 0)
    END AS qtd_estoque,
    COALESCE(e.qtdade, 0)           AS qtd_fisico,
    COALESCE(e.qtd_empenhada, 0)    AS qtd_empenhada,
    COALESCE(e.qtd_pedidos, 0)      AS qtd_pedidos
FROM gestao.produto p
LEFT JOIN gestao.grupo grp ON grp.codigo = p.cod_grupo    AND grp.id_empresa = p.id_empresa
LEFT JOIN gestao.grupo sub ON sub.codigo = p.cod_subgrupo AND sub.id_empresa = p.id_empresa
LEFT JOIN gestao.sarcfg cfg ON cfg.id_empresa = p.id_empresa
LEFT JOIN gestao.estsaldo e ON e.id_produto = p.id_erp
                            AND e.id_empresa = p.id_empresa
                            AND e.id_estlocal = p.cod_estlocal
WHERE p.id_erp   IS NOT NULL
  AND p.ativo     = 1
  AND p.lista_pauta = 1
  AND grp.int_sar = 1
  AND sub.int_sar = 1
  AND (sub.produto_variacao = 0 OR p.id_prodvinc > 0);

-- =============================================================================
-- 8. SITUAÇÃO TRIBUTÁRIA (ST ICMS)
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_sticms AS
SELECT
    st.id_empresa                           AS id_empresa_matriz,
    si.id_sticms,
    st.codigo                               AS cod_st,
    si.uf,
    si.st_especifica,
    si.perc_bc_icms,
    si.aliq_icms,
    si.modal_bc_icmsst,
    si.aliq_icmsst,
    si.somar_icmsst_nf,
    si.perc_marg_vl_icmsst,
    si.contribuinte_icms
FROM gestao.sticms si
JOIN gestao.st st ON st.id_st = si.id_st;

-- =============================================================================
-- 9. PAUTAS DE PREÇO
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_pautas AS
SELECT
    p.id_pauta,
    p.id_empresa,
    p.codigo,
    p.ativo,
    p.num_pauta,
    COALESCE(p.dt_cadast, '1900-01-01'::date) AS dt_cadastro,
    p.descricao,
    p.obs,
    COALESCE(p.dt_ini, '1900-01-01'::date)    AS dt_inicio,
    COALESCE(p.dt_fim, '2100-01-01'::date)    AS dt_fim,
    p.pauta_exclusiva_cliente,
    COALESCE(p.vl_pedido1, 0)   AS vl_pedido1,
    COALESCE(p.vl_pedido2, 0)   AS vl_pedido2,
    COALESCE(p.vl_pedido3, 0)   AS vl_pedido3,
    COALESCE(p.vl_pedido4, 0)   AS vl_pedido4,
    COALESCE(p.vl_pedido5, 0)   AS vl_pedido5,
    COALESCE(p.tx_desconto1, 0) AS tx_desconto1,
    COALESCE(p.tx_desconto2, 0) AS tx_desconto2,
    COALESCE(p.tx_desconto3, 0) AS tx_desconto3,
    COALESCE(p.tx_desconto4, 0) AS tx_desconto4,
    COALESCE(p.tx_desconto5, 0) AS tx_desconto5,
    COALESCE(p.tp_desconto, 0)  AS tp_desconto
FROM gestao.pauta p;

-- =============================================================================
-- 10. PRODUTOS POR PAUTA
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_pauta_produtos AS
SELECT
    pp.id_pauta,
    COALESCE(pp.id_varprod, 0)          AS id_varprod,
    pp.id_prod                           AS id_produto,
    pp.preco1,
    COALESCE(pp.preco2, 0)              AS preco2,
    COALESCE(pp.preco3, 0)              AS preco3,
    COALESCE(pp.valor_pauta_icms_st, 0) AS valor_pauta_icms_st,
    pp.tp_pauta
FROM gestao.pauxpro pp;

-- =============================================================================
-- 11. PEDIDOS  (gerente.pedidos UNION sig.pedidos)
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_pedidos AS

-- --- GERENTE ---
SELECT
    'gerente'                                           AS sistema,
    p.id_empresa,
    p.id_pedido,
    p.num_ped_sar,
    p.numero,
    p.tipo,
    p.situa,
    CASE p.situa
        WHEN 1 THEN 'Pendente'
        WHEN 2 THEN 'Liberado'
        WHEN 3 THEN 'Faturado'
        WHEN 4 THEN 'Cancelado'
        ELSE        'Enviado'
    END                                                 AS status_descr,
    p.data                                              AS dt_pedido,
    p.dtemi                                             AS dt_emissao,
    p.clien                                             AS id_cliente,
    p.cod_vendedor,
    p.cod_formapag,
    fp.id_formapag,
    fp.descr                                            AS forma_pagamento,
    p.num_pauta,
    pau.id_pauta,
    COALESCE(p.obs, '')                                 AS obs,
    p.totpr                                             AS total_produtos,
    COALESCE(p.ipi, 0)                                  AS total_ipi,
    COALESCE(p.vl_icmsst, 0)                            AS total_icmsst,
    COALESCE(p.total, 0)                                AS total,
    COALESCE(p.descp, 0)                                AS desconto_perc,
    COALESCE(p.descv, 0)                                AS desconto_valor,
    COALESCE(p.acrev, 0)                                AS acrescimo,
    COALESCE(p.comis, 0)                                AS comissao,
    COALESCE(p.ped_flex, 0)                             AS ped_flex,
    p.cod_supervisor,
    p.taxa_com_super
FROM gerente.pedidos p
LEFT JOIN gestao.formapag fp  ON fp.codigo    = p.cod_formapag
                              AND fp.id_empresa = p.id_empresa
LEFT JOIN gestao.pauta    pau ON pau.num_pauta = p.num_pauta

UNION ALL

-- --- SIG ---
SELECT
    'sig'                                               AS sistema,
    p.id_empresa,
    p.id_pedido,
    p.num_ped_sar,
    p.numero,
    p.tipo,
    p.situa,
    CASE p.situa
        WHEN 1 THEN 'Pendente'
        WHEN 2 THEN 'Liberado'
        WHEN 4 THEN 'Faturado'
        WHEN 5 THEN 'Cancelado'
        ELSE        'Enviado'
    END                                                 AS status_descr,
    p.data                                              AS dt_pedido,
    p.data_emissao                                      AS dt_emissao,
    p.clien                                             AS id_cliente,
    p.cod_vendedor,
    p.cod_formapag,
    fp.id_formapag,
    fp.descr                                            AS forma_pagamento,
    NULL::integer                                       AS num_pauta,
    pau.id_pauta,
    COALESCE(p.obs, '')                                 AS obs,
    p.totpr                                             AS total_produtos,
    COALESCE(p.ipi, 0)                                  AS total_ipi,
    0                                                   AS total_icmsst,
    COALESCE(p.total, 0)                                AS total,
    COALESCE(p.descp, 0)                                AS desconto_perc,
    COALESCE(p.descv, 0)                                AS desconto_valor,
    COALESCE(p.tx_acrescimo, 0)                         AS acrescimo,
    COALESCE(p.com_fat, 0)                              AS comissao,
    COALESCE(p.ped_flex, 0)                             AS ped_flex,
    p.cod_vend2                                         AS cod_supervisor,
    p.tx_com_vend2                                      AS taxa_com_super
FROM sig.pedidos p
LEFT JOIN gestao.formapag fp  ON fp.codigo    = p.cod_formapag
                              AND fp.id_empresa = CASE WHEN p.id_empresa > 9000 THEN p.id_empresa - 9000 ELSE p.id_empresa END
LEFT JOIN gestao.pauta    pau ON pau.codigo    = p.cod_pauta
                              AND pau.id_empresa = CASE WHEN p.id_empresa > 9000 THEN p.id_empresa - 9000 ELSE p.id_empresa END;

-- =============================================================================
-- 12. ITENS DE PEDIDO  (gerente.peditens UNION sig.peditens)
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_peditens AS

-- --- GERENTE ---
SELECT
    'gerente'                           AS sistema,
    i.id_pedido,
    i.ordem,
    i.produ                             AS id_produto,
    i.qtd,
    i.pruni                             AS preco_unitario,
    COALESCE(i.descp, 0)               AS desconto_perc,
    COALESCE(i.descv, 0)               AS desconto_valor,
    COALESCE(i.obs, '')                AS obs,
    COALESCE(i.preco_pauta, 0)         AS preco_pauta,
    COALESCE(i.vl_flex, 0)            AS vl_flex,
    COALESCE(i.comis, 0)              AS comissao,
    COALESCE(i.preco_com_ipi, 0)      AS preco_com_ipi,
    COALESCE(i.bc_ipi, 0)             AS bc_ipi,
    COALESCE(i.bc_ipi * i.aliq_ipi / 100.0, 0) AS vl_ipi,
    COALESCE(i.bc_icmsst, 0)          AS bc_icmsst,
    COALESCE(i.vl_icmsst, 0)         AS vl_icmsst,
    COALESCE(i.vl_totliq, 0)         AS vl_total_liquido,
    COALESCE(i.total, 0)             AS total,
    COALESCE(i.num_oc, '')            AS num_oc,
    COALESCE(i.item_oc, '')           AS item_oc,
    i.id_tes
FROM gerente.peditens i

UNION ALL

-- --- SIG ---
SELECT
    'sig'                               AS sistema,
    i.id_pedido,
    i.ordem,
    i.produ                             AS id_produto,
    i.qtd,
    i.pruni                             AS preco_unitario,
    COALESCE(i.descp, 0)               AS desconto_perc,
    COALESCE(i.descv, 0)               AS desconto_valor,
    COALESCE(i.obs, '')                AS obs,
    COALESCE(i.preco_pauta, 0)         AS preco_pauta,
    COALESCE(i.vl_flex, 0)            AS vl_flex,
    COALESCE(i.comis, 0)              AS comissao,
    COALESCE(i.preco_ipi, 0)          AS preco_com_ipi,
    0                                  AS bc_ipi,
    COALESCE(i.ipi, 0)                AS vl_ipi,
    0                                  AS bc_icmsst,
    0                                  AS vl_icmsst,
    0                                  AS vl_total_liquido,
    COALESCE(i.total, 0)             AS total,
    ''                                 AS num_oc,
    ''                                 AS item_oc,
    i.id_tes
FROM sig.peditens i;

-- =============================================================================
-- 13. CONTAS A RECEBER  (gerente.ctr UNION sig.ctr)
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_ctr AS

-- --- GERENTE ---
SELECT
    'gerente'                           AS sistema,
    c.id_empresa,
    c.id_ctr,
    c.prefixo,
    c.numero,
    c.docto                             AS documento,
    c.deved                             AS id_cliente,
    c.id_pedido,
    c.emiss                             AS dt_emissao,
    c.vecto                             AS dt_vencimento,
    c.valor,
    COALESCE(c.despcart, 0)            AS despesa_cartorio,
    c.saldo,
    c.situacao,
    c.dt_baixa,
    c.cod_vendedor
FROM gerente.ctr c

UNION ALL

-- --- SIG ---
SELECT
    'sig'                               AS sistema,
    c.id_empresa,
    c.id_ctr,
    c.prefixo,
    c.numero,
    c.docto                             AS documento,
    c.deved                             AS id_cliente,
    c.id_entrega                        AS id_pedido,   -- sig usa id_entrega
    c.emiss                             AS dt_emissao,
    c.vecto                             AS dt_vencimento,
    c.valor,
    0                                   AS despesa_cartorio,
    c.saldo,
    c.situacao,
    c.data_baixa                        AS dt_baixa,
    c.cod_vendedor
FROM sig.ctr c;

-- =============================================================================
-- 14. GRUPOS DE PRODUTOS
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_grupos AS
SELECT
    id_empresa,
    codigo,
    descricao,
    int_sar,
    produto_variacao,
    desc_max,
    da AS dt_atualizacao
FROM gestao.grupo;

-- =============================================================================
-- 15. MARCAS
-- =============================================================================
CREATE OR REPLACE VIEW sarweb.vw_marcas AS
SELECT
    id_empresa,
    codigo,
    nome
FROM gestao.marca;

-- =============================================================================
-- GRANTS (ajuste o role conforme seu ambiente)
-- =============================================================================
-- GRANT USAGE ON SCHEMA sarweb TO sarweb_app;
-- GRANT SELECT ON ALL TABLES IN SCHEMA sarweb TO sarweb_app;
