Web — ClientsPage: - Redesign completo: métricas reais via usePortfolioStats (4 queries count), donut Chart.js com totais reais, tabela sem ellipsis, coluna Cliente com nome fantasia/razão/CNPJ completos, drawer de detalhes e análise comercial, cards mobile, filtros de status/busca em tempo real. - Dados reais: substitui mock por useClientList/useClientDetail/useClientOrders; remove tipos fictícios (prospect/lead, cidade, totalComprado). Web — OrdersPage: - Métricas reais via useOrderStats (contagens por situa, não da página atual). - Coluna Cliente sem truncamento (minWidth: 240). - Cabeçalho, filtros e layout alinhados ao padrão da ClientsPage. API — orders.service.ts: - Normalização situa SIG→SAR: SIG usa 5=Cancelado; SAR usa 3=Cancelado. sigToSar(5→3) no mapper; sarToSig(3→5) no filtro SQL. API — clients.service.ts: - dt_ultima_compra corrigida: JOIN duplo (vw_pedidos_erp + sar.pedidos) com GREATEST() — clientes com histórico ERP mas sem pedido SAR deixam de aparecer todos como Inativo. - Filtro de activityStatus movido para SQL — total e paginação corretos. - findOne() atualizado com o mesmo JOIN duplo. Infra — .env: - DEV_EMPRESA_ID: 1 → 9001 — API aponta para dados reais da empresa SIG. Ex: pedido nº 141022 passa de R$1.765,48 para R$2.454,90. Docs — sarweb_views.sql: - Documenta as views reais em schema sar; remove schema sarweb inexistente. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
115 lines
5.2 KiB
SQL
115 lines
5.2 KiB
SQL
-- =============================================================================
|
|
-- 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;
|