Este documento tem como objetivo facilitar as próximas integrações com o PDV da Action fornecido pela RM Data.
Contém os scripts de criação das views: gun_cliente, gun_estoque, gun_loja, gun_pagamentos, gun_produto, gun_venda, gun_venda_exclusao, gun_venda_item e gun_vendedor.
---------------------------------------------------------------------------------------------------
-- gun_cliente source
CREATE OR REPLACE VIEW public.gun_cliente
AS SELECT pessoas.codigo AS cliente_id,
pessoas.cpfcnpj AS cpf,
pessoas.nome,
translate(
CASE
WHEN pessoas.telefone1 ~~ '%)%'::text THEN substr(pessoas.telefone1::text, 1, "position"(pessoas.telefone1::text, ')'::text))
ELSE ''::text
END, '()'::text, ''::text) AS tel_ddd,
CASE
WHEN pessoas.telefone1 ~~ '%)%'::text THEN substr(pessoas.telefone1::text, "position"(pessoas.telefone1::text, ')'::text) + 1, char_length(pessoas.telefone1) + 2)
ELSE ''::text
END AS tel,
translate(
CASE
WHEN pessoas.telefone2 ~~ '%)%'::text THEN substr(pessoas.telefone2::text, 1, "position"(pessoas.telefone2::text, ')'::text))::bpchar
ELSE ''::bpchar
END::text, '()'::text, ''::text) AS cel_ddd,
CASE
WHEN pessoas.telefone2 ~~ '%)%'::text THEN substr(pessoas.telefone2::text, "position"(pessoas.telefone2::text, ')'::text) + 1, char_length(pessoas.telefone2) + 2)::bpchar
ELSE pessoas.telefone2
END::character(250) AS cel,
CASE
WHEN pessoas.endereco::text ~~ '%,%'::text THEN substr(pessoas.endereco::text, 1, "position"(pessoas.endereco::text, ','::text) - 1)
ELSE pessoas.endereco::text
END AS endereco,
CASE
WHEN pessoas.endereco::text ~~ '%,%'::text THEN split_part(btrim(split_part(pessoas.endereco::text, ','::text, 2)), ' '::text, 1)
ELSE ''::text
END AS numero,
(btrim(split_part(btrim(split_part(pessoas.endereco::text, ','::text, 2)), split_part(btrim(split_part(pessoas.endereco::text, ','::text, 2)), ' '::text, 1), 2)) || ' '::text) || pessoas.complemento::text AS complemento,
pessoas.bairro::text::character(30) AS bairro,
pessoas.cidade::text::character(30) AS cidade,
pessoas.uf,
pessoas.cep,
pessoas.nascimento AS data_nascimento,
pessoas.email,
pessoas.publicidade AS optin,
CASE
WHEN btrim(pessoas.sexo::text) = ''::text THEN 'N'::bpchar::text
ELSE substr(pessoas.sexo::text, 1, 1)
END::character(1) AS sexo,
pessoas.cadastro::timestamp without time zone AS data_cadastro,
pessoas.atualizado::timestamp without time zone AS data_atualizacao,
CASE
WHEN pessoas.pessoa = '1'::numeric THEN 'PF'::text
WHEN pessoas.pessoa = '2'::numeric THEN 'PJ'::text
ELSE NULL::text
END AS tipo,
empresa.codigo AS loja_id,
'' AS vendedor_id,
pessoas."time" AS id_erp_antigo
FROM pessoas
LEFT JOIN pessoas empresa ON (('000000'::text || pessoas.empresa::text))::character(8) = empresa.codigo;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_cliente TO action;
---------------------------------------------------------------------------------------------------
-- gun_loja source
CREATE OR REPLACE VIEW public.gun_loja
AS SELECT pessoas.codigo AS loja_id,
pessoas.apelido AS nome,
pessoas.uf,
pessoas.cidade,
pessoas.bairro,
pessoas.cep,
pessoas.cpfcnpj AS cnpj,
pessoas."time" AS id_erp_antigo
FROM pessoas
WHERE pessoas.filial;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_loja TO action;
---------------------------------------------------------------------------------------------------
-- gun_produto source
CREATE OR REPLACE VIEW public.gun_produto
AS SELECT DISTINCT m.produto_id,
split_part(string_agg(barras.codigo::text, '@'::text), '@'::text, 1) AS codigo_barras,
produtos.referencia AS referencia_basica,
COALESCE(substr(barras.produto::text, 7, 8), ''::text)::character(2) AS tamanho,
produtos.descricao AS nome,
marcas.descricao AS marca,
grupos.descricao AS grupo,
subgrupos.descricao AS subgrupo,
linhas.descricao AS linha,
departamentos.descricao,
colecoes.descricao AS colecao,
cores.descricao AS id_cor
FROM gun_estoque m
JOIN produtos ON produtos.codigo = substr(m.produto_id::text, 1, 6)::character(6)
LEFT JOIN barras ON produtos.codigo = "left"(barras.produto::text, 6)::character(6)
LEFT JOIN grades ON produtos.grade = grades.codigo
LEFT JOIN marcas ON produtos.marca = marcas.codigo
LEFT JOIN grupos ON produtos.grupo = grupos.codigo
LEFT JOIN subgrupos ON produtos.subgrupo = subgrupos.codigo
LEFT JOIN linhas ON produtos.linha = linhas.codigo
LEFT JOIN colecoes ON produtos.colecao = colecoes.codigo
LEFT JOIN cores ON produtos.cor = cores.codigo
LEFT JOIN departamentos ON produtos.departamento = departamentos.codigo
GROUP BY m.produto_id, produtos.codigo, produtos.referencia, produtos.descricao, marcas.descricao, grupos.descricao, subgrupos.descricao, departamentos.descricao, colecoes.descricao, cores.descricao, barras.produto, linhas.descricao;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_produto TO action;
---------------------------------------------------------------------------------------------------
-- gun_venda source
CREATE OR REPLACE VIEW public.gun_venda
AS SELECT DISTINCT v.codigo AS venda_id,
empresa.codigo AS loja_id,
v.data,
cliente.codigo AS cliente_id,
v.vendedor AS vendedor_id,
v.total - COALESCE(t.valor_troca, 0::numeric)::numeric(11,2) AS valor_pago,
v.total AS valor_bruto,
0.00::numeric(11,2) AS valor_desconto,
v.frete AS valor_frete,
COALESCE(t.valor_troca, 0::numeric)::numeric(11,2) AS valor_troca,
'0'::character(3) AS percentual_desconto,
CASE
WHEN v.cpfcnpj ~~ 'V%'::text THEN substr(v.cpfcnpj::text, 3, 18)::character(255)
ELSE NULL::bpchar
END AS id_erp_antigo
FROM vendas v
JOIN pessoas empresa ON (('000000'::text || v.empresa::text))::character(8) = empresa.codigo
JOIN pessoas cliente ON v.cliente = cliente.codigo
JOIN movimento m ON m.auxiliar = (('VE'::text || v.codigo::text))::character(10)
JOIN produtos p ON p.codigo = "left"(m.produto::text, 6)::character(6)
LEFT JOIN ( SELECT x.cdevolucao,
sum(- x.total) AS valor_troca,
x.data,
x.empresa,
x.cliente
FROM vendas x
WHERE x.condicoes = '999'::bpchar
GROUP BY x.cdevolucao, x.data, x.empresa, x.cliente) t ON v.cdevolucao = t.cdevolucao AND v.cdevolucao <> ''::bpchar AND t.data = v.data AND v.empresa = t.empresa AND t.cliente = v.cliente
WHERE v.status = 'S'::bpchar;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_venda TO action;
---------------------------------------------------------------------------------------------------
-- gun_venda_exclusao source
CREATE OR REPLACE VIEW public.gun_venda_exclusao
AS SELECT v.codigo AS venda_id,
v.data
FROM vendas v
JOIN pessoas empresa ON (('000000'::text || v.empresa::text))::character(8) = empresa.codigo
JOIN pessoas cliente ON v.cliente = cliente.codigo
JOIN movimento m ON m.auxiliar = (('VE'::text || v.codigo::text))::character(10)
WHERE v.status = 'C'::bpchar;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_venda_exclusao TO action;
---------------------------------------------------------------------------------------------------
--gun_pagamentos
CREATE OR REPLACE VIEW public.gun_pagamentos
AS SELECT DISTINCT ft.codigo AS id_pgto,
v.venda_id AS id_venda,
COALESCE(fn.descricao, ft.descricao)::character(250) AS forma_pgto,
ft.valor AS valorpago
FROM gun_venda v
JOIN financeiro_titulos ft ON ft.auxiliar = (('VE'::text || v.venda_id::text))::character(10)
LEFT JOIN formasnfce fn ON fn.codigo = ft.forma;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_pagamentos TO action;
---------------------------------------------------------------------------------------------------
--gun_estoque
CREATE OR REPLACE VIEW public.gun_estoque
AS SELECT p2.codigo AS loja_id,
m.produto AS produto_id,
p.referencia AS refbasicaproduto,
c.descricao AS id_cor_produto,
"right"(m.produto::text, 2) AS id_tamanho_produto,
now() AS datamvto,
sum(
CASE
WHEN m.movimento = 'E'::bpchar THEN m.quantidade
ELSE - m.quantidade
END) AS quantidade
FROM movimento m
JOIN pessoas p2 ON p2.codigo = (('000000'::text || m.empresa::text))::character(8)
JOIN produtos p ON p.codigo = "left"(m.produto::text, 6)::character(6)
JOIN cores c ON c.codigo = p.cor
GROUP BY m.produto, p.referencia, m.empresa, c.descricao, c.codigo, p2.codigo;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_estoque TO action;
---------------------------------------------------------------------------------------------------
-- gun_venda_item source
CREATE OR REPLACE VIEW public.gun_venda_item
AS SELECT movimento.codigo AS venda_item_id,
v.venda_id,
COALESCE(movimento.produto, 'nao informado'::bpchar)::character(13) AS produto_id,
abs(COALESCE(movimento.desconto, 0::numeric))::numeric(9,2) AS valor_desconto,
COALESCE(movimento.quantidade, 0::numeric)::integer AS quantidade,
COALESCE(movimento.unitario, 0::numeric) + COALESCE(movimento.desconto, 0::numeric) * '-1'::integer::numeric AS valor_pago,
CASE
WHEN COALESCE(movimento.operacao, ''::bpchar) = 'VE'::bpchar THEN 'VENDA'::text
WHEN COALESCE(movimento.operacao, ''::bpchar) = 'DV'::bpchar THEN 'DEVOLUÇÃO'::text
ELSE NULL::text
END AS operacao,
v.loja_id,
COALESCE(movimento.custo, 0::numeric)::numeric(10,2) AS valor_custo,
vendas.lastupdate AS data_atualizacao
FROM gun_venda v
JOIN vendas ON vendas.codigo = v.venda_id
JOIN movimento movimento ON (('VE'::text || v.venda_id::text))::character(10) = movimento.auxiliar
JOIN produtos p ON p.codigo = "left"(movimento.produto::text, 6)::character(6)
LEFT JOIN produtos produtos ON substr(movimento.produto::text, 1, 6)::character(6) = produtos.codigo;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_venda_item TO action;
---------------------------------------------------------------------------------------------------
-- gun_vendedor source
CREATE OR REPLACE VIEW public.gun_vendedor
AS SELECT DISTINCT pessoas.codigo AS vendedor_id,
pessoas.nome,
pessoas.cpfcnpj AS cpf,
pessoas.admissao AS data_admissao,
pessoas.demissao AS data_demissao,
(('000000'::text || pessoas.empresa::text))::character(8) AS loja_id,
pessoas."time" AS id_erp_antigo
FROM gun_venda
JOIN pessoas ON gun_venda.vendedor_id = pessoas.codigo;
---------------------------------------------------------------------------------------------------
GRANT SELECT ON TABLE public.gun_vendedor TO action;
---------------------------------------------------------------------------------------------------
GRANT ALL ON TABLE public.gun_cliente TO seta;
GRANT ALL ON TABLE public.gun_estoque TO seta;
GRANT ALL ON TABLE public.gun_loja TO seta;
GRANT ALL ON TABLE public.gun_pagamentos TO seta;
GRANT ALL ON TABLE public.gun_produto TO seta;
GRANT ALL ON TABLE public.gun_venda TO seta;
GRANT ALL ON TABLE public.gun_venda_exclusao TO seta;
GRANT ALL ON TABLE public.gun_venda_item TO seta;
GRANT ALL ON TABLE public.gun_vendedor TO seta;
---------------------------------------------------------------------------------------------------
Fim.
---------------------------------------------------------------------------------------------------