This commit is contained in:
2026-05-15 09:39:34 -03:00
parent 3ca3d906e1
commit 628c84683b
34 changed files with 3751 additions and 2303 deletions
@@ -29,7 +29,7 @@
<processDefinitionVersionPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
</processDefinitionVersionPK>
<versionDescription></versionDescription>
<formId>823</formId>
@@ -629,7 +629,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>1</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>2</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;centroCusto&quot;) == &quot;&quot;</condition>
@@ -643,7 +643,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>2</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>2</sequence>
</conditionProcessStatePK>
<condition>true</condition>
@@ -657,7 +657,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>1</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>46</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validarMotivo&quot;) == &quot;substituicao&quot;</condition>
@@ -671,7 +671,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>2</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>46</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validarMotivo&quot;) == &quot;temporario&quot;</condition>
@@ -685,7 +685,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>3</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>46</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validarMotivo&quot;) == &quot;aumento&quot;</condition>
@@ -699,7 +699,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>1</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>95</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validacaoFunc&quot;) == &quot;entregue&quot;</condition>
@@ -713,7 +713,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>2</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>95</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validacaoFunc&quot;) == &quot;naoEntregue&quot;</condition>
@@ -727,7 +727,7 @@
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<expressionOrder>3</expressionOrder>
<version>31</version>
<version>34</version>
<sequence>95</sequence>
</conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validacaoFunc&quot;) == &quot;incorreto&quot;</condition>
@@ -998,7 +998,241 @@
</ProcessLink>
</list>
<list/>
<list/>
<list>
<WorkflowProcessEvent>
<workflowProcessEventPK>
<companyId>1</companyId>
<eventId>beforeTaskSave</eventId>
<processId>Recrutamento e seleção</processId>
<version>1</version>
</workflowProcessEventPK>
<eventDescription>function beforeTaskSave(colleagueId, nextSequenceId, userList) {
try {
var currentState = parseInt(String(getValue(&quot;WKNumState&quot;) || &quot;0&quot;), 10);
var nextState = parseInt(String(nextSequenceId || &quot;0&quot;), 10);
var completeTask = String(getValue(&quot;WKCompletTask&quot;) || &quot;false&quot;);
log.info(&quot;[Recrutamento.beforeTaskSave] currentState=&quot; + currentState + &quot;, nextState=&quot; + nextState + &quot;, completeTask=&quot; + completeTask);
if (completeTask !== &quot;true&quot;) return;
// Disparo do e-mail inicial da solicitação (atividade inicial = 1).
if (currentState === 1) {
enviarNotificacaoSolicitacao();
return;
}
// Disparo quando a seleção define o início do colaborador.
if (currentState === 6 &amp;&amp; nextState === 46) {
enviarNotificacaoInicioColaborador();
}
} catch (e) {
log.error(&quot;[Recrutamento.beforeTaskSave] Erro ao disparar notificação: &quot; + e);
}
}
function enviarNotificacaoSolicitacao() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var params = new java.util.HashMap();
params.put(&quot;WKNumProces&quot;, envio.processNumber);
params.put(&quot;linkSolicitacao&quot;, envio.processLink);
params.put(&quot;link&quot;, envio.processLink);
params.put(&quot;requesterName&quot;, valueOrDefault(hAPI.getCardValue(&quot;requesterName&quot;)));
params.put(&quot;gestorNome&quot;, valueOrDefault(hAPI.getCardValue(&quot;gestorNome&quot;)));
params.put(&quot;dataAbertura&quot;, valueOrDefault(hAPI.getCardValue(&quot;dataAbertura&quot;)));
params.put(&quot;cargo&quot;, valueOrDefault(hAPI.getCardValue(&quot;funcao&quot;)));
params.put(&quot;kitUtilizado&quot;, getKitDescricao(hAPI.getCardValue(&quot;itensinicio&quot;)));
params.put(&quot;motivoSolicitacao&quot;, getMotivoDescricao(hAPI.getCardValue(&quot;validarMotivo&quot;)));
params.put(&quot;justificativa&quot;, valueOrDefault(hAPI.getCardValue(&quot;justificativa&quot;)));
notifier.notify(&quot;admin&quot;, &quot;tpl_recrutamento_realizada_dia&quot;, params, envio.destinatarios, &quot;text/html&quot;);
log.info(&quot;[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada_dia enviado. processo=&quot; + envio.processNumber + &quot;, destinos=&quot; + envio.destinosLog);
}
function enviarNotificacaoInicioColaborador() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var dataInicio = safeTrim(hAPI.getCardValue(&quot;datainiciotrabalho&quot;));
if (dataInicio === &quot;&quot;) {
log.warn(&quot;[Recrutamento.beforeTaskSave] Data de início vazia. Notificação de início não enviada.&quot;);
return;
}
var params = new java.util.HashMap();
params.put(&quot;WKNumProces&quot;, envio.processNumber);
params.put(&quot;linkSolicitacao&quot;, envio.processLink);
params.put(&quot;link&quot;, envio.processLink);
params.put(&quot;colaboradorNome&quot;, valueOrDefault(hAPI.getCardValue(&quot;nomedocandidato&quot;)));
params.put(&quot;cargo&quot;, valueOrDefault(hAPI.getCardValue(&quot;funcao&quot;)));
params.put(&quot;dataInicio&quot;, formatDateBr(dataInicio));
params.put(&quot;kitUtilizado&quot;, getKitDescricao(hAPI.getCardValue(&quot;itensinicio&quot;)));
notifier.notify(&quot;admin&quot;, &quot;tpl_recrutamento_realizada&quot;, params, envio.destinatarios, &quot;text/html&quot;);
log.info(&quot;[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada enviado. processo=&quot; + envio.processNumber + &quot;, destinos=&quot; + envio.destinosLog);
}
function montarContextoEnvio() {
var destinatarios = new java.util.ArrayList();
var jaAdicionados = {};
addEmail(destinatarios, jaAdicionados, &quot;tic@grupoginseng.com.br&quot;);
var requesterId = safeTrim(hAPI.getCardValue(&quot;requesterId&quot;));
if (requesterId !== &quot;&quot;) {
addEmail(destinatarios, jaAdicionados, resolveEmailByColleagueId(requesterId));
}
if (destinatarios.isEmpty()) {
log.warn(&quot;[Recrutamento.beforeTaskSave] Nenhum e-mail válido encontrado para notificação.&quot;);
return { ok: false };
}
var processNumber = safeTrim(getValue(&quot;WKNumProces&quot;));
var processLink = buildProcessLink(processNumber);
return {
ok: true,
processNumber: processNumber,
processLink: processLink,
destinatarios: destinatarios,
destinosLog: String(destinatarios.toString())
};
}
function addEmail(destinatarios, jaAdicionados, email) {
var v = safeTrim(email).toLowerCase();
if (!isValidEmail(v)) return;
if (jaAdicionados[v]) return;
destinatarios.add(v);
jaAdicionados[v] = true;
}
function resolveEmailByColleagueId(colleagueId) {
var id = safeTrim(colleagueId);
if (id === &quot;&quot;) return &quot;&quot;;
try {
var cActive = DatasetFactory.createConstraint(&quot;active&quot;, &quot;true&quot;, &quot;true&quot;, ConstraintType.MUST);
var cId = DatasetFactory.createConstraint(&quot;colleaguePK.colleagueId&quot;, id, id, ConstraintType.MUST);
var byId = DatasetFactory.getDataset(&quot;colleague&quot;, null, [cId, cActive], null);
if (byId &amp;&amp; byId.rowsCount &gt; 0) {
return safeTrim(byId.getValue(0, &quot;mail&quot;));
}
var cLogin = DatasetFactory.createConstraint(&quot;login&quot;, id, id, ConstraintType.MUST);
var byLogin = DatasetFactory.getDataset(&quot;colleague&quot;, null, [cLogin, cActive], null);
if (byLogin &amp;&amp; byLogin.rowsCount &gt; 0) {
return safeTrim(byLogin.getValue(0, &quot;mail&quot;));
}
} catch (e) {
log.warn(&quot;[Recrutamento.beforeTaskSave] Falha ao buscar e-mail por colleagueId: &quot; + e);
}
return &quot;&quot;;
}
function buildProcessLink(processNumber) {
var baseUrl = safeTrim(getValue(&quot;WKServerURL&quot;));
var companyId = safeTrim(getValue(&quot;WKCompany&quot;));
if (baseUrl === &quot;&quot; || processNumber === &quot;&quot;) return &quot;&quot;;
if (baseUrl.indexOf(&quot;http://&quot;) !== 0 &amp;&amp; baseUrl.indexOf(&quot;https://&quot;) !== 0) {
baseUrl = &quot;https://&quot; + baseUrl;
}
if (baseUrl.charAt(baseUrl.length - 1) === &quot;/&quot;) {
baseUrl = baseUrl.substring(0, baseUrl.length - 1);
}
if (companyId === &quot;&quot;) companyId = &quot;1&quot;;
return baseUrl + &quot;/portal/p/&quot; + companyId + &quot;/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=&quot; + processNumber;
}
function getMotivoDescricao(motivo) {
var v = safeTrim(motivo).toLowerCase();
if (v === &quot;aumento&quot;) return &quot;Aumento de quadro&quot;;
if (v === &quot;substituicao&quot;) return &quot;Substituição&quot;;
if (v === &quot;temporario&quot;) return &quot;Temporário&quot;;
return v === &quot;&quot; ? &quot;Não informado&quot; : v;
}
function getKitDescricao(kit) {
var v = safeTrim(kit).toLowerCase();
if (v === &quot;backoffice&quot;) return &quot;Kit Backoffice (Notebook, mouse, teclado e headset)&quot;;
if (v === &quot;amg&quot;) return &quot;Kit AMG (Notebook, kit mouse e teclado, headset e telefone corporativo)&quot;;
if (v === &quot;comercial&quot;) return &quot;Kit Comercial (Mobshop e Mobpin)&quot;;
return v === &quot;&quot; ? &quot;Não informado&quot; : v;
}
function formatDateBr(value) {
var v = safeTrim(value);
if (/^\d{4}-\d{2}-\d{2}$/.test(v)) {
return v.substring(8, 10) + &quot;/&quot; + v.substring(5, 7) + &quot;/&quot; + v.substring(0, 4);
}
return v;
}
function valueOrDefault(value) {
var v = safeTrim(value);
return v === &quot;&quot; ? &quot;Não informado&quot; : v;
}
function isValidEmail(email) {
var v = safeTrim(email);
if (v === &quot;&quot;) return false;
if (/\s/.test(v)) return false;
var at = v.indexOf(&quot;@&quot;);
if (at &lt;= 0 || at !== v.lastIndexOf(&quot;@&quot;)) return false;
var dot = v.lastIndexOf(&quot;.&quot;);
return dot &gt; at + 1 &amp;&amp; dot &lt; (v.length - 1);
}
function safeTrim(value) {
return String(value == null ? &quot;&quot; : value).trim();
}
</eventDescription>
</WorkflowProcessEvent>
<WorkflowProcessEvent>
<workflowProcessEventPK>
<companyId>1</companyId>
<eventId>onNotify</eventId>
<processId>Recrutamento e seleção</processId>
<version>1</version>
</workflowProcessEventPK>
<eventDescription>function onNotify(subject, receivers, template, params) {&#xd;
&#xd;
log.info(&quot;===== onNotify GLOBAL ===== Template: &quot; + template);&#xd;
&#xd;
var validos = new java.util.ArrayList();&#xd;
&#xd;
for (var i = 0; i &lt; receivers.size(); i++) {&#xd;
&#xd;
var email = receivers.get(i);&#xd;
&#xd;
log.info(&quot;Receiver original: [&quot; + email + &quot;]&quot;);&#xd;
&#xd;
if (email &amp;&amp; email.indexOf(&quot;@&quot;) &gt; 0 &amp;&amp; email.indexOf(&quot;.&quot;) &gt; 0) {&#xd;
validos.add(email);&#xd;
} else {&#xd;
log.warn(&quot;REMOVIDO EMAIL INVALIDO: [&quot; + email + &quot;] TEMPLATE: &quot; + template);&#xd;
}&#xd;
}&#xd;
&#xd;
receivers.clear();&#xd;
&#xd;
for (var j = 0; j &lt; validos.size(); j++) {&#xd;
receivers.add(validos.get(j));&#xd;
}&#xd;
&#xd;
log.info(&quot;TOTAL FINAL RECEIVERS: &quot; + receivers.size());&#xd;
}</eventDescription>
</WorkflowProcessEvent>
</list>
<list/>
<list>
<SwimLane>
@@ -1089,7 +1323,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>5</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1100,7 +1334,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>5</linkSequence>
<bendSequence>2</bendSequence>
</processLinkBendPK>
@@ -1111,7 +1345,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>7</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1122,7 +1356,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>110</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1133,7 +1367,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>115</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1144,7 +1378,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>117</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1155,7 +1389,7 @@
<processLinkBendPK>
<companyId>1</companyId>
<processId>Recrutamento e seleção</processId>
<version>31</version>
<version>34</version>
<linkSequence>120</linkSequence>
<bendSequence>1</bendSequence>
</processLinkBendPK>
@@ -1300,7 +1534,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>4</stateSequence>
<appKey>approval</appKey>
<appField>title</appField>
@@ -1310,7 +1544,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>4</stateSequence>
<appKey>approval</appKey>
<appField>highlight</appField>
@@ -1320,7 +1554,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>4</stateSequence>
<appKey>approval</appKey>
<appField>approve</appField>
@@ -1330,7 +1564,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>4</stateSequence>
<appKey>approval</appKey>
<appField>reject</appField>
@@ -1340,7 +1574,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>6</stateSequence>
<appKey>approval</appKey>
<appField>title</appField>
@@ -1350,7 +1584,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>6</stateSequence>
<appKey>approval</appKey>
<appField>highlight</appField>
@@ -1360,7 +1594,7 @@
<id>0</id>
<tenantId>0</tenantId>
<processId>Recrutamento e seleção</processId>
<processVersion>31</processVersion>
<processVersion>34</processVersion>
<stateSequence>6</stateSequence>
<appKey>approval</appKey>
<appField>reject</appField>