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
+69 -7
View File
@@ -11,6 +11,9 @@ function createDataset(fields, constraints, sortFields) {
var pagesize = 100;
var page = 1;
var total = null;
var termoBusca = getSearchTerm(constraints);
var limiteLinhas = getLimit(constraints, 200);
var linhasAdicionadas = 0;
try {
var clientService = fluigAPI.getAuthorizeClientService();
@@ -59,12 +62,18 @@ function createDataset(fields, constraints, sortFields) {
if (total === null && obj.total != null) total = Number(obj.total);
for (var i = 0; i < funcoes.length; i++) {
dataset.addRow([
funcoes[i].RJ_DESC || "",
funcoes[i].RJ_CODCBO || "" // ou RJ_CBO se for o campo desejado
]);
var descricao = String(funcoes[i].RJ_DESC || "");
var cbo = String(funcoes[i].RJ_CODCBO || "");
if (matchSearch(termoBusca, descricao, cbo)) {
dataset.addRow([descricao, cbo]);
linhasAdicionadas++;
if (linhasAdicionadas >= limiteLinhas) break;
}
}
if (linhasAdicionadas >= limiteLinhas) break;
// condição de parada segura
if (funcoes.length < pagesize) break;
@@ -76,9 +85,62 @@ function createDataset(fields, constraints, sortFields) {
} catch (e) {
dataset = DatasetBuilder.newDataset();
dataset.addColumn("ERRO");
dataset.addRow([String(e)]);
dataset.addColumn("DESCRICAO");
dataset.addColumn("CBO");
dataset.addRow(["ERRO AO CARREGAR FUNCOES: " + String(e), ""]);
}
return dataset;
}
}
function getSearchTerm(constraints) {
if (!constraints || constraints.length === 0) return "";
var searchField = "";
var searchValue = "";
var term = "";
for (var i = 0; i < constraints.length; i++) {
var c = constraints[i];
var field = String(c.getFieldName ? c.getFieldName() : c.fieldName || "").toLowerCase();
var value = String(c.getInitialValue ? c.getInitialValue() : c.initialValue || "");
if (field === "searchfield") {
searchField = String(value).toLowerCase();
} else if (field === "searchvalue") {
searchValue = value;
} else if (field === "descricao" || field === "rj_desc" || field === "cbo" || field === "rj_codcbo") {
term = value;
}
}
if (searchValue !== "") return searchValue;
if (searchField !== "" && term !== "") return term;
return term;
}
function getLimit(constraints, defaultValue) {
if (!constraints || constraints.length === 0) return defaultValue;
for (var i = 0; i < constraints.length; i++) {
var c = constraints[i];
var field = String(c.getFieldName ? c.getFieldName() : c.fieldName || "").toLowerCase();
var value = String(c.getInitialValue ? c.getInitialValue() : c.initialValue || "");
if (field === "sqllimit" || field === "limit") {
var n = parseInt(value, 10);
if (!isNaN(n) && n > 0) return n;
}
}
return defaultValue;
}
function matchSearch(term, descricao, cbo) {
var t = String(term || "").toLowerCase().trim();
if (t === "") return true;
var desc = String(descricao || "").toLowerCase();
var cod = String(cbo || "").toLowerCase();
return desc.indexOf(t) >= 0 || cod.indexOf(t) >= 0;
}
@@ -9,11 +9,6 @@
<script src="/style-guide/js/fluig-style-guide.min.js"></script>
<script type="text/javascript" src="/webdesk/vcXMLRPC.js"></script>
<script type="text/javascript" src="script.js"></script>
<link
href="/webdesk/customresources?cid=4&resourceName=temaFormulario/0.css"
type="text/css"
rel="stylesheet"
/>
<link
rel="stylesheet"
type="text/css"
@@ -0,0 +1,47 @@
<div style="font-family: Arial, sans-serif; background-color:#f4f6f8; padding:20px;">
<div style="max-width:600px; margin:auto; background:#ffffff; border-radius:8px; overflow:hidden; box-shadow:0 2px 8px rgba(0,0,0,0.1);">
<div style="background:#0a6d8d; padding:15px; text-align:center; color:#ffffff;">
<h2 style="margin:0;">Recrutamento e Seleção</h2>
<p style="margin:0; font-size:13px;">Notificação de Processo</p>
</div>
<div style="padding:25px; color:#333;">
<h3 style="margin-top:0; color:#0a6d8d;">Data de início definida</h3>
<p>Olá,</p>
<p>O colaborador <b>${colaboradorNome}</b> do processo <b>${WKNumProces}</b> para o cargo <b>${cargo}</b> vai iniciar no dia <b>${dataInicio}</b>.</p>
<p>O kit que ele vai utilizar é: <b>${kitUtilizado}</b>.</p>
<div style="background:#f1f5f9; padding:15px; border-radius:6px; margin:20px 0;">
<p style="margin:5px 0;"><b>Nº Solicitação:</b> ${WKNumProces}</p>
<p style="margin:5px 0;"><b>Colaborador:</b> ${colaboradorNome}</p>
<p style="margin:5px 0;"><b>Cargo/Função:</b> ${cargo}</p>
<p style="margin:5px 0;"><b>Data de início:</b> ${dataInicio}</p>
<p style="margin:5px 0;"><b>Kit:</b> ${kitUtilizado}</p>
</div>
<p>Clique no botão abaixo para acessar o processo:</p>
<div style="text-align:center; margin:25px 0;">
<a href="${linkSolicitacao}"
target="_blank"
style="display:inline-block; background:#0a6d8d; color:#ffffff; padding:12px 20px; text-decoration:none; border-radius:5px; font-weight:bold;">
Acessar Solicitação
</a>
</div>
<p style="font-size:12px; color:#888; margin-top:-10px;">
Se o botão não abrir, copie e cole este link no navegador:<br/>
<span>${linkSolicitacao}</span>
</p>
<p style="font-size:13px; color:#777;">
Este é um e-mail automático, não responda.
</p>
</div>
<div style="background:#f1f5f9; text-align:center; padding:10px; font-size:12px; color:#777;">
© Ginseng
</div>
</div>
</div>
@@ -0,0 +1,47 @@
<div style="font-family: Arial, sans-serif; background-color:#f4f6f8; padding:20px;">
<div style="max-width:600px; margin:auto; background:#ffffff; border-radius:8px; overflow:hidden; box-shadow:0 2px 8px rgba(0,0,0,0.1);">
<div style="background:#0a6d8d; padding:15px; text-align:center; color:#ffffff;">
<h2 style="margin:0;">Recrutamento e Seleção</h2>
<p style="margin:0; font-size:13px;">Notificação de Processo</p>
</div>
<div style="padding:25px; color:#333;">
<h3 style="margin-top:0; color:#0a6d8d;">Nova solicitação enviada</h3>
<p>Olá,</p>
<p>Uma nova solicitação de recrutamento foi enviada para análise.</p>
<div style="background:#f1f5f9; padding:15px; border-radius:6px; margin:20px 0;">
<p style="margin:5px 0;"><b>Nº Solicitação:</b> ${WKNumProces}</p>
<p style="margin:5px 0;"><b>Solicitante:</b> ${requesterName}</p>
<p style="margin:5px 0;"><b>Gestor:</b> ${gestorNome}</p>
<p style="margin:5px 0;"><b>Data:</b> ${dataAbertura}</p>
<p style="margin:5px 0;"><b>Cargo/Função:</b> ${cargo}</p>
<p style="margin:5px 0;"><b>Kit:</b> ${kitUtilizado}</p>
</div>
<p>Clique no botão abaixo para acessar o processo:</p>
<div style="text-align:center; margin:25px 0;">
<a href="${linkSolicitacao}"
target="_blank"
style="display:inline-block; background:#0a6d8d; color:#ffffff; padding:12px 20px; text-decoration:none; border-radius:5px; font-weight:bold;">
Acessar Solicitação
</a>
</div>
<p style="font-size:12px; color:#888; margin-top:-10px;">
Se o botão não abrir, copie e cole este link no navegador:<br/>
<span>${linkSolicitacao}</span>
</p>
<p style="font-size:13px; color:#777;">
Este é um e-mail automático, não responda.
</p>
</div>
<div style="background:#f1f5f9; text-align:center; padding:10px; font-size:12px; color:#777;">
© Ginseng
</div>
</div>
</div>
@@ -9,6 +9,501 @@
</void>
</array>
</void>
<void method="put">
<string>mecanismoGrupo</string>
<object class="java.util.ArrayList">
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Tecnologia e Comunicação</string>
</void>
<void property="groupId">
<string>TIC</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Compras Indiretos</string>
</void>
<void property="groupId">
<string>ComprasIndiretos</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Obras e manutenção</string>
</void>
<void property="groupId">
<string>Manutencao</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Aprovadores Compras Nvl 3</string>
</void>
<void property="groupId">
<string>AprovadoresComprasNvl3</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Motoristas</string>
</void>
<void property="groupId">
<string>Motoristas</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Requisitantes de Vaga</string>
</void>
<void property="groupId">
<string>Requisitantesdevaga</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Recrutamento</string>
</void>
<void property="groupId">
<string>Recrutamento</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>TODOS-TODOS-DIADMISSAO</string>
</void>
<void property="groupId">
<string>TODOS-TODOS-DIADMISSAO</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ResponsavelDesligamento</string>
</void>
<void property="groupId">
<string>ResponsavelDesligamento</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>GENTE &amp; CULTURA</string>
</void>
<void property="groupId">
<string>GENTE_CULTURA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>LOJA AL</string>
</void>
<void property="groupId">
<string>LOJA_AL</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>CD</string>
</void>
<void property="groupId">
<string>CD</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ESPAÇO DO REVENDEDOR AL</string>
</void>
<void property="groupId">
<string>ESPACO_DO_REVENDEDOR_AL</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>FINANCEIRO</string>
</void>
<void property="groupId">
<string>FINANCEIRO</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>OPERAÇÕES</string>
</void>
<void property="groupId">
<string>OPERACOES</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>AMG AL</string>
</void>
<void property="groupId">
<string>AMG_AL</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>REGIONAL ALAGOAS</string>
</void>
<void property="groupId">
<string>REGIONAL_ALAGOAS</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>PREVENÇÃO DE PERDA</string>
</void>
<void property="groupId">
<string>PREVENCAO_DE_PERDA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>MARKETING, TREINAMENTO</string>
</void>
<void property="groupId">
<string>MARKETING_TREINAMENTO</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>SECRETARIA EXECUTIVA</string>
</void>
<void property="groupId">
<string>SECRETARIA_EXECUTIVA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>DIRETORIA EXECUTIVA</string>
</void>
<void property="groupId">
<string>DIRETORIA_EXECUTIVA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>INFRAESTRUTURA</string>
</void>
<void property="groupId">
<string>INFRAESTRUTURA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ESPAÇO DO REVENDEDOR BA</string>
</void>
<void property="groupId">
<string>ESPACO_DO_REVENDEDOR_BA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>BUSINESS INTELLIGENCE</string>
</void>
<void property="groupId">
<string>BUSINESS_INTELLIGENCE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>DEPARTAMENTO PESSOAL</string>
</void>
<void property="groupId">
<string>DEPARTAMENTO_PESSOAL</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>LOJA BA</string>
</void>
<void property="groupId">
<string>LOJA_BA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>TREINAMENTO</string>
</void>
<void property="groupId">
<string>TREINAMENTO</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>AMG BA</string>
</void>
<void property="groupId">
<string>AMG_BA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>MARKETING</string>
</void>
<void property="groupId">
<string>MARKETING</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>COMPRAS</string>
</void>
<void property="groupId">
<string>COMPRAS</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>AMG SE</string>
</void>
<void property="groupId">
<string>AMG_SE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>LOJA SE</string>
</void>
<void property="groupId">
<string>LOJA_SE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ESPAÇO DO REVENDEDOR SE</string>
</void>
<void property="groupId">
<string>ESPACO_DO_REVENDEDOR_SE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>VENDAS IN COMPANY</string>
</void>
<void property="groupId">
<string>VENDAS_IN_COMPANY</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>REGIONAL BAHIA</string>
</void>
<void property="groupId">
<string>REGIONAL_BAHIA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>CANAL LOJA 01</string>
</void>
<void property="groupId">
<string>CANAL_LOJA_01</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>AUDITORIA</string>
</void>
<void property="groupId">
<string>AUDITORIA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>CANAL LOJA 02</string>
</void>
<void property="groupId">
<string>CANAL_LOJA_02</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>PLANEJAMENTO DE DEMANDAS</string>
</void>
<void property="groupId">
<string>PLANEJAMENTO_DE_DEMANDAS</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>PROJETOS</string>
</void>
<void property="groupId">
<string>PROJETOS</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>COMPLIANCE</string>
</void>
<void property="groupId">
<string>COMPLIANCE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ESCRITÓRIO - MATRIZ</string>
</void>
<void property="groupId">
<string>ESCRITORIO_MATRIZ</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>ESCRITÓRIO - CONQUISTA</string>
</void>
<void property="groupId">
<string>ESCRITORIO_CONQUISTA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>REGIONAL SERGIPE</string>
</void>
<void property="groupId">
<string>REGIONAL_SERGIPE</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Transferencia</string>
</void>
<void property="groupId">
<string>Transferencia</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Fiscal</string>
</void>
<void property="groupId">
<string>Fiscal</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>motoristaAL</string>
</void>
<void property="groupId">
<string>motoristaAL</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>motoristaBA</string>
</void>
<void property="groupId">
<string>motoristaBA</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>motoristaSE</string>
</void>
<void property="groupId">
<string>motoristaSE</string>
</void>
</object>
</void>
</object>
</void>
<void method="put">
<string>expediente</string>
<array class="java.lang.String" length="4">
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 44 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

@@ -2969,7 +2969,7 @@
<bpmn2:BpmnGateway condition="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;1&lt;/order&gt;&#10; &lt;expression&gt;hAPI.getCardValue(&amp;quot;validarMotivo&amp;quot;) == &amp;quot;substituicao&amp;quot;&lt;/expression&gt;&#10; &lt;targetTask&gt;task18&lt;/targetTask&gt;&#10; &lt;mechanism&gt;Campo Formul&#225;rio&lt;/mechanism&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;mecanismoAtribuicaoConfiguracao class=&quot;org.eclipse.bpmn2.impl.AssignmentControllerFormField&quot;&gt;&#10; &lt;formField&gt;gestor_cc&lt;/formField&gt;&#10; &lt;mechanismName&gt;Campo Formul&#225;rio&lt;/mechanismName&gt;&#10; &lt;/mecanismoAtribuicaoConfiguracao&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;2&lt;/order&gt;&#10; &lt;expression&gt;hAPI.getCardValue(&amp;quot;validarMotivo&amp;quot;) == &amp;quot;temporario&amp;quot;&lt;/expression&gt;&#10; &lt;targetTask&gt;task18&lt;/targetTask&gt;&#10; &lt;mechanism&gt;Campo Formul&#225;rio&lt;/mechanism&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;mecanismoAtribuicaoConfiguracao class=&quot;org.eclipse.bpmn2.impl.AssignmentControllerFormField&quot;&gt;&#10; &lt;formField&gt;gestor_cc&lt;/formField&gt;&#10; &lt;mechanismName&gt;Campo Formul&#225;rio&lt;/mechanismName&gt;&#10; &lt;/mecanismoAtribuicaoConfiguracao&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;3&lt;/order&gt;&#10; &lt;expression&gt;hAPI.getCardValue(&amp;quot;validarMotivo&amp;quot;) == &amp;quot;aumento&amp;quot;&lt;/expression&gt;&#10; &lt;targetTask&gt;task24&lt;/targetTask&gt;&#10; &lt;mechanism&gt;Pool Grupo&lt;/mechanism&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;mecanismoAtribuicaoConfiguracao class=&quot;org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup&quot;&gt;&#10; &lt;groupId&gt;TIC&lt;/groupId&gt;&#10; &lt;mechanismName&gt;Pool Grupo&lt;/mechanismName&gt;&#10; &lt;/mecanismoAtribuicaoConfiguracao&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10;&lt;/list&gt;" extendedFields="&lt;list/&gt;" id="exclusivegateway46" incoming="flow122" name="ValidarEquipamentos" outgoing="flow110 flow120" type="120"/>
<bpmn2:BpmnEndEvent extendedFields="&lt;list/&gt;" id="endcancel55" incoming="flow117" name="Cancelado" notificaRequisitante="true" signalId="0" type="65"/>
<bpmn2:BpmnTask authNotify="true" esforcoCalculo="0" executionAttempts="0" expediente="" extendedFields="&lt;list/&gt;" frequency="0" id="task57" incoming="flow118" loopType="0" managerAssignmentControllerString="&lt;org.eclipse.bpmn2.impl.AssignmentControllerFormField&gt;&#10; &lt;formField&gt;gestor_cc&lt;/formField&gt;&#10; &lt;mechanismName&gt;Campo Formul&#225;rio&lt;/mechanismName&gt;&#10;&lt;/org.eclipse.bpmn2.impl.AssignmentControllerFormField&gt;" managerMechanism="Campo Formul&#225;rio" name="Feedback do gestor" outgoing="flow119" prazoConclusao="4320.0" selecionaColaboradores="1" type="80"/>
<bpmn2:BpmnProcess author="" cardIndex="823" category="Recrutamento e Sele&#231;&#227;o" complementsLevel="1" deadlineTime="36000.0" descriptorFields="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;centroCusto&lt;/id&gt;&#10; &lt;label&gt;centroCusto&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;consideracoesCompras&lt;/id&gt;&#10; &lt;label&gt;consideracoesCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;dataAbertura&lt;/id&gt;&#10; &lt;label&gt;dataAbertura&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterId&lt;/id&gt;&#10; &lt;label&gt;requesterId&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterMail&lt;/id&gt;&#10; &lt;label&gt;requesterMail&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterName&lt;/id&gt;&#10; &lt;label&gt;requesterName&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userCotacaoGestor&lt;/id&gt;&#10; &lt;label&gt;userCotacaoGestor&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userRealizacaoCompras&lt;/id&gt;&#10; &lt;label&gt;userRealizacaoCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoCompras&lt;/id&gt;&#10; &lt;label&gt;userValidacaoCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoGestor&lt;/id&gt;&#10; &lt;label&gt;userValidacaoGestor&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoItens&lt;/id&gt;&#10; &lt;label&gt;userValidacaoItens&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;validacaoItens&lt;/id&gt;&#10; &lt;label&gt;validacaoItens&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;valorTotalsemformat&lt;/id&gt;&#10; &lt;label&gt;valorTotalsemformat&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;WKNumProces&lt;/id&gt;&#10; &lt;label&gt;WKNumProces&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10;&lt;/list&gt;" expedient="Expediente BackOffice, Log&#237;stica e Motorista" extendedFields="&lt;list/&gt;" formSource="server" id="Recrutamento e sele&#231;&#227;o" instruction="Este flow permite abertura de solicita&#231;&#227;o de contrata&#231;&#227;o automatizadas, informando qual a fun&#231;&#227;o e direcionado para as aprova&#231;&#245;es corretas." keyWord="" managerAssignmentController="&lt;org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;&#10; &lt;groupId&gt;Recrutamento&lt;/groupId&gt;&#10; &lt;mechanismName&gt;Grupo&lt;/mechanismName&gt;&#10;&lt;/org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;" managerMechanism="Grupo" mobileReady="true" name="Recrutamento e sele&#231;&#227;o" notifyRequisitionerComplements="true" notifyResponsibleComplements="true" serverId="Ginseng Produ&#231;&#227;o" version="31" volume="Default"/>
<bpmn2:BpmnProcess author="" cardIndex="823" category="Recrutamento e Sele&#231;&#227;o" complementsLevel="1" deadlineTime="36000.0" descriptorFields="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;centroCusto&lt;/id&gt;&#10; &lt;label&gt;centroCusto&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;consideracoesCompras&lt;/id&gt;&#10; &lt;label&gt;consideracoesCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;dataAbertura&lt;/id&gt;&#10; &lt;label&gt;dataAbertura&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterId&lt;/id&gt;&#10; &lt;label&gt;requesterId&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterMail&lt;/id&gt;&#10; &lt;label&gt;requesterMail&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;requesterName&lt;/id&gt;&#10; &lt;label&gt;requesterName&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userCotacaoGestor&lt;/id&gt;&#10; &lt;label&gt;userCotacaoGestor&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userRealizacaoCompras&lt;/id&gt;&#10; &lt;label&gt;userRealizacaoCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoCompras&lt;/id&gt;&#10; &lt;label&gt;userValidacaoCompras&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoGestor&lt;/id&gt;&#10; &lt;label&gt;userValidacaoGestor&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;userValidacaoItens&lt;/id&gt;&#10; &lt;label&gt;userValidacaoItens&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;validacaoItens&lt;/id&gt;&#10; &lt;label&gt;validacaoItens&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;valorTotalsemformat&lt;/id&gt;&#10; &lt;label&gt;valorTotalsemformat&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;WKNumProces&lt;/id&gt;&#10; &lt;label&gt;WKNumProces&lt;/label&gt;&#10; &lt;cardIndex&gt;823 - recrutamento&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10;&lt;/list&gt;" expedient="Expediente BackOffice, Log&#237;stica e Motorista" extendedFields="&lt;list/&gt;" formSource="server" id="Recrutamento e sele&#231;&#227;o" instruction="Este flow permite abertura de solicita&#231;&#227;o de contrata&#231;&#227;o automatizadas, informando qual a fun&#231;&#227;o e direcionado para as aprova&#231;&#245;es corretas." keyWord="" managerAssignmentController="&lt;org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;&#10; &lt;groupId&gt;Recrutamento&lt;/groupId&gt;&#10; &lt;mechanismName&gt;Grupo&lt;/mechanismName&gt;&#10;&lt;/org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;" managerMechanism="Grupo" mobileReady="true" name="Recrutamento e sele&#231;&#227;o" notifyRequisitionerComplements="true" notifyResponsibleComplements="true" serverId="Ginseng Produ&#231;&#227;o" version="34" volume="Default"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow3" name="" sourceRef="startevent1" targetRef="exclusivegateway2"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow5" movementAccessLinkDescription="" movementDescription="" movementTitle="" name="Gestor Identificado" sourceRef="exclusivegateway2" targetRef="task4"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow7" name="Sem Gestor" sourceRef="exclusivegateway2" targetRef="task6"/>
@@ -0,0 +1,189 @@
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
try {
var currentState = parseInt(String(getValue("WKNumState") || "0"), 10);
var nextState = parseInt(String(nextSequenceId || "0"), 10);
var completeTask = String(getValue("WKCompletTask") || "false");
log.info("[Recrutamento.beforeTaskSave] currentState=" + currentState + ", nextState=" + nextState + ", completeTask=" + completeTask);
if (completeTask !== "true") 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 && nextState === 46) {
enviarNotificacaoInicioColaborador();
}
} catch (e) {
log.error("[Recrutamento.beforeTaskSave] Erro ao disparar notificação: " + e);
}
}
function enviarNotificacaoSolicitacao() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var params = new java.util.HashMap();
params.put("WKNumProces", envio.processNumber);
params.put("linkSolicitacao", envio.processLink);
params.put("link", envio.processLink);
params.put("requesterName", valueOrDefault(hAPI.getCardValue("requesterName")));
params.put("gestorNome", valueOrDefault(hAPI.getCardValue("gestorNome")));
params.put("dataAbertura", valueOrDefault(hAPI.getCardValue("dataAbertura")));
params.put("cargo", valueOrDefault(hAPI.getCardValue("funcao")));
params.put("kitUtilizado", getKitDescricao(hAPI.getCardValue("itensinicio")));
params.put("motivoSolicitacao", getMotivoDescricao(hAPI.getCardValue("validarMotivo")));
params.put("justificativa", valueOrDefault(hAPI.getCardValue("justificativa")));
notifier.notify("admin", "tpl_recrutamento_realizada_dia", params, envio.destinatarios, "text/html");
log.info("[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada_dia enviado. processo=" + envio.processNumber + ", destinos=" + envio.destinosLog);
}
function enviarNotificacaoInicioColaborador() {
var envio = montarContextoEnvio();
if (!envio.ok) return;
var dataInicio = safeTrim(hAPI.getCardValue("datainiciotrabalho"));
if (dataInicio === "") {
log.warn("[Recrutamento.beforeTaskSave] Data de início vazia. Notificação de início não enviada.");
return;
}
var params = new java.util.HashMap();
params.put("WKNumProces", envio.processNumber);
params.put("linkSolicitacao", envio.processLink);
params.put("link", envio.processLink);
params.put("colaboradorNome", valueOrDefault(hAPI.getCardValue("nomedocandidato")));
params.put("cargo", valueOrDefault(hAPI.getCardValue("funcao")));
params.put("dataInicio", formatDateBr(dataInicio));
params.put("kitUtilizado", getKitDescricao(hAPI.getCardValue("itensinicio")));
notifier.notify("admin", "tpl_recrutamento_realizada", params, envio.destinatarios, "text/html");
log.info("[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada enviado. processo=" + envio.processNumber + ", destinos=" + envio.destinosLog);
}
function montarContextoEnvio() {
var destinatarios = new java.util.ArrayList();
var jaAdicionados = {};
addEmail(destinatarios, jaAdicionados, "tic@grupoginseng.com.br");
var requesterId = safeTrim(hAPI.getCardValue("requesterId"));
if (requesterId !== "") {
addEmail(destinatarios, jaAdicionados, resolveEmailByColleagueId(requesterId));
}
if (destinatarios.isEmpty()) {
log.warn("[Recrutamento.beforeTaskSave] Nenhum e-mail válido encontrado para notificação.");
return { ok: false };
}
var processNumber = safeTrim(getValue("WKNumProces"));
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 === "") 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("[Recrutamento.beforeTaskSave] Falha ao buscar e-mail por colleagueId: " + e);
}
return "";
}
function buildProcessLink(processNumber) {
var baseUrl = safeTrim(getValue("WKServerURL"));
var companyId = safeTrim(getValue("WKCompany"));
if (baseUrl === "" || processNumber === "") return "";
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";
return baseUrl + "/portal/p/" + companyId + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + processNumber;
}
function getMotivoDescricao(motivo) {
var v = safeTrim(motivo).toLowerCase();
if (v === "aumento") return "Aumento de quadro";
if (v === "substituicao") return "Substituição";
if (v === "temporario") return "Temporário";
return v === "" ? "Não informado" : v;
}
function getKitDescricao(kit) {
var v = safeTrim(kit).toLowerCase();
if (v === "backoffice") return "Kit Backoffice (Notebook, mouse, teclado e headset)";
if (v === "amg") return "Kit AMG (Notebook, kit mouse e teclado, headset e telefone corporativo)";
if (v === "comercial") return "Kit Comercial (Mobshop e Mobpin)";
return v === "" ? "Não informado" : v;
}
function formatDateBr(value) {
var v = safeTrim(value);
if (/^\d{4}-\d{2}-\d{2}$/.test(v)) {
return v.substring(8, 10) + "/" + v.substring(5, 7) + "/" + v.substring(0, 4);
}
return v;
}
function valueOrDefault(value) {
var v = safeTrim(value);
return v === "" ? "Não informado" : v;
}
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();
}
@@ -0,0 +1,27 @@
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());
}