1
Transferência Ginseng
Transferência Ginseng
Este flow permite abertura de solicitação de transferências automatizadas, informando qual item será transferido e direcionado para as aprovações corretas.
true
false
Default
Transferência
Grupo
<AssignmentController><Group>CD</Group></AssignmentController>
0
0
0
Default
false
1
true
false
172800
0
true
1
Transferência Ginseng
49
43582
true
true
false
true
false
false
0
2
false
false
true
1
Transferência Ginseng
1
1
Solicitar transferência
Solicitar transferência
0
false
0
1
true
false
false
0
0
0
0
false
0
true
true
false
100
83
0
0
false
false
0
0
false
0
10
0
false
0
0
0
0
false
1
Transferência Ginseng
1
4
Aprovar Transferência
Aprovar Transferência
16200
false
0
1
false
false
false
0
0
0
0
false
0
true
true
false
500
280
0
0
false
false
0
0
false
Expediente Lojas
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
6
Emitir NFE de Transf
Emitir NFE de Transf
57600
false
0
Pool Grupo
<AssignmentController><Group>CD</Group></AssignmentController>
1
false
false
false
0
0
0
0
false
0
true
true
false
500
490
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
18
Receber Produtos
Receber Produtos
7200
false
0
Campo Formulário
<AssignmentController><FormField>gestor_cc</FormField></AssignmentController>
1
false
false
false
0
0
0
0
false
0
true
true
false
1170
284
0
0
false
false
0
0
false
Expediente Lojas
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
24
Verificar problema
Verificar problema
172800
false
0
Usuário
<AssignmentController><User>logistica</User></AssignmentController>
1
false
false
false
0
0
0
0
false
0
true
true
false
1400
479
0
0
false
false
0
0
false
Expediente BackOffice, Logística e Motorista
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
31
Coletar Produto
Coletar Produto
43200
false
0
1
false
false
false
0
0
0
0
false
0
true
true
false
850
679
0
0
false
false
0
0
false
Expediente BackOffice, Logística e Motorista
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
57
Entregar Produto
Entregar Produto
57600
false
0
Campo Formulário
<AssignmentController><FormField>motoristaEntregaLogin</FormField></AssignmentController>
1
false
true
false
3600
3600
0
0
false
0
true
false
false
1100
679
0
0
false
false
0
0
false
Expediente BackOffice, Logística e Motorista
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
99
Consultar Entrada
Consultar Entrada
0
false
0
1
false
false
false
0
0
0
0
false
0
true
false
false
1600
284
0
0
false
false
0
0
false
0
82
0
false
0
0
0
0
false
1
1
Transferência Ginseng
1
104
Verificar problema de lançamento
Verificar problema de lançamento
0
false
0
1
false
true
false
3600
3600
0
0
false
0
true
false
false
1600
60
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Transferência Ginseng
1
103
Intermediário
Intermediário
Evento intermediário do processo
0
false
0
0
false
true
false
1
1
0
0
false
0
true
false
false
1660
284
0
0
false
false
0
false
0
43
0
false
0
false
99
1
Transferência Ginseng
1
2
Validar Loja
Validar Loja
false
false
false
0
true
250
47
false
1
120
0
0
false
1
Transferência Ginseng
1
46
Validar produto
Validar produto
false
false
false
0
true
1420
268
false
1
120
0
0
false
1
Transferência Ginseng
1
107
Validar rota
Validar rota
false
false
false
0
true
520
663
false
1
120
0
0
false
1
Transferência Ginseng
1
39
Cancelado
Cancelado
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
true
false
700
310
0
0
false
false
0
0
false
6
65
0
false
0
false
1
Transferência Ginseng
1
60
Fim com cancelamento de processo
Fim com cancelamento de processo
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
false
false
1570
699
0
0
false
false
0
0
false
6
65
0
false
0
false
1
Transferência Ginseng
1
96
Fim
Fim
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
false
false
770
510
0
0
false
false
0
0
false
6
60
0
false
0
false
1
Transferência Ginseng
1
101
Fim
Fim
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
false
false
1777
300
0
0
false
false
0
0
false
6
60
0
false
0
false
1
Transferência Ginseng
1
49
2
hAPI.getCardValue("gestor_cce") != ""
4
<AssignmentController><FormField>gestor_cce</FormField></AssignmentController>
Campo Formulário
0
1
Transferência Ginseng
2
49
2
true
6
<AssignmentController><User>logistica</User></AssignmentController>
Usuário
0
1
Transferência Ginseng
1
49
46
hAPI.getCardValue("validacaoItens") == "entregue" && hAPI.getCardValue("dataEntradaNfeConsulta") != ""
99
0
1
Transferência Ginseng
2
49
46
true
24
0
1
Transferência Ginseng
1
49
107
hAPI.getCardValue("ufOrigem") == "AL"
31
<AssignmentController><Group>motoristaAL</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
2
49
107
hAPI.getCardValue("ufOrigem") == "BA"
31
<AssignmentController><Group>motoristaBA</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
3
49
107
hAPI.getCardValue("ufOrigem") == "SE"
31
<AssignmentController><Group>motoristaSE</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
4
49
107
hAPI.getCardValue("ufOrigem") == ""
31
<AssignmentController><Group>CD</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
5
49
107
hAPI.getCardValue("ufOrigem") == "VDC"
31
<AssignmentController><Group>motoristaBA</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
6
49
107
hAPI.getCardValue("ufOrigem") == "SE"
31
<AssignmentController><Group>motoristaSE</Group></AssignmentController>
Pool Grupo
0
1
Transferência Ginseng
1
3
false
1
2
false
false
0
1
Transferência Ginseng
1
5
false
2
4
Gestor Identificado
false
false
0
1
Transferência Ginseng
1
7
false
2
6
Loja sem Gestor
false
false
0
1
Transferência Ginseng
1
26
Ajuste realizado
false
24
18
Ajuste de transferência
false
false
0
1
Transferência Ginseng
1
41
Aprovado e emitir NFE
false
4
6
Aprovar
false
false
0
1
Transferência Ginseng
1
47
Confirmar recebimento
false
18
46
Confirmar recebimento
false
false
0
1
Transferência Ginseng
1
48
false
46
24
Reprovar
false
false
0
1
Transferência Ginseng
1
53
false
4
39
Reprovar
false
false
0
1
Transferência Ginseng
1
61
false
57
60
Cancelar
false
false
0
1
Transferência Ginseng
1
85
Transferência entregue
false
57
18
Validar produtos recebidos
false
false
0
1
Transferência Ginseng
1
97
Cancelar Transferência
false
6
96
Finalizar
false
false
0
1
Transferência Ginseng
1
98
Pedido coletado
false
31
57
Entregar produto
false
false
0
1
Transferência Ginseng
1
100
false
46
99
false
false
0
1
Transferência Ginseng
1
102
false
99
101
false
false
0
1
Transferência Ginseng
1
105
false
103
104
false
false
0
1
Transferência Ginseng
1
106
false
104
99
false
false
0
1
Transferência Ginseng
1
108
Enviar para coleta
false
6
107
Enviar para rota
false
false
0
1
Transferência Ginseng
1
109
false
107
31
false
false
0
1
beforeTaskSave
Transferência Ginseng
1
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
try {
var currentState = parseInt(getValue("WKNumState"), 10);
var completeTask = String(getValue("WKCompletTask") || "false");
var nextState = parseInt(String(nextSequenceId || "0"), 10);
if (completeTask !== "true") return;
if (currentState === 6) {
// Fluxo de cancelamento saindo da atividade 6 nao deve disparar template de nota emitida.
if (nextState === 97) return;
enviarNotificacaoNotaEmitida();
return;
}
if (currentState === 31) {
enviarNotificacaoColetaRealizada();
return;
}
if (currentState === 57) {
// 61 = cancelamento no diagrama.
if (nextState === 61) return;
enviarNotificacaoEntregaRealizada();
}
} catch (e) {
log.error("[Transferencia.beforeTaskSave] Erro no beforeTaskSave: " + e);
}
}
function enviarNotificacaoNotaEmitida() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink);
notifyTemplate("tpl_nota_emitida", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink);
}
function enviarNotificacaoColetaRealizada() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var motoristaColetaNome = safeTrim(hAPI.getCardValue("motoristaColetaNome"));
var dataColeta = safeTrim(hAPI.getCardValue("dataColeta"));
var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome"));
var tipoMotoristaEntrega = safeTrim(hAPI.getCardValue("tipoMotoristaEntrega"));
if (motoristaEntregaNome === "" && tipoMotoristaEntrega === "mesmo") {
motoristaEntregaNome = motoristaColetaNome;
}
var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink);
params.put("motoristaColetaNome", motoristaColetaNome);
params.put("dataColeta", dataColeta);
params.put("motoristaEntregaNome", motoristaEntregaNome);
notifyTemplate("tpl_coleta_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink);
}
function enviarNotificacaoEntregaRealizada() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var motoristaEntregaNome = safeTrim(hAPI.getCardValue("motoristaEntregaNome"));
var dataEntrega = safeTrim(hAPI.getCardValue("dataEntrega"));
var nomerecebedor = safeTrim(hAPI.getCardValue("nomerecebedor"));
var params = buildCommonParams(envio.processNumber, envio.chaveNfe, envio.processLink);
params.put("motoristaEntregaNome", motoristaEntregaNome);
params.put("dataEntrega", dataEntrega);
params.put("nomerecebedor", nomerecebedor);
notifyTemplate("tpl_entrega_realizada", envio.destinoEmail, envio.requesterId, params, envio.processNumber, envio.processLink);
}
function montarContextoEnvio() {
var requesterId = safeTrim(hAPI.getCardValue("requesterId"));
var requesterMail = safeTrim(hAPI.getCardValue("requesterMail"));
if (requesterId === "" && requesterMail !== "") {
requesterId = findColleagueIdByMail(requesterMail);
}
// Prioriza email explicito salvo no formulario; fallback para email do colleague.
var destinoEmail = requesterMail;
if (!isValidEmail(destinoEmail)) {
destinoEmail = resolveEmailByColleagueId(requesterId);
}
if (!isValidEmail(destinoEmail)) {
log.warn("[Transferencia.beforeTaskSave] Email do solicitante invalido. requesterId=" + requesterId + ", requesterMail=[" + requesterMail + "], destinoEmail=[" + destinoEmail + "]");
return { ok: false };
}
var processNumber = safeTrim(getValue("WKNumProces"));
var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe"));
if (chaveNfe === "") chaveNfe = safeTrim(hAPI.getCardValue("chaveNfe"));
var processLink = buildProcessLink(processNumber);
return {
ok: true,
requesterId: requesterId,
destinoEmail: destinoEmail,
processNumber: processNumber,
chaveNfe: chaveNfe,
processLink: processLink
};
}
function buildCommonParams(processNumber, chaveNfe, processLink) {
var params = new java.util.HashMap();
params.put("WKNumProces", processNumber);
params.put("chaveNfe", chaveNfe);
params.put("linkSolicitacao", processLink);
params.put("link", processLink);
return params;
}
function notifyTemplate(templateCode, destinoEmail, requesterId, params, processNumber, processLink) {
var NOTIFIER_SENDER_USER = "admin";
var recipients = new java.util.ArrayList();
recipients.add(destinoEmail);
notifier.notify(NOTIFIER_SENDER_USER, templateCode, params, recipients, "text/html");
log.info("[Transferencia.beforeTaskSave] " + templateCode + " enviado. processo=" + processNumber + ", destino=" + destinoEmail + ", requesterId=" + requesterId + ", link=[" + processLink + "]");
}
function buildProcessLink(processNumber) {
var BASE_URL_FALLBACK = "https://comerciode188006.fluig.cloudtotvs.com.br";
var baseUrl = safeTrim(getValue("WKServerURL"));
var companyId = safeTrim(getValue("WKCompany"));
if (baseUrl === "") baseUrl = BASE_URL_FALLBACK;
if (baseUrl.indexOf("http://") !== 0 && baseUrl.indexOf("https://") !== 0) {
baseUrl = "https://" + baseUrl;
}
if (baseUrl.charAt(baseUrl.length - 1) === "/") baseUrl = baseUrl.substring(0, baseUrl.length - 1);
if (companyId === "") companyId = "1";
if (baseUrl === "" || safeTrim(processNumber) === "") return "";
return baseUrl + "/portal/p/" + companyId + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + processNumber;
}
function findColleagueIdByMail(mail) {
var email = safeTrim(mail);
if (email === "") return "";
try {
var cMail = DatasetFactory.createConstraint("mail", email, email, ConstraintType.MUST);
var dsColleague = DatasetFactory.getDataset("colleague", null, [cMail], null);
if (!dsColleague || dsColleague.rowsCount < 1) return "";
return safeTrim(
dsColleague.getValue(0, "colleaguePK.colleagueId") ||
dsColleague.getValue(0, "colleagueId") ||
dsColleague.getValue(0, "login")
);
} catch (e) {
log.warn("[Transferencia.beforeTaskSave] Falha ao buscar solicitante por mail: " + e);
return "";
}
}
function resolveEmailByColleagueId(colleagueId) {
var id = safeTrim(colleagueId);
if (id === "") return "";
try {
var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", id, id, ConstraintType.MUST);
var byId = DatasetFactory.getDataset("colleague", null, [cId, cActive], null);
if (byId && byId.rowsCount > 0) {
return safeTrim(byId.getValue(0, "mail"));
}
var cLogin = DatasetFactory.createConstraint("login", id, id, ConstraintType.MUST);
var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null);
if (byLogin && byLogin.rowsCount > 0) {
return safeTrim(byLogin.getValue(0, "mail"));
}
} catch (e) {
log.warn("[Transferencia.beforeTaskSave] Falha ao buscar email do solicitante por colleagueId: " + e);
}
return "";
}
function isValidEmail(email) {
var v = safeTrim(email);
if (v === "") return false;
if (/\s/.test(v)) return false;
var at = v.indexOf("@");
if (at <= 0 || at !== v.lastIndexOf("@")) return false;
var dot = v.lastIndexOf(".");
return dot > at + 1 && dot < (v.length - 1);
}
function safeTrim(value) {
return String(value == null ? "" : value).trim();
}
function onlyDigits(value) {
return String(value == null ? "" : value).replace(/\D/g, "");
}
1
onNotify
Transferência Ginseng
1
function onNotify(subject, receivers, template, params) {
log.info("===== onNotify GLOBAL ===== Template: " + template);
var validos = new java.util.ArrayList();
for (var i = 0; i < receivers.size(); i++) {
var email = receivers.get(i);
log.info("Receiver original: [" + email + "]");
if (email && email.indexOf("@") > 0 && email.indexOf(".") > 0) {
validos.add(email);
} else {
log.warn("REMOVIDO EMAIL INVALIDO: [" + email + "] TEMPLATE: " + template);
}
}
receivers.clear();
for (var j = 0; j < validos.size(); j++) {
receivers.add(validos.get(j));
}
log.info("TOTAL FINAL RECEIVERS: " + receivers.size());
}
1
servicetask99
Transferência Ginseng
1
function servicetask99(attempt, message) {
try {
var validacaoItens = safeTrim(hAPI.getCardValue("validacaoItens"));
// Só precisa consultar entrada da NFe quando o recebimento foi validado como entregue.
if (validacaoItens !== "entregue") return;
var dataEntrada = safeTrim(hAPI.getCardValue("dataEntradaNfeConsulta"));
if (dataEntrada !== "") return;
var chaveNfe = onlyDigits(hAPI.getCardValue("chaveNfe"));
if (chaveNfe === "") {
log.warn("[servicetask99] Chave NFe vazia. Nao foi possivel consultar entrada.");
return;
}
var cKey = DatasetFactory.createConstraint("key", chaveNfe, chaveNfe, ConstraintType.MUST);
var dsNfe = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [cKey], null);
if (!dsNfe || dsNfe.rowsCount < 1) {
log.warn("[servicetask99] Dataset sem retorno para chave: " + chaveNfe);
return;
}
var dsSuccess = safeTrim(dsNfe.getValue(0, "success")).toLowerCase() === "true";
var dsUpdatedAt = safeTrim(dsNfe.getValue(0, "updatedAt"));
if (dsSuccess && dsUpdatedAt !== "") {
hAPI.setCardValue("dataEntradaNfeConsulta", dsUpdatedAt);
log.info("[servicetask99] Data de entrada atualizada automaticamente: " + dsUpdatedAt);
return;
}
var dsMessage = safeTrim(dsNfe.getValue(0, "message"));
log.warn("[servicetask99] Consulta executada sem data de entrada. message=" + dsMessage);
} catch (e) {
log.error("[servicetask99] Erro na consulta automatica da NFe: " + e);
throw e;
}
}
function safeTrim(value) {
return String(value == null ? "" : value).trim();
}
function onlyDigits(value) {
return String(value == null ? "" : value).replace(/\D/g, "");
}
FFFFFF
794
1861
20
20
Solicitação de Transferência
1
0
1
Transferência Ginseng
1
1
82b0b7
198
1831
50
218
Gerente de loja
2
1
1
Transferência Ginseng
1
2
d0daae
198
1831
50
416
Logistica
2
1
1
Transferência Ginseng
1
3
d6e0d0
198
1831
50
20
Analista de suprimentos
2
1
1
Transferência Ginseng
1
4
adc9ac
200
1831
50
614
Motorista
2
1
1
Transferência Ginseng
1
5
1
Transferência Ginseng
49
5
1
342
100
1
Transferência Ginseng
49
5
2
342
326
1
Transferência Ginseng
49
7
1
279
527
1
Transferência Ginseng
49
26
1
1223
517
1
Transferência Ginseng
49
61
1
1552
717
1
Transferência Ginseng
49
85
1
1149
308
1
Transferência Ginseng
centroCusto
Filial Destino
1
1
Transferência Ginseng
dataAbertura
Data de abertura
2
1
Transferência Ginseng
dataEmissaoNfe
dataEmissaoNfe
3
1
Transferência Ginseng
estabelecimento
Filial Emitente
4
1
Transferência Ginseng
justificativa
Justificativa
5
1
Transferência Ginseng
motoristaColetaNome
Motorista Coleta
6
1
Transferência Ginseng
motoristaEntregaNome
Motorista Entrega
7
1
Transferência Ginseng
requesterName
requesterName
8
1
Transferência Ginseng
1
99
10
Lançamento efetuado com sucesso no RGB
1
2
0
0
Transferência Ginseng
49
4
approval
title
Solicitação de compra
0
0
Transferência Ginseng
49
4
approval
description
0
0
Transferência Ginseng
49
4
approval
highlight
Centro de Custo - Aprovar solicitação?
0
0
Transferência Ginseng
49
4
approval
approve
6
0
0
Transferência Ginseng
49
4
approval
reject
39
0
0
Transferência Ginseng
49
6
approval
title
Solicitação de transferência
0
0
Transferência Ginseng
49
6
approval
description
0
0
Transferência Ginseng
49
6
approval
highlight
Transferência
0
0
Transferência Ginseng
49
6
approval
approve
0
0
Transferência Ginseng
49
6
approval
reject
0
0
Transferência Ginseng
49
24
approval
title
0
0
Transferência Ginseng
49
24
approval
description
0
0
Transferência Ginseng
49
24
approval
highlight
0
0
Transferência Ginseng
49
24
approval
approve
0
0
Transferência Ginseng
49
24
approval
reject