Integração do sistema de pedidos offline com o Eligo

PEDI_OFFLINE_ELIGO

Descrição

Sistema responsável por estabelecer a integração do sistema de pedidos offline (PEDI_OFFLINE) com o sistema de pedidos do Eligo.

Interfaces

Sub-sistemas relacionados

Dúvidas frequentes

Configurações

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.GERAR_NOVOS_IDS

Gerars novos IDs para os pedidos recebidos

Caso marcado (valor = "S"), os pedidos serão inseridos na base de dados com novos IDs.
Esta preferência existe como solução de contorno para os problemas de PK duplicada.
Caso não configurado, assume não gerar novos IDs

Tipo: FLAG

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.RESUMO_VENDAS

Script engine onde o usuário pode acrescentar informações sobre as vendas do vendedor na tela de clientes.

As seguintes variáveis são disponibilizadas:
  • dataInicial: Primeiro dia do mês corrente
  • dataFinal: Ultimo dia do mes corrente
  • id: ID do cliente

Caso não configurado, o seguinte script é assumido:
set faturado as coalesce(sum(id.valor_total_item), 0) from itens_pedidos ip
join itens_doc_entradas_saidas id on id.item_pedido_id = ip.id
join doc_entradas_saidas doc on doc.id = id.documento_id
where doc.data_emissao between '${dataInicial}' and '${dataFinal}
and id.vendedor_id = ${id}
and saldo_inventario > 0;

set aFaturar as coalesce(sum(p.valor_total), 0) from pedidos p
where p.data_emissao between '${dataInicial}' and '${dataFinal}'
and p.vendedor_id = ${id}
and p.situacao = 'P';

item faturado decimal_value; label='FATURADO';

item aFaturar decimal_value; label='A FATURAR';

display ${faturado} as faturado, ${aFaturar} as aFaturar;

Tipo: TEXT_LONG

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SOMENTE_CIDADES_CLIENTES

Define se as cidades serão buscadas a partir dos clientes dos vendedores

Valor padrão: S

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_CLIENTE

Define o sql contendo as informações dos clientes que vão para o tablet, quando não informada utiliza o valor padrão para o método.
Exemplo SQL:
SELECT p.id as id
, p.pessoa as cliente
, case when clie.bloqueado = 'S' then 'B' else 'N' end as situacao
, '' as chave_liberacao
, p.nome_completo as razao_social
, case when substr(tp.tipo_pessoa, 1, 1) = 'F' then p.apelido else p.nome_fantasia end as nome_fantasia
, (SELECT dp.documento FROM documentos_pessoas dp JOIN tipos_documentos_pessoas tdp ON dp.tipo_documento_id = tdp.id WHERE dp.pessoa_id = p.id AND tdp.tipo_documento = 'CNPJ') AS cnpj
, (SELECT dp.documento FROM documentos_pessoas dp JOIN tipos_documentos_pessoas tdp ON dp.tipo_documento_id = tdp.id WHERE dp.pessoa_id = p.id AND tdp.tipo_documento = 'CPF') AS cpf
, (SELECT dp.documento FROM documentos_pessoas dp JOIN tipos_documentos_pessoas tdp ON dp.tipo_documento_id = tdp.id WHERE dp.pessoa_id = p.id AND tdp.tipo_documento = 'RG') AS rg
, (SELECT dp.documento FROM documentos_pessoas dp JOIN tipos_documentos_pessoas tdp ON dp.tipo_documento_id = tdp.id WHERE dp.pessoa_id = p.id AND tdp.tipo_documento = 'IE') AS inscricao_estadual
, ende.endereco as endereco
, ende.codigo_postal as cep
, ende.bairro as bairro
, ende.cidade_id as cidade_id
, ende.numero as numero
, ende.complemento as complemento
, ende.observacoes as ponto_referencia
, fone1.endereco as fone_1
, fone2.endereco as fone_2
, fone3.endereco as fone_3 
, clie.pessoa_contato as contato 
, clie.observacao as observacoes 
, clie.limite_credito
, clie.credito_tomado
, (SELECT ep.endereco FROM enderecos ep WHERE ep.pessoa_id = p.id AND ep.tipo_endereco_id = tp.forma_contato_3_id and ep.sequencia = 1) AS email_comercial 
, (SELECT ep.endereco FROM enderecos ep JOIN tipos_enderecos te on te.id = ep.tipo_endereco_id WHERE ep.pessoa_id = p.id AND te.tipo_endereco = 'EMAIL_NFE' and ep.sequencia = 1) AS email_nfe
, substr(tp.tipo_pessoa,1,1) as tipo_pessoa 
, p.id as vendedor_id 
, p.data_nascimento
, clie.percentual_desconto as desconto
FROM pessoas p 
JOIN tipos_pessoas tp ON tp.id = p.tipo_pessoa_id 
JOIN clientes clie ON clie.id = p.id 
JOIN enderecos ende ON ende.pessoa_id = p.id AND tp.forma_contato_5_id = ende.tipo_endereco_id AND tp.sequencia_5 = ende.sequencia 
JOIN cidades cida ON ende.cidade_id = cida.id 
JOIN regioes uf ON uf.id = cida.regiao_id 
LEFT JOIN enderecos fone1 ON fone1.pessoa_id = p.id AND tp.forma_contato_1_id = fone1.tipo_endereco_id AND tp.sequencia_1 = fone1.sequencia 
LEFT JOIN enderecos fone2 ON fone2.pessoa_id = p.id AND tp.forma_contato_2_id = fone2.tipo_endereco_id AND tp.sequencia_2 = fone2.sequencia
LEFT JOIN enderecos fone3 ON fone3.pessoa_id = p.id AND tp.forma_contato_3_id = fone3.tipo_endereco_id AND tp.sequencia_3 = fone3.sequencia 
WHERE (clie.representante_id = ? or clie.vendedor_id = ?) 
and p.situacao <> 'I' 
order by p.nome_completo

