-- ============================================================================= -- 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;