209 lines
7.9 KiB
JavaScript
209 lines
7.9 KiB
JavaScript
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
|
|
var FORCE_EMAIL_DESTINATION = "";
|
|
var currentState = parseInt(getValue("WKCurrentState"), 10);
|
|
var nextState = parseInt(nextSequenceId, 10);
|
|
|
|
try {
|
|
// Roteamento para loja na entrada da atividade "Validar Planograma" (task5).
|
|
// Usa prioridade: destinoLojaId (colleagueId) -> destinoLoja (login).
|
|
if (nextState === 5) {
|
|
atribuiResponsavelLoja(userList);
|
|
}
|
|
} catch (eAssign) {
|
|
log.error("[checklist][atribuicao] Falha ao atribuir responsavel da loja: " + eAssign);
|
|
throw eAssign;
|
|
}
|
|
|
|
// Notificacao por email so quando sai da atividade de analise (task5).
|
|
if (currentState !== 5) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
var saidaAnalise = (hAPI.getCardValue("saidaAnalise") || "").trim();
|
|
var usuarioRetorno = (hAPI.getCardValue("usuarioRetorno") || "").trim();
|
|
var destino = String(FORCE_EMAIL_DESTINATION || "").trim();
|
|
var usuarioDestino = "";
|
|
if (!destino) {
|
|
usuarioDestino = usuarioRetorno || String(colleagueId || getValue("WKUser") || "").trim();
|
|
destino = resolveEmailByColleagueId(usuarioDestino);
|
|
}
|
|
|
|
log.info("[checklist][notificacao] saidaAnalise=" + saidaAnalise
|
|
+ ", usuarioRetorno=" + usuarioRetorno
|
|
+ ", colleagueId=" + colleagueId
|
|
+ ", usuarioDestino=" + usuarioDestino
|
|
+ ", destinoFinal=" + destino
|
|
+ ", nextState=" + nextState);
|
|
|
|
if (!destino) {
|
|
log.warn("[checklist][notificacao] Usuario destino nao informado.");
|
|
return;
|
|
}
|
|
|
|
if (!isValidEmail(destino)) {
|
|
log.warn("[checklist][notificacao] Email de destino invalido: " + 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 atribuiResponsavelLoja(userList) {
|
|
var destinoLojaId = String(hAPI.getCardValue("destinoLojaId") || "").trim();
|
|
var destinoLojaLogin = String(hAPI.getCardValue("destinoLoja") || "").trim();
|
|
var colleagueId = "";
|
|
|
|
if (destinoLojaId && existsActiveUserByColleagueId(destinoLojaId)) {
|
|
colleagueId = destinoLojaId;
|
|
}
|
|
|
|
if (!colleagueId && destinoLojaLogin) {
|
|
colleagueId = resolveColleagueIdByLogin(destinoLojaLogin);
|
|
}
|
|
|
|
if (!colleagueId) {
|
|
throw "Preencha uma loja valida. destinoLojaId/destinoLoja nao encontrado no colleague ativo.";
|
|
}
|
|
|
|
userList.clear();
|
|
userList.add(colleagueId);
|
|
hAPI.setCardValue("destinoLojaId", colleagueId);
|
|
|
|
log.info("[checklist][atribuicao] Responsavel definido. destinoLojaId=" + destinoLojaId
|
|
+ ", destinoLoja=" + destinoLojaLogin
|
|
+ ", colleagueIdFinal=" + colleagueId);
|
|
}
|
|
|
|
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 resolveEmailByColleagueId(colleagueId) {
|
|
try {
|
|
if (!colleagueId) {
|
|
return "";
|
|
}
|
|
var ds = findColleagueByIdOrLogin(colleagueId);
|
|
if (!ds || ds.rowsCount < 1) {
|
|
log.warn("[checklist][notificacao] Usuario nao encontrado/inativo no colleague: " + colleagueId);
|
|
return "";
|
|
}
|
|
var email = String(ds.getValue(0, "mail") || "").trim();
|
|
log.info("[checklist][notificacao] Email encontrado para " + colleagueId + ": " + email);
|
|
return email;
|
|
} catch (e) {
|
|
log.error("[checklist][notificacao] Erro ao buscar email do usuario " + colleagueId + ": " + e);
|
|
return "";
|
|
}
|
|
}
|
|
|
|
function isValidEmail(email) {
|
|
var v = String(email || "").trim();
|
|
return v.indexOf("@") > 0 && v.indexOf(".") > v.indexOf("@") + 1;
|
|
}
|
|
|
|
function existsActiveUserByColleagueId(colleagueId) {
|
|
var ds = null;
|
|
try {
|
|
var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", colleagueId, colleagueId, ConstraintType.MUST);
|
|
var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
|
ds = DatasetFactory.getDataset("colleague", null, [c1, c2], null);
|
|
return ds && ds.rowsCount > 0;
|
|
} catch (e) {
|
|
log.error("[checklist][atribuicao] Erro ao validar colleagueId=" + colleagueId + ": " + e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function resolveColleagueIdByLogin(login) {
|
|
try {
|
|
var c1 = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST);
|
|
var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
|
var ds = DatasetFactory.getDataset("colleague", null, [c1, c2], 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 "";
|
|
}
|
|
|
|
function findColleagueByIdOrLogin(value) {
|
|
var v = String(value || "").trim();
|
|
if (!v) return null;
|
|
var c2 = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
|
|
|
|
var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", v, v, ConstraintType.MUST);
|
|
var byId = DatasetFactory.getDataset("colleague", null, [cId, c2], null);
|
|
if (byId && byId.rowsCount > 0) return byId;
|
|
|
|
var cLogin = DatasetFactory.createConstraint("login", v, v, ConstraintType.MUST);
|
|
var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, c2], null);
|
|
if (byLogin && byLogin.rowsCount > 0) return byLogin;
|
|
|
|
return null;
|
|
}
|