-- ============================================================================= -- sar_views.sql -- Views PostgreSQL do projeto SAR — schema `sar` no banco ERP (libreplast) -- -- Executar como: psql -U postgres -d libreplast -f sar_views.sql -- -- DECISÃO DE ARQUITETURA: todas as views residem no schema `sar` (mesmo schema -- das tabelas Prisma). O search_path da conexão runtime é `sar`, portanto as -- queries do backend usam os nomes curtos (vw_clientes, vw_pedidos_erp). -- -- ERP base: SIG (schema sig.*) -- Empresa gerencial: id_empresa = 1 (gestao.empresa) -- Empresa fiscal: id_empresa = 9001 (sig.corrent / sig.pedidos) -- Cancelados SIG: situa = 5 (≠ SAR que usa situa = 3) -- Faturados SIG: situa = 4 (coincide com SAR) -- ============================================================================= -- --------------------------------------------------------------------------- -- 1. CLIENTES -- Fonte: sig.corrent -- Obs: COALESCE(id_empresa, 1) cobre registros antigos sem id_empresa. -- cod_vendedor determina a carteira do representante. -- --------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_clientes AS SELECT COALESCE(c.id_empresa, 1) AS id_empresa, c.id_corrent AS id_cliente, c.ativo, COALESCE(NULLIF(TRIM(c.nome), ''), TRIM(c.razao)) AS nome, TRIM(c.razao) AS razao, c.pesso AS pessoa, c.consfinal, c.cgcpf, c.suf_cgcpf, c.inscr AS inscricao_estadual, c.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 = COALESCE(c.id_empresa, 1) WHERE fp.id_empresa = COALESCE(e.id_matriz, COALESCE(c.id_empresa, 1)) 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, c.dt_atual FROM sig.corrent c; -- --------------------------------------------------------------------------- -- 2. PEDIDOS ERP -- Fonte: sig.pedidos -- Situa SIG → SAR: 5=Cancelado(SIG) vs 3=Cancelado(SAR). O backend -- normaliza em runtime (sigToSar / sarToSig em orders.service.ts). -- --------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_pedidos_erp AS SELECT 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, 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::integer, 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;