Clientes
Atualizar conceito de clientes que estão sem comprar a X dias
CLIENT.RQ-008
Descrição
Quando é necessário atualizar o conceito de clientes que estão sem comprar a um determinado tempo, pode-se criar uma rotina que faz esta atualização por meio de job.
Para isto, é necessário configurar uma operação custom, as preferências utilizadas e a job que executará a operação.
Criando a operação custom
- Acesse a interface Operações customizadas;
- Clique [b:Incluir];
- Informe:
- Operação: ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS
- Título: Atualizar conceito cliente inativo
- Descrição: Inclui um conceito específico (definido na preferência ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.CONCEITO_APLICADO_ID) para todos os clientes que não efetuaram nenhuma compra (informação contida no campo "data de última compra" do cadastro de clientes) nos últimos X dias (configurado na preferência ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.DIAS_SEM_COMPRAR), podendo notificar a um ou mais destinatários configurados na preferência ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.EMAIL_DESTINATARIO.
- Tipo de implementacao: Groovy Scripting Engine
- Implementação:
import br.com.eligo.ent.EntClientes;
import br.com.eligo.ent.EntPessoas;
import br.com.eligo.ent.EntHistoricosConceitosClientes;
import br.com.telescope.adsrt.dom.DomDate;
Long conceitoId = Long.parseLong(ctx.getPreference("ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.CONCEITO_APLICADO_ID", "0"));
Integer diasSemComprar = Integer.parseInt(ctx.getPreference("ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.DIAS_SEM_COMPRAR", "0"));
String emailDestinatario = ctx.getPreference("ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.EMAIL_DESTINATARIO", "");
if (conceitoId == 0l) {
DomDate data = new DomDate();
data.setValue("[SYSDATE-"+diasSemComprar+"]");
EntClientes cli = new EntClientes(ctx);
EntPessoas pess = cli.joinId();
cli.filterBy()
.lt(cli.getDataUltimaCompra(), data.getValue())
.addWhere("(not exists (select h.id from historicos_conceitos_clientes h where h.cliente_id = "+cli.getAlias()+".id and ativo = 'S' and h.conceito_id = " + conceitoId + "))");
cli.orderBy().desc(cli.getDataUltimaCompra(), pess.getNomeCompleto());
EntHistoricosConceitosClientes historico = new EntHistoricosConceitosClientes(ctx);
StringBuilder rowCliente = new StringBuilder(200);
rowCliente.append("<table style='border-collapse:collapse;border:1px solid #000'><tr><th style='border:1px solid #000'>Cliente</th><th style='border:1px solid #000'>Nome completo</th><th style='border:1px solid #000'>Última compra em</th><th style='border:1px solid #000'>Conceito principal</th></tr>");
int quant = 0;
while (cli.next()) {
rowCliente.append("<tr><td style='border:1px solid #000'>")
.append(cli.findId().valueOfPessoa())
.append("</td><td style='border:1px solid #000'>")
.append(cli.findId().valueOfNomeCompleto())
.append("</td><td style='border:1px solid #000'>")
.append((cli.getDataUltimaCompra().isNotNull() ? cli.getDataUltimaCompra().toText() : ""))
.append("</td><td style='border:1px solid #000'>")
.append((cli.getConceitoId().isNotNull() ? cli.findConceito().valueOfConceito() : ""))
.append("</td></tr>");
historico.nullify();
historico.setClienteId(cli.valueOfId());
historico.setConceitoId(conceitoId);
historico.setDataInicio("[SYSDATE]");
historico.ins();
quant++;
}
if (emailDestinatario != null && !"".equals(emailDestinatario.trim())) {
if (quant > 0) {
ctx.sendHtmlMail(emailDestinatario, null, "[Eligo - SELET] Atualização de conceito de clientes sem compras para iniativação", "Foram atualizados os seguintes " + quant + " clientes:<br>" + rowCliente.toString());
} else {
ctx.sendHtmlMail(emailDestinatario, null, "[Eligo - SELET] Atualização de conceito de clientes (sem clientes para iniativação)", "Não houve clientes sem comprar a " + diasSemComprar + " dias.");
}
}
}
Definindo as preferências
- Configure as preferências:
Qual conceito será aplicado
- Preferência: ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.CONCEITO_APLICADO_ID
- Valor: (informe o ID do conceito)
- Descrição: Definição do conceito a ser aplicado aos clientes que não efetuaram compras a X dias, atualizado a partir de job/rotina customizada executada diariamente.
Quantos dias sem comprar
- Preferência: ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.DIAS_SEM_COMPRAR
- Valor: (informe quantos dias)
- Descrição: Definição de quantos dias o cliente deve estar sem comprar para ser criado o conceito.
Quem deve ser notificado
- Preferência: ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS.EMAIL_DESTINATARIO
- Valor: (informe a quem deve ser notificado sobre as alterações feitas )
- Descrição: Define um e-mail para quem deve ser enviado o relatório de clientes que serão alterados os conceitos. Pode ser informado mais de um e-mail, separado por vírgulas. Não informar um e-mail significa que a rotina irá ser executada, mas ninguém será notificado.
Configurando job
Informe:
- Operação: ATUALIZAR_CONCEITO_CLIENTE_SEM_COMPRAS
- Título: Atualizar conceito de cliente sem compras
- Dias do mês: * (ou informe quais dias do mês devem ser executados)
- Meses: * (ou informe quais meses devem ser executados)
- Dias da semana: Todos os dias (ou informe quais dias da semana devem ser executados)
- Horas: 1 (ou informe quais horas do dia devem ser executados)
- Minutos: 0 (ou informe quais minutos da hora devem ser executados)