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.

---------------------------------------------------------------------------------------------------