Ver também:

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_MENSAGEM

Define o sql contendo as informações dos mensagens que vão para o tablet, quando não informado utiliza o padrão do sistema.
Exemplo de SQL:
select m.id, p.nome_completo as pessoa, m.resposta_mensagem_id, m.titulo, m.mensagem, m.data_inicio as data_criacao, 'S' as situacao, m.emitente_id as emitente from mensagens m left join pessoas p on (m.emitente_id = p.id) where (m.destinatario_id = ? or m.destinatario_id is null) and (m.data_termino >= now() or m.data_termino is null) and (m.data_inicio <= now() or m.data_inicio is null) order by data_inicio desc

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_PEDIDO

Define o sql contendo as informações dos pedidos que vão para o tablet,quando não informada utiliza o valor padrão para o método.
Exemplo de SQL:
select p.id as id, p.cliente_id as cliente_id, p.situacao as situacao, 0 as caixa, p.data_pedido_pda as data_pedido, p.data_requerida as data_entrega, p.data_emissao as data_conclusao, p.data_entrega as data_faturamento, p.data_cancelamento as data_cancelamento, p.motivo_cancelamento as motivo_cancelamento, p.prazo_pagamento_id as forma_pagamento_id, p.tipo_pedido_id as tipo_pedido_id, p.pedido as numero_pedido, (select max(des.numero) from itens_doc_entradas_saidas ides join doc_entradas_saidas des on ides.documento_id = des.id where ides.pedido_id = p.id) as nota_fiscal, (select situacao_documento from doc_entradas_saidas where id = (select max(des.id) from itens_doc_entradas_saidas ides join doc_entradas_saidas des on ides.documento_id = des.id where ides.pedido_id = p.id)) as situacao_nota_fiscal, p.observacoes as observacoes, p.valor_total as total, p.vendedor_id as vendedor_id, '' as autorizacao from pedidos p where p.vendedor_id = ? and p.data_emissao > now() - interval '+15 day' and p.situacao != 'M' order by p.data_emissao asc

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_PEDIDOS_ITEM

Define o sql contendo as informações dos itens de pedidos que vão para o tablet,quando não informada utiliza o valor padrão para o método.
Exemplo de SQL:
select i.id as id
, i.pedido_id
, i.preco_lista as preco_lista
, i.preco_lista as preco_padrao
, i.produto_id, i.quantidade
, i.preco 
, i.preco_lista as preco_promocional
from itens_pedidos i 
join pedidos p on p.id = i.pedido_id
where p.vendedor_id = ?
and p.data_emissao > now() - interval '+15 day'
order by i.id

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_PLANOS_PAGAMENTO

Define o SQL contendo as informações dos planos de pagamento que serão disponibilizados no app tablet.
Quando não informada utiliza o valor padrão:
SELECT id as id
, plano_pagamento as condicoes_pagamento 
, percentual_juros as indice_preco 
, ativo
, valor_minimo
, pp.todos_clientes
FROM PLANOS_PAGAMENTOS pp 
WHERE valido = 'S'
AND ativo = 'S'

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_PLANOS_PAGAMENTO_CLIENTE

Define o sql contendo as informações dos planos de pagamentos relacionados com os clientes que vão para o tablet. Quando não informada utiliza o valor padrão para o método:
select pgc.id
, pgc.cliente_id
, pgc.plano_pagamento_id as condicao_pagamento_id 
from planos_pagamentos_clientes pgc 
join planos_pagamentos pg on pg.id = pgc.plano_pagamento_id 
join clientes clie on clie.id = pgc.cliente_id
left join conceitos_clientes con on con.id = clie.conceito_id
where (clie.representante_id = ? or clie.vendedor_id = ?)
and pg.ativo = 'S'
and pg.valido = 'S'
and clie.bloqueado <> 'S'
and coalesce(con.bloqueia_venda,'N') <> 'S'

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_PRODUTO

Define o SQL contendo as informações dos produtos apresentados no app de venda tablet.

Macros permitidas:
  • ${estabelecimentoUsuarioId}: define o ID do estabelecimento padrão do usuário.
  • ${usuarioId}: ID do usuário.

Exemplo de SQL:
SELECT prod.id as id
, prod.em_falta
, prod.produto AS produto
, prod.descricao as descricao
, ic.preco_sugerido::numeric(12,2) AS preco
, case when ic.valor_promocional::numeric(12,2) is not null
            and ic.data_termino_promocional > current_date
       then ic.valor_promocional::numeric(12,2)
       else ic.preco_minimo_sugerido::numeric(12,2) end AS preco_minimo
, case when ic.valor_promocional is not null
            and ic.data_termino_promocional > current_date
       then ic.valor_promocional::numeric(12,2)
       else null end as preco_promocional
, ic.comissao_item
, ic.notas as observacoes
, ic.preco_maximo_sugerido::numeric(12,2) AS preco_maximo
, case when prod.quantidade_unidade_acondicionamento is null then 1 else prod.quantidade_unidade_acondicionamento end as embalagem
, um.id AS unidade_medida_id
, 'S' as disponivel
, COALESCE(((select sum(ep.estoque_atual) as sum from estoques_produtos ep join tipos_estoques tep on tep.id = ep.tipo_estoque_id where ep.produto_id = prod.id and ep.estabelecimento_id = ${estabelecimentoUsuarioId} and tep.tipo_estoque = 'ESTOQUE')), 0) as estoque
, (select sum(quantidade) from v_reservas_produtos rp join tipos_estoques te on te.id = rp.tipo_estoque_id where rp.produto_id = prod.id and rp.estabelecimento_id = ${estabelecimentoUsuarioId} and te.tipo_estoque = 'ESTOQUE') as estoque_reservado
, (select quantidade_minima_venda
   from estoques_produtos ep
   join tipos_estoques te on te.id = ep.tipo_estoque_id
   where ep.estabelecimento_id = ${estabelecimentoUsuarioId}
   and ep.produto_id = prod.id
   and te.tipo_estoque = 'ESTOQUE'
   limit 1) as quantidade_minima
, (select case when ep.somente_multiplos = 'S' then coalesce(ep.quantidade_minima_venda,1)
               else null end
   from estoques_produtos ep
   join tipos_estoques te on te.id = ep.tipo_estoque_id
   where ep.estabelecimento_id = ${estabelecimentoUsuarioId}
   and ep.produto_id = prod.id
   and te.tipo_estoque = 'ESTOQUE'
   limit 1) as quantidade_multipla
 FROM itens_colecoes ic 
 JOIN colecoes col ON col.id = ic.colecao_id 
 JOIN produtos prod ON prod.id = ic.produto_id 
 JOIN unidades_medidas um ON um.id = prod.unidade_medida_id 
 LEFT JOIN unidades_medidas ud ON ud.id = prod.unidade_acondicionamento_id 
 WHERE prod.situacao <> 'C' 
 AND prod.enviar_palm = 'S' 
 AND col.enviar_lista_precos_palm = 'S' 
 order by prod.descricao

O comando pode ser modificado para customizar as informações de forma a permitir, p.ex., apresentar o código de barra na descrição dos produtos no app. Para isto, basta acrescentar a expressão a seguir no comando SQL:
, prod.descricao
  || coalesce('<small>'
              || (select codigo_barras
                   from CODIGOS_BARRAS c
                   where c.produto_id = prod.id
                   and c.tipo_codigo_barras like 'EAN'
                   limit 1)
              || '</small>', ' ') as descricao

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_TIPOS_PEDIDO

Define o sql contendo as informações dos tipos de pedidos que vão para o tablet,quando não informada utiliza o valor padrão para o método.
Exemplo de SQL:
select id, tipo_pedido, plano_pagamento from tipos_pedidos where categoria = 'V' and permite_integracao = 'S' order by tipo_pedido

Tipo: SOURCE_CODE

PEDI_OFFLINE_ELIGO.UTL_PEDI_OFFLINE_INTEGRATOR.SQL_TITULO

Define o sql contendo as informações dos títulos que vão para o tablet,quando não informada utiliza o valor padrão para o método.
Exemplo de SQL:
select t.id as id, tt.tipo_titulo as tipo, t.destinatario_id as cliente_id, t.numero_titulo, t.data_conclusao as data_emissao, t.data_vencimento, t.valor from titulos t inner join tipos_titulos tt on t.tipo_titulo_id = tt.id where t.situacao not in ('L', 'C', 'B', 'M', 'P', 'N') and t.destinatario_id in (SELECT id FROM clientes clie where (clie.representante_id = ? or clie.vendedor_id = ?)) order by t.numero_titulo

Tipo: SOURCE_CODE