att
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
|
||||
var FORCE_EMAIL_DESTINATION = "andreycunha@outlook.com";
|
||||
var currentState = parseInt(getValue("WKCurrentState"), 10);
|
||||
var nextState = parseInt(nextSequenceId, 10);
|
||||
log.info("[checklist][atribuicao] beforeTaskSave currentState=" + currentState + ", nextState=" + nextState + ", colleagueId=" + colleagueId);
|
||||
|
||||
// Encaminha automaticamente para a loja selecionada na atividade da loja.
|
||||
// Ajustado para aceitar 4 e 5, pois no seu fluxo a loja pode estar na task 5 (Validar Planograma).
|
||||
if (nextState === 4 || nextState === 5) {
|
||||
var destinoLojaId = String(hAPI.getCardValue("destinoLojaId") || "").trim();
|
||||
var destinoLoja = String(hAPI.getCardValue("destinoLoja") || "").trim();
|
||||
var lojaSelecionada = String(hAPI.getCardValue("loja") || "").trim();
|
||||
var destinoFinal = destinoLojaId;
|
||||
log.info("[checklist][atribuicao] destinoLojaId card=" + destinoLojaId + ", destinoLoja card=" + destinoLoja + ", loja=" + lojaSelecionada);
|
||||
if (!destinoFinal && destinoLoja) {
|
||||
destinoFinal = resolveColleagueIdByLogin(destinoLoja);
|
||||
}
|
||||
if (!destinoFinal) {
|
||||
throw "Nao foi possivel identificar o usuario da loja. Selecione a Loja no cabecalho.";
|
||||
}
|
||||
if (!usuarioExisteAtivo(destinoFinal)) {
|
||||
throw "Usuario da loja nao encontrado/inativo: " + destinoFinal;
|
||||
}
|
||||
userList.clear();
|
||||
userList.add(destinoFinal);
|
||||
hAPI.setCardValue("destinoLojaId", destinoFinal);
|
||||
log.info("[checklist][atribuicao] atividade " + nextState + " atribuida para " + destinoFinal);
|
||||
}
|
||||
|
||||
// Dispara apenas quando sai da atividade de analise (task5: Validar Planograma)
|
||||
if (currentState !== 5) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
var saidaAnalise = (hAPI.getCardValue("saidaAnalise") || "").trim();
|
||||
var usuarioRetorno = (hAPI.getCardValue("usuarioRetorno") || "").trim();
|
||||
var destino = String(FORCE_EMAIL_DESTINATION || "").trim();
|
||||
if (!destino) {
|
||||
destino = usuarioRetorno;
|
||||
if (!destino) {
|
||||
destino = String(colleagueId || getValue("WKUser") || "");
|
||||
}
|
||||
destino = String(destino || "").trim();
|
||||
}
|
||||
|
||||
log.info("[checklist][notificacao] saidaAnalise=" + saidaAnalise
|
||||
+ ", usuarioRetorno=" + usuarioRetorno
|
||||
+ ", colleagueId=" + colleagueId
|
||||
+ ", destinoFinal=" + destino
|
||||
+ ", nextState=" + nextState);
|
||||
|
||||
if (!destino) {
|
||||
log.warn("[checklist][notificacao] Usuario destino nao informado.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (destino.indexOf("@") === -1 && !usuarioPossuiEmailValido(destino)) {
|
||||
log.warn("[checklist][notificacao] Destino sem email valido no cadastro: " + destino);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nextState === 9 || saidaAnalise === "NAO_CONFORME") {
|
||||
notificaPorTemplate("CHECKLIST_NAO_CONFORME", destino);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nextState === 11 || saidaAnalise === "CONFORME") {
|
||||
notificaPorTemplate("CHECKLIST_CONFORME", destino);
|
||||
}
|
||||
} catch (e) {
|
||||
log.error("[checklist][notificacao] Falha ao disparar notificacao: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
function notificaPorTemplate(templateCode, destinatario) {
|
||||
var NOTIFIER_SENDER_USER = "admin";
|
||||
var recipients = new java.util.ArrayList();
|
||||
recipients.add(destinatario);
|
||||
|
||||
var parametros = new java.util.HashMap();
|
||||
parametros.put("numeroSolicitacao", String(getValue("WKNumProces") || ""));
|
||||
parametros.put("qtdNaoConforme", String(hAPI.getCardValue("qtdNaoConforme") || "0"));
|
||||
parametros.put("listaNaoConforme", String(hAPI.getCardValue("listaNaoConforme") || ""));
|
||||
parametros.put("loja", String(hAPI.getCardValue("loja") || ""));
|
||||
parametros.put("linkSolicitacao", montaLinkSolicitacao());
|
||||
|
||||
notifier.notify(
|
||||
NOTIFIER_SENDER_USER,
|
||||
templateCode,
|
||||
parametros,
|
||||
recipients,
|
||||
"text/html"
|
||||
);
|
||||
|
||||
log.info("[checklist][notificacao] Template " + templateCode + " enviado para " + destinatario);
|
||||
}
|
||||
|
||||
function montaLinkSolicitacao() {
|
||||
var server = String(getValue("WKServerURL") || "");
|
||||
var companyId = String(getValue("WKCompany") || "");
|
||||
var processId = String(getValue("WKNumProces") || "");
|
||||
if (!server || !companyId || !processId) {
|
||||
return "";
|
||||
}
|
||||
return server
|
||||
+ "/portal/p/"
|
||||
+ companyId
|
||||
+ "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID="
|
||||
+ processId;
|
||||
}
|
||||
|
||||
function usuarioPossuiEmailValido(colleagueId) {
|
||||
try {
|
||||
var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST);
|
||||
var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
||||
var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null);
|
||||
if (!ds || ds.rowsCount < 1) {
|
||||
log.warn("[checklist][notificacao] Usuario nao encontrado/inativo no colleague: " + colleagueId);
|
||||
return false;
|
||||
}
|
||||
var email = String(ds.getValue(0, "mail") || "").trim();
|
||||
log.info("[checklist][notificacao] Email encontrado para " + colleagueId + ": " + email);
|
||||
return email.indexOf("@") > 0;
|
||||
} catch (e) {
|
||||
log.error("[checklist][notificacao] Erro ao validar email do usuario " + colleagueId + ": " + e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function usuarioExisteAtivo(colleagueId) {
|
||||
try {
|
||||
var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
||||
var cLogin = DatasetFactory.createConstraint("login", colleagueId, colleagueId, ConstraintType.MUST);
|
||||
var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null);
|
||||
var exists = !!(ds && ds.rowsCount > 0);
|
||||
if (exists) {
|
||||
log.info("[checklist][atribuicao] usuario ativo encontrado por login: " + colleagueId);
|
||||
return true;
|
||||
}
|
||||
// fallback para ambientes que usam colleagueId como login tecnico
|
||||
var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST);
|
||||
ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null);
|
||||
exists = !!(ds && ds.rowsCount > 0);
|
||||
log.info("[checklist][atribuicao] consulta fallback colleagueId=" + colleagueId + ", exists=" + exists);
|
||||
return exists;
|
||||
} catch (e) {
|
||||
log.error("[checklist][atribuicao] Erro ao validar usuario da loja " + colleagueId + ": " + e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function resolveColleagueIdByLogin(login) {
|
||||
try {
|
||||
var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST);
|
||||
var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
||||
var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null);
|
||||
if (ds && ds.rowsCount > 0) {
|
||||
return String(ds.getValue(0, "colleaguePK.colleagueId") || "").trim();
|
||||
}
|
||||
} catch (e) {
|
||||
log.error("[checklist][atribuicao] Erro ao resolver colleagueId por login " + login + ": " + e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
Reference in New Issue
Block a user