att
This commit is contained in:
parent
9ec8d6e70b
commit
328de3abd2
10213
.vscode/.advpl/_binary_class.prw
vendored
Normal file
10213
.vscode/.advpl/_binary_class.prw
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9808
.vscode/.advpl/_binary_functions.prw
vendored
Normal file
9808
.vscode/.advpl/_binary_functions.prw
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8
Desligamento/.claude/settings.json
Normal file
8
Desligamento/.claude/settings.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"PowerShell(head -40)",
|
||||
"Read(//c/Python/Fluig Ginseng/fluig/**)"
|
||||
]
|
||||
}
|
||||
}
|
||||
14
Desligamento/.claude/settings.local.json
Normal file
14
Desligamento/.claude/settings.local.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentoranking\\\\src\\\\main\\\\resources\")",
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentoranking\\\\src\\\\main\\\\webapp\\\\resources\\\\css\")",
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentoranking\\\\src\\\\main\\\\webapp\\\\resources\\\\js\")",
|
||||
"PowerShell(\"OK\")",
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentokpis\\\\src\\\\main\\\\resources\")",
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentokpis\\\\src\\\\main\\\\webapp\\\\resources\\\\css\")",
|
||||
"PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\wcm\\\\widget\\\\wddesligamentokpis\\\\src\\\\main\\\\webapp\\\\resources\\\\js\")",
|
||||
"Bash(Get-ChildItem -Path \"c:\\\\Python\\\\Fluig Ginseng\\\\fluig\\\\Desligamento\\\\\" -Recurse -File | Select-Object FullName | head -30)"
|
||||
]
|
||||
}
|
||||
}
|
||||
13
Desligamento/.settings/org.eclipse.core.resources.prefs
Normal file
13
Desligamento/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,13 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/application.info=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/edit.ftl=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/view.ftl=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/wddesligamento.properties=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/wddesligamento_en_US.properties=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/wddesligamento_es.properties=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/resources/wddesligamento_pt_BR.properties=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/webapp/WEB-INF/jboss-web.xml=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/webapp/WEB-INF/web.xml=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/webapp/resources/css/wddesligamento.css=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/webapp/resources/images/icon.png=utf8
|
||||
encoding//wcm/widget/wddesligamento/src/main/webapp/resources/js/wddesligamento.js=utf8
|
||||
18
Desligamento/.vscode/servers.json
vendored
Normal file
18
Desligamento/.vscode/servers.json
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"configurations": [
|
||||
{
|
||||
"id": "61t70sum327mpg6yr6z93yvtvrgjmw",
|
||||
"name": "Ginseng Produção",
|
||||
"host": "comerciode188006.fluig.cloudtotvs.com.br",
|
||||
"ssl": true,
|
||||
"port": 443,
|
||||
"username": "andrey.cunha",
|
||||
"password": "eyJpdiI6ImYyNDVmMTM5YTUwNTQxY2UzOTJjMWI1MGUwNTk2Mzk5Iiwic2FsdCI6IjQ0MjY1MDk1OTczYzA1YTM3ZTU1M2VkOTk0YzAzZDg4IiwidGV4dCI6ImJkMmE4YWIwMjFhODQ5NmZjMGQ3ODg0NzI3N2JlNmJmIn0=",
|
||||
"userCode": "andrey.cunha",
|
||||
"confirmExporting": false,
|
||||
"hasBrowser": false,
|
||||
"companyId": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -14,23 +14,12 @@ function displayFields(form, customHTML) {
|
||||
var fields = new Array("colleagueName", "mail");
|
||||
var retorno = DatasetFactory.getDataset("colleague", fields, filter, null);
|
||||
|
||||
//requester
|
||||
form.setValue("currentUserName", retorno.getValue(0, "colleagueName"));
|
||||
form.setValue("currentUsermail", retorno.getValue(0, "mail"));
|
||||
form.setValue("currentUserId", userId);
|
||||
|
||||
// Grava dados do solicitante apenas na abertura — preserva o valor nas etapas seguintes
|
||||
if (activity == 0 || activity == 4) {
|
||||
form.setValue("requesterName", retorno.getValue(0, "colleagueName"));
|
||||
form.setValue("currentUsermail", retorno.getValue(0, "mail"));
|
||||
form.setValue("currentUserId", userId);
|
||||
} else {
|
||||
form.setValue("currentUserName", retorno.getValue(0, "colleagueName"));
|
||||
form.setValue("currentUsermail", retorno.getValue(0, "mail"));
|
||||
form.setValue("currentUserId", userId);
|
||||
}
|
||||
|
||||
//requester
|
||||
if (activity == 5 || activity == 24) {
|
||||
form.setValue("requesterName", retorno.getValue(0, "colleagueName"));
|
||||
form.setValue("requesterMail", retorno.getValue(0, "mail"));
|
||||
form.setValue("requesterId", userId);
|
||||
} else {
|
||||
form.setValue("requesterName", retorno.getValue(0, "colleagueName"));
|
||||
form.setValue("requesterMail", retorno.getValue(0, "mail"));
|
||||
form.setValue("requesterId", userId);
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
application.type=widget
|
||||
application.code=wddesligamento
|
||||
application.title=wddesligamento
|
||||
application.description=wddesligamento
|
||||
application.fluig.version=null
|
||||
application.category=Desligamento
|
||||
application.renderer=freemarker
|
||||
developer.code=Andrey
|
||||
developer.name=Andrey
|
||||
developer.url=http://www.fluig.com
|
||||
application.uiwidget=true
|
||||
application.mobileapp=false
|
||||
application.version=${build.version}-${build.revision}
|
||||
view.file=view.ftl
|
||||
edit.file=edit.ftl
|
||||
locale.file.base.name=wddesligamento
|
||||
application.resource.js.1=/resources/js/wddesligamento.js
|
||||
application.resource.css.2=/resources/css/wddesligamento.css
|
||||
hash=4a16315e9e66fa7d797b3f6b1fb365b69f9a4ce2
|
||||
@ -0,0 +1,4 @@
|
||||
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide" data-params="MyWidget.instance()">
|
||||
|
||||
</div>
|
||||
|
||||
@ -0,0 +1,115 @@
|
||||
<script src="/webdesk/vcXMLRPC.js"></script>
|
||||
|
||||
<div id="MyWidget_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide wd-dashboard" data-params="MyWidget.instance({ instanceId: '${instanceId}' })">
|
||||
<div class="wd-dashboard__shell">
|
||||
|
||||
<div class="wd-dashboard__header">
|
||||
<div class="wd-dashboard__title-group">
|
||||
<p class="wd-dashboard__eyebrow">Gestão do Desligamento</p>
|
||||
<h2 class="wd-dashboard__title">Solicitações de Desligamento</h2>
|
||||
</div>
|
||||
<div class="wd-dashboard__actions">
|
||||
<div class="wd-view-toggle" role="group" aria-label="Tipo de visualização">
|
||||
<button type="button" class="wd-view-btn wd-view-btn--active" data-view="list" title="Lista">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="currentColor" aria-hidden="true"><rect y="0" width="13" height="2" rx="1"/><rect y="4" width="13" height="2" rx="1"/><rect y="8" width="13" height="2" rx="1"/><rect y="11" width="9" height="2" rx="1"/></svg>
|
||||
Lista
|
||||
</button>
|
||||
<button type="button" class="wd-view-btn" data-view="kanban" title="Kanban">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="currentColor" aria-hidden="true"><rect x="0" y="0" width="3" height="13" rx="1"/><rect x="5" y="0" width="3" height="9" rx="1"/><rect x="10" y="0" width="3" height="11" rx="1"/></svg>
|
||||
Kanban
|
||||
</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-default wd-dashboard__button" data-refresh-dashboard>
|
||||
<span class="fluigicon fluigicon-refresh icon-sm" aria-hidden="true"></span> Atualizar
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wd-dashboard__metrics">
|
||||
<div class="wd-metric" data-filter-status="all" title="Ver todos">
|
||||
<div class="wd-metric__icon">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="2" width="12" height="16" rx="2"/><line x1="7" y1="7" x2="13" y2="7"/><line x1="7" y1="10" x2="13" y2="10"/><line x1="7" y1="13" x2="11" y2="13"/></svg>
|
||||
</div>
|
||||
<div class="wd-metric__body">
|
||||
<span class="wd-metric__label">Total</span>
|
||||
<strong class="wd-metric__value" data-metric-total>—</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wd-metric wd-metric--progress" data-filter-status="progress" title="Filtrar: Em andamento">
|
||||
<div class="wd-metric__icon">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="10" cy="10" r="7"/><polyline points="10,6 10,10 13,12"/></svg>
|
||||
</div>
|
||||
<div class="wd-metric__body">
|
||||
<span class="wd-metric__label">Em andamento</span>
|
||||
<strong class="wd-metric__value" data-metric-progress>—</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wd-metric wd-metric--attention" data-filter-status="attention" title="Filtrar: Atenção">
|
||||
<div class="wd-metric__icon">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M10 3L2 17h16L10 3z"/><line x1="10" y1="9" x2="10" y2="13"/><circle cx="10" cy="15.5" r="0.6" fill="currentColor"/></svg>
|
||||
</div>
|
||||
<div class="wd-metric__body">
|
||||
<span class="wd-metric__label">Atenção</span>
|
||||
<strong class="wd-metric__value" data-metric-attention>—</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wd-metric wd-metric--done" data-filter-status="done" title="Filtrar: Finalizadas">
|
||||
<div class="wd-metric__icon">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><circle cx="10" cy="10" r="7"/><polyline points="7,10 9,12 13,8"/></svg>
|
||||
</div>
|
||||
<div class="wd-metric__body">
|
||||
<span class="wd-metric__label">Finalizadas</span>
|
||||
<strong class="wd-metric__value" data-metric-done>—</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wd-op-indicators" data-op-indicators style="display:none"></div>
|
||||
|
||||
<div class="wd-dashboard__filters">
|
||||
<div class="wd-search">
|
||||
<span class="fluigicon fluigicon-search icon-sm" aria-hidden="true"></span>
|
||||
<input type="text" class="form-control" placeholder="Buscar por colaborador, gestor, nº da solicitação, etapa…" data-dashboard-search>
|
||||
</div>
|
||||
<select class="form-control wd-filter" data-dashboard-status>
|
||||
<option value="all">Todos os status</option>
|
||||
<option value="progress">Em andamento</option>
|
||||
<option value="attention">Atenção</option>
|
||||
<option value="done">Finalizadas</option>
|
||||
<option value="canceled">Canceladas</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="wd-dashboard__state wd-dashboard__state--loading" data-dashboard-loading>
|
||||
<span class="wd-spinner" aria-hidden="true"></span>
|
||||
Carregando solicitações…
|
||||
</div>
|
||||
<div class="wd-dashboard__state wd-dashboard__state--empty" data-dashboard-empty style="display:none">
|
||||
Nenhuma solicitação encontrada para os filtros atuais.
|
||||
</div>
|
||||
<div class="wd-dashboard__state wd-dashboard__state--error" data-dashboard-error style="display:none"></div>
|
||||
|
||||
<div class="wd-dashboard__list" data-dashboard-list></div>
|
||||
<div class="wd-pagination" data-dashboard-pagination></div>
|
||||
<div class="wd-kanban" data-dashboard-kanban style="display:none"></div>
|
||||
<div class="wd-pagination" data-dashboard-kanban-pagination style="display:none"></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="WdDrawer_${instanceId}" class="wd-drawer" data-drawer>
|
||||
<div class="wd-drawer__overlay" data-drawer-close></div>
|
||||
<div class="wd-drawer__panel">
|
||||
<div class="wd-drawer__header">
|
||||
<div>
|
||||
<span class="wd-drawer__num" data-drawer-num></span>
|
||||
<h3 class="wd-drawer__name" data-drawer-name></h3>
|
||||
<p class="wd-drawer__sub" data-drawer-role></p>
|
||||
</div>
|
||||
<button type="button" class="wd-drawer__close" data-drawer-close aria-label="Fechar painel">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4.293 4.293a1 1 0 011.414 0L8 6.586l2.293-2.293a1 1 0 111.414 1.414L9.414 8l2.293 2.293a1 1 0 01-1.414 1.414L8 9.414l-2.293 2.293a1 1 0 01-1.414-1.414L6.586 8 4.293 5.707a1 1 0 010-1.414z"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="wd-drawer__body" data-drawer-content></div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jboss-web>
|
||||
<context-root>/wddesligamento</context-root>
|
||||
<disable-cross-context>false</disable-cross-context>
|
||||
</jboss-web>
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||
version="3.0">
|
||||
<session-config>
|
||||
<session-timeout>
|
||||
30
|
||||
</session-timeout>
|
||||
</session-config>
|
||||
</web-app>
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 7.7 KiB |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@
|
||||
application.type=widget
|
||||
application.code=wddesligamentokpis
|
||||
application.title=wddesligamentokpis
|
||||
application.description=wddesligamentokpis
|
||||
application.fluig.version=null
|
||||
application.category=Desligamento
|
||||
application.renderer=freemarker
|
||||
developer.code=Andrey
|
||||
developer.name=Andrey
|
||||
developer.url=http://www.fluig.com
|
||||
application.uiwidget=true
|
||||
application.mobileapp=false
|
||||
application.version=${build.version}-${build.revision}
|
||||
view.file=view.ftl
|
||||
locale.file.base.name=wddesligamentokpis
|
||||
application.resource.js.1=/resources/js/wddesligamentokpis.js
|
||||
application.resource.css.2=/resources/css/wddesligamentokpis.css
|
||||
@ -0,0 +1,117 @@
|
||||
<script src="/webdesk/vcXMLRPC.js"></script>
|
||||
|
||||
<div id="WdKpis_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide wdk-widget" data-params="WdKpisWidget.instance({ instanceId: '${instanceId}' })">
|
||||
<div class="wdk-shell">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="wdk-header">
|
||||
<div>
|
||||
<p class="wdk-eyebrow">Análise de Desligamentos</p>
|
||||
<h2 class="wdk-title">KPIs por Tipo e Departamento</h2>
|
||||
</div>
|
||||
<div class="wdk-actions">
|
||||
<div class="wdk-period-toggle" role="group">
|
||||
<button type="button" class="wdk-period-btn wdk-period-btn--active" data-period="all">Todos</button>
|
||||
<button type="button" class="wdk-period-btn" data-period="year">Este ano</button>
|
||||
<button type="button" class="wdk-period-btn" data-period="month">Este mês</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-default wdk-refresh-btn" data-refresh>
|
||||
<span class="fluigicon fluigicon-refresh icon-sm" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Summary KPIs -->
|
||||
<div class="wdk-summary" data-summary>
|
||||
<div class="wdk-summary__card">
|
||||
<span class="wdk-summary__label">Total</span>
|
||||
<strong class="wdk-summary__value" data-kpi-total>—</strong>
|
||||
</div>
|
||||
<div class="wdk-summary__card wdk-summary__card--blue">
|
||||
<span class="wdk-summary__label">Exp. probatória</span>
|
||||
<strong class="wdk-summary__value" data-kpi-tipo-experiencia>—</strong>
|
||||
<span class="wdk-summary__pct" data-kpi-tipo-experiencia-pct></span>
|
||||
</div>
|
||||
<div class="wdk-summary__card wdk-summary__card--amber">
|
||||
<span class="wdk-summary__label">Baixo desempenho</span>
|
||||
<strong class="wdk-summary__value" data-kpi-tipo-desempenho>—</strong>
|
||||
<span class="wdk-summary__pct" data-kpi-tipo-desempenho-pct></span>
|
||||
</div>
|
||||
<div class="wdk-summary__card wdk-summary__card--purple">
|
||||
<span class="wdk-summary__label">Substituição</span>
|
||||
<strong class="wdk-summary__value" data-kpi-tipo-substituicao>—</strong>
|
||||
<span class="wdk-summary__pct" data-kpi-tipo-substituicao-pct></span>
|
||||
</div>
|
||||
<div class="wdk-summary__card wdk-summary__card--gray">
|
||||
<span class="wdk-summary__label">Outros tipos</span>
|
||||
<strong class="wdk-summary__value" data-kpi-tipo-outros>—</strong>
|
||||
<span class="wdk-summary__pct" data-kpi-tipo-outros-pct></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- States -->
|
||||
<div class="wdk-state wdk-state--loading" data-loading>
|
||||
<span class="wdk-spinner" aria-hidden="true"></span>
|
||||
Carregando dados…
|
||||
</div>
|
||||
<div class="wdk-state wdk-state--empty" data-empty style="display:none">
|
||||
Nenhum dado encontrado para o período selecionado.
|
||||
</div>
|
||||
<div class="wdk-state wdk-state--error" data-error style="display:none"></div>
|
||||
|
||||
<!-- Breakdowns -->
|
||||
<div class="wdk-breakdowns" data-breakdowns style="display:none">
|
||||
<div class="wdk-panel">
|
||||
<div class="wdk-panel__header">
|
||||
<span class="wdk-panel__title">Por Tipo de Desligamento</span>
|
||||
<span class="wdk-panel__badge" data-tipo-total></span>
|
||||
</div>
|
||||
<div class="wdk-bars" data-tipo-bars></div>
|
||||
</div>
|
||||
<div class="wdk-panel">
|
||||
<div class="wdk-panel__header">
|
||||
<span class="wdk-panel__title">Por Departamento</span>
|
||||
<span class="wdk-panel__badge" data-dept-total></span>
|
||||
</div>
|
||||
<div class="wdk-bars" data-dept-bars></div>
|
||||
</div>
|
||||
<div class="wdk-panel wdk-panel--full">
|
||||
<div class="wdk-panel__header">
|
||||
<span class="wdk-panel__title">Por Função do Colaborador</span>
|
||||
<span class="wdk-panel__badge" data-cargo-total></span>
|
||||
</div>
|
||||
<div class="wdk-bars wdk-bars--grid" data-cargo-bars></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Drill-down panel -->
|
||||
<div class="wdk-drilldown" data-drilldown style="display:none">
|
||||
<div class="wdk-drilldown__header">
|
||||
<button type="button" class="wdk-drilldown__back" data-drill-back>← Voltar</button>
|
||||
<div class="wdk-drilldown__meta">
|
||||
<span class="wdk-drilldown__title" data-drill-title></span>
|
||||
<span class="wdk-panel__badge" data-drill-count></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wdk-drill-list" data-drill-list></div>
|
||||
</div>
|
||||
|
||||
<!-- Detail card modal -->
|
||||
<div class="wdk-detail-overlay" data-detail-modal style="display:none">
|
||||
<div class="wdk-detail-card">
|
||||
<div class="wdk-detail-card__header">
|
||||
<strong data-detail-num></strong>
|
||||
<button type="button" class="wdk-detail-card__close" data-detail-close>✕</button>
|
||||
</div>
|
||||
<dl class="wdk-detail-dl">
|
||||
<dt>Colaborador</dt> <dd data-detail-employee></dd>
|
||||
<dt>Departamento</dt> <dd data-detail-dept></dd>
|
||||
<dt>Tipo</dt> <dd data-detail-tipo></dd>
|
||||
<dt>Abertura</dt> <dd data-detail-date></dd>
|
||||
<dt>Gestor</dt> <dd data-detail-requester></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1 @@
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jboss-web>
|
||||
<context-root>/wddesligamentokpis</context-root>
|
||||
<disable-cross-context>false</disable-cross-context>
|
||||
</jboss-web>
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||
version="3.0">
|
||||
<session-config>
|
||||
<session-timeout>
|
||||
30
|
||||
</session-timeout>
|
||||
</session-config>
|
||||
</web-app>
|
||||
@ -0,0 +1,494 @@
|
||||
/* ================================================================
|
||||
wddesligamentokpis.css — KPIs por Tipo e Departamento
|
||||
================================================================ */
|
||||
|
||||
.wdk-widget {
|
||||
color: #0f172a;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
||||
}
|
||||
|
||||
.wdk-widget * { box-sizing: border-box; }
|
||||
|
||||
.wdk-shell {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 12px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* ── Header ───────────────────────────────────────────────────── */
|
||||
.wdk-header {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.wdk-eyebrow {
|
||||
color: #64748b;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
margin: 0 0 2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.wdk-title {
|
||||
color: #0f172a;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.wdk-actions {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.wdk-refresh-btn {
|
||||
align-items: center;
|
||||
display: inline-flex;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
/* ── Period toggle ────────────────────────────────────────────── */
|
||||
.wdk-period-toggle {
|
||||
background: #e2e8f0;
|
||||
border-radius: 8px;
|
||||
display: inline-flex;
|
||||
gap: 2px;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.wdk-period-btn {
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
color: #64748b;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
transition: background 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
.wdk-period-btn--active {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||
color: #1e40af;
|
||||
}
|
||||
|
||||
/* ── Summary KPI cards ────────────────────────────────────────── */
|
||||
.wdk-summary {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.wdk-summary__card {
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
border-top: 3px solid #e2e8f0;
|
||||
padding: 12px 14px;
|
||||
transition: box-shadow 0.15s;
|
||||
}
|
||||
|
||||
.wdk-summary__card--blue { border-top-color: #3b82f6; }
|
||||
.wdk-summary__card--amber { border-top-color: #f59e0b; }
|
||||
.wdk-summary__card--purple { border-top-color: #8b5cf6; }
|
||||
.wdk-summary__card--gray { border-top-color: #94a3b8; }
|
||||
|
||||
.wdk-summary__label {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
margin-bottom: 4px;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.wdk-summary__value {
|
||||
color: #0f172a;
|
||||
display: block;
|
||||
font-size: 32px;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.wdk-summary__card--blue .wdk-summary__value { color: #2563eb; }
|
||||
.wdk-summary__card--amber .wdk-summary__value { color: #d97706; }
|
||||
.wdk-summary__card--purple .wdk-summary__value { color: #7c3aed; }
|
||||
.wdk-summary__card--gray .wdk-summary__value { color: #64748b; }
|
||||
|
||||
.wdk-summary__pct {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ── States ───────────────────────────────────────────────────── */
|
||||
.wdk-state {
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
color: #64748b;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
margin-bottom: 0;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.wdk-state--error {
|
||||
background: #fff1f2;
|
||||
border-color: #fecdd3;
|
||||
color: #9f1239;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
@keyframes wdk-spin { to { transform: rotate(360deg); } }
|
||||
|
||||
.wdk-spinner {
|
||||
animation: wdk-spin 0.75s linear infinite;
|
||||
border: 2px solid #e2e8f0;
|
||||
border-radius: 50%;
|
||||
border-top-color: #2563eb;
|
||||
display: inline-block;
|
||||
flex: 0 0 auto;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
/* ── Two-column breakdowns ────────────────────────────────────── */
|
||||
.wdk-breakdowns {
|
||||
display: grid;
|
||||
gap: 12px;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.wdk-panel {
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* cargo panel spans full width of the 2-column grid */
|
||||
.wdk-panel--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
/* cargo bars in 2-column grid inside the panel */
|
||||
.wdk-bars--grid {
|
||||
column-count: 2;
|
||||
column-gap: 0;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.wdk-bars--grid .wdk-bar-row {
|
||||
break-inside: avoid;
|
||||
}
|
||||
|
||||
.wdk-panel__header {
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
justify-content: space-between;
|
||||
padding: 12px 16px;
|
||||
}
|
||||
|
||||
.wdk-panel__title {
|
||||
color: #334155;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.wdk-panel__badge {
|
||||
background: #f1f5f9;
|
||||
border-radius: 999px;
|
||||
color: #64748b;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
|
||||
/* ── Bar rows ─────────────────────────────────────────────────── */
|
||||
.wdk-bars {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.wdk-bar-row {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
padding: 7px 16px;
|
||||
transition: background 0.12s;
|
||||
}
|
||||
|
||||
.wdk-bar-row:hover {
|
||||
background: #f8fafc;
|
||||
}
|
||||
|
||||
.wdk-bar-row__label {
|
||||
color: #334155;
|
||||
flex: 0 0 auto;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.wdk-bar-row__track {
|
||||
background: #f1f5f9;
|
||||
border-radius: 999px;
|
||||
flex: 1 1 0;
|
||||
height: 8px;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.wdk-bar-row__fill {
|
||||
border-radius: 999px;
|
||||
height: 100%;
|
||||
transition: width 0.5s ease;
|
||||
}
|
||||
|
||||
.wdk-bar-row__count {
|
||||
color: #0f172a;
|
||||
flex: 0 0 auto;
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
min-width: 28px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wdk-bar-row__pct {
|
||||
color: #94a3b8;
|
||||
flex: 0 0 auto;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
min-width: 34px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Tipo colors */
|
||||
.wdk-fill--0 { background: #3b82f6; }
|
||||
.wdk-fill--1 { background: #f59e0b; }
|
||||
.wdk-fill--2 { background: #8b5cf6; }
|
||||
.wdk-fill--3 { background: #22c55e; }
|
||||
.wdk-fill--4 { background: #ef4444; }
|
||||
.wdk-fill--5 { background: #06b6d4; }
|
||||
.wdk-fill--6 { background: #f97316; }
|
||||
.wdk-fill--other { background: #94a3b8; }
|
||||
|
||||
/* Dept colors — gradient blue */
|
||||
.wdk-fill-dept {
|
||||
background: linear-gradient(90deg, #2563eb, #06b6d4);
|
||||
}
|
||||
|
||||
/* ── Responsive ───────────────────────────────────────────────── */
|
||||
@media (max-width: 900px) {
|
||||
.wdk-summary { grid-template-columns: repeat(3, 1fr); }
|
||||
.wdk-breakdowns { grid-template-columns: 1fr; }
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.wdk-summary { grid-template-columns: repeat(2, 1fr); }
|
||||
.wdk-bar-row__label { width: 110px; }
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.wdk-summary { grid-template-columns: 1fr 1fr; }
|
||||
}
|
||||
|
||||
/* ── Clickable bar rows ───────────────────────────────────────── */
|
||||
.wdk-bar-row--drill { cursor: pointer; }
|
||||
.wdk-bar-row--drill:hover { background: #eff6ff; }
|
||||
.wdk-bar-row--drill .wdk-bar-row__label { color: #1d4ed8; }
|
||||
|
||||
/* ── Drilldown panel ──────────────────────────────────────────── */
|
||||
.wdk-drilldown { padding: 4px 0; }
|
||||
|
||||
.wdk-drilldown__header {
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.wdk-drilldown__back {
|
||||
background: #ffffff;
|
||||
border: 1px solid #cbd5e1;
|
||||
border-radius: 6px;
|
||||
color: #475569;
|
||||
cursor: pointer;
|
||||
flex: 0 0 auto;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
padding: 4px 12px;
|
||||
transition: background 0.12s;
|
||||
}
|
||||
.wdk-drilldown__back:hover { background: #f8fafc; }
|
||||
|
||||
.wdk-drilldown__meta { align-items: center; display: flex; gap: 8px; }
|
||||
|
||||
.wdk-drilldown__title {
|
||||
color: #0f172a;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.wdk-drill-list {
|
||||
max-height: 340px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.wdk-drill-row {
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
padding: 8px 12px;
|
||||
transition: background 0.1s;
|
||||
}
|
||||
.wdk-drill-row:hover { background: #f8fafc; }
|
||||
|
||||
.wdk-drill-row__num {
|
||||
color: #64748b;
|
||||
flex: 0 0 68px;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.wdk-drill-row__info {
|
||||
display: flex;
|
||||
flex: 1 1 0;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.wdk-drill-row__employee {
|
||||
color: #0f172a;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdk-drill-row__dept {
|
||||
color: #64748b;
|
||||
font-size: 11px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdk-drill-row__date {
|
||||
color: #94a3b8;
|
||||
flex: 0 0 60px;
|
||||
font-size: 11px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wdk-drill-empty {
|
||||
color: #94a3b8;
|
||||
font-size: 13px;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ── Detail overlay + card ────────────────────────────────────── */
|
||||
.wdk-detail-overlay {
|
||||
align-items: center;
|
||||
background: rgba(15, 23, 42, 0.45);
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
left: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: 9500;
|
||||
}
|
||||
|
||||
.wdk-detail-card {
|
||||
background: #ffffff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.22);
|
||||
max-width: 440px;
|
||||
padding: 24px;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.wdk-detail-card__header {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.wdk-detail-card__header strong {
|
||||
color: #0f172a;
|
||||
font-size: 18px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.wdk-detail-card__close {
|
||||
background: none;
|
||||
border: none;
|
||||
color: #94a3b8;
|
||||
cursor: pointer;
|
||||
font-size: 18px;
|
||||
line-height: 1;
|
||||
padding: 4px;
|
||||
transition: color 0.12s;
|
||||
}
|
||||
.wdk-detail-card__close:hover { color: #475569; }
|
||||
|
||||
.wdk-detail-dl {
|
||||
display: grid;
|
||||
gap: 0 16px;
|
||||
grid-template-columns: auto 1fr;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.wdk-detail-dl dt {
|
||||
color: #94a3b8;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.05em;
|
||||
padding: 7px 0;
|
||||
text-transform: uppercase;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdk-detail-dl dd {
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
color: #0f172a;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
margin: 0;
|
||||
padding: 7px 0;
|
||||
}
|
||||
@ -0,0 +1,518 @@
|
||||
var WdKpisWidget = SuperWidget.extend({
|
||||
instanceId: null,
|
||||
|
||||
/* dataset names to try in order */
|
||||
datasetCandidates: [
|
||||
"desligamentoColaborador",
|
||||
"Desligamento",
|
||||
"desligamento"
|
||||
],
|
||||
|
||||
/* fields to request from dataset (null = all) */
|
||||
datasetFields: [
|
||||
"tipodesligamento",
|
||||
"departamento",
|
||||
"dataAbertura",
|
||||
"WKNumProces",
|
||||
"colabDesliga",
|
||||
"requesterName",
|
||||
"cargoColaborador"
|
||||
],
|
||||
|
||||
/* known tipo codes → display labels */
|
||||
tipoLabels: {
|
||||
"experiencia": "Exp. Probatória",
|
||||
"desempenho": "Baixo Desempenho",
|
||||
"substituicao": "Substituição",
|
||||
"voluntario": "Pedido do colaborador",
|
||||
"acordo": "Acordo",
|
||||
"outros": "Outros"
|
||||
},
|
||||
|
||||
/* summary card slot → tipo keys */
|
||||
summarySlots: {
|
||||
"experiencia": "[data-kpi-tipo-experiencia]",
|
||||
"desempenho": "[data-kpi-tipo-desempenho]",
|
||||
"substituicao": "[data-kpi-tipo-substituicao]"
|
||||
},
|
||||
|
||||
currentPeriod: "all",
|
||||
allRecords: [],
|
||||
drillFilter: null,
|
||||
|
||||
init: function() {
|
||||
this.$root = $("#WdKpis_" + this.instanceId);
|
||||
this.$loading = this.$root.find("[data-loading]");
|
||||
this.$empty = this.$root.find("[data-empty]");
|
||||
this.$error = this.$root.find("[data-error]");
|
||||
this.$breakdowns = this.$root.find("[data-breakdowns]");
|
||||
this.$tipoBars = this.$root.find("[data-tipo-bars]");
|
||||
this.$deptBars = this.$root.find("[data-dept-bars]");
|
||||
this.$cargoBars = this.$root.find("[data-cargo-bars]");
|
||||
this.$drilldown = this.$root.find("[data-drilldown]");
|
||||
this.$drillList = this.$root.find("[data-drill-list]");
|
||||
this.$detailModal = this.$root.find("[data-detail-modal]");
|
||||
|
||||
this.bindUi();
|
||||
this.loadData();
|
||||
},
|
||||
|
||||
bindings: { local: {}, global: {} },
|
||||
|
||||
bindUi: function() {
|
||||
var self = this;
|
||||
|
||||
this.$root.find("[data-refresh]").on("click", function() {
|
||||
self.loadData();
|
||||
});
|
||||
|
||||
this.$root.on("click", "[data-period]", function() {
|
||||
self.currentPeriod = $(this).data("period");
|
||||
self.$root.find("[data-period]").removeClass("wdk-period-btn--active");
|
||||
$(this).addClass("wdk-period-btn--active");
|
||||
self.drillFilter = null;
|
||||
self.render();
|
||||
});
|
||||
|
||||
/* bar click → drill-down */
|
||||
this.$root.on("click", "[data-drill]", function() {
|
||||
var $el = $(this);
|
||||
self.drillFilter = { field: $el.data("drill-field"), value: $el.data("drill-value") };
|
||||
self.renderDrilldown();
|
||||
});
|
||||
|
||||
/* back button */
|
||||
this.$root.on("click", "[data-drill-back]", function() {
|
||||
self.drillFilter = null;
|
||||
self.render();
|
||||
});
|
||||
|
||||
/* drill-list row → detail card */
|
||||
this.$root.on("click", "[data-drill-row]", function() {
|
||||
var idx = parseInt($(this).data("drill-row"), 10);
|
||||
var recs = self.getDrillRecords();
|
||||
if (recs[idx]) { self.showDetail(recs[idx]); }
|
||||
});
|
||||
|
||||
/* close detail modal */
|
||||
this.$root.on("click", "[data-detail-close]", function() {
|
||||
self.$detailModal.hide();
|
||||
});
|
||||
|
||||
$(document).on("keydown.wdKpisDetail_" + this.instanceId, function(e) {
|
||||
if (e.which === 27) { self.$detailModal.hide(); }
|
||||
});
|
||||
},
|
||||
|
||||
/* ── Data loading ─────────────────────────────────────────── */
|
||||
|
||||
loadData: function() {
|
||||
var self = this;
|
||||
this.showLoading();
|
||||
|
||||
$.ajax({
|
||||
url: "/api/public/ecm/dataset/search",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
datasetId: "desligamento",
|
||||
fields: self.datasetFields,
|
||||
constraints: [],
|
||||
order: [],
|
||||
size: 2000
|
||||
})
|
||||
})
|
||||
.done(function(res) {
|
||||
var rows = self.deduplicateByProcess(res.content || []);
|
||||
self.allRecords = rows.map(function(r) { return self.normalizeRecord(r); });
|
||||
self.render();
|
||||
})
|
||||
.fail(function() {
|
||||
/* fallback: process management API (sem campos do formulário) */
|
||||
self.fetchFromApi();
|
||||
});
|
||||
},
|
||||
|
||||
deduplicateByProcess: function(rows) {
|
||||
/* keep last row per WKNumProces — a versão mais recente tem os campos mais completos */
|
||||
var map = {};
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var proc = String(rows[i]["WKNumProces"] || rows[i]["processInstanceId"] || ("__idx_" + i));
|
||||
map[proc] = rows[i]; /* sobrescreve: última linha ganha */
|
||||
}
|
||||
var deduped = [];
|
||||
for (var k in map) {
|
||||
if (map.hasOwnProperty(k)) { deduped.push(map[k]); }
|
||||
}
|
||||
return deduped;
|
||||
},
|
||||
|
||||
normalizeRecord: function(row) {
|
||||
var tipo = this.readField(row, ["tipodesligamento", "tipo", "tipoDemissao", "dismissalType"]);
|
||||
var dept = this.readField(row, ["departamento", "department", "area", "setor"]);
|
||||
var dateStr = this.readField(row, ["dataAbertura", "startDate", "createDate", "WKCreateDate"]);
|
||||
var processNum = this.readField(row, ["WKNumProces", "processInstanceId"]);
|
||||
var employee = this.readField(row, ["colabDesliga", "colaborador", "employeeName"]);
|
||||
var requester = this.readField(row, ["requesterName", "solicitante", "requester"]);
|
||||
var cargo = this.readField(row, ["cargoColaborador", "cargo", "role", "position"]);
|
||||
|
||||
return {
|
||||
tipo: this.normalizeTipo(tipo),
|
||||
tipoRaw: String(tipo || "").toLowerCase().trim(),
|
||||
dept: String(dept || "Não informado").trim() || "Não informado",
|
||||
date: this.parseDate(dateStr),
|
||||
processNum: processNum,
|
||||
employee: employee || "Não informado",
|
||||
requester: requester || "—",
|
||||
cargo: String(cargo || "Não informado").trim() || "Não informado"
|
||||
};
|
||||
},
|
||||
|
||||
normalizeTipo: function(value) {
|
||||
if (!value) { return "Não informado"; }
|
||||
var key = String(value).toLowerCase()
|
||||
.replace(/[áàâã]/g, "a").replace(/[éèê]/g, "e")
|
||||
.replace(/[íìî]/g, "i").replace(/[óòôõ]/g, "o")
|
||||
.replace(/[úùû]/g, "u").replace(/ç/g, "c")
|
||||
.trim();
|
||||
|
||||
return this.tipoLabels[key] || String(value).trim() || "Outros";
|
||||
},
|
||||
|
||||
readField: function(row, keys) {
|
||||
if (!row) { return ""; }
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var v = row[keys[i]];
|
||||
if (v !== undefined && v !== null && String(v).trim() !== "") { return String(v).trim(); }
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
parseDate: function(value) {
|
||||
if (!value) { return null; }
|
||||
var s = String(value);
|
||||
|
||||
/* DD/MM/YYYY */
|
||||
var m1 = s.match(/^(\d{2})\/(\d{2})\/(\d{4})/);
|
||||
if (m1) { return new Date(+m1[3], +m1[2] - 1, +m1[1]); }
|
||||
|
||||
/* YYYY-MM-DD or ISO */
|
||||
var m2 = s.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
||||
if (m2) { return new Date(+m2[1], +m2[2] - 1, +m2[3]); }
|
||||
|
||||
var d = new Date(s);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
},
|
||||
|
||||
fetchFromApi: function() {
|
||||
var self = this;
|
||||
|
||||
$.ajax({
|
||||
url: "/process-management/api/v2/processes/desligamentoColaborador/requests?page=1&pageSize=1000",
|
||||
method: "GET",
|
||||
dataType: "json",
|
||||
headers: { Accept: "application/json" }
|
||||
})
|
||||
.done(function(response) {
|
||||
var rows = [];
|
||||
var data = response;
|
||||
var keys = ["content", "items", "requests", "data", "values"];
|
||||
for (var k = 0; k < keys.length; k++) {
|
||||
if ($.isArray(data[keys[k]])) { rows = data[keys[k]]; break; }
|
||||
}
|
||||
if ($.isArray(data)) { rows = data; }
|
||||
|
||||
self.allRecords = rows.map(function(r) { return self.normalizeRecord(r); });
|
||||
self.render();
|
||||
})
|
||||
.fail(function() {
|
||||
self.showError("Não foi possível carregar os dados. Verifique se o dataset está publicado com um dos nomes: " + self.datasetCandidates.join(", ") + ".");
|
||||
});
|
||||
},
|
||||
|
||||
/* ── Period filter ────────────────────────────────────────── */
|
||||
|
||||
filterByPeriod: function(records) {
|
||||
if (this.currentPeriod === "all") { return records; }
|
||||
|
||||
var now = new Date();
|
||||
var year = now.getFullYear();
|
||||
var month = now.getMonth();
|
||||
var period = this.currentPeriod;
|
||||
|
||||
return records.filter(function(r) {
|
||||
if (!r.date) { return true; }
|
||||
if (period === "year") { return r.date.getFullYear() === year; }
|
||||
if (period === "month") { return r.date.getFullYear() === year && r.date.getMonth() === month; }
|
||||
return true;
|
||||
});
|
||||
},
|
||||
|
||||
/* ── Render ───────────────────────────────────────────────── */
|
||||
|
||||
render: function() {
|
||||
this.$loading.hide();
|
||||
this.$error.hide();
|
||||
this.$drilldown.hide();
|
||||
this.$detailModal.hide();
|
||||
|
||||
if (this.drillFilter) { this.renderDrilldown(); return; }
|
||||
|
||||
var records = this.filterByPeriod(this.allRecords);
|
||||
var total = records.length;
|
||||
|
||||
if (!total) {
|
||||
this.$breakdowns.hide();
|
||||
this.$empty.show();
|
||||
this.clearSummary();
|
||||
return;
|
||||
}
|
||||
|
||||
this.$empty.hide();
|
||||
this.$breakdowns.show();
|
||||
|
||||
var tipoMap = this.groupBy(records, "tipo");
|
||||
var deptMap = this.groupBy(records, "dept");
|
||||
var cargoMap = this.groupBy(records, "cargo");
|
||||
|
||||
this.renderSummary(total, tipoMap);
|
||||
this.renderTipoBars(tipoMap, total);
|
||||
this.renderDeptBars(deptMap, total);
|
||||
this.renderCargoBars(cargoMap, total);
|
||||
},
|
||||
|
||||
groupBy: function(records, field) {
|
||||
var map = {};
|
||||
for (var i = 0; i < records.length; i++) {
|
||||
var key = records[i][field] || "Não informado";
|
||||
map[key] = (map[key] || 0) + 1;
|
||||
}
|
||||
/* sort desc */
|
||||
var sorted = [];
|
||||
for (var k in map) {
|
||||
if (map.hasOwnProperty(k)) { sorted.push({ label: k, count: map[k] }); }
|
||||
}
|
||||
sorted.sort(function(a, b) { return b.count - a.count; });
|
||||
return sorted;
|
||||
},
|
||||
|
||||
/* ── Summary cards ────────────────────────────────────────── */
|
||||
|
||||
clearSummary: function() {
|
||||
this.$root.find("[data-kpi-total]").text("—");
|
||||
this.$root.find("[data-kpi-tipo-experiencia]").text("—");
|
||||
this.$root.find("[data-kpi-tipo-desempenho]").text("—");
|
||||
this.$root.find("[data-kpi-tipo-substituicao]").text("—");
|
||||
this.$root.find("[data-kpi-tipo-outros]").text("—");
|
||||
this.$root.find("[data-kpi-tipo-experiencia-pct], [data-kpi-tipo-desempenho-pct], [data-kpi-tipo-substituicao-pct], [data-kpi-tipo-outros-pct]").text("");
|
||||
},
|
||||
|
||||
renderSummary: function(total, tipoArr) {
|
||||
this.$root.find("[data-kpi-total]").text(total);
|
||||
|
||||
/* map label → count */
|
||||
var byLabel = {};
|
||||
for (var i = 0; i < tipoArr.length; i++) {
|
||||
byLabel[tipoArr[i].label] = tipoArr[i].count;
|
||||
}
|
||||
|
||||
var slots = {
|
||||
"Exp. Probatória": { val: "[data-kpi-tipo-experiencia]", pct: "[data-kpi-tipo-experiencia-pct]" },
|
||||
"Baixo Desempenho": { val: "[data-kpi-tipo-desempenho]", pct: "[data-kpi-tipo-desempenho-pct]" },
|
||||
"Substituição": { val: "[data-kpi-tipo-substituicao]", pct: "[data-kpi-tipo-substituicao-pct]" }
|
||||
};
|
||||
|
||||
var slotKeys = Object.keys ? Object.keys(slots) : (function() { var k = []; for (var x in slots) { if (slots.hasOwnProperty(x)) k.push(x); } return k; })();
|
||||
var knownKeys = slotKeys.slice();
|
||||
|
||||
var outros = 0;
|
||||
for (var k in byLabel) {
|
||||
if (byLabel.hasOwnProperty(k)) {
|
||||
var isKnown = false;
|
||||
for (var j = 0; j < knownKeys.length; j++) { if (knownKeys[j] === k) { isKnown = true; break; } }
|
||||
if (!isKnown) { outros += byLabel[k]; }
|
||||
}
|
||||
}
|
||||
|
||||
for (var label in slots) {
|
||||
if (!slots.hasOwnProperty(label)) { continue; }
|
||||
var count = byLabel[label] || 0;
|
||||
var pct = total > 0 ? Math.round(count / total * 100) : 0;
|
||||
this.$root.find(slots[label].val).text(count);
|
||||
this.$root.find(slots[label].pct).text(count ? pct + "%" : "");
|
||||
}
|
||||
|
||||
this.$root.find("[data-kpi-tipo-outros]").text(outros);
|
||||
this.$root.find("[data-kpi-tipo-outros-pct]").text(outros && total ? Math.round(outros / total * 100) + "%" : "");
|
||||
},
|
||||
|
||||
/* ── Tipo bar chart ───────────────────────────────────────── */
|
||||
|
||||
renderTipoBars: function(tipoArr, total) {
|
||||
this.$root.find("[data-tipo-total]").text(tipoArr.length + " tipos");
|
||||
|
||||
if (!tipoArr.length) { this.$tipoBars.html(""); return; }
|
||||
|
||||
var maxCount = tipoArr[0].count;
|
||||
var html = "";
|
||||
|
||||
for (var i = 0; i < tipoArr.length; i++) {
|
||||
var item = tipoArr[i];
|
||||
var barPct = Math.round(item.count / maxCount * 100);
|
||||
var pct = Math.round(item.count / total * 100);
|
||||
var colorClass = "wdk-fill--" + Math.min(i, 6);
|
||||
|
||||
html += '<div class="wdk-bar-row wdk-bar-row--drill" data-drill data-drill-field="tipo" data-drill-value="' + this.escapeHtml(item.label) + '">';
|
||||
html += '<span class="wdk-bar-row__label" title="' + this.escapeHtml(item.label) + '">' + this.escapeHtml(item.label) + '</span>';
|
||||
html += '<div class="wdk-bar-row__track"><div class="wdk-bar-row__fill ' + colorClass + '" style="width:' + barPct + '%"></div></div>';
|
||||
html += '<span class="wdk-bar-row__count">' + item.count + '</span>';
|
||||
html += '<span class="wdk-bar-row__pct">' + pct + '%</span>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
this.$tipoBars.html(html);
|
||||
},
|
||||
|
||||
/* ── Dept bar chart ───────────────────────────────────────── */
|
||||
|
||||
renderDeptBars: function(deptArr, total) {
|
||||
this.$root.find("[data-dept-total]").text(deptArr.length + " depto" + (deptArr.length !== 1 ? "s" : ""));
|
||||
|
||||
if (!deptArr.length) { this.$deptBars.html(""); return; }
|
||||
|
||||
var maxCount = deptArr[0].count;
|
||||
/* show top 12 departments */
|
||||
var visible = deptArr.slice(0, 12);
|
||||
var html = "";
|
||||
|
||||
for (var i = 0; i < visible.length; i++) {
|
||||
var item = visible[i];
|
||||
var barPct = Math.round(item.count / maxCount * 100);
|
||||
var pct = Math.round(item.count / total * 100);
|
||||
|
||||
html += '<div class="wdk-bar-row wdk-bar-row--drill" data-drill data-drill-field="dept" data-drill-value="' + this.escapeHtml(item.label) + '">';
|
||||
html += '<span class="wdk-bar-row__label" title="' + this.escapeHtml(item.label) + '">' + this.escapeHtml(item.label) + '</span>';
|
||||
html += '<div class="wdk-bar-row__track"><div class="wdk-bar-row__fill wdk-fill-dept" style="width:' + barPct + '%"></div></div>';
|
||||
html += '<span class="wdk-bar-row__count">' + item.count + '</span>';
|
||||
html += '<span class="wdk-bar-row__pct">' + pct + '%</span>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
if (deptArr.length > 12) {
|
||||
var remaining = deptArr.length - 12;
|
||||
html += '<div class="wdk-bar-row" style="opacity:0.6"><span class="wdk-bar-row__label">+ ' + remaining + ' outros</span></div>';
|
||||
}
|
||||
|
||||
this.$deptBars.html(html);
|
||||
},
|
||||
|
||||
/* ── Cargo bar chart ──────────────────────────────────────── */
|
||||
|
||||
renderCargoBars: function(cargoArr, total) {
|
||||
this.$root.find("[data-cargo-total]").text(cargoArr.length + (cargoArr.length !== 1 ? " funções" : " função"));
|
||||
|
||||
if (!cargoArr.length) { this.$cargoBars.html(""); return; }
|
||||
|
||||
var maxCount = cargoArr[0].count;
|
||||
/* show top 15 functions */
|
||||
var visible = cargoArr.slice(0, 15);
|
||||
var html = "";
|
||||
|
||||
for (var i = 0; i < visible.length; i++) {
|
||||
var item = visible[i];
|
||||
var barPct = Math.round(item.count / maxCount * 100);
|
||||
var pct = Math.round(item.count / total * 100);
|
||||
var colorClass = "wdk-fill--" + Math.min(i, 6);
|
||||
|
||||
html += '<div class="wdk-bar-row wdk-bar-row--drill" data-drill data-drill-field="cargo" data-drill-value="' + this.escapeHtml(item.label) + '">';
|
||||
html += '<span class="wdk-bar-row__label" title="' + this.escapeHtml(item.label) + '">' + this.escapeHtml(item.label) + '</span>';
|
||||
html += '<div class="wdk-bar-row__track"><div class="wdk-bar-row__fill ' + colorClass + '" style="width:' + barPct + '%"></div></div>';
|
||||
html += '<span class="wdk-bar-row__count">' + item.count + '</span>';
|
||||
html += '<span class="wdk-bar-row__pct">' + pct + '%</span>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
if (cargoArr.length > 15) {
|
||||
var remaining = cargoArr.length - 15;
|
||||
html += '<div class="wdk-bar-row" style="opacity:0.6"><span class="wdk-bar-row__label">+ ' + remaining + ' outras</span></div>';
|
||||
}
|
||||
|
||||
this.$cargoBars.html(html);
|
||||
},
|
||||
|
||||
/* ── Drill-down ──────────────────────────────────────────── */
|
||||
|
||||
getDrillRecords: function() {
|
||||
var records = this.filterByPeriod(this.allRecords);
|
||||
var f = this.drillFilter;
|
||||
if (!f) { return records; }
|
||||
return records.filter(function(r) {
|
||||
return r[f.field] === f.value;
|
||||
});
|
||||
},
|
||||
|
||||
renderDrilldown: function() {
|
||||
this.$breakdowns.hide();
|
||||
this.$empty.hide();
|
||||
this.$drilldown.show();
|
||||
|
||||
var records = this.getDrillRecords();
|
||||
this.$root.find("[data-drill-title]").text(this.drillFilter.value);
|
||||
this.$root.find("[data-drill-count]").text(records.length + " processo" + (records.length !== 1 ? "s" : ""));
|
||||
|
||||
var html = "";
|
||||
for (var i = 0; i < records.length; i++) {
|
||||
var r = records[i];
|
||||
html += '<div class="wdk-drill-row" data-drill-row="' + i + '">';
|
||||
html += '<span class="wdk-drill-row__num">' + this.escapeHtml(r.processNum ? "#" + r.processNum : "—") + '</span>';
|
||||
html += '<div class="wdk-drill-row__info">';
|
||||
html += '<span class="wdk-drill-row__employee">' + this.escapeHtml(r.employee) + '</span>';
|
||||
html += '<span class="wdk-drill-row__dept">' + this.escapeHtml(r.dept) + '</span>';
|
||||
html += '</div>';
|
||||
html += '<span class="wdk-drill-row__date">' + (r.date ? this.formatDate(r.date) : "—") + '</span>';
|
||||
html += '</div>';
|
||||
}
|
||||
if (!html) { html = '<div class="wdk-drill-empty">Nenhum registro.</div>'; }
|
||||
this.$drillList.html(html);
|
||||
},
|
||||
|
||||
showDetail: function(record) {
|
||||
var m = this.$detailModal;
|
||||
m.find("[data-detail-num]").text(record.processNum ? "#" + record.processNum : "—");
|
||||
m.find("[data-detail-employee]").text(record.employee);
|
||||
m.find("[data-detail-dept]").text(record.dept);
|
||||
m.find("[data-detail-tipo]").text(record.tipo);
|
||||
m.find("[data-detail-date]").text(record.date ? this.formatDate(record.date) : "—");
|
||||
m.find("[data-detail-requester]").text(record.requester);
|
||||
m.show();
|
||||
},
|
||||
|
||||
formatDate: function(d) {
|
||||
if (!d) { return "—"; }
|
||||
return ("0" + d.getDate()).slice(-2) + "/" + ("0" + (d.getMonth() + 1)).slice(-2) + "/" + d.getFullYear();
|
||||
},
|
||||
|
||||
/* ── State helpers ────────────────────────────────────────── */
|
||||
|
||||
showLoading: function() {
|
||||
this.$error.hide();
|
||||
this.$empty.hide();
|
||||
this.$breakdowns.hide();
|
||||
this.$loading.show();
|
||||
},
|
||||
|
||||
showError: function(msg) {
|
||||
this.$loading.hide();
|
||||
this.$empty.hide();
|
||||
this.$error.text(msg || "Erro ao carregar dados.").show();
|
||||
},
|
||||
|
||||
escapeHtml: function(value) {
|
||||
return String(value === undefined || value === null ? "" : value)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,17 @@
|
||||
application.type=widget
|
||||
application.code=wddesligamentoranking
|
||||
application.title=wddesligamentoranking
|
||||
application.description=wddesligamentoranking
|
||||
application.fluig.version=null
|
||||
application.category=Desligamento
|
||||
application.renderer=freemarker
|
||||
developer.code=Andrey
|
||||
developer.name=Andrey
|
||||
developer.url=http://www.fluig.com
|
||||
application.uiwidget=true
|
||||
application.mobileapp=false
|
||||
application.version=${build.version}-${build.revision}
|
||||
view.file=view.ftl
|
||||
locale.file.base.name=wddesligamentoranking
|
||||
application.resource.js.1=/resources/js/wddesligamentoranking.js
|
||||
application.resource.css.2=/resources/css/wddesligamentoranking.css
|
||||
@ -0,0 +1,52 @@
|
||||
<script src="/webdesk/vcXMLRPC.js"></script>
|
||||
|
||||
<div id="WdRanking_${instanceId}" class="super-widget wcm-widget-class fluig-style-guide wdr-widget" data-params="WdRankingWidget.instance({ instanceId: '${instanceId}' })">
|
||||
<div class="wdr-shell">
|
||||
|
||||
<div class="wdr-header">
|
||||
<div>
|
||||
<p class="wdr-eyebrow">Gestão do Desligamento</p>
|
||||
<h2 class="wdr-title">Ranking de Solicitações</h2>
|
||||
</div>
|
||||
<div class="wdr-actions">
|
||||
<div class="wdr-period-toggle" role="group">
|
||||
<button type="button" class="wdr-period-btn wdr-period-btn--active" data-period="all">Todos</button>
|
||||
<button type="button" class="wdr-period-btn" data-period="year">Este ano</button>
|
||||
<button type="button" class="wdr-period-btn" data-period="month">Este mês</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-default wdr-refresh-btn" data-refresh>
|
||||
<span class="fluigicon fluigicon-refresh icon-sm" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wdr-kpis" data-kpis>
|
||||
<div class="wdr-kpi">
|
||||
<span class="wdr-kpi__label">Solicitantes únicos</span>
|
||||
<strong class="wdr-kpi__value" data-kpi-requesters>—</strong>
|
||||
</div>
|
||||
<div class="wdr-kpi wdr-kpi--highlight">
|
||||
<span class="wdr-kpi__label">Maior volume</span>
|
||||
<strong class="wdr-kpi__value" data-kpi-top-name>—</strong>
|
||||
<span class="wdr-kpi__sub" data-kpi-top-count></span>
|
||||
</div>
|
||||
<div class="wdr-kpi">
|
||||
<span class="wdr-kpi__label">Total de processos</span>
|
||||
<strong class="wdr-kpi__value" data-kpi-total>—</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wdr-state wdr-state--loading" data-loading>
|
||||
<span class="wdr-spinner" aria-hidden="true"></span>
|
||||
Carregando dados…
|
||||
</div>
|
||||
<div class="wdr-state wdr-state--empty" data-empty style="display:none">
|
||||
Nenhum dado encontrado.
|
||||
</div>
|
||||
<div class="wdr-state wdr-state--error" data-error style="display:none"></div>
|
||||
|
||||
<div class="wdr-ranking" data-ranking></div>
|
||||
<div class="wdr-pagination" data-rank-pagination></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1 @@
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jboss-web>
|
||||
<context-root>/wddesligamentoranking</context-root>
|
||||
<disable-cross-context>false</disable-cross-context>
|
||||
</jboss-web>
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||
version="3.0">
|
||||
<session-config>
|
||||
<session-timeout>
|
||||
30
|
||||
</session-timeout>
|
||||
</session-config>
|
||||
</web-app>
|
||||
@ -0,0 +1,362 @@
|
||||
/* ================================================================
|
||||
wddesligamentoranking.css — Ranking de Solicitantes
|
||||
================================================================ */
|
||||
|
||||
.wdr-widget {
|
||||
color: #0f172a;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
||||
}
|
||||
|
||||
.wdr-widget * { box-sizing: border-box; }
|
||||
|
||||
.wdr-shell {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 12px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* ── Header ───────────────────────────────────────────────────── */
|
||||
.wdr-header {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.wdr-eyebrow {
|
||||
color: #64748b;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
margin: 0 0 2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.wdr-title {
|
||||
color: #0f172a;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
line-height: 1.2;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.wdr-actions {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.wdr-refresh-btn {
|
||||
align-items: center;
|
||||
display: inline-flex;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
/* ── Period toggle ────────────────────────────────────────────── */
|
||||
.wdr-period-toggle {
|
||||
background: #e2e8f0;
|
||||
border-radius: 8px;
|
||||
display: inline-flex;
|
||||
gap: 2px;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.wdr-period-btn {
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
color: #64748b;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
transition: background 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
.wdr-period-btn--active {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||
color: #1e40af;
|
||||
}
|
||||
|
||||
/* ── KPIs ─────────────────────────────────────────────────────── */
|
||||
.wdr-kpis {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.wdr-kpi {
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
padding: 12px 16px;
|
||||
}
|
||||
|
||||
.wdr-kpi--highlight {
|
||||
background: #eff6ff;
|
||||
border-color: #bfdbfe;
|
||||
}
|
||||
|
||||
.wdr-kpi__label {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
margin-bottom: 4px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.wdr-kpi__value {
|
||||
color: #0f172a;
|
||||
display: block;
|
||||
font-size: 22px;
|
||||
font-weight: 800;
|
||||
line-height: 1.1;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdr-kpi--highlight .wdr-kpi__value { color: #1d4ed8; font-size: 16px; }
|
||||
|
||||
.wdr-kpi__sub {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
/* ── State ────────────────────────────────────────────────────── */
|
||||
.wdr-state {
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
color: #64748b;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.wdr-state--error {
|
||||
background: #fff1f2;
|
||||
border-color: #fecdd3;
|
||||
color: #9f1239;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
@keyframes wdr-spin { to { transform: rotate(360deg); } }
|
||||
|
||||
.wdr-spinner {
|
||||
animation: wdr-spin 0.75s linear infinite;
|
||||
border: 2px solid #e2e8f0;
|
||||
border-radius: 50%;
|
||||
border-top-color: #2563eb;
|
||||
display: inline-block;
|
||||
flex: 0 0 auto;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
/* ── Ranking list ─────────────────────────────────────────────── */
|
||||
.wdr-ranking {
|
||||
display: grid;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.wdr-row {
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
padding: 10px 14px;
|
||||
transition: box-shadow 0.15s;
|
||||
}
|
||||
|
||||
.wdr-row:hover {
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
/* podium styling for top 3 */
|
||||
.wdr-row:nth-child(1) { border-left: 4px solid #f59e0b; }
|
||||
.wdr-row:nth-child(2) { border-left: 4px solid #94a3b8; }
|
||||
.wdr-row:nth-child(3) { border-left: 4px solid #b45309; }
|
||||
|
||||
.wdr-rank {
|
||||
align-items: center;
|
||||
border-radius: 6px;
|
||||
color: #64748b;
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
justify-content: center;
|
||||
width: 28px;
|
||||
}
|
||||
|
||||
.wdr-row:nth-child(1) .wdr-rank { color: #d97706; font-size: 16px; }
|
||||
.wdr-row:nth-child(2) .wdr-rank { color: #64748b; font-size: 15px; }
|
||||
.wdr-row:nth-child(3) .wdr-rank { color: #92400e; font-size: 14px; }
|
||||
|
||||
.wdr-avatar {
|
||||
align-items: center;
|
||||
background: #e2e8f0;
|
||||
border-radius: 50%;
|
||||
color: #475569;
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
height: 34px;
|
||||
justify-content: center;
|
||||
width: 34px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.wdr-row:nth-child(1) .wdr-avatar { background: #fef3c7; color: #b45309; }
|
||||
.wdr-row:nth-child(2) .wdr-avatar { background: #f1f5f9; color: #334155; }
|
||||
.wdr-row:nth-child(3) .wdr-avatar { background: #fef3c7; color: #78350f; }
|
||||
|
||||
.wdr-info {
|
||||
flex: 1 1 0;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.wdr-name {
|
||||
color: #0f172a;
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdr-dept {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdr-bar-wrap {
|
||||
flex: 0 0 160px;
|
||||
}
|
||||
|
||||
.wdr-bar-track {
|
||||
background: #f1f5f9;
|
||||
border-radius: 999px;
|
||||
height: 6px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.wdr-bar-fill {
|
||||
background: linear-gradient(90deg, #3b82f6, #06b6d4);
|
||||
border-radius: 999px;
|
||||
height: 100%;
|
||||
transition: width 0.5s ease;
|
||||
}
|
||||
|
||||
.wdr-row:nth-child(1) .wdr-bar-fill { background: linear-gradient(90deg, #f59e0b, #ef4444); }
|
||||
|
||||
.wdr-count {
|
||||
color: #0f172a;
|
||||
flex: 0 0 auto;
|
||||
font-size: 18px;
|
||||
font-weight: 800;
|
||||
min-width: 32px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wdr-count small {
|
||||
color: #64748b;
|
||||
display: block;
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Breakdown badges */
|
||||
.wdr-breakdown {
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.wdr-badge {
|
||||
border-radius: 5px;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
padding: 2px 6px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wdr-badge--progress { background: #dbeafe; color: #1d4ed8; }
|
||||
.wdr-badge--attention { background: #fef3c7; color: #92400e; }
|
||||
.wdr-badge--done { background: #dcfce7; color: #15803d; }
|
||||
.wdr-badge--canceled { background: #fee2e2; color: #991b1b; }
|
||||
|
||||
/* ── Responsive ───────────────────────────────────────────────── */
|
||||
@media (max-width: 768px) {
|
||||
.wdr-kpis { grid-template-columns: repeat(2, 1fr); }
|
||||
.wdr-bar-wrap { display: none; }
|
||||
.wdr-breakdown { display: none; }
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.wdr-kpis { grid-template-columns: 1fr; }
|
||||
.wdr-header { flex-wrap: wrap; }
|
||||
}
|
||||
|
||||
/* ── Pagination ───────────────────────────────────────────────── */
|
||||
.wdr-pagination { margin-top: 4px; }
|
||||
|
||||
.wdr-pag {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: center;
|
||||
padding: 8px 0 2px;
|
||||
}
|
||||
|
||||
.wdr-pag__info {
|
||||
color: #94a3b8;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.wdr-pag__pages {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.wdr-pag__btn {
|
||||
background: #ffffff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 6px;
|
||||
color: #475569;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
height: 28px;
|
||||
min-width: 28px;
|
||||
padding: 0 6px;
|
||||
transition: background 0.12s, color 0.12s;
|
||||
}
|
||||
|
||||
.wdr-pag__btn:hover { background: #f8fafc; border-color: #94a3b8; }
|
||||
|
||||
.wdr-pag__btn--active {
|
||||
background: #2563eb;
|
||||
border-color: #2563eb;
|
||||
color: #ffffff;
|
||||
}
|
||||
@ -0,0 +1,393 @@
|
||||
var WdRankingWidget = SuperWidget.extend({
|
||||
instanceId: null,
|
||||
|
||||
processId: "desligamentoColaborador",
|
||||
requestPageSize: 1000,
|
||||
formDatasetCandidates: ["desligamentoColaborador", "Desligamento", "desligamento"],
|
||||
|
||||
currentPeriod: "all",
|
||||
pageSize: 5, currentPage: 1,
|
||||
allRequests: [],
|
||||
|
||||
init: function() {
|
||||
this.$root = $("#WdRanking_" + this.instanceId);
|
||||
this.$ranking = this.$root.find("[data-ranking]");
|
||||
this.$loading = this.$root.find("[data-loading]");
|
||||
this.$empty = this.$root.find("[data-empty]");
|
||||
this.$error = this.$root.find("[data-error]");
|
||||
this.$pagination = this.$root.find("[data-rank-pagination]");
|
||||
|
||||
this.bindUi();
|
||||
this.loadData();
|
||||
},
|
||||
|
||||
bindings: { local: {}, global: {} },
|
||||
|
||||
bindUi: function() {
|
||||
var self = this;
|
||||
|
||||
this.$root.find("[data-refresh]").on("click", function() {
|
||||
self.loadData();
|
||||
});
|
||||
|
||||
this.$root.on("click", "[data-period]", function() {
|
||||
self.currentPeriod = $(this).data("period");
|
||||
self.$root.find("[data-period]").removeClass("wdr-period-btn--active");
|
||||
$(this).addClass("wdr-period-btn--active");
|
||||
self.render();
|
||||
});
|
||||
|
||||
this.$root.on("click", "[data-rank-page]", function() {
|
||||
self.currentPage = parseInt($(this).data("rank-page"), 10) || 1;
|
||||
self.render();
|
||||
});
|
||||
},
|
||||
|
||||
/* ── Data loading ─────────────────────────────────────────── */
|
||||
|
||||
loadData: function() {
|
||||
this.showLoading();
|
||||
this.loadFromProcessApi();
|
||||
},
|
||||
|
||||
loadFromProcessApi: function() {
|
||||
var self = this;
|
||||
|
||||
/* /requests/tasks returns one row per movement per process.
|
||||
Each row has requester (who opened) + assignee (who owns this step).
|
||||
We deduplicate by processInstanceId keeping the best representative task. */
|
||||
$.ajax({
|
||||
url: "/process-management/api/v2/processes/" + encodeURIComponent(this.processId) +
|
||||
"/requests/tasks?page=1&pageSize=2000",
|
||||
method: "GET",
|
||||
dataType: "json",
|
||||
headers: { Accept: "application/json" }
|
||||
})
|
||||
.done(function(response) {
|
||||
var tasks = self.extractRows(response);
|
||||
if (!tasks.length) { self.loadFromDatasets(); return; }
|
||||
|
||||
/* deduplicate: prefer NOT_COMPLETED task; within same status, prefer highest movementSequence */
|
||||
var byProcess = {};
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
var t = tasks[i];
|
||||
var pid = String(t.processInstanceId || "");
|
||||
if (!pid) { continue; }
|
||||
|
||||
var existing = byProcess[pid];
|
||||
var tSeq = t.movementSequence || 0;
|
||||
var tPending = t.status === "NOT_COMPLETED";
|
||||
|
||||
if (!existing) {
|
||||
byProcess[pid] = t;
|
||||
} else {
|
||||
var eSeq = existing.movementSequence || 0;
|
||||
var ePending = existing.status === "NOT_COMPLETED";
|
||||
if (tPending && !ePending) { byProcess[pid] = t; }
|
||||
else if (!tPending && ePending) { /* keep existing */ }
|
||||
else if (tSeq > eSeq) { byProcess[pid] = t; }
|
||||
}
|
||||
}
|
||||
|
||||
var rows = [];
|
||||
for (var k in byProcess) {
|
||||
if (byProcess.hasOwnProperty(k)) { rows.push(byProcess[k]); }
|
||||
}
|
||||
|
||||
self.allRequests = rows.map(function(r) { return self.buildRequest(r); });
|
||||
self.render();
|
||||
})
|
||||
.fail(function() { self.loadFromDatasets(); });
|
||||
},
|
||||
|
||||
loadFromDatasets: function() {
|
||||
var self = this;
|
||||
this.ensureDatasetFactory(function() {
|
||||
try {
|
||||
var candidates = self.formDatasetCandidates;
|
||||
var rows = [];
|
||||
for (var i = 0; i < candidates.length; i++) {
|
||||
try {
|
||||
var ds = DatasetFactory.getDataset(candidates[i], null, null, null);
|
||||
if (ds && ds.values && ds.values.length) {
|
||||
rows = ds.values;
|
||||
break;
|
||||
}
|
||||
} catch (e) { /* try next */ }
|
||||
}
|
||||
|
||||
self.allRequests = rows.map(function(r) { return self.buildRequest(r); });
|
||||
self.render();
|
||||
} catch (e) {
|
||||
self.showError("Não foi possível carregar os dados. " + e.message);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
ensureDatasetFactory: function(callback) {
|
||||
if (window.DatasetFactory) { callback(); return; }
|
||||
$.getScript("/webdesk/vcXMLRPC.js")
|
||||
.done(callback)
|
||||
.fail(function() { /* DatasetFactory unavailable */ });
|
||||
},
|
||||
|
||||
extractRows: function(response) {
|
||||
if (!response) { return []; }
|
||||
if ($.isArray(response)) { return response; }
|
||||
var keys = ["content", "items", "requests", "data", "values", "records"];
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var v = response[keys[i]];
|
||||
if ($.isArray(v)) { return v; }
|
||||
}
|
||||
return [];
|
||||
},
|
||||
|
||||
buildRequest: function(row) {
|
||||
/* /requests/tasks structure:
|
||||
row.requester = who OPENED the process (constant on every movement)
|
||||
row.assignee = who owns THIS task step (changes each movement)
|
||||
We always use requester for ranking attribution. */
|
||||
var name = "";
|
||||
|
||||
if (row.requester) {
|
||||
var rq = row.requester;
|
||||
if (typeof rq === "string") {
|
||||
name = rq;
|
||||
} else if (rq && typeof rq === "object") {
|
||||
name = rq.name || rq.colleagueName || rq.login || rq.code || "";
|
||||
}
|
||||
}
|
||||
|
||||
/* plain-field fallback (DatasetFactory / other API shapes) */
|
||||
if (!name) {
|
||||
name = this.readFirst(row, [
|
||||
"requesterName", "requesterId", "colleagueName", "solicitante", "WKCreatedBy"
|
||||
]);
|
||||
}
|
||||
|
||||
/* last resort: assignee, but skip pool/group entries */
|
||||
if (!name && row.assignee) {
|
||||
var ag = row.assignee;
|
||||
var agCode = String((ag && ag.code) || "");
|
||||
if (agCode.indexOf("Pool:") < 0 && agCode.indexOf("Group:") < 0) {
|
||||
name = (ag.name || ag.login || agCode) || "";
|
||||
}
|
||||
}
|
||||
|
||||
/* department: try form field, then requester.local */
|
||||
var dept = this.readFirst(row, ["departamento", "department", "area"]);
|
||||
if (!dept && row.requester && row.requester.local) { dept = row.requester.local; }
|
||||
|
||||
var status = this.resolveStatus(row);
|
||||
var startDateRaw = this.readFirst(row, ["startDate", "dataAbertura", "createDate", "createdAt"]);
|
||||
|
||||
return {
|
||||
requesterName: name || "Desconhecido",
|
||||
department: dept || "-",
|
||||
status: status,
|
||||
startDate: this.parseDate(startDateRaw)
|
||||
};
|
||||
},
|
||||
|
||||
resolveStatus: function(row) {
|
||||
/* /requests/tasks primary path */
|
||||
var taskStatus = String(row.status || "").toUpperCase();
|
||||
if (taskStatus === "NOT_COMPLETED") {
|
||||
var sla = String(row.slaStatus || "").toUpperCase();
|
||||
if (sla === "OVERDUE") { return "attention"; }
|
||||
return "progress";
|
||||
}
|
||||
if (taskStatus === "COMPLETED") { return "done"; }
|
||||
|
||||
/* form-field fallback (DatasetFactory / ECM dataset shape) */
|
||||
var approval = String(this.readFirst(row, ["DesligamentoAprov", "approval"]) || "").toLowerCase().trim();
|
||||
if (approval === "nao") { return "canceled"; }
|
||||
|
||||
var activeRaw = this.readFirst(row, ["active", "processActive"]);
|
||||
if (activeRaw === false || String(activeRaw === null ? "" : activeRaw).toLowerCase() === "false") {
|
||||
return "done";
|
||||
}
|
||||
|
||||
var hasImpediment = String(this.readFirst(row, ["impeditivosColab", "impediment"]) || "").toLowerCase();
|
||||
if (approval === "maisinformacoes" || hasImpediment === "sim") { return "attention"; }
|
||||
|
||||
return "progress";
|
||||
},
|
||||
|
||||
parseDate: function(value) {
|
||||
if (!value) { return null; }
|
||||
var s = String(value);
|
||||
var m1 = s.match(/^(\d{2})\/(\d{2})\/(\d{4})/);
|
||||
if (m1) { return new Date(+m1[3], +m1[2] - 1, +m1[1]); }
|
||||
var m2 = s.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
||||
if (m2) { return new Date(+m2[1], +m2[2] - 1, +m2[3]); }
|
||||
var d = new Date(s);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
},
|
||||
|
||||
readFirst: function(row, keys) {
|
||||
if (!row) { return ""; }
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var v = row[keys[i]];
|
||||
if (v !== undefined && v !== null && v !== "") { return v; }
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
/* ── Filtering by period ──────────────────────────────────── */
|
||||
|
||||
filterByPeriod: function(requests) {
|
||||
if (this.currentPeriod === "all") { return requests; }
|
||||
|
||||
var now = new Date();
|
||||
var year = now.getFullYear();
|
||||
var month = now.getMonth();
|
||||
|
||||
return requests.filter(function(r) {
|
||||
if (!r.startDate) { return true; }
|
||||
if (this.currentPeriod === "year") { return r.startDate.getFullYear() === year; }
|
||||
if (this.currentPeriod === "month") {
|
||||
return r.startDate.getFullYear() === year && r.startDate.getMonth() === month;
|
||||
}
|
||||
return true;
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
/* ── Render ───────────────────────────────────────────────── */
|
||||
|
||||
render: function() {
|
||||
this.$loading.hide();
|
||||
this.$error.hide();
|
||||
|
||||
var requests = this.filterByPeriod(this.allRequests);
|
||||
|
||||
if (!requests.length) {
|
||||
this.$ranking.empty();
|
||||
this.$empty.show();
|
||||
this.$pagination.html("");
|
||||
this.updateKpis([], []);
|
||||
return;
|
||||
}
|
||||
|
||||
this.$empty.hide();
|
||||
|
||||
/* group by requester */
|
||||
var map = {};
|
||||
for (var i = 0; i < requests.length; i++) {
|
||||
var req = requests[i];
|
||||
var name = req.requesterName;
|
||||
if (!map[name]) {
|
||||
map[name] = {
|
||||
name: name, department: req.department,
|
||||
total: 0, progress: 0, attention: 0, done: 0, canceled: 0
|
||||
};
|
||||
}
|
||||
map[name].total++;
|
||||
map[name][req.status] = (map[name][req.status] || 0) + 1;
|
||||
}
|
||||
|
||||
/* sort desc by total */
|
||||
var ranked = [];
|
||||
for (var k in map) {
|
||||
if (map.hasOwnProperty(k)) { ranked.push(map[k]); }
|
||||
}
|
||||
ranked.sort(function(a, b) { return b.total - a.total; });
|
||||
|
||||
this.updateKpis(ranked, requests);
|
||||
|
||||
/* paginate: show pageSize entries per page */
|
||||
var totalPages = Math.ceil(ranked.length / this.pageSize);
|
||||
if (this.currentPage > totalPages) { this.currentPage = 1; }
|
||||
var start = (this.currentPage - 1) * this.pageSize;
|
||||
var paginated = ranked.slice(start, start + this.pageSize);
|
||||
var maxCount = ranked[0] ? ranked[0].total : 1;
|
||||
|
||||
var html = "";
|
||||
for (var j = 0; j < paginated.length; j++) {
|
||||
html += this.renderRow(paginated[j], start + j + 1, maxCount);
|
||||
}
|
||||
this.$ranking.html(html);
|
||||
this.renderPagination(ranked.length, totalPages);
|
||||
},
|
||||
|
||||
renderPagination: function(total, totalPages) {
|
||||
if (totalPages <= 1) { this.$pagination.html(""); return; }
|
||||
|
||||
var cur = this.currentPage;
|
||||
var html = '<div class="wdr-pag">';
|
||||
html += '<span class="wdr-pag__info">' + total + ' solicitantes</span>';
|
||||
html += '<div class="wdr-pag__pages">';
|
||||
|
||||
for (var p = 1; p <= totalPages; p++) {
|
||||
var cls = p === cur ? " wdr-pag__btn--active" : "";
|
||||
html += '<button type="button" class="wdr-pag__btn' + cls + '" data-rank-page="' + p + '">' + p + '</button>';
|
||||
}
|
||||
html += '</div></div>';
|
||||
this.$pagination.html(html);
|
||||
},
|
||||
|
||||
updateKpis: function(ranked, requests) {
|
||||
this.$root.find("[data-kpi-requesters]").text(ranked.length || "—");
|
||||
this.$root.find("[data-kpi-total]").text(requests.length || "—");
|
||||
|
||||
if (ranked.length) {
|
||||
this.$root.find("[data-kpi-top-name]").text(ranked[0].name);
|
||||
this.$root.find("[data-kpi-top-count]").text(ranked[0].total + " solicitação(ões)");
|
||||
} else {
|
||||
this.$root.find("[data-kpi-top-name]").text("—");
|
||||
this.$root.find("[data-kpi-top-count]").text("");
|
||||
}
|
||||
},
|
||||
|
||||
renderRow: function(entry, position, maxCount) {
|
||||
var barPct = Math.round((entry.total / maxCount) * 100);
|
||||
var initials = entry.name.split(" ").slice(0, 2).map(function(w) { return w[0]; }).join("");
|
||||
var medal = position === 1 ? "🥇" : position === 2 ? "🥈" : position === 3 ? "🥉" : position;
|
||||
|
||||
var breakdown = "";
|
||||
if (entry.progress) { breakdown += '<span class="wdr-badge wdr-badge--progress">' + entry.progress + ' andamento</span>'; }
|
||||
if (entry.attention) { breakdown += '<span class="wdr-badge wdr-badge--attention">' + entry.attention + ' atenção</span>'; }
|
||||
if (entry.done) { breakdown += '<span class="wdr-badge wdr-badge--done">' + entry.done + ' concluído</span>'; }
|
||||
if (entry.canceled) { breakdown += '<span class="wdr-badge wdr-badge--canceled">' + entry.canceled + ' cancelado</span>'; }
|
||||
|
||||
return [
|
||||
'<div class="wdr-row">',
|
||||
'<span class="wdr-rank">' + medal + '</span>',
|
||||
'<div class="wdr-avatar">' + this.escapeHtml(initials) + '</div>',
|
||||
'<div class="wdr-info">',
|
||||
'<strong class="wdr-name">' + this.escapeHtml(entry.name) + '</strong>',
|
||||
'<span class="wdr-dept">' + this.escapeHtml(entry.department) + '</span>',
|
||||
'</div>',
|
||||
'<div class="wdr-breakdown">' + breakdown + '</div>',
|
||||
'<div class="wdr-bar-wrap">',
|
||||
'<div class="wdr-bar-track"><div class="wdr-bar-fill" style="width:' + barPct + '%"></div></div>',
|
||||
'</div>',
|
||||
'<div class="wdr-count">' + entry.total + '<small>solicit.</small></div>',
|
||||
'</div>'
|
||||
].join("");
|
||||
},
|
||||
|
||||
/* ── State helpers ────────────────────────────────────────── */
|
||||
|
||||
showLoading: function() {
|
||||
this.$error.hide();
|
||||
this.$empty.hide();
|
||||
this.$ranking.empty();
|
||||
this.$loading.show();
|
||||
},
|
||||
|
||||
showError: function(msg) {
|
||||
this.$loading.hide();
|
||||
this.$ranking.empty();
|
||||
this.$error.text(msg || "Erro ao carregar dados.").show();
|
||||
},
|
||||
|
||||
escapeHtml: function(value) {
|
||||
return String(value === undefined || value === null ? "" : value)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
});
|
||||
0
Desligamento/workflow/.resources/Fluig.ws.cache
Normal file
0
Desligamento/workflow/.resources/Fluig.ws.cache
Normal file
@ -3,7 +3,11 @@
|
||||
<object class="java.util.HashMap">
|
||||
<void method="put">
|
||||
<string>volume</string>
|
||||
<null/>
|
||||
<array class="java.lang.String" length="1">
|
||||
<void index="0">
|
||||
<string>Default</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>camposFormulario, documentoId = 12959</string>
|
||||
@ -657,6 +661,56 @@
|
||||
</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">
|
||||
@ -676,167 +730,6 @@
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>camposFormulario, documentoId = 590</string>
|
||||
<array class="java.lang.String" length="52">
|
||||
<void index="0">
|
||||
<string>activity</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>centroCusto</string>
|
||||
</void>
|
||||
<void index="2">
|
||||
<string>codigoItem</string>
|
||||
</void>
|
||||
<void index="3">
|
||||
<string>consideracoesCompras</string>
|
||||
</void>
|
||||
<void index="4">
|
||||
<string>consideracoesCotacao</string>
|
||||
</void>
|
||||
<void index="5">
|
||||
<string>currentUserId</string>
|
||||
</void>
|
||||
<void index="6">
|
||||
<string>currentUsermail</string>
|
||||
</void>
|
||||
<void index="7">
|
||||
<string>currentUserName</string>
|
||||
</void>
|
||||
<void index="8">
|
||||
<string>dataAbertura</string>
|
||||
</void>
|
||||
<void index="9">
|
||||
<string>dataAprovCompras</string>
|
||||
</void>
|
||||
<void index="10">
|
||||
<string>dataRealizacaoCompras</string>
|
||||
</void>
|
||||
<void index="11">
|
||||
<string>dataValidacaoCompras</string>
|
||||
</void>
|
||||
<void index="12">
|
||||
<string>dataValidacaoGestor</string>
|
||||
</void>
|
||||
<void index="13">
|
||||
<string>dataValidacaoItens</string>
|
||||
</void>
|
||||
<void index="14">
|
||||
<string>descricao</string>
|
||||
</void>
|
||||
<void index="15">
|
||||
<string>emailSolicitante</string>
|
||||
</void>
|
||||
<void index="16">
|
||||
<string>estabelecimento</string>
|
||||
</void>
|
||||
<void index="17">
|
||||
<string>excelUpload</string>
|
||||
</void>
|
||||
<void index="18">
|
||||
<string>fdAnexo_Coleta</string>
|
||||
</void>
|
||||
<void index="19">
|
||||
<string>fdAnexo_embalar</string>
|
||||
</void>
|
||||
<void index="20">
|
||||
<string>fdAnexo_Entrega</string>
|
||||
</void>
|
||||
<void index="21">
|
||||
<string>fdAnexo_Nfe</string>
|
||||
</void>
|
||||
<void index="22">
|
||||
<string>fdAnexo_recebimento</string>
|
||||
</void>
|
||||
<void index="23">
|
||||
<string>fnAnexo_Coleta</string>
|
||||
</void>
|
||||
<void index="24">
|
||||
<string>fnAnexo_embalar</string>
|
||||
</void>
|
||||
<void index="25">
|
||||
<string>fnAnexo_Entrega</string>
|
||||
</void>
|
||||
<void index="26">
|
||||
<string>fnAnexo_Nfe</string>
|
||||
</void>
|
||||
<void index="27">
|
||||
<string>fnAnexo_recebimento</string>
|
||||
</void>
|
||||
<void index="28">
|
||||
<string>formMode</string>
|
||||
</void>
|
||||
<void index="29">
|
||||
<string>gestorEmail</string>
|
||||
</void>
|
||||
<void index="30">
|
||||
<string>gestorEmailE</string>
|
||||
</void>
|
||||
<void index="31">
|
||||
<string>gestorNome</string>
|
||||
</void>
|
||||
<void index="32">
|
||||
<string>gestorNomeE</string>
|
||||
</void>
|
||||
<void index="33">
|
||||
<string>gestor_cc</string>
|
||||
</void>
|
||||
<void index="34">
|
||||
<string>gestor_cce</string>
|
||||
</void>
|
||||
<void index="35">
|
||||
<string>justificativa</string>
|
||||
</void>
|
||||
<void index="36">
|
||||
<string>justificativaDecisaoCompras</string>
|
||||
</void>
|
||||
<void index="37">
|
||||
<string>justificativaDecisaoGestor</string>
|
||||
</void>
|
||||
<void index="38">
|
||||
<string>justificativaDecisaoItens</string>
|
||||
</void>
|
||||
<void index="39">
|
||||
<string>justificativaValidaProblema</string>
|
||||
</void>
|
||||
<void index="40">
|
||||
<string>quantidadeItem</string>
|
||||
</void>
|
||||
<void index="41">
|
||||
<string>requesterId</string>
|
||||
</void>
|
||||
<void index="42">
|
||||
<string>requesterMail</string>
|
||||
</void>
|
||||
<void index="43">
|
||||
<string>requesterName</string>
|
||||
</void>
|
||||
<void index="44">
|
||||
<string>userCotacaoGestor</string>
|
||||
</void>
|
||||
<void index="45">
|
||||
<string>userRealizacaoCompras</string>
|
||||
</void>
|
||||
<void index="46">
|
||||
<string>userSolicitante</string>
|
||||
</void>
|
||||
<void index="47">
|
||||
<string>userValidacaoCompras</string>
|
||||
</void>
|
||||
<void index="48">
|
||||
<string>userValidacaoGestor</string>
|
||||
</void>
|
||||
<void index="49">
|
||||
<string>userValidacaoItens</string>
|
||||
</void>
|
||||
<void index="50">
|
||||
<string>validacaoItens</string>
|
||||
</void>
|
||||
<void index="51">
|
||||
<string>WKNumProces</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>mecanismo</string>
|
||||
<array class="[Ljava.lang.Object;" length="12">
|
||||
@ -962,6 +855,164 @@
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>camposFormulario, documentoId = 9305</string>
|
||||
<array class="java.lang.String" length="51">
|
||||
<void index="0">
|
||||
<string>activity</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>centro_custo</string>
|
||||
</void>
|
||||
<void index="2">
|
||||
<string>codigocentroCusto</string>
|
||||
</void>
|
||||
<void index="3">
|
||||
<string>Codproduto</string>
|
||||
</void>
|
||||
<void index="4">
|
||||
<string>cotacaoSCProtheus</string>
|
||||
</void>
|
||||
<void index="5">
|
||||
<string>currentUserId</string>
|
||||
</void>
|
||||
<void index="6">
|
||||
<string>currentUsermail</string>
|
||||
</void>
|
||||
<void index="7">
|
||||
<string>currentUserName</string>
|
||||
</void>
|
||||
<void index="8">
|
||||
<string>dataCadastroSCProtheus</string>
|
||||
</void>
|
||||
<void index="9">
|
||||
<string>dataNec</string>
|
||||
</void>
|
||||
<void index="10">
|
||||
<string>dataValidacaoItens</string>
|
||||
</void>
|
||||
<void index="11">
|
||||
<string>data_validacao_gestor</string>
|
||||
</void>
|
||||
<void index="12">
|
||||
<string>descProduto</string>
|
||||
</void>
|
||||
<void index="13">
|
||||
<string>emailSolicitante</string>
|
||||
</void>
|
||||
<void index="14">
|
||||
<string>emissaoSCProtheus</string>
|
||||
</void>
|
||||
<void index="15">
|
||||
<string>empresa</string>
|
||||
</void>
|
||||
<void index="16">
|
||||
<string>estabelecimento</string>
|
||||
</void>
|
||||
<void index="17">
|
||||
<string>fdComprovante</string>
|
||||
</void>
|
||||
<void index="18">
|
||||
<string>filialdest</string>
|
||||
</void>
|
||||
<void index="19">
|
||||
<string>filialest</string>
|
||||
</void>
|
||||
<void index="20">
|
||||
<string>filialprotheus</string>
|
||||
</void>
|
||||
<void index="21">
|
||||
<string>fnComprovante</string>
|
||||
</void>
|
||||
<void index="22">
|
||||
<string>formMode</string>
|
||||
</void>
|
||||
<void index="23">
|
||||
<string>gestor_cc</string>
|
||||
</void>
|
||||
<void index="24">
|
||||
<string>horaCadastroSCProtheus</string>
|
||||
</void>
|
||||
<void index="25">
|
||||
<string>justificativaDecisaoItens</string>
|
||||
</void>
|
||||
<void index="26">
|
||||
<string>justificativaValidaProblema</string>
|
||||
</void>
|
||||
<void index="27">
|
||||
<string>justi_decisao_gestor</string>
|
||||
</void>
|
||||
<void index="28">
|
||||
<string>moreInfo</string>
|
||||
</void>
|
||||
<void index="29">
|
||||
<string>numeroSCProtheus</string>
|
||||
</void>
|
||||
<void index="30">
|
||||
<string>observacoes</string>
|
||||
</void>
|
||||
<void index="31">
|
||||
<string>pedidoSCProtheus</string>
|
||||
</void>
|
||||
<void index="32">
|
||||
<string>produtoCod</string>
|
||||
</void>
|
||||
<void index="33">
|
||||
<string>produtoDesc</string>
|
||||
</void>
|
||||
<void index="34">
|
||||
<string>produtoLink</string>
|
||||
</void>
|
||||
<void index="35">
|
||||
<string>qtd</string>
|
||||
</void>
|
||||
<void index="36">
|
||||
<string>qtdItensSCProtheus</string>
|
||||
</void>
|
||||
<void index="37">
|
||||
<string>quantidade</string>
|
||||
</void>
|
||||
<void index="38">
|
||||
<string>requesterId</string>
|
||||
</void>
|
||||
<void index="39">
|
||||
<string>requesterMail</string>
|
||||
</void>
|
||||
<void index="40">
|
||||
<string>solicitanteSCProtheus</string>
|
||||
</void>
|
||||
<void index="41">
|
||||
<string>statusAtendimento</string>
|
||||
</void>
|
||||
<void index="42">
|
||||
<string>statusSCProtheus</string>
|
||||
</void>
|
||||
<void index="43">
|
||||
<string>tipoSolicitacao</string>
|
||||
</void>
|
||||
<void index="44">
|
||||
<string>urgencia</string>
|
||||
</void>
|
||||
<void index="45">
|
||||
<string>userValidacaoItens</string>
|
||||
</void>
|
||||
<void index="46">
|
||||
<string>user_validacao_gestor</string>
|
||||
</void>
|
||||
<void index="47">
|
||||
<string>usuarioSolicitante</string>
|
||||
</void>
|
||||
<void index="48">
|
||||
<string>validacaoItens</string>
|
||||
</void>
|
||||
<void index="49">
|
||||
<string>valorTotalCotacao</string>
|
||||
</void>
|
||||
<void index="50">
|
||||
<string>WKNumProces</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>forms</string>
|
||||
<object class="java.util.LinkedList">
|
||||
@ -1449,7 +1500,7 @@
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>desligamento</string>
|
||||
<string>3</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>desligamento</string>
|
||||
@ -1459,6 +1510,58 @@
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>checklist</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>checklist</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>40213</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_lancamento_documento</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_lancamento_documento</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>41254</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>transferenciav2</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>transferência</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>43582</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>desligamentov2</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>desligamentov2</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>46963</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
</object>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<java version="1.8.0_461" class="java.beans.XMLDecoder">
|
||||
<java version="1.8.0_481" class="java.beans.XMLDecoder">
|
||||
<object class="java.util.HashMap">
|
||||
<void method="put">
|
||||
<string>volume</string>
|
||||
@ -9,183 +9,6 @@
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>camposFormulario, documentoId = 12959</string>
|
||||
<array class="java.lang.String" length="29">
|
||||
<void index="0">
|
||||
<string>activity</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>analistaTecnico</string>
|
||||
</void>
|
||||
<void index="2">
|
||||
<string>complemento</string>
|
||||
</void>
|
||||
<void index="3">
|
||||
<string>consegueResolver</string>
|
||||
</void>
|
||||
<void index="4">
|
||||
<string>consideracoes</string>
|
||||
</void>
|
||||
<void index="5">
|
||||
<string>consideracoesTecnicas</string>
|
||||
</void>
|
||||
<void index="6">
|
||||
<string>currentUserId</string>
|
||||
</void>
|
||||
<void index="7">
|
||||
<string>currentUsermail</string>
|
||||
</void>
|
||||
<void index="8">
|
||||
<string>currentUserName</string>
|
||||
</void>
|
||||
<void index="9">
|
||||
<string>dataAbertura</string>
|
||||
</void>
|
||||
<void index="10">
|
||||
<string>dataAnaliseTecnica</string>
|
||||
</void>
|
||||
<void index="11">
|
||||
<string>dataUserValidacao</string>
|
||||
</void>
|
||||
<void index="12">
|
||||
<string>detalheSolicitacao</string>
|
||||
</void>
|
||||
<void index="13">
|
||||
<string>emailGestorArea</string>
|
||||
</void>
|
||||
<void index="14">
|
||||
<string>emailSolicitante</string>
|
||||
</void>
|
||||
<void index="15">
|
||||
<string>estabelecimento</string>
|
||||
</void>
|
||||
<void index="16">
|
||||
<string>formMode</string>
|
||||
</void>
|
||||
<void index="17">
|
||||
<string>nomeGestorArea</string>
|
||||
</void>
|
||||
<void index="18">
|
||||
<string>possuiInconsistencia</string>
|
||||
</void>
|
||||
<void index="19">
|
||||
<string>ratingValue</string>
|
||||
</void>
|
||||
<void index="20">
|
||||
<string>requesterId</string>
|
||||
</void>
|
||||
<void index="21">
|
||||
<string>requesterMail</string>
|
||||
</void>
|
||||
<void index="22">
|
||||
<string>requesterName</string>
|
||||
</void>
|
||||
<void index="23">
|
||||
<string>situacaoResolvida</string>
|
||||
</void>
|
||||
<void index="24">
|
||||
<string>tipoOcorrencia</string>
|
||||
</void>
|
||||
<void index="25">
|
||||
<string>tituloOcorrencia</string>
|
||||
</void>
|
||||
<void index="26">
|
||||
<string>userSolicitante</string>
|
||||
</void>
|
||||
<void index="27">
|
||||
<string>userValidacao</string>
|
||||
</void>
|
||||
<void index="28">
|
||||
<string>WKNumProces</string>
|
||||
</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>
|
||||
</object>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>expediente</string>
|
||||
<array class="java.lang.String" length="4">
|
||||
@ -203,167 +26,6 @@
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>processosServidor</string>
|
||||
<object class="java.util.ArrayList">
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Abertura de Chamado</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Abertura de chamado Manutenção</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>desligamentoColaborador</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>desligamentoColaborador</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>TOTVS RH - Admissão Digital</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>dpf_digte_di_processo_admissao</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Abertura de Chamado</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>FlowEssentials_AberturaDeChamado</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Solicitação de compra - Totvs</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>FlowEssentials_SolicitacaoDeCompras</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Flowservico_terceirizado</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Flowservico_terceirizado</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Listar Tarefas</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>FLUIGADHOC</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Recrutamento e seleção</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Recrutamento e Seleção</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Solicitação de compra - Ginseng</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Solicitação de compras </string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Solicitação de compra - Ginseng</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Solicitação de compras - Integração teste</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Solicitação de compra - Ginseng</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Solicitação de compras v2</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.tds.ecm.foundation.ws.ProcessDefinitionDto">
|
||||
<void property="companyId">
|
||||
<int>1</int>
|
||||
</void>
|
||||
<void property="processDescription">
|
||||
<string>Transferência Ginseng</string>
|
||||
</void>
|
||||
<void property="processId">
|
||||
<string>Transferência Ginseng</string>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>mecanismo</string>
|
||||
<array class="[Ljava.lang.Object;" length="12">
|
||||
@ -489,504 +151,5 @@
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>forms</string>
|
||||
<object class="java.util.LinkedList">
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>FLUIGADHOC</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>FLUIGADHOC</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>3</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>FLUIGADHOCPROCESS</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>FLUIGADHOCPROCESS</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>4</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_dataset_tipo_ocorrencia</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_dataset_tipo_ocorrencia</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>14</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_abertura_chamado</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_abertura_chamado</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>15</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>DSFormulariodeAberturadechamado</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Formulário de Abertura de chamado</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>20</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>Abertura_de_chamados</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Solicitação de abertura de chamados</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>21</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>DSvistoriadeServico</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>vistoriadeServico</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>24</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>DSFormulariodeReservadesala</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Formulário de Reserva de sala</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>34</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_dataset_centrocusto</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_dataset_centrocusto</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>103</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_dataset_cadastro_item</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_dataset_cadastro_item</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>104</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_dataset_estabelecimento</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_dataset_estabelecimento</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>105</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>totvsflow_solicitacao_compras</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>totvsflow_solicitacao_compras</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>165</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>aberturadechamado_manutencao</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>aberturadechamado_manutencao</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>400</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>Solicitacao_transferencia</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Solicitacao_transferencia</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>590</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>recrutamento</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>recrutamento</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>823</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>kit_aniversariantes</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Aniversariantes</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>7690</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>kit_cardapio</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Cardápio do Dia</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>7695</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>kit_convenios</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Convênios</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>7703</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>kit_news</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Notícias</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>7709</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>compras_digital</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>compras_digital</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9305</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_formulario_processo_admissao</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Formulario_Processo_Admissao_Protheus</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9626</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_cadastro_status</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Status</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9627</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_configuracoes</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Configuracoes</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9628</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_cadastro_jornada</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Jornada</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9629</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_tipo_documento</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Tipo_Documento</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9630</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_dataset</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Dataset</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9631</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_configuracao</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Configuracoes</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9632</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_beneficio</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Beneficios</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9633</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_compl_contrato</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Comp_Contrato</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9634</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_funcao_jornada</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Funcao_Jornada</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9635</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_dataset_estrutura</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Dataset_Estrutura</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9636</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_grupo_tipo_contrato</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Grupo_Tipo_Contrato</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9637</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_tipo_contrato</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Tipo_Contrato</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9638</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_traducao_campo_valor</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Traducao_Campo_Valor</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9639</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_restricoes_cpf</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Formulario_Restricao_CPF</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9640</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_compl_vt</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Compl_VT</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9641</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>dpf_di_traducao_campo</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>Digte_Public_Form_Di_Traducao_Campo</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>9995</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
<void method="add">
|
||||
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
|
||||
<void property="datasetName">
|
||||
<string>desligamento</string>
|
||||
</void>
|
||||
<void property="documentDescription">
|
||||
<string>desligamento</string>
|
||||
</void>
|
||||
<void property="documentId">
|
||||
<int>12959</int>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
</object>
|
||||
</void>
|
||||
</object>
|
||||
</java>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<snapshotFrequency>0</snapshotFrequency>
|
||||
<baseDay>0</baseDay>
|
||||
<baseMonth>0</baseMonth>
|
||||
<periodId>Expediente BackOffice, Logística e Motorista</periodId>
|
||||
<periodId>Default</periodId>
|
||||
<uniqueCardVersion>false</uniqueCardVersion>
|
||||
<keyWord></keyWord>
|
||||
<complementsLevel>1</complementsLevel>
|
||||
@ -29,7 +29,7 @@
|
||||
<processDefinitionVersionPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
</processDefinitionVersionPK>
|
||||
<versionDescription></versionDescription>
|
||||
<formId>12959</formId>
|
||||
@ -600,13 +600,13 @@
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>1</expressionOrder>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<sequence>33</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("impeditivosColab") == "Não"</condition>
|
||||
<destinationSequenceId>5</destinationSequenceId>
|
||||
<engineAllocationConfiguration><AssignmentController><FormField>requesterId</FormField></AssignmentController></engineAllocationConfiguration>
|
||||
<engineAllocationId>Campo Formulário</engineAllocationId>
|
||||
<engineAllocationConfiguration><AssignmentController><BaseActivity>4</BaseActivity><Returns>Last</Returns></AssignmentController></engineAllocationConfiguration>
|
||||
<engineAllocationId>Executor Atividade</engineAllocationId>
|
||||
<conditionType>0</conditionType>
|
||||
</ConditionProcessState>
|
||||
<ConditionProcessState>
|
||||
@ -614,7 +614,7 @@
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>2</expressionOrder>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<sequence>33</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("impeditivosColab") == "Sim"</condition>
|
||||
@ -628,7 +628,7 @@
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>1</expressionOrder>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<sequence>43</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("DesligamentoAprov") == "Não"</condition>
|
||||
@ -640,7 +640,7 @@
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>2</expressionOrder>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<sequence>43</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("DesligamentoAprov") == "Sim"</condition>
|
||||
@ -654,7 +654,7 @@
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>3</expressionOrder>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<sequence>43</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("DesligamentoAprov") == "MaisInformacoes"</condition>
|
||||
@ -663,6 +663,20 @@
|
||||
<engineAllocationId>Executor Atividade</engineAllocationId>
|
||||
<conditionType>0</conditionType>
|
||||
</ConditionProcessState>
|
||||
<ConditionProcessState>
|
||||
<conditionProcessStatePK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<expressionOrder>4</expressionOrder>
|
||||
<version>31</version>
|
||||
<sequence>43</sequence>
|
||||
</conditionProcessStatePK>
|
||||
<condition>hAPI.getCardValue("aprovacaosim") == "sim"</condition>
|
||||
<destinationSequenceId>22</destinationSequenceId>
|
||||
<engineAllocationConfiguration><AssignmentController><Group>DEPARTAMENTO_PESSOAL</Group></AssignmentController></engineAllocationConfiguration>
|
||||
<engineAllocationId>Pool Grupo</engineAllocationId>
|
||||
<conditionType>0</conditionType>
|
||||
</ConditionProcessState>
|
||||
</list>
|
||||
<list>
|
||||
<ProcessLink>
|
||||
@ -1059,7 +1073,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>8</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1070,7 +1084,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>21</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1081,7 +1095,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>35</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1092,7 +1106,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>36</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1103,7 +1117,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>36</linkSequence>
|
||||
<bendSequence>2</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1114,7 +1128,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>37</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1125,7 +1139,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>40</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1136,7 +1150,7 @@ process.instructions=
|
||||
<processLinkBendPK>
|
||||
<companyId>1</companyId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<version>20</version>
|
||||
<version>31</version>
|
||||
<linkSequence>46</linkSequence>
|
||||
<bendSequence>1</bendSequence>
|
||||
</processLinkBendPK>
|
||||
@ -1154,7 +1168,7 @@ process.instructions=
|
||||
<id>0</id>
|
||||
<tenantId>0</tenantId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<processVersion>20</processVersion>
|
||||
<processVersion>31</processVersion>
|
||||
<stateSequence>20</stateSequence>
|
||||
<appKey>approval</appKey>
|
||||
<appField>title</appField>
|
||||
@ -1164,7 +1178,7 @@ process.instructions=
|
||||
<id>0</id>
|
||||
<tenantId>0</tenantId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<processVersion>20</processVersion>
|
||||
<processVersion>31</processVersion>
|
||||
<stateSequence>20</stateSequence>
|
||||
<appKey>approval</appKey>
|
||||
<appField>description</appField>
|
||||
@ -1174,7 +1188,7 @@ process.instructions=
|
||||
<id>0</id>
|
||||
<tenantId>0</tenantId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<processVersion>20</processVersion>
|
||||
<processVersion>31</processVersion>
|
||||
<stateSequence>20</stateSequence>
|
||||
<appKey>approval</appKey>
|
||||
<appField>highlight</appField>
|
||||
@ -1184,7 +1198,7 @@ process.instructions=
|
||||
<id>0</id>
|
||||
<tenantId>0</tenantId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<processVersion>20</processVersion>
|
||||
<processVersion>31</processVersion>
|
||||
<stateSequence>20</stateSequence>
|
||||
<appKey>approval</appKey>
|
||||
<appField>approve</appField>
|
||||
@ -1194,7 +1208,7 @@ process.instructions=
|
||||
<id>0</id>
|
||||
<tenantId>0</tenantId>
|
||||
<processId>desligamentoColaborador</processId>
|
||||
<processVersion>20</processVersion>
|
||||
<processVersion>31</processVersion>
|
||||
<stateSequence>20</stateSequence>
|
||||
<appKey>approval</appKey>
|
||||
<appField>reject</appField>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 45 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@ -85,17 +85,17 @@
|
||||
</anchors>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="124" x="1160" y="26"/>
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="98" x="1160" y="26"/>
|
||||
<link businessObjects="task5"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.7 /0/@connections.12" incomingConnections="/0/@connections.4"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.2/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="124" style="/0/@styles.36" cornerHeight="5" cornerWidth="5"/>
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="98" style="/0/@styles.36" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="114" x="5" y="5" style="/0/@styles.37" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Gestão e Comunicação do Desligamento"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="88" x="5" y="5" style="/0/@styles.37" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Gestão e Comunicação do Desligamento"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
@ -118,17 +118,17 @@
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="92" x="1310" y="640"/>
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="1310" y="640"/>
|
||||
<link businessObjects="task15"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.1" incomingConnections="/0/@connections.7"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.4/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="92" style="/0/@styles.50" cornerHeight="5" cornerWidth="5"/>
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.50" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="82" x="5" y="5" style="/0/@styles.51" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Inativar Perfis em sistemas"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.51" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Inativar Perfis em sistemas"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
@ -142,49 +142,49 @@
|
||||
</anchors>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="92" x="370" y="200"/>
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="370" y="200"/>
|
||||
<link businessObjects="task20"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.9" incomingConnections="/0/@connections.2"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.6/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="92" style="/0/@styles.60" cornerHeight="5" cornerWidth="5"/>
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.60" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="82" x="5" y="5" style="/0/@styles.61" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Aprovar Desligamento"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.61" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Aprovar Desligamento"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="92" x="650" y="350"/>
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="84" x="650" y="350"/>
|
||||
<link businessObjects="task22"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.6 /0/@connections.8" incomingConnections="/0/@connections.5 /0/@connections.10"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.7/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="92" style="/0/@styles.63" cornerHeight="5" cornerWidth="5"/>
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="84" style="/0/@styles.63" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="82" x="5" y="5" style="/0/@styles.64" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Informar Previsão e Impeditivos"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="74" x="5" y="5" style="/0/@styles.64" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Informar Previsão e Impeditivos"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="92" x="900" y="498"/>
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="900" y="498"/>
|
||||
<link businessObjects="task24"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.3" incomingConnections="/0/@connections.6"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.8/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="92" style="/0/@styles.67" cornerHeight="5" cornerWidth="5"/>
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.67" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="82" x="5" y="5" style="/0/@styles.68" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Verificar Conformidade"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.68" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Verificar Conformidade"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="60" height="108" x="1090" y="490">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="60" height="102" x="1090" y="490">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" width="60" height="60" style="/0/@styles.85">
|
||||
<points y="30"/>
|
||||
<points x="30"/>
|
||||
@ -204,7 +204,7 @@
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="60" height="48" y="60" style="/0/@styles.86" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Confor
midade
"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="60" height="42" y="60" style="/0/@styles.86" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Conformi
dade
"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
@ -218,7 +218,7 @@
|
||||
</anchors>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="60" height="108" x="670" y="190">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="60" height="88" x="670" y="190">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" width="60" height="60" style="/0/@styles.98">
|
||||
<points y="30"/>
|
||||
<points x="30"/>
|
||||
@ -238,7 +238,7 @@
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="60" height="48" y="60" style="/0/@styles.99" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Aprova
?
"/>
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="60" height="28" y="60" style="/0/@styles.99" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Aprova?
"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
@ -3102,7 +3102,7 @@
|
||||
<fonts name="Arial" size="8"/>
|
||||
<fonts name="Arial" size="8" bold="true"/>
|
||||
</pi:Diagram>
|
||||
<bpmn2:BpmnProcess id="desligamentoColaborador" name="desligamentoColaborador" serverId="Ginseng Produção" version="20" author="" extendedFields="<list/>" cardIndex="12959" formSource="server" managerMechanism="Grupo" managerAssignmentController="<org.eclipse.bpmn2.impl.AssignmentControllerGroup>
 <groupId>ResponsavelDesligamento</groupId>
 <mechanismName>Grupo</mechanismName>
</org.eclipse.bpmn2.impl.AssignmentControllerGroup>" category="Desligamento" volume="Default" expedient="Expediente BackOffice, Logística e Motorista" instruction="" keyWord="" complementsLevel="1" notifyResponsibleComplements="true" notifyRequisitionerComplements="true"/>
|
||||
<bpmn2:BpmnProcess id="desligamentoColaborador" name="desligamentoColaborador" serverId="Ginseng Produção" version="31" author="" extendedFields="<list/>" cardIndex="12959" formSource="server" managerMechanism="Grupo" managerAssignmentController="<org.eclipse.bpmn2.impl.AssignmentControllerGroup>
 <groupId>ResponsavelDesligamento</groupId>
 <mechanismName>Grupo</mechanismName>
</org.eclipse.bpmn2.impl.AssignmentControllerGroup>" category="Desligamento" volume="Default" expedient="Default" instruction="" keyWord="" complementsLevel="1" notifyResponsibleComplements="true" notifyRequisitionerComplements="true"/>
|
||||
<bpmn2:BpmnPool id="pool1" name="Desligamento" cores="FFFFFF"/>
|
||||
<bpmn2:BpmnSwimLane id="swimlane2" name="Gestor" cores="C0C0C0"/>
|
||||
<bpmn2:BpmnSwimLane id="swimlane3" name="Gente e Cultura" cores="FFFFFF"/>
|
||||
@ -3122,7 +3122,7 @@
|
||||
<bpmn2:SequenceFlow id="flow21" name="Enviar para Aprovação" sourceRef="startevent4" targetRef="task20" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:BpmnTask id="task22" name="Informar Previsão e Impeditivos" incoming="flow36 flow45" outgoing="flow37 flow42" type="80" managerMechanism="" loopType="0" authNotify="true" expediente="" selecionaColaboradores="1" esforcoCalculo="0" executionAttempts="0" frequency="0"/>
|
||||
<bpmn2:BpmnTask id="task24" name="Verificar Conformidade" incoming="flow37" outgoing="flow34" type="80" managerMechanism="Pool Grupo" managerAssignmentControllerString="<org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup>
 <groupId>COMPLIANCE</groupId>
 <mechanismName>Pool Grupo</mechanismName>
</org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup>" loopType="0" authNotify="true" expediente="" selecionaColaboradores="1" esforcoCalculo="0" executionAttempts="0" frequency="0"/>
|
||||
<bpmn2:BpmnGateway id="exclusivegateway33" name="Conformidade" incoming="flow34" outgoing="flow35 flow36" type="120" condition="<list>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>1</order>
 <expression>hAPI.getCardValue(&quot;impeditivosColab&quot;) == &quot;Não&quot;</expression>
 <targetTask>task5</targetTask>
 <mechanism>Campo Formulário</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerFormField">
 <formField>requesterId</formField>
 <mechanismName>Campo Formulário</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>2</order>
 <expression>hAPI.getCardValue(&quot;impeditivosColab&quot;) == &quot;Sim&quot;</expression>
 <targetTask>task22</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>task22</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
</list>"/>
|
||||
<bpmn2:BpmnGateway id="exclusivegateway33" name="Conformidade" incoming="flow34" outgoing="flow35 flow36" type="120" condition="<list>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>1</order>
 <expression>hAPI.getCardValue(&quot;impeditivosColab&quot;) == &quot;Não&quot;</expression>
 <targetTask>task5</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>startevent4</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>2</order>
 <expression>hAPI.getCardValue(&quot;impeditivosColab&quot;) == &quot;Sim&quot;</expression>
 <targetTask>task22</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>task22</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
</list>"/>
|
||||
<bpmn2:SequenceFlow id="flow34" name="" sourceRef="task24" targetRef="exclusivegateway33" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow35" name="Conforme" sourceRef="exclusivegateway33" targetRef="task5" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow36" name="Não conforme e Notificar Departamento Pessoal " sourceRef="exclusivegateway33" targetRef="task22" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
@ -3130,7 +3130,7 @@
|
||||
<bpmn2:SequenceFlow id="flow40" name="" sourceRef="task5" targetRef="task15" atividadeFluxo="Concluído" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:BpmnEndEvent id="endevent41" name="Fim" incoming="flow42" type="60" signalId="0"/>
|
||||
<bpmn2:SequenceFlow id="flow42" name="Cancelar Desligamento" sourceRef="task22" targetRef="endevent41" atividadeFluxo="Cancelar processo de Desligamento" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:BpmnGateway id="exclusivegateway43" name="Aprova?" incoming="flow44" outgoing="flow45 flow46 flow50" type="120" condition="<list>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>1</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;Não&quot;</expression>
 <targetTask>endevent49</targetTask>
 <conditionType>0</conditionType>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>2</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;Sim&quot;</expression>
 <targetTask>task22</targetTask>
 <mechanism>Pool Grupo</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup">
 <groupId>DEPARTAMENTO_PESSOAL</groupId>
 <mechanismName>Pool Grupo</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>3</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;MaisInformacoes&quot;</expression>
 <targetTask>startevent4</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>startevent4</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
</list>"/>
|
||||
<bpmn2:BpmnGateway id="exclusivegateway43" name="Aprova?" incoming="flow44" outgoing="flow45 flow46 flow50" type="120" condition="<list>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>1</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;Não&quot;</expression>
 <targetTask>endevent49</targetTask>
 <conditionType>0</conditionType>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>2</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;Sim&quot;</expression>
 <targetTask>task22</targetTask>
 <mechanism>Pool Grupo</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup">
 <groupId>DEPARTAMENTO_PESSOAL</groupId>
 <mechanismName>Pool Grupo</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>3</order>
 <expression>hAPI.getCardValue(&quot;DesligamentoAprov&quot;) == &quot;MaisInformacoes&quot;</expression>
 <targetTask>startevent4</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>startevent4</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>4</order>
 <expression>hAPI.getCardValue(&quot;aprovacaosim&quot;) == &quot;sim&quot;</expression>
 <targetTask>task22</targetTask>
 <mechanism>Pool Grupo</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerPoolGroup">
 <groupId>DEPARTAMENTO_PESSOAL</groupId>
 <mechanismName>Pool Grupo</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
</list>"/>
|
||||
<bpmn2:SequenceFlow id="flow44" name="" sourceRef="task20" targetRef="exclusivegateway43" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow45" name="" sourceRef="exclusivegateway43" targetRef="task22" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow46" name="Mais informações" sourceRef="exclusivegateway43" targetRef="startevent4" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
|
||||
1
checklist/fluig
Submodule
1
checklist/fluig
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 4e278481a1fabe9695fd0397faf7fa067b4a2074
|
||||
BIN
forms/40213 - checklist/.metadata
Normal file
BIN
forms/40213 - checklist/.metadata
Normal file
Binary file not shown.
160
forms/40213 - checklist/123.html
Normal file
160
forms/40213 - checklist/123.html
Normal file
@ -0,0 +1,160 @@
|
||||
<!-- ✅ IMPORTANTE: o link do estilo sempre fora das divs -->
|
||||
<link rel="stylesheet" type="text/css" href="/style-guide/css/fluig-style-guide.min.css">
|
||||
|
||||
<div id="cardsProcessos" class="fluig-style-guide">
|
||||
|
||||
<h3 style="color:#04506b; font-weight:600; margin-bottom:15px;">
|
||||
Iniciar Solicitações
|
||||
</h3>
|
||||
|
||||
<!-- 🔍 Campo de Pesquisa -->
|
||||
<div class="form-group" style="max-width: 300px; margin-bottom: 20px;">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
<i class="fluigicon fluigicon-search"></i>
|
||||
</span>
|
||||
<input id="filtroProcessos" type="text" class="form-control" placeholder="Pesquisar processo...">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 🔹 Lista de Cards -->
|
||||
<div class="cards-container">
|
||||
<div class="card-process" data-proc="Solicitação de compras - Integração teste">
|
||||
<i class="flaticon flaticon-product"></i>
|
||||
<span>Solicitação de Compras</span>
|
||||
</div>
|
||||
|
||||
<div class="card-process" data-proc="FlowEssentials_AberturaDeChamado">
|
||||
<i class="flaticon flaticon-message-broker"></i>
|
||||
<span>Tecnologia</span>
|
||||
</div>
|
||||
|
||||
<div class="card-process" data-proc="Transferência Ginseng">
|
||||
<i class="flaticon flaticon-transfer"></i>
|
||||
<span>Transferência de Mercadorias</span>
|
||||
</div>
|
||||
|
||||
<div class="card-process" data-proc="Recrutamento e Seleção">
|
||||
<i class="flaticon flaticon-file-person"></i>
|
||||
<span>Solicitação de Vaga</span>
|
||||
</div>
|
||||
<div class="card-process" data-proc="desligamentoColaborador">
|
||||
<i class="flaticon flaticon-blocked"></i>
|
||||
<span>Desligamento de Colaborador</span>
|
||||
</div>
|
||||
|
||||
<div class="card-process" data-proc="checklist">
|
||||
<i class="flaticon flaticon-check-square"></i>
|
||||
<span>Auditoria de Lojas</span>
|
||||
</div>
|
||||
|
||||
<div class="card-process" data-proc="Abertura de chamado Manutenção">
|
||||
<i class="flaticon flaticon-build"></i>
|
||||
<span>Obras e Manutenção</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
// 🔍 Filtro de pesquisa
|
||||
$("#filtroProcessos").on("keyup", function() {
|
||||
const termo = $(this).val().toLowerCase().trim();
|
||||
$(".card-process").each(function() {
|
||||
const nome = $(this).find("span").text().toLowerCase();
|
||||
$(this).toggle(nome.includes(termo));
|
||||
});
|
||||
});
|
||||
|
||||
// 🔹 Clique em card → abre o processo
|
||||
$(".card-process").on("click", function() {
|
||||
const processId = $(this).data("proc");
|
||||
const nome = $(this).find("span").text();
|
||||
|
||||
FLUIGC.toast({
|
||||
title: "Abrindo formulário: ",
|
||||
message: nome,
|
||||
type: "info"
|
||||
});
|
||||
const url = `/portal/p/1/pageworkflowview?processID=${processId}`;
|
||||
window.location.href = url;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* 🔹 Garante que os ícones usem a fonte certa */
|
||||
.fluigicon:before {
|
||||
font-family: Fluigicon !important;
|
||||
}
|
||||
|
||||
/* 🔹 Layout geral */
|
||||
.cards-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
/* 🔹 Card menor */
|
||||
.card-process {
|
||||
background-color: #f8f9fa;
|
||||
border: 1px solid #04506b33;
|
||||
border-radius: 12px;
|
||||
padding: 15px 10px;
|
||||
text-align: center;
|
||||
width: 125px; /* 🔹 ligeiramente menor */
|
||||
height: 115px; /* 🔹 reduzido para equilíbrio */
|
||||
cursor: pointer;
|
||||
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.06);
|
||||
transition: all 0.25s ease;
|
||||
color: #04506b;
|
||||
font-family: "Segoe UI", Arial, sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 3px; /* 🔹 pequeno respiro entre eles */
|
||||
}
|
||||
|
||||
.card-process:hover {
|
||||
background-color: #04506b;
|
||||
color: white;
|
||||
transform: scale(1.03); /* 🔹 efeito mais suave */
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
|
||||
z-index: 2; /* 🔹 evita sobreposição visual */
|
||||
}
|
||||
|
||||
/* 🔹 Ícones menores */
|
||||
.card-process i {
|
||||
font-size: 28px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.card-process span {
|
||||
font-weight: 600;
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
line-height: 1.2em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* 🔹 Campo de busca */
|
||||
#filtroProcessos {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.input-group-addon {
|
||||
background-color: #04506b;
|
||||
color: white;
|
||||
border: none;
|
||||
}
|
||||
.icon-process{
|
||||
width:32px;
|
||||
height:32px;
|
||||
margin-bottom:8px;
|
||||
object-fit:contain;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
21
forms/40213 - checklist/LICENSE.fluigFormAttachment
Normal file
21
forms/40213 - checklist/LICENSE.fluigFormAttachment
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Bruno Gasparetto
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
212
forms/40213 - checklist/README.fluigFormAttachment.md
Normal file
212
forms/40213 - checklist/README.fluigFormAttachment.md
Normal file
@ -0,0 +1,212 @@
|
||||
# Fluig Form Attachment
|
||||
|
||||
Plugin JQuery para auxiliar no tratamento de anexos em formulários
|
||||
de processo.
|
||||
|
||||
A gestão dos anexos de processo no Fluig não é uma tarefa fácil. Além da aba anexos não
|
||||
permitir ordenação, o Fluig não permite, de maneira simples, vincular os anexos a campos
|
||||
do formulário do processo, assim devemos confiar que os usuários vão colocar os anexos
|
||||
corretamente na aba anexos e depois gastar tempo identificando cada anexo, pois usuários
|
||||
dificilmente respeitarão alguma regra de nomenclatura.
|
||||
|
||||
Para permitir esse vínculo entre os campos do formulário e os anexos, o
|
||||
[Sérgio Machado](https://www.linkedin.com/in/sergio-machado-analista-fluig/)
|
||||
criou o [ComponenteAnexos](https://github.com/sergiomachadosilva/fluig-utils/tree/main/projetos/ComponenteAnexos),
|
||||
que é uma biblioteca JS/CSS/HTML, permitindo um maior controle dos
|
||||
anexos. Esse projeto do Sérgio serviu como base para a construção desse Plugin JQuery.
|
||||
|
||||
A intenção desse plugin é simplificar ainda mais o tratamento dos anexos em formulários
|
||||
que estão abertos em um Processo.
|
||||
|
||||
## Atenção
|
||||
|
||||
Esse plugin não funciona na versão mobile dentro do aplicativo My Fluig.
|
||||
|
||||
Testado no Fluig 1.8.1 e 1.8.2. Quando lançar o Fluig 2.0 teremos que
|
||||
rever o funcionamento do plugin.
|
||||
|
||||
Esse plugin está usando somente a "descrição" do anexo como vínculo entre
|
||||
formulário e anexo. Ainda está em testes se isso é o suficiente ou se
|
||||
o ideal seria ter o nome físico do arquivo salvo em algum lugar, assim
|
||||
como o ComponenteAnexos do Sérgio Machado.
|
||||
|
||||
No Fluig 1.8.1 identifiquei um bug quando insere um anexo por vez e então remove
|
||||
algum anexo. Nessa situação a tabela de anexos é esvaziada. Porém esse bug ocorre
|
||||
mesmo quando usando a Aba de Anexos, sendo um bug do próprio Fluig e não do Plugin.
|
||||
Esse bug ocorre somente na primeira atividade do processo, quando ainda não há ID
|
||||
da Solicitação.
|
||||
|
||||
## Instalação
|
||||
|
||||
Basta adicionar o script `fluigFormAttachment.js` ou `fluigformAttachment.min.js` ao
|
||||
seu formulário.
|
||||
|
||||
## Modo de usar
|
||||
|
||||
Ao carregar o plugin no seu formulário ele ocultará a Aba Anexos do Fluig, evitando que
|
||||
insiram documentos não solicitados e, mais importante, removam anexos que já estão
|
||||
vinculados a um campo do formulário.
|
||||
|
||||
### Básico
|
||||
|
||||
Basta ter um campo do tipo texto e instanciar o plugin para esse campo.
|
||||
|
||||
```html
|
||||
<div class="form-group">
|
||||
<label for="cnh">Teste 001</label>
|
||||
<input type="text" class="form-control" readonly
|
||||
name="cnh" id="cnh" data-filename="CNH" data-accept="image/*,.pdf"
|
||||
>
|
||||
</div>
|
||||
```
|
||||
|
||||
É recomendável deixar o campo como `readonly`. O plugin fará isso automaticamente quando
|
||||
instanciado no elemento, mas pode ser que algum usuário consiga editar o formulário fora
|
||||
do processo e nesse caso o plugin não funcionará.
|
||||
|
||||
O atributo `data-filename` indica a "descrição" do anexo, que é o valor que aparece na Aba
|
||||
Anexos. Esse nome será utilizado para vincular o campo do formulário ao anexo.
|
||||
|
||||
O atributo `data-accept` indica o tipo de arquivo permitido. Funciona exatamente como
|
||||
o atributo `accept` do campo input file ([documentação](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept)).
|
||||
|
||||
Então no JavaScript basta executar:
|
||||
|
||||
```javascript
|
||||
$("#cnh").fluigFormAttachment();
|
||||
```
|
||||
|
||||
### Parâmetros
|
||||
|
||||
Ao instanciar o plugin para os elementos é possível passar um objeto com as seguintes
|
||||
propriedades de configuração:
|
||||
|
||||
| Parâmetro | Tipo | Padrão | Descrição |
|
||||
| --- | --- | --- | --- |
|
||||
| **showActionButton** | boolean | `true` | Indica se deve exibir os botões de Ação (Upload ou Delete) |
|
||||
| **filename** | string | `"Anexo"` | Nome/Descrição do Anexo. Caso exista o atributo `data-filename` no campo do formulário ele terá preferência. **Cuidado**: Não pode ter mais de um anexo com o mesmo Nome/Descrição. |
|
||||
| **prefixName** | boolean\|string | `false` | Adiciona prefixo à descrição do anexo. Caso `true` criará um prefixo aleatório usando parte de um UUID. No caso de `string` a usará como prefixo fixo, adicionando `-` como separador. |
|
||||
| **accept** | string | `"*"` | Funciona igual ao atributo accept do input file ([documentação](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept)). Caso exista o atributo `data-accept` no campo do formulário ele terá preferência. |
|
||||
|
||||
Se ao instanciar o Plugin o campo estiver **Desabilitado** ou o usuário não possuir permissão
|
||||
de complemento no processo, o botão de Upload/Delete não será exibido, mesmo se o parâmetro
|
||||
`showActionButton` estiver como `true`. Caso deseje exibir/ocultar o botão de ação dinamicamente
|
||||
utilize os métodos `showActionButton` e `hideActionButton`.
|
||||
|
||||
A intenção da configuração `prefixName` é auxiliar nos casos de Tabela Pai Filho.
|
||||
|
||||
Lembre-se de tratar as situações nas quais o processo estiver somente em modo de
|
||||
visualização e nos casos que os campos não devem permitir upload/delete dos
|
||||
anexos.
|
||||
|
||||
Exemplos:
|
||||
|
||||
```javascript
|
||||
$("#cnh").fluigFormAttachment({
|
||||
showActionButton: false,
|
||||
});
|
||||
|
||||
// Exibe os botões de visualização em todos os filhos já existentes da Pai Filho
|
||||
// Pulamos a primeira TR por ser a base para gerar as demais filhas
|
||||
$("#tabelaPaiFilho tbody tr:not(:first-child) .anexo")
|
||||
.fluigFormAttachment({ showActionButton: false })
|
||||
;
|
||||
|
||||
// Tabela Pai Filho - adiciona com prefixo automático para cada arquivo
|
||||
$("#adicionar").on("click", function () {
|
||||
const index = wdkAddChild("tabelaPaiFilho");
|
||||
$(`#cnh___${index}`).fluigFormAttachment({
|
||||
prefixName: true,
|
||||
});
|
||||
});
|
||||
|
||||
// Tabela Pai Filho com vários campos de anexo
|
||||
$("#adicionar").on("click", function () {
|
||||
const index = wdkAddChild("tabelaPaiFilho");
|
||||
const tr = $(`#cnh___${index}`).closest("tr");
|
||||
|
||||
// A cada upload será criado um prefixo aleatório pra cada anexo
|
||||
$(".anexos", tr).fluigFormAttachment({
|
||||
prefixName: true,
|
||||
});
|
||||
});
|
||||
|
||||
// Tabela Pai Filho com vários campos de anexo e prefixo único pra linha
|
||||
$("#adicionar").on("click", function () {
|
||||
const index = wdkAddChild("tabelaPaiFilho");
|
||||
const tr = $(`#cnh___${index}`).closest("tr");
|
||||
|
||||
// A cada upload usará o mesmo prefixo para todos os anexos da linha
|
||||
$(".anexos", tr).fluigFormAttachment({
|
||||
prefixName: FLUIGC.utilities.randomUUID().substring(0, 8),
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Métodos
|
||||
|
||||
É possível executar alguns métodos do Plugin para manipular os anexos. Para
|
||||
executar um método basta chamar o plugin no campo indicando passando o nome
|
||||
do método ao invés do objeto de parâmetros.
|
||||
|
||||
Os seguintes métodos estão disponíveis:
|
||||
|
||||
| Método | Executa em | Parâmetros | Retorno | Descrição |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| **hasAttachment** | Primeiro Elemento | - | `boolean` | Indica se o campo possuí anexo (tem descrição e o anexo está na tabela de anexos) |
|
||||
| **isValid** | Primeiro Elemento | - | `boolean` | Indica se o campo está válido. Caso ele possua um valor (foi feito upload do anexo), mas o anexo não está na tabela de anexos, indicará campo inválido. Este método é executado em um único campo |
|
||||
| **deleteAttachment** | Todos Elementos | - | `JQuery` | Remove o anexo do campo. Útil para quando excluir uma linha de uma tabela Pai Filho |
|
||||
| **showActionButton** | Todos Elementos | - | `JQuery` | Exibe o botão de ação |
|
||||
| **hideActionButton** | Todos Elementos | - | `JQuery` | Oculta o botão de ação |
|
||||
| **prefixName** | Todos Elementos | string\|boolean | `JQuery` | Altera o prefixName para os elementos |
|
||||
| **filename** | Todos Elementos | string, string\|boolean | `JQuery` | Altera o filename configurado para os elementos. Pode passar, como segundo parâmetro, o prefixName |
|
||||
|
||||
Exemplos:
|
||||
|
||||
```javascript
|
||||
if ($("#cnh").fluigFormAttachment("hasAttachment")) {
|
||||
// Exemplo: habilitar outro campo de preenchimento
|
||||
}
|
||||
|
||||
function beforeSendValidate(numState, nextState) {
|
||||
if (!$("#cnh").fluigFormAttachment("isValid")) {
|
||||
throw "O Anexo da CNH não foi enviado corretamente. Remova-o e envie novamente";
|
||||
}
|
||||
}
|
||||
|
||||
// Removendo anexos da Pai Filho ao excluir linha
|
||||
$("#tabelaPaiFilho").on("click", ".removeItem", function() {
|
||||
$(".anexos", $(this).closest("tr")).fluigFormAttachment("deleteAttachment");
|
||||
fnWdkRemoveChild(this);
|
||||
});
|
||||
|
||||
// Habilitando/Desabilitando a ação de acordo com o preenchimento de um campo
|
||||
$("#descricao").on("change", function () {
|
||||
this.value = this.value.trim();
|
||||
|
||||
if (!this.value.length) {
|
||||
$("#anexo").fluigFormAttachment("hideActionButton");
|
||||
return;
|
||||
}
|
||||
|
||||
// Trocando o filename pra ser dinâmico com a descrição
|
||||
// Caso exista uma descrição igual nos anexos exibirá erro
|
||||
// no momento de selecionar o arquivo.
|
||||
$("#anexo")
|
||||
.data("filename", this.value)
|
||||
.fluigFormAttachment("showActionButton")
|
||||
;
|
||||
|
||||
// Altera o filename igual ao exemplo anterior
|
||||
$("#anexo").fluigFormAttachment("filename", this.value).fluigFormAttachment("showActionButton");
|
||||
|
||||
// Altera prefixName no componente
|
||||
$("#anexo").fluigFormAttachment("prefixName", true);
|
||||
// ou
|
||||
$("#anexo").fluigFormAttachment("prefixName", "novoprefixo");
|
||||
});
|
||||
```
|
||||
|
||||
## Contribuições
|
||||
|
||||
Sinta-se à vontade para indicar bugs e sugestões abrindo issues.
|
||||
138
forms/40213 - checklist/auditoria_prototipo.html
Normal file
138
forms/40213 - checklist/auditoria_prototipo.html
Normal file
@ -0,0 +1,138 @@
|
||||
<html>
|
||||
<head>
|
||||
<link type="text/css" rel="stylesheet" href="/style-guide/css/fluig-style-guide.min.css" />
|
||||
<script type="text/javascript" src="/portal/resources/js/jquery/jquery.js"></script>
|
||||
<script type="text/javascript" src="/portal/resources/js/jquery/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="/portal/resources/js/mustache/mustache-min.js"></script>
|
||||
<script type="text/javascript" src="/style-guide/js/fluig-style-guide.min.js" charset="utf-8"></script>
|
||||
<script type="text/javascript" src="./fluigFormAttachment.js"></script>
|
||||
<link type="text/css" rel="stylesheet" href="./assets/css/checklist.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="fluig-style-guide">
|
||||
<form name="form" role="form">
|
||||
<div class="container-fluid audit-shell">
|
||||
<div class="audit-status">
|
||||
<span class="status-pill" id="profileBadge">Perfil: Loja</span>
|
||||
<span class="status-pill" id="progressBadge">Evidências: 0/0</span>
|
||||
</div>
|
||||
|
||||
<h1 class="audit-main-title">Checklist de Auditoria dos Pilares</h1>
|
||||
|
||||
<section class="audit-section intro-data-section">
|
||||
<div class="instruction-section">
|
||||
<div class="instruction-copy">
|
||||
<div class="instruction-head">
|
||||
<div class="instruction-icon">i</div>
|
||||
<div class="instruction-title">Envie as fotos dos pilares</div>
|
||||
</div>
|
||||
<div class="instruction-steps">
|
||||
<span>1. Clique em um <strong>PILAR</strong></span>
|
||||
<span>3. Clique em <strong>ANEXAR</strong> para enviar a foto solicitada</span>
|
||||
<span>5. Envie para concluir</span>
|
||||
<span>2. Verifique as <strong>INSTRUÇÕES</strong></span>
|
||||
<span>4. Confira em <strong>VISUALIZAR</strong></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="intro-divider"></div>
|
||||
|
||||
<div class="audit-context-card">
|
||||
<div class="section-title">Dados da Auditoria</div>
|
||||
<div class="row audit-context-row">
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<label class="audit-label" for="loja">Loja</label>
|
||||
<input type="text" class="form-control audit-input" name="loja" id="loja" />
|
||||
</div>
|
||||
<div class="col-md-3 col-sm-6">
|
||||
<label class="audit-label" for="auditor">Analista</label>
|
||||
<input type="text" class="form-control audit-input" name="auditor" id="auditor" />
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-4">
|
||||
<label class="audit-label" for="dataAuditoria">Data</label>
|
||||
<input type="date" class="form-control audit-input" name="dataAuditoria" id="dataAuditoria" />
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-4">
|
||||
<label class="audit-label" for="ciclo">Ciclo</label>
|
||||
<input type="text" class="form-control audit-input" name="ciclo" id="ciclo" placeholder="Ex: 2026-03" />
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-4">
|
||||
<label class="audit-label" for="regional">Regional</label>
|
||||
<input type="text" class="form-control audit-input" name="regional" id="regional" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="nc-box" id="naoConformeBox" style="display:none;">
|
||||
<div class="nc-title">Pendências para correção</div>
|
||||
<div class="nc-list" id="naoConformeList"></div>
|
||||
</div>
|
||||
|
||||
<section class="audit-section progress-section">
|
||||
<h2 class="section-title">Progresso da Auditoria</h2>
|
||||
<div class="progress-inline">
|
||||
<div class="progress-track">
|
||||
<div class="progress-fill" id="globalProgressFill"></div>
|
||||
</div>
|
||||
<div class="progress-percent" id="globalProgressPercent">0%</div>
|
||||
</div>
|
||||
<div class="progress-meta" id="globalProgressMeta">0 de 0 fotos enviadas</div>
|
||||
</section>
|
||||
|
||||
<div class="row audit-card">
|
||||
<div class="col-md-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="audit-score" id="scoreFinal">0%</div>
|
||||
<small>Score final</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="audit-score" id="pontosObtidos">0</div>
|
||||
<small>Pontos obtidos</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="audit-score" id="pontosPossiveis">0</div>
|
||||
<small>Pontos possíveis</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="audit-score" id="classificacao">-</div>
|
||||
<small>Classificação</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="section-title pilares-title">Pilares Analisados</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="pilaresContainer"></div>
|
||||
</div>
|
||||
<div class="audit-send-wrap">
|
||||
<button type="button" class="btn btn-primary audit-send-btn" id="btnEnviarForm">Finalizar</button>
|
||||
</div>
|
||||
<input type="hidden" name="auditoriaPayload" id="auditoriaPayload" />
|
||||
<input type="hidden" name="temNaoConforme" id="temNaoConforme" value="false" />
|
||||
<input type="hidden" name="qtdNaoConforme" id="qtdNaoConforme" value="0" />
|
||||
<input type="hidden" name="listaNaoConforme" id="listaNaoConforme" value="" />
|
||||
<input type="hidden" name="saidaAnalise" id="saidaAnalise" value="CONFORME" />
|
||||
<input type="hidden" name="usuarioRetorno" id="usuarioRetorno" value="" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="./assets/js/checklist.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
585
forms/40213 - checklist/checklist.css
Normal file
585
forms/40213 - checklist/checklist.css
Normal file
@ -0,0 +1,585 @@
|
||||
body { background: #ffffff; }
|
||||
.audit-shell {
|
||||
background: #f4f8fd;
|
||||
border: 1px solid #dbe4ee;
|
||||
border-radius: 14px;
|
||||
box-shadow: 0 4px 14px rgba(15, 23, 42, 0.06);
|
||||
padding: 10px 10px 14px 10px;
|
||||
margin: 14px auto 0 auto;
|
||||
max-width: 1140px;
|
||||
}
|
||||
.audit-section {
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 14px;
|
||||
background: #ffffff;
|
||||
padding: 12px;
|
||||
margin-bottom: 10px;
|
||||
box-shadow: 0 2px 6px rgba(15, 23, 42, 0.05);
|
||||
}
|
||||
h1.audit-main-title {
|
||||
margin: 2px 0 10px 0;
|
||||
font-size: 18px !important;
|
||||
line-height: 1.2;
|
||||
font-weight: 700 !important;
|
||||
color: #ffffff !important;
|
||||
background: #0b556b;
|
||||
border-radius: 10px;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
.section-title {
|
||||
margin: 0 0 10px 0;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
color: #1e293b;
|
||||
}
|
||||
.audit-status {
|
||||
display: none;
|
||||
}
|
||||
.progress-section {
|
||||
padding: 5px 10px 5px 10px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
.progress-section .section-title {
|
||||
font-size: 16px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.audit-context-card .section-title {
|
||||
font-size: 17px;
|
||||
}
|
||||
.progress-inline {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr auto;
|
||||
gap: 16px;
|
||||
align-items: center;
|
||||
}
|
||||
.progress-track {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
border-radius: 999px;
|
||||
background: #e6ebf2;
|
||||
overflow: hidden;
|
||||
}
|
||||
.progress-fill {
|
||||
width: 0%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, #3ea9c8 0%, #3ea9c8 100%);
|
||||
transition: width .18s ease-in-out;
|
||||
}
|
||||
.progress-percent {
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
color: #0f172a;
|
||||
font-weight: 700;
|
||||
min-width: 42px;
|
||||
text-align: right;
|
||||
}
|
||||
.progress-meta {
|
||||
margin-top: 3px;
|
||||
font-size: 9px;
|
||||
color: #52637b;
|
||||
font-weight: 600;
|
||||
}
|
||||
.instruction-section {
|
||||
display: block;
|
||||
background: #ffffff;
|
||||
}
|
||||
.intro-data-section {
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
background: linear-gradient(90deg, #f4f8fd 0%, #edf3fa 100%);
|
||||
}
|
||||
.intro-data-section .instruction-section {
|
||||
padding: 12px;
|
||||
border-radius: 14px 14px 0 0;
|
||||
background: #ffffff;
|
||||
}
|
||||
.intro-divider {
|
||||
height: 1px;
|
||||
background: #dfe7f0;
|
||||
}
|
||||
.instruction-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.instruction-icon {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 999px;
|
||||
background: #3ea9c8;
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: 700;
|
||||
line-height: 34px;
|
||||
text-align: center;
|
||||
}
|
||||
.instruction-title {
|
||||
font-size: 16px;
|
||||
color: #1f2f46;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.instruction-steps {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(160px, 1fr));
|
||||
gap: 6px 16px;
|
||||
font-size: 10px;
|
||||
color: #334155;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.instruction-steps span {
|
||||
display: inline-block;
|
||||
border: 1px solid #b9d4ea;
|
||||
background: #f4f9ff;
|
||||
color: #0f3f66;
|
||||
border-radius: 999px;
|
||||
padding: 4px 9px;
|
||||
width: fit-content;
|
||||
}
|
||||
.status-pill {
|
||||
background: #eef5fb;
|
||||
border: 1px solid #d9e8f6;
|
||||
color: #0b556b;
|
||||
border-radius: 999px;
|
||||
padding: 6px 10px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.audit-context-card {
|
||||
background: #ffffff;
|
||||
padding: 12px;
|
||||
border-radius: 0 0 14px 14px;
|
||||
}
|
||||
.audit-context-row > div {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.audit-label {
|
||||
font-size: 12px;
|
||||
letter-spacing: 0.3px;
|
||||
color: #16486a;
|
||||
margin-bottom: 4px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.label-icon { opacity: 0.8; margin-right: 4px; }
|
||||
.audit-input {
|
||||
height: 32px;
|
||||
font-size: 12px;
|
||||
border-color: #c9d7e7;
|
||||
border-radius: 7px;
|
||||
padding: 5px 9px;
|
||||
}
|
||||
.audit-input:focus {
|
||||
border-color: #74a5d3;
|
||||
box-shadow: 0 0 0 2px rgba(34, 93, 143, 0.12);
|
||||
}
|
||||
.audit-card { margin-top: 12px; }
|
||||
.audit-score { font-size: 22px; font-weight: 700; }
|
||||
.audit-score small { font-size: 12px; font-weight: 400; color: #7f8c8d; display: block; }
|
||||
#pilaresContainer {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(220px, 1fr));
|
||||
gap: 14px;
|
||||
background: #f4f8fd;
|
||||
border: 0;
|
||||
border-radius: 10px;
|
||||
padding: 8px 12px 10px 12px;
|
||||
}
|
||||
h2.section-title.pilares-title {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 17px !important;
|
||||
}
|
||||
.audit-send-wrap {
|
||||
margin-top: 10px;
|
||||
text-align: right;
|
||||
padding: 10px 12px 2px 12px;
|
||||
border-top: 1px solid #dbe5f0;
|
||||
}
|
||||
.audit-send-btn {
|
||||
min-width: 120px;
|
||||
height: 38px;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
background: #0b556b;
|
||||
border-color: #0b556b;
|
||||
}
|
||||
.audit-send-btn:hover,
|
||||
.audit-send-btn:focus {
|
||||
background: #0a4b5f;
|
||||
border-color: #0a4b5f;
|
||||
}
|
||||
.pilar-panel {
|
||||
border: 1px solid #d6e1ee;
|
||||
border-radius: 12px;
|
||||
background: #ffffff;
|
||||
padding: 8px;
|
||||
min-height: 108px;
|
||||
box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08);
|
||||
transition: box-shadow .18s ease, transform .18s ease;
|
||||
}
|
||||
.pilar-panel:hover {
|
||||
box-shadow: 0 10px 20px rgba(15, 23, 42, 0.12);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
.pilar-panel.is-open {
|
||||
grid-column: 1 / -1;
|
||||
box-shadow: 0 12px 24px rgba(15, 23, 42, 0.14);
|
||||
}
|
||||
.pilar-summary-card {
|
||||
grid-column: span 3;
|
||||
border: 1px solid #d6e1ee;
|
||||
border-radius: 12px;
|
||||
background: #ffffff;
|
||||
padding: 10px 12px;
|
||||
box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08);
|
||||
}
|
||||
.summary-title {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
color: #000000;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.summary-item {
|
||||
font-size: 12px;
|
||||
line-height: 1.45;
|
||||
color: #000000;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.summary-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.summary-name {
|
||||
color: #000000;
|
||||
font-weight: 700;
|
||||
}
|
||||
.pilar-head {
|
||||
background: #ffffff;
|
||||
border: 0;
|
||||
padding: 6px;
|
||||
display: grid;
|
||||
gap: 6px;
|
||||
cursor: pointer;
|
||||
border-radius: 10px;
|
||||
transition: background .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease;
|
||||
}
|
||||
.pilar-head:hover {
|
||||
background: #f8fbff;
|
||||
box-shadow: none;
|
||||
transform: none;
|
||||
}
|
||||
.pilar-head.is-open {
|
||||
background: #f4f8fd;
|
||||
box-shadow: none;
|
||||
}
|
||||
.pilar-title-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
.pilar-state-dot {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 999px;
|
||||
background: #94a3b8;
|
||||
border: 1px solid rgba(148, 163, 184, 0.25);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #ffffff;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
}
|
||||
.pilar-state-dot.state-pending { background: #dc2626; border-color: rgba(220, 38, 38, 0.4); }
|
||||
.pilar-state-dot.state-progress { background: #d18a2f; border-color: rgba(209, 138, 47, 0.35); }
|
||||
.pilar-state-dot.state-done { background: #2f9d78; border-color: rgba(47, 157, 120, 0.35); }
|
||||
.pilar-title {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
color: #000000;
|
||||
letter-spacing: 0.2px;
|
||||
}
|
||||
.pilar-photo-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
color: #243549;
|
||||
}
|
||||
.pilar-photo-count {
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
color: #000000;
|
||||
}
|
||||
.pilar-missing {
|
||||
font-size: 10px;
|
||||
color: #000000;
|
||||
font-weight: 600;
|
||||
}
|
||||
.pilar-mini-track {
|
||||
height: 5px;
|
||||
border-radius: 999px;
|
||||
background: #e4eaf1;
|
||||
overflow: hidden;
|
||||
}
|
||||
.pilar-mini-fill {
|
||||
display: block;
|
||||
width: 0%;
|
||||
height: 100%;
|
||||
border-radius: inherit;
|
||||
background: #5d8fbe;
|
||||
transition: width .18s ease;
|
||||
}
|
||||
.pilar-foot {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
}
|
||||
.pilar-count {
|
||||
font-size: 10px;
|
||||
color: #000000;
|
||||
font-weight: 600;
|
||||
}
|
||||
.pilar-open-cta {
|
||||
font-size: 10px;
|
||||
color: #000000;
|
||||
font-weight: 700;
|
||||
}
|
||||
.pilar-body { padding: 8px 0 0 0; }
|
||||
.audit-row {
|
||||
border: 1px solid #d4e0ee;
|
||||
border-radius: 12px;
|
||||
padding: 10px;
|
||||
margin-bottom: 8px;
|
||||
background: #f9fcff;
|
||||
}
|
||||
.audit-row-main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
.audit-row-top {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1.3fr;
|
||||
gap: 10px;
|
||||
align-items: start;
|
||||
}
|
||||
.audit-row[data-max-fotos="1"] .audit-row-top,
|
||||
.audit-row[data-max-fotos="2"] .audit-row-top {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.audit-info {
|
||||
min-width: 0;
|
||||
}
|
||||
.indicador-cell { font-weight: 700; color: #143653; font-size: 15px; line-height: 1.25; }
|
||||
.indicador-help {
|
||||
margin-top: 5px;
|
||||
font-size: 12px;
|
||||
color: #5c6f82;
|
||||
line-height: 1.35;
|
||||
background: #f7fbff;
|
||||
border: 1px solid #dce8f5;
|
||||
border-radius: 8px;
|
||||
padding: 7px 9px;
|
||||
}
|
||||
.indicador-help ul {
|
||||
margin: 0;
|
||||
padding-left: 18px;
|
||||
}
|
||||
.indicador-help li {
|
||||
margin: 2px 0;
|
||||
}
|
||||
.indicador-help .indicador-group {
|
||||
list-style: none;
|
||||
margin-top: 6px;
|
||||
margin-left: -18px;
|
||||
font-weight: 700;
|
||||
color: #36597b;
|
||||
}
|
||||
.meta-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(100px, 1fr));
|
||||
gap: 10px;
|
||||
}
|
||||
.meta-box {
|
||||
border: 1px solid #d7e2ef;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
padding: 8px 10px;
|
||||
min-height: 62px;
|
||||
}
|
||||
.meta-label { font-size: 11px; color: #64748b; text-transform: uppercase; }
|
||||
.meta-value { font-size: 20px; color: #1f2937; margin-top: 4px; font-weight: 600; }
|
||||
.meta-value .form-control {
|
||||
font-size: 14px;
|
||||
height: 34px;
|
||||
padding: 4px 10px;
|
||||
}
|
||||
.anexo-wrap, .resultado-wrap, .just-wrap { margin-top: 0; }
|
||||
.penalidade-badge {
|
||||
font-size: 10px !important;
|
||||
font-weight: 700;
|
||||
padding: 2px 8px !important;
|
||||
border-radius: 999px;
|
||||
letter-spacing: 0.2px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.penalidade-badge.label-danger { background: #f7dada; color: #9f2d2d; }
|
||||
.penalidade-badge.label-warning { background: #fff0c7; color: #8a5a00; }
|
||||
.penalidade-badge.label-info { background: #dceefe; color: #1f5f9b; }
|
||||
.penalidade-badge.label-success { background: #dff5e4; color: #1f7a3d; }
|
||||
.penalidade-badge.label-default { background: #eceff3; color: #5f6b7a; }
|
||||
.anexos-cell {
|
||||
background: #edf4fb;
|
||||
border: 1px solid #cfe0f3;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
.anexo-auto-hint { font-size: 11px; color: #5f7d9a; margin-top: 5px; }
|
||||
.anexo-progress {
|
||||
margin-top: 7px;
|
||||
font-size: 12px;
|
||||
color: #2d4f70;
|
||||
font-weight: 600;
|
||||
}
|
||||
.anexo-progress-count {
|
||||
display: inline-block;
|
||||
min-width: 40px;
|
||||
text-align: center;
|
||||
border-radius: 999px;
|
||||
background: #d9e9fa;
|
||||
color: #1d4f7c;
|
||||
padding: 1px 8px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.anexo-multi-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(220px, 1fr));
|
||||
gap: 7px;
|
||||
}
|
||||
.audit-row[data-max-fotos="1"] .anexo-multi-list,
|
||||
.audit-row[data-max-fotos="2"] .anexo-multi-list {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.anexo-slot {
|
||||
background: #ffffff;
|
||||
border: 1px solid #c9dbef;
|
||||
border-radius: 8px;
|
||||
padding: 5px;
|
||||
}
|
||||
.audit-row[data-max-fotos="1"] .anexo-slot,
|
||||
.audit-row[data-max-fotos="2"] .anexo-slot {
|
||||
max-width: 100%;
|
||||
}
|
||||
.anexo-slot.slot-filled {
|
||||
border-color: #8fc1a3;
|
||||
box-shadow: inset 0 0 0 1px rgba(79, 161, 109, 0.2);
|
||||
}
|
||||
.anexo-slot.extra-slot { display: none; }
|
||||
.anexo-multi-list.expanded .anexo-slot.extra-slot { display: block; }
|
||||
.anexo-slot-label {
|
||||
font-size: 11px;
|
||||
color: #4b5f74;
|
||||
margin-bottom: 3px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.anexo-toggle-wrap {
|
||||
margin-top: 8px;
|
||||
text-align: right;
|
||||
}
|
||||
.anexo-toggle {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: #24557d !important;
|
||||
border-color: #b5cbe3;
|
||||
background: #f4f8fd;
|
||||
padding: 3px 10px;
|
||||
}
|
||||
.anexos-cell .fluigFormAttachmentComponent {
|
||||
width: 100%;
|
||||
}
|
||||
.anexos-cell .fluigFormAttachmentComponent input {
|
||||
height: 34px;
|
||||
border-color: #c7d8ec;
|
||||
background: #fff;
|
||||
}
|
||||
.anexos-cell .fluigFormAttachmentComponent .btn {
|
||||
height: 34px !important;
|
||||
min-width: 40px;
|
||||
}
|
||||
.just-wrap input {
|
||||
border-radius: 10px;
|
||||
}
|
||||
.audit-row-target { background: #fff8e6 !important; }
|
||||
.nc-box {
|
||||
border: 1px solid #f5d0d0;
|
||||
background: #fff6f6;
|
||||
border-radius: 10px;
|
||||
padding: 10px 12px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.nc-title {
|
||||
font-weight: 700;
|
||||
color: #9f2d2d;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.nc-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
.nc-item {
|
||||
background: #fff;
|
||||
border: 1px solid #f1b7b7;
|
||||
color: #7f1d1d;
|
||||
border-radius: 999px;
|
||||
padding: 4px 10px;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.anexo-view { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
|
||||
.anexo-thumb-inline {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
object-fit: cover;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
background: #fff;
|
||||
}
|
||||
.anexo-file {
|
||||
font-size: 11px;
|
||||
max-width: 170px;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 4px;
|
||||
padding: 4px 6px;
|
||||
background: #fafafa;
|
||||
}
|
||||
.anexo-text {
|
||||
background: #fff;
|
||||
font-size: 12px;
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.section-title { font-size: 22px; }
|
||||
.progress-percent { font-size: 14px; min-width: 38px; }
|
||||
.progress-meta { font-size: 14px; }
|
||||
.instruction-title { font-size: 16px; }
|
||||
.instruction-steps { grid-template-columns: 1fr; font-size: 14px; }
|
||||
.audit-label { font-size: 13px; }
|
||||
.audit-input { height: 40px; font-size: 15px; }
|
||||
.audit-row-top { grid-template-columns: 1fr; }
|
||||
.meta-grid { grid-template-columns: repeat(2, minmax(100px, 1fr)); }
|
||||
.anexo-multi-list { grid-template-columns: 1fr; }
|
||||
#pilaresContainer { grid-template-columns: repeat(2, minmax(180px, 1fr)); }
|
||||
.pilar-panel.is-open { grid-column: auto; }
|
||||
.pilar-summary-card { grid-column: span 2; }
|
||||
.audit-send-wrap { padding: 8px 0 0 0; border-top: 0; }
|
||||
.audit-send-btn { width: 100%; }
|
||||
}
|
||||
859
forms/40213 - checklist/checklist.js
Normal file
859
forms/40213 - checklist/checklist.js
Normal file
@ -0,0 +1,859 @@
|
||||
var INDICADORES = [
|
||||
{ pilar: "PILAR ARQUITETURA", indicador: "Fotos da Fachada (letreiro luminoso com acessibilidade)", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 },
|
||||
{ pilar: "PILAR ARQUITETURA", indicador: "Fotos de todos equipamentos", detalhe: "Mobiliario, gondolas, tela digital, caixa, mesas, cavalete, baianas e coringa.", penalidade: "GRAVE", peso: 3, maxFotos: 8 },
|
||||
{ pilar: "PILAR ARQUITETURA", indicador: "Fotos da iluminacao (luzes da vitrine e interior da loja)", penalidade: "GRAVE", peso: 3, maxFotos: 2 },
|
||||
{ pilar: "PILAR ARQUITETURA", indicador: "Foto do coletor de embalagem (Botirecicla)", penalidade: "MEDIA", peso: 2, maxFotos: 1 },
|
||||
{ pilar: "PILAR ARQUITETURA", indicador: "Fotos dos mobshops da loja", penalidade: "MEDIA", peso: 2, maxFotos: 2 },
|
||||
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto da vitrine (identificando todas comunicacoes)", penalidade: "GRAVE", peso: 3, maxFotos: 1 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos enquadrando cada sessao", detalhe: "Feminina, masculina, infantil, cuidados, cabelos, presentes e maquiagem.", penalidade: "GRAVE", peso: 3, maxFotos: 7 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Fotos das comunicacoes destaques e storytelling", detalhe: "Feminina, masculina e cuidados.", penalidade: "GRAVE", peso: 3, maxFotos: 3 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto das embalagens", penalidade: "MEDIA", peso: 2, maxFotos: 1 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do QR-Code de politica de privacidade", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do codigo de defesa do consumidor", penalidade: "GRAVISSIMA", peso: 4, maxFotos: 1 },
|
||||
{ pilar: "PILAR VISUAL MERCHANDISING", indicador: "Foto do verso da tela digital", penalidade: "GRAVE", peso: 3, maxFotos: 1 },
|
||||
|
||||
{ pilar: "PILAR EXPOSIÇÃO", indicador: "Fotos das datas de validade dos produtos", detalheBullets: [
|
||||
"# Produtos O Boticario",
|
||||
"Cooffe Woman",
|
||||
"Linha Casa 214",
|
||||
"5 itens da linha Botik",
|
||||
"Dr. Botica",
|
||||
"Portinari",
|
||||
"Celebre",
|
||||
"Floratta",
|
||||
"Arbo",
|
||||
"Shampoo e Condicionador - Linha Match",
|
||||
"5 provadores de Make B",
|
||||
"5 provadores da linha Intense",
|
||||
"# Produtos QDB?",
|
||||
"2 itens da linha Instamatte",
|
||||
"Protetor solar facial",
|
||||
"Corretivo liquido",
|
||||
"Mascara para cilios",
|
||||
"10 batons hidratantes",
|
||||
"Shampoo e Condicionador Au.migos"
|
||||
], penalidade: "GRAVISSIMA", peso: 4, maxFotos: 22 },
|
||||
{ pilar: "PILAR EXPOSIÇÃO", indicador: "Foto dos aplicadores descartaveis", penalidade: "MEDIA", peso: 2, maxFotos: 1 },
|
||||
{ pilar: "PILAR EXPOSIÇÃO", indicador: "Foto da exposição da sessão Make.B", penalidade: "GRAVE", peso: 3, maxFotos: 1 },
|
||||
{ pilar: "PILAR EXPOSIÇÃO", indicador: "Foto da exposição da sessão Intense", penalidade: "GRAVE", peso: 3, maxFotos: 1 },
|
||||
|
||||
{ pilar: "PILAR UNIFORME", indicador: "Fotos dos uniformes (do pescoco para baixo)", penalidade: "GRAVE", peso: 3, maxFotos: 2 },
|
||||
{ pilar: "PILAR INFORMATIVA", indicador: "Foto do espaco onde ficam os produtos destinados a logistica", penalidade: "NAO PONTUA", peso: 0, maxFotos: 1 }
|
||||
];
|
||||
|
||||
var FATORES = {
|
||||
"CONFORME": 1,
|
||||
"NAO_CONFORME": 0
|
||||
};
|
||||
var ALLOWED_EXT = { "pdf": true, "jpg": true, "jpeg": true, "png": true };
|
||||
var REQUIRE_ATTACHMENT = false; // mude para true para voltar a exigir anexo
|
||||
var CURRENT_PROFILE = "LOJA";
|
||||
var KNOWN_ATTACHMENT_KEYS = {};
|
||||
// Ajuste os codigos de atividade do seu processo aqui.
|
||||
var FLOW_CONFIG = {
|
||||
lojaStates: [0, 4],
|
||||
analistaStates: [5]
|
||||
};
|
||||
|
||||
function badgeClass(penalidade) {
|
||||
if (penalidade === "GRAVISSIMA") return "danger";
|
||||
if (penalidade === "GRAVE") return "warning";
|
||||
if (penalidade === "MEDIA") return "info";
|
||||
if (penalidade === "LEVE") return "default";
|
||||
return "primary";
|
||||
}
|
||||
|
||||
function getClassificacao(score) {
|
||||
if (score >= 90) return "Excelente";
|
||||
if (score >= 80) return "Bom";
|
||||
if (score >= 70) return "Regular";
|
||||
return "Critico";
|
||||
}
|
||||
|
||||
function toTitleCase(text) {
|
||||
var s = String(text || "").toLowerCase().trim();
|
||||
if (!s) return "";
|
||||
var words = s.split(/\s+/);
|
||||
for (var i = 0; i < words.length; i++) {
|
||||
var w = words[i];
|
||||
if (!w) continue;
|
||||
words[i] = w.charAt(0).toUpperCase() + w.slice(1);
|
||||
}
|
||||
return words.join(" ");
|
||||
}
|
||||
|
||||
function indicadorCountLabel(n) {
|
||||
return n === 1 ? "1 indicador" : (n + " indicadores");
|
||||
}
|
||||
|
||||
function renderDetalhe(item) {
|
||||
if (Array.isArray(item.detalheBullets) && item.detalheBullets.length) {
|
||||
var html = "<div class='indicador-help'><ul>";
|
||||
for (var i = 0; i < item.detalheBullets.length; i++) {
|
||||
var txt = String(item.detalheBullets[i] || "");
|
||||
if (txt.indexOf("# ") === 0) {
|
||||
html += "<li class='indicador-group'>" + escapeHtml(txt.substring(2)) + "</li>";
|
||||
} else {
|
||||
html += "<li>" + escapeHtml(txt) + "</li>";
|
||||
}
|
||||
}
|
||||
html += "</ul></div>";
|
||||
return html;
|
||||
}
|
||||
if (item.detalhe) {
|
||||
return "<div class='indicador-help'>" + escapeHtml(item.detalhe) + "</div>";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function getResumoPilaresHtml() {
|
||||
var rows = [
|
||||
{ nome: "Arquitetura", texto: "Fachada da loja e estrutura física, evidenciando marca, iluminação, acessibilidade, equipamentos e estado geral do ambiente." },
|
||||
{ nome: "Visual Merchandising", texto: "Vitrine e área interna com comunicação vigente, padrão visual, organização, embalagens corretas e bom estado dos materiais." },
|
||||
{ nome: "Exposição", texto: "Exposição de produtos em vitrine e interior, com precificação, validade visível, testes, preenchimento de prateleiras e uso de aplicadores." },
|
||||
{ nome: "Uniforme", texto: "Equipe em atendimento com uso correto de uniforme, calçados e acessórios conforme padrão estabelecido." },
|
||||
{ nome: "Informativa", texto: "Ambiente com foco em informações operacionais, logística reversa, armazenamento de materiais e comunicação de serviços." }
|
||||
];
|
||||
var html = "<div class='pilar-summary-card'><div class='summary-title'>Guia dos Pilares</div>";
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
html += "<div class='summary-item'><span class='summary-name'>" + escapeHtml(rows[i].nome) + ":</span> " + escapeHtml(rows[i].texto) + "</div>";
|
||||
}
|
||||
html += "</div>";
|
||||
return html;
|
||||
}
|
||||
|
||||
function buildAnexoInputs(index, maxFotos) {
|
||||
var total = parseInt(maxFotos, 10);
|
||||
if (isNaN(total) || total < 1) total = 1;
|
||||
var html = "<div class='anexo-multi-list'>";
|
||||
for (var i = 1; i <= total; i++) {
|
||||
var anexoId = "anexo_" + index + "_" + i;
|
||||
var anexoFileName = "EVID_" + index + "_F" + i;
|
||||
var extraClass = i > 2 ? " extra-slot" : "";
|
||||
html += ""
|
||||
+ "<div class='anexo-slot" + extraClass + "'>"
|
||||
+ "<div class='anexo-slot-label'>Foto " + i + " de " + total + "</div>"
|
||||
+ "<input type='text' class='form-control anexo-plugin' readonly id='" + anexoId + "' name='" + anexoId + "' data-filename='" + anexoFileName + "' data-accept='image/*,.pdf' data-required='true' />"
|
||||
+ "</div>";
|
||||
}
|
||||
html += "</div>";
|
||||
if (total > 2) {
|
||||
html += "<div class='anexo-toggle-wrap'><button type='button' class='btn btn-default btn-sm anexo-toggle' data-expanded='false' data-total='" + total + "'>Mostrar todas (" + total + ")</button></div>";
|
||||
}
|
||||
return html;
|
||||
}
|
||||
|
||||
function buildAuditRow(item, index) {
|
||||
var selectResultado = ""
|
||||
+ "<select class='form-control resultado'>"
|
||||
+ "<option value=''>Selecione</option>"
|
||||
+ "<option value='CONFORME'>Conforme</option>"
|
||||
+ "<option value='NAO_CONFORME'>Nao Conforme</option>"
|
||||
+ "</select>";
|
||||
var maxFotos = parseInt(item.maxFotos, 10);
|
||||
if (isNaN(maxFotos) || maxFotos < 1) maxFotos = 1;
|
||||
var anexosHtml = buildAnexoInputs(index, maxFotos);
|
||||
|
||||
return ""
|
||||
+ "<div class='audit-row' data-pilar='" + escapeHtml(item.pilar) + "' data-indicador='" + escapeHtml(item.indicador) + "' data-penalidade='" + escapeHtml(item.penalidade) + "' data-max-fotos='" + maxFotos + "'>"
|
||||
+ "<div class='audit-row-main'>"
|
||||
+ "<div class='audit-row-top'>"
|
||||
+ "<div class='audit-info'>"
|
||||
+ "<div class='indicador-cell'>" + escapeHtml(item.indicador) + "</div>"
|
||||
+ renderDetalhe(item)
|
||||
+ "</div>"
|
||||
+ "<div class='anexos-cell anexo-wrap'>"
|
||||
+ anexosHtml
|
||||
+ "<div class='anexo-progress'><span class='anexo-progress-count'>0/" + maxFotos + "</span> fotos enviadas</div>"
|
||||
+ "<div class='anexo-auto-hint'>Use os botoes de upload/visualizar em cada foto.</div>"
|
||||
+ "</div>"
|
||||
+ "</div>"
|
||||
+ "<div class='meta-grid col-analista'>"
|
||||
+ "<div class='meta-box'><div class='meta-label'>Penalidade</div><div class='meta-value'><span class='label label-default penalidade-badge penalidade-status'>Aguardando</span></div></div>"
|
||||
+ "<div class='meta-box'><div class='meta-label'>Peso</div><div class='meta-value'><span class='peso'>" + item.peso + "</span></div></div>"
|
||||
+ "<div class='meta-box'><div class='meta-label'>Fator</div><div class='meta-value fator'>-</div></div>"
|
||||
+ "<div class='meta-box'><div class='meta-label'>Pontuacao</div><div class='meta-value pontuacao'>0</div></div>"
|
||||
+ "<div class='meta-box resultado-wrap'><div class='meta-label'>Resultado</div><div class='meta-value'>" + selectResultado + "</div></div>"
|
||||
+ "</div>"
|
||||
+ "<div class='just-wrap col-analista'><input type='text' class='form-control justificativa' placeholder='Obrigatoria se Nao Conforme' /></div>"
|
||||
+ "</div>"
|
||||
+ "</div>";
|
||||
}
|
||||
|
||||
function montaTabela() {
|
||||
var grupos = {};
|
||||
for (var i = 0; i < INDICADORES.length; i++) {
|
||||
var item = INDICADORES[i];
|
||||
if (!grupos[item.pilar]) grupos[item.pilar] = [];
|
||||
grupos[item.pilar].push(item);
|
||||
}
|
||||
|
||||
var pilares = Object.keys(grupos);
|
||||
var html = "";
|
||||
var rowIndex = 1;
|
||||
for (var p = 0; p < pilares.length; p++) {
|
||||
var nomePilar = pilares[p];
|
||||
var linhas = grupos[nomePilar];
|
||||
var openStyle = " style='display:none;'";
|
||||
var totalFotosPilar = 0;
|
||||
for (var t = 0; t < linhas.length; t++) {
|
||||
totalFotosPilar += parseInt(linhas[t].maxFotos, 10) || 0;
|
||||
}
|
||||
html += "<div class='pilar-panel'>";
|
||||
html += "<div class='pilar-head' data-target='pilarBody" + p + "' data-total-fotos='" + totalFotosPilar + "'>";
|
||||
html += "<div class='pilar-title-row'><span class='pilar-state-dot state-pending' title='Nao iniciado'>✕</span><span class='pilar-title'>" + escapeHtml(toTitleCase(nomePilar.replace("PILAR ", ""))) + "</span></div>";
|
||||
html += "<div class='pilar-photo-row'><span class='pilar-photo-count'>0/" + totalFotosPilar + " fotos</span><span class='pilar-missing'>" + totalFotosPilar + " faltando</span></div>";
|
||||
html += "<div class='pilar-mini-track'><span class='pilar-mini-fill'></span></div>";
|
||||
html += "<div class='pilar-foot'><span class='pilar-count'>" + indicadorCountLabel(linhas.length) + "</span><span class='pilar-open-cta'>Abrir Pilar →</span></div>";
|
||||
html += "</div>";
|
||||
html += "<div class='pilar-body' id='pilarBody" + p + "'" + openStyle + ">";
|
||||
for (var r = 0; r < linhas.length; r++) {
|
||||
html += buildAuditRow(linhas[r], rowIndex);
|
||||
rowIndex++;
|
||||
}
|
||||
html += "</div></div>";
|
||||
}
|
||||
html += getResumoPilaresHtml();
|
||||
|
||||
$("#pilaresContainer").html(html);
|
||||
}
|
||||
|
||||
function getExt(fileName) {
|
||||
var n = (fileName || "").toLowerCase();
|
||||
var pos = n.lastIndexOf(".");
|
||||
return pos > -1 ? n.substring(pos + 1) : "";
|
||||
}
|
||||
|
||||
function escapeHtml(text) {
|
||||
return String(text || "")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
function isImageExt(fileName) {
|
||||
var ext = getExt(fileName);
|
||||
return ext === "jpg" || ext === "jpeg" || ext === "png";
|
||||
}
|
||||
|
||||
function getStateFromUrl(url) {
|
||||
var u = String(url || "");
|
||||
if (!u) return "";
|
||||
var patterns = [
|
||||
/(?:\?|&)WKNumState=(\d+)/i,
|
||||
/(?:\?|&)state=(\d+)/i,
|
||||
/(?:\?|&)stateSequence=(\d+)/i,
|
||||
/(?:\?|&)choosedState=(\d+)/i,
|
||||
/(?:\?|&)numState=(\d+)/i
|
||||
];
|
||||
for (var i = 0; i < patterns.length; i++) {
|
||||
var m = u.match(patterns[i]);
|
||||
if (m && m[1]) return m[1];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function getCurrentState() {
|
||||
var candidates = [];
|
||||
try {
|
||||
candidates.push(window.WKNumState);
|
||||
candidates.push(window.WKCurrentState);
|
||||
candidates.push($("input[name='WKNumState']").val());
|
||||
candidates.push($("input[name='WKCurrentState']").val());
|
||||
candidates.push($("#WKNumState").val());
|
||||
candidates.push($("#WKCurrentState").val());
|
||||
candidates.push(getStateFromUrl(window.location && window.location.href));
|
||||
} catch (e) {}
|
||||
|
||||
try {
|
||||
if (window.parent) {
|
||||
candidates.push(window.parent.WKNumState);
|
||||
candidates.push(window.parent.WKCurrentState);
|
||||
if (window.parent.$) {
|
||||
candidates.push(window.parent.$("input[name='WKNumState']").val());
|
||||
candidates.push(window.parent.$("input[name='WKCurrentState']").val());
|
||||
candidates.push(window.parent.$("#WKNumState").val());
|
||||
candidates.push(window.parent.$("#WKCurrentState").val());
|
||||
}
|
||||
candidates.push(getStateFromUrl(window.parent.location && window.parent.location.href));
|
||||
}
|
||||
} catch (e2) {}
|
||||
|
||||
for (var j = 0; j < candidates.length; j++) {
|
||||
var parsed = parseInt(String(candidates[j] || "").trim(), 10);
|
||||
if (!isNaN(parsed) && parsed > 0) return parsed;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function resolveProfileByState(state) {
|
||||
for (var i = 0; i < FLOW_CONFIG.analistaStates.length; i++) {
|
||||
if (FLOW_CONFIG.analistaStates[i] === state) return "ANALISTA";
|
||||
}
|
||||
for (var j = 0; j < FLOW_CONFIG.lojaStates.length; j++) {
|
||||
if (FLOW_CONFIG.lojaStates[j] === state) return "LOJA";
|
||||
}
|
||||
try {
|
||||
var pageText = (
|
||||
$("h1").first().text()
|
||||
|| $(".page-header h1").first().text()
|
||||
|| (window.parent && window.parent.$ ? window.parent.$("h1").first().text() : "")
|
||||
|| ""
|
||||
).toLowerCase();
|
||||
if (pageText.indexOf("validar planograma") > -1) return "ANALISTA";
|
||||
} catch (e) {}
|
||||
return "LOJA";
|
||||
}
|
||||
|
||||
function getCurrentUserCode() {
|
||||
try {
|
||||
if (window.WCMAPI && window.WCMAPI.userCode) return String(window.WCMAPI.userCode);
|
||||
} catch (e) {}
|
||||
try {
|
||||
if (window.parent && window.parent.WCMAPI && window.parent.WCMAPI.userCode) {
|
||||
return String(window.parent.WCMAPI.userCode);
|
||||
}
|
||||
} catch (e2) {}
|
||||
return "";
|
||||
}
|
||||
|
||||
function getNaoConformes() {
|
||||
var list = [];
|
||||
$(".audit-row").each(function () {
|
||||
var $tr = $(this);
|
||||
if ($tr.find(".resultado").val() === "NAO_CONFORME") {
|
||||
list.push({
|
||||
pilar: $tr.attr("data-pilar") || "",
|
||||
indicador: $tr.attr("data-indicador") || ""
|
||||
});
|
||||
}
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
function renderNaoConformeResumo() {
|
||||
var list = getNaoConformes();
|
||||
var $box = $("#naoConformeBox");
|
||||
var $list = $("#naoConformeList");
|
||||
$list.empty();
|
||||
if (!list.length) {
|
||||
$box.hide();
|
||||
return;
|
||||
}
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var item = list[i] || {};
|
||||
var pilar = item.pilar || "";
|
||||
var indicador = item.indicador || "";
|
||||
var texto = pilar ? (pilar + " - " + indicador) : indicador;
|
||||
$list.append(
|
||||
"<button type='button' class='nc-item' data-pilar='" + escapeHtml(pilar) + "' data-indicador='" + escapeHtml(indicador) + "'>"
|
||||
+ escapeHtml(texto)
|
||||
+ "</button>"
|
||||
);
|
||||
}
|
||||
$box.show();
|
||||
}
|
||||
|
||||
function applyProfileUI() {
|
||||
var isAnalista = CURRENT_PROFILE === "ANALISTA";
|
||||
$(".col-analista").toggle(isAnalista);
|
||||
$(".audit-card").toggle(isAnalista);
|
||||
$(".resultado").prop("disabled", !isAnalista);
|
||||
$(".justificativa").prop("disabled", !isAnalista);
|
||||
if (isAnalista) {
|
||||
$(".anexo-auto-hint").hide();
|
||||
} else {
|
||||
$(".anexo-auto-hint").show();
|
||||
}
|
||||
applyAttachmentActionVisibility();
|
||||
$("#profileBadge").text("Perfil: " + (isAnalista ? "Analista" : "Loja") + " (atividade " + getCurrentState() + ")");
|
||||
}
|
||||
|
||||
function updateCompletionStatus() {
|
||||
var total = 0;
|
||||
var preenchidos = 0;
|
||||
$(".anexo-plugin").each(function () {
|
||||
total++;
|
||||
var nome = ($(this).val() || "").trim();
|
||||
if (nome) preenchidos++;
|
||||
});
|
||||
$("#progressBadge").text("Evidencias: " + preenchidos + "/" + total);
|
||||
var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0;
|
||||
$("#globalProgressFill").css("width", perc + "%");
|
||||
$("#globalProgressPercent").text(perc + "%");
|
||||
$("#globalProgressMeta").text(preenchidos + " de " + total + " fotos enviadas");
|
||||
updatePilarProgress();
|
||||
}
|
||||
|
||||
function updateRowAttachmentProgress($row) {
|
||||
if (!$row || !$row.length) return;
|
||||
var total = 0;
|
||||
var preenchidos = 0;
|
||||
$row.find(".anexo-slot").each(function () {
|
||||
var $slot = $(this);
|
||||
var nome = ($slot.find(".anexo-plugin").val() || "").trim();
|
||||
total++;
|
||||
var temAnexo = !!nome;
|
||||
if (temAnexo) preenchidos++;
|
||||
$slot.toggleClass("slot-filled", temAnexo);
|
||||
});
|
||||
$row.find(".anexo-progress-count").text(preenchidos + "/" + total);
|
||||
}
|
||||
|
||||
function updatePilarProgress() {
|
||||
$(".pilar-panel").each(function () {
|
||||
var $panel = $(this);
|
||||
var total = 0;
|
||||
var preenchidos = 0;
|
||||
$panel.find(".anexo-plugin").each(function () {
|
||||
total++;
|
||||
if (($(this).val() || "").trim()) preenchidos++;
|
||||
});
|
||||
var perc = total > 0 ? Math.round((preenchidos / total) * 100) : 0;
|
||||
var faltantes = Math.max(0, total - preenchidos);
|
||||
$panel.find(".pilar-photo-count").text(preenchidos + "/" + total + " fotos");
|
||||
$panel.find(".pilar-missing").text(faltantes > 0 ? (faltantes + " faltando") : "100% concluido");
|
||||
$panel.find(".pilar-mini-fill").css("width", perc + "%");
|
||||
var $dot = $panel.find(".pilar-state-dot");
|
||||
var cls = "state-pending";
|
||||
var fillColor = "#9fb2c6";
|
||||
var icon = "✕";
|
||||
var dotTitle = "Nao iniciado";
|
||||
if (total > 0 && preenchidos === total) {
|
||||
cls = "state-done";
|
||||
fillColor = "#2f9d78";
|
||||
icon = "✓";
|
||||
dotTitle = "Concluido";
|
||||
} else if (preenchidos > 0) {
|
||||
cls = "state-progress";
|
||||
fillColor = "#d18a2f";
|
||||
icon = "⚠";
|
||||
dotTitle = "Em andamento";
|
||||
}
|
||||
$dot.removeClass("state-pending state-progress state-done").addClass(cls).text(icon).attr("title", dotTitle);
|
||||
$panel.find(".pilar-mini-fill").css("background", fillColor);
|
||||
});
|
||||
}
|
||||
|
||||
function initAttachmentPlugin() {
|
||||
if (typeof $.fn.fluigFormAttachment !== "function") {
|
||||
FLUIGC.toast({
|
||||
title: "Plugin:",
|
||||
message: "fluigFormAttachment.js nao foi carregado.",
|
||||
type: "warning"
|
||||
});
|
||||
return;
|
||||
}
|
||||
$(".anexo-plugin").each(function () {
|
||||
var $f = $(this);
|
||||
if ($f.data("ffaInit")) return;
|
||||
$f.fluigFormAttachment();
|
||||
$f.data("ffaInit", true);
|
||||
});
|
||||
}
|
||||
|
||||
function applyAttachmentActionVisibility() {
|
||||
if (typeof $.fn.fluigFormAttachment !== "function") return;
|
||||
var isAnalista = CURRENT_PROFILE === "ANALISTA";
|
||||
$(".anexo-plugin").each(function () {
|
||||
var $f = $(this);
|
||||
if (!$f.data("ffaInit")) return;
|
||||
if (isAnalista) {
|
||||
$f.fluigFormAttachment("hideActionButton");
|
||||
} else {
|
||||
$f.fluigFormAttachment("showActionButton");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function findNativeSendButtons($root) {
|
||||
var $all = $root.find("button, input[type='button'], input[type='submit'], a");
|
||||
return $all.filter(function () {
|
||||
var $el = $(this);
|
||||
var txt = ($el.is("input") ? ($el.val() || "") : ($el.text() || "")).trim().toLowerCase();
|
||||
if (!txt) return false;
|
||||
return txt === "enviar" || txt.indexOf(" enviar") > -1 || txt.indexOf("enviar ") > -1;
|
||||
});
|
||||
}
|
||||
|
||||
function hideNativeSendButtons() {
|
||||
try {
|
||||
var $local = findNativeSendButtons($(document));
|
||||
$local.not("#btnEnviarForm").css("display", "none");
|
||||
$local.each(function () {
|
||||
var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown");
|
||||
if ($group.length) {
|
||||
$group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none");
|
||||
}
|
||||
});
|
||||
} catch (e) {}
|
||||
try {
|
||||
if (window.parent && window.parent.document) {
|
||||
var $parentDoc = $(window.parent.document);
|
||||
var $parentBtns = findNativeSendButtons($parentDoc);
|
||||
$parentBtns.css("display", "none");
|
||||
$parentBtns.each(function () {
|
||||
var $group = $(this).closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown");
|
||||
if ($group.length) {
|
||||
$group.find(".dropdown-toggle, .btn.dropdown-toggle").css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
// Fallback: oculta toggles "soltos" que sobram no split button.
|
||||
$parentDoc.find(".dropdown-toggle, .btn.dropdown-toggle").filter(function () {
|
||||
var txt = ($(this).text() || "").trim();
|
||||
return txt === "" || txt === "▼" || txt === "▾" || txt === "v";
|
||||
}).each(function () {
|
||||
var $toggle = $(this);
|
||||
var $group = $toggle.closest(".btn-group, .btn-toolbar, .btn-group-vertical, .dropup, .dropdown");
|
||||
if (!$group.length) return;
|
||||
var hasSendRef = findNativeSendButtons($group).length > 0;
|
||||
if (hasSendRef) {
|
||||
$toggle.css("display", "none");
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (e2) {}
|
||||
}
|
||||
|
||||
function clickNativeSendButton() {
|
||||
try {
|
||||
var $parentDoc = window.parent && window.parent.document ? $(window.parent.document) : $();
|
||||
var $native = findNativeSendButtons($parentDoc).first();
|
||||
if ($native.length) {
|
||||
$native.trigger("click");
|
||||
return true;
|
||||
}
|
||||
} catch (e) {}
|
||||
try {
|
||||
var $local = findNativeSendButtons($(document)).not("#btnEnviarForm").first();
|
||||
if ($local.length) {
|
||||
$local.trigger("click");
|
||||
return true;
|
||||
}
|
||||
} catch (e2) {}
|
||||
return false;
|
||||
}
|
||||
|
||||
function syncPayload() {
|
||||
var rows = [];
|
||||
var naoConformeList = [];
|
||||
$(".audit-row").each(function () {
|
||||
var $tr = $(this);
|
||||
var peso = parseFloat($tr.find(".peso").text()) || 0;
|
||||
var resultado = $tr.find(".resultado").val();
|
||||
var fator = FATORES[resultado];
|
||||
var pontuacao = (typeof fator === "number") ? (peso * fator) : null;
|
||||
var anexos = [];
|
||||
$tr.find(".anexo-plugin").each(function () {
|
||||
var nome = ($(this).val() || "").trim();
|
||||
anexos.push(nome);
|
||||
});
|
||||
var anexosPreenchidos = [];
|
||||
for (var a = 0; a < anexos.length; a++) {
|
||||
if (anexos[a]) anexosPreenchidos.push(anexos[a]);
|
||||
}
|
||||
var indicador = $tr.attr("data-indicador") || "";
|
||||
if (resultado === "NAO_CONFORME") {
|
||||
naoConformeList.push(indicador);
|
||||
}
|
||||
rows.push({
|
||||
pilar: $tr.attr("data-pilar") || "",
|
||||
indicador: indicador,
|
||||
penalidade: $tr.attr("data-penalidade") || "",
|
||||
peso: peso,
|
||||
resultado: resultado || "",
|
||||
fator: (typeof fator === "number") ? fator : null,
|
||||
pontuacao: pontuacao,
|
||||
justificativa: ($tr.find(".justificativa").val() || "").trim(),
|
||||
anexoSequence: "",
|
||||
anexoKey: "",
|
||||
anexoNome: anexosPreenchidos.length ? anexosPreenchidos[0] : "",
|
||||
anexos: anexos,
|
||||
qtdAnexosPreenchidos: anexosPreenchidos.length
|
||||
});
|
||||
updateRowAttachmentProgress($tr);
|
||||
});
|
||||
$("#qtdNaoConforme").val(String(naoConformeList.length));
|
||||
$("#temNaoConforme").val(naoConformeList.length > 0 ? "true" : "false");
|
||||
$("#listaNaoConforme").val(naoConformeList.join(" | "));
|
||||
$("#saidaAnalise").val(naoConformeList.length > 0 ? "NAO_CONFORME" : "CONFORME");
|
||||
$("#auditoriaPayload").val(JSON.stringify(rows));
|
||||
updateCompletionStatus();
|
||||
renderNaoConformeResumo();
|
||||
}
|
||||
|
||||
function findRowByIndicador(indicador) {
|
||||
var $found = $();
|
||||
$(".audit-row").each(function () {
|
||||
if ($(this).attr("data-indicador") === indicador) {
|
||||
$found = $(this);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return $found;
|
||||
}
|
||||
|
||||
function updatePenalidadeVisual($tr) {
|
||||
var resultado = $tr.find(".resultado").val();
|
||||
var penalidadeBase = ($tr.attr("data-penalidade") || "").trim();
|
||||
var $badge = $tr.find(".penalidade-status");
|
||||
var $justWrap = $tr.find(".just-wrap");
|
||||
|
||||
if (resultado === "CONFORME") {
|
||||
$badge
|
||||
.removeClass("label-danger label-warning label-info label-primary label-default")
|
||||
.addClass("label-success")
|
||||
.text("Conforme");
|
||||
$justWrap.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
if (resultado === "NAO_CONFORME") {
|
||||
$badge
|
||||
.removeClass("label-success label-danger label-warning label-info label-primary label-default")
|
||||
.addClass("label-" + badgeClass(penalidadeBase))
|
||||
.text(penalidadeBase || "Nao Conforme");
|
||||
$justWrap.show();
|
||||
return;
|
||||
}
|
||||
|
||||
$badge
|
||||
.removeClass("label-success label-danger label-warning label-info label-primary")
|
||||
.addClass("label-default")
|
||||
.text("Aguardando");
|
||||
$justWrap.hide();
|
||||
}
|
||||
|
||||
function restorePayload() {
|
||||
var raw = ($("#auditoriaPayload").val() || "").trim();
|
||||
if (!raw) return;
|
||||
var data = [];
|
||||
try {
|
||||
data = JSON.parse(raw);
|
||||
if (!Array.isArray(data)) return;
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var saved = data[i];
|
||||
var $tr = findRowByIndicador(saved.indicador);
|
||||
if (!$tr.length) continue;
|
||||
if (saved.resultado) $tr.find(".resultado").val(saved.resultado);
|
||||
if (saved.justificativa) $tr.find(".justificativa").val(saved.justificativa);
|
||||
if (Array.isArray(saved.anexos)) {
|
||||
var $inputs = $tr.find(".anexo-plugin");
|
||||
for (var k = 0; k < saved.anexos.length; k++) {
|
||||
if (k >= $inputs.length) break;
|
||||
if (saved.anexos[k]) {
|
||||
$($inputs.get(k)).val(saved.anexos[k]).trigger("change");
|
||||
}
|
||||
}
|
||||
} else if (saved.anexoNome) {
|
||||
$tr.find(".anexo-plugin").first().val(saved.anexoNome).trigger("change");
|
||||
}
|
||||
updatePenalidadeVisual($tr);
|
||||
}
|
||||
}
|
||||
|
||||
function recalc() {
|
||||
var pontosObtidos = 0;
|
||||
var pontosPossiveis = 0;
|
||||
|
||||
$(".audit-row").each(function () {
|
||||
var $tr = $(this);
|
||||
var peso = parseFloat($tr.find(".peso").text()) || 0;
|
||||
var resultado = $tr.find(".resultado").val();
|
||||
var fator = FATORES[resultado];
|
||||
var pontuacao = 0;
|
||||
updatePenalidadeVisual($tr);
|
||||
|
||||
if (typeof fator === "number") {
|
||||
pontuacao = peso * fator;
|
||||
$tr.find(".fator").text(fator.toFixed(2));
|
||||
$tr.find(".pontuacao").text(pontuacao.toFixed(2));
|
||||
if (peso > 0) {
|
||||
pontosPossiveis += peso;
|
||||
pontosObtidos += pontuacao;
|
||||
}
|
||||
} else {
|
||||
$tr.find(".fator").text("-");
|
||||
$tr.find(".pontuacao").text("0");
|
||||
}
|
||||
});
|
||||
|
||||
var score = pontosPossiveis > 0 ? (pontosObtidos / pontosPossiveis) * 100 : 0;
|
||||
$("#pontosObtidos").text(pontosObtidos.toFixed(2));
|
||||
$("#pontosPossiveis").text(pontosPossiveis.toFixed(2));
|
||||
$("#scoreFinal").text(score.toFixed(2) + "%");
|
||||
$("#classificacao").text(getClassificacao(score));
|
||||
}
|
||||
|
||||
function validarFormulario() {
|
||||
var erros = [];
|
||||
$(".audit-row").each(function (idx) {
|
||||
var $tr = $(this);
|
||||
var resultado = $tr.find(".resultado").val();
|
||||
var justificativa = ($tr.find(".justificativa").val() || "").trim();
|
||||
var $anexoInputs = $tr.find(".anexo-plugin");
|
||||
var indicador = $tr.attr("data-indicador") || "";
|
||||
var $resultadoCell = $tr.find(".resultado-wrap");
|
||||
var $anexoCell = $tr.find(".anexo-wrap");
|
||||
|
||||
if (resultado === "NAO_CONFORME" && justificativa.length === 0) {
|
||||
erros.push("Linha " + (idx + 1) + " (" + indicador + "): justificativa obrigatoria.");
|
||||
$tr.find(".just-wrap").addClass("has-error");
|
||||
} else {
|
||||
$tr.find(".just-wrap").removeClass("has-error");
|
||||
}
|
||||
|
||||
if (CURRENT_PROFILE === "ANALISTA") {
|
||||
if (!resultado) {
|
||||
erros.push("Linha " + (idx + 1) + " (" + indicador + "): selecione o resultado.");
|
||||
$resultadoCell.addClass("has-error");
|
||||
} else {
|
||||
$resultadoCell.removeClass("has-error");
|
||||
}
|
||||
}
|
||||
|
||||
if (REQUIRE_ATTACHMENT) {
|
||||
var hasErrorAnexo = false;
|
||||
$anexoInputs.each(function () {
|
||||
var $anexoInput = $(this);
|
||||
var anexoNome = ($anexoInput.val() || "").trim();
|
||||
var hasAttachment = anexoNome.length > 0;
|
||||
var isValidAttachment = true;
|
||||
if (typeof $.fn.fluigFormAttachment === "function" && $anexoInput.data("ffaInit")) {
|
||||
try {
|
||||
hasAttachment = $anexoInput.fluigFormAttachment("hasAttachment");
|
||||
isValidAttachment = $anexoInput.fluigFormAttachment("isValid");
|
||||
} catch (e) {}
|
||||
}
|
||||
if (!hasAttachment) {
|
||||
hasErrorAnexo = true;
|
||||
return false;
|
||||
}
|
||||
if (!isValidAttachment) {
|
||||
hasErrorAnexo = true;
|
||||
return false;
|
||||
}
|
||||
if (!ALLOWED_EXT[getExt(anexoNome)]) {
|
||||
hasErrorAnexo = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (hasErrorAnexo) {
|
||||
erros.push("Linha " + (idx + 1) + " (" + indicador + "): revise os anexos obrigatorios (PDF/JPG/PNG).");
|
||||
$anexoCell.addClass("has-error");
|
||||
} else {
|
||||
$anexoCell.removeClass("has-error");
|
||||
}
|
||||
} else {
|
||||
$anexoCell.removeClass("has-error");
|
||||
}
|
||||
});
|
||||
|
||||
syncPayload();
|
||||
|
||||
if (erros.length > 0) {
|
||||
FLUIGC.toast({
|
||||
title: "Validacao:",
|
||||
message: erros[0],
|
||||
type: "warning"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
var wkState = getCurrentState();
|
||||
CURRENT_PROFILE = resolveProfileByState(wkState);
|
||||
if (!($("#usuarioRetorno").val() || "").trim()) {
|
||||
$("#usuarioRetorno").val(getCurrentUserCode());
|
||||
}
|
||||
montaTabela();
|
||||
initAttachmentPlugin();
|
||||
restorePayload();
|
||||
applyProfileUI();
|
||||
recalc();
|
||||
syncPayload();
|
||||
$(".audit-row").each(function () {
|
||||
updatePenalidadeVisual($(this));
|
||||
});
|
||||
|
||||
$("#pilaresContainer").on("click", ".pilar-head", function () {
|
||||
var target = $(this).attr("data-target");
|
||||
var $head = $(this);
|
||||
var $panel = $head.closest(".pilar-panel");
|
||||
$("#" + target).stop(true, true).slideToggle(120, function () {
|
||||
var isOpen = $(this).is(":visible");
|
||||
$head.toggleClass("is-open", isOpen);
|
||||
$panel.toggleClass("is-open", isOpen);
|
||||
$head.find(".pilar-open-cta").text(isOpen ? "Fechar Pilar ↑" : "Abrir Pilar →");
|
||||
});
|
||||
});
|
||||
|
||||
$("#pilaresContainer").on("change", ".resultado", function () {
|
||||
recalc();
|
||||
syncPayload();
|
||||
});
|
||||
|
||||
$("#pilaresContainer").on("change keyup", ".justificativa", function () {
|
||||
syncPayload();
|
||||
});
|
||||
|
||||
$("#pilaresContainer").on("change", ".anexo-plugin", function () {
|
||||
syncPayload();
|
||||
});
|
||||
|
||||
$("#pilaresContainer").on("click", ".anexo-toggle", function () {
|
||||
var $btn = $(this);
|
||||
var expanded = $btn.attr("data-expanded") === "true";
|
||||
var total = parseInt($btn.attr("data-total"), 10) || 0;
|
||||
var $wrap = $btn.closest(".anexos-cell");
|
||||
var $list = $wrap.find(".anexo-multi-list").first();
|
||||
if (expanded) {
|
||||
$list.removeClass("expanded");
|
||||
$btn.attr("data-expanded", "false").text("Mostrar todas (" + total + ")");
|
||||
} else {
|
||||
$list.addClass("expanded");
|
||||
$btn.attr("data-expanded", "true").text("Mostrar menos");
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on("click", ".nc-item", function () {
|
||||
var pilar = $(this).attr("data-pilar") || "";
|
||||
var indicador = $(this).attr("data-indicador") || "";
|
||||
var $tr = $(".audit-row[data-pilar='" + pilar.replace(/'/g, "\\'") + "'][data-indicador='" + indicador.replace(/'/g, "\\'") + "']").first();
|
||||
if (!$tr.length) {
|
||||
$tr = findRowByIndicador(indicador);
|
||||
}
|
||||
if (!$tr.length) return;
|
||||
$tr.addClass("audit-row-target");
|
||||
setTimeout(function () { $tr.removeClass("audit-row-target"); }, 1600);
|
||||
$("html, body").animate({ scrollTop: $tr.offset().top - 120 }, 250);
|
||||
});
|
||||
|
||||
hideNativeSendButtons();
|
||||
setTimeout(hideNativeSendButtons, 600);
|
||||
|
||||
$("#btnEnviarForm").on("click", function () {
|
||||
if (!validarFormulario()) return;
|
||||
var clicked = clickNativeSendButton();
|
||||
if (!clicked) {
|
||||
FLUIGC.toast({
|
||||
title: "Envio:",
|
||||
message: "Nao foi possivel acionar o botao nativo de Enviar.",
|
||||
type: "warning"
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
window.beforeSendValidate = function () {
|
||||
return validarFormulario();
|
||||
};
|
||||
});
|
||||
423
forms/40213 - checklist/fluigFormAttachment.js
Normal file
423
forms/40213 - checklist/fluigFormAttachment.js
Normal file
@ -0,0 +1,423 @@
|
||||
/**
|
||||
* Plugin JQuery para trabalhar com anexos nos formulários dentro do processo
|
||||
*
|
||||
* @author Bruno Gasparetto
|
||||
* @see https://github.com/brunogasparetto/fluig-form-attachment
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Configurações
|
||||
*
|
||||
* @typedef AttachmentSettings
|
||||
* @property {boolean} showActionButton Exibe o botão de upload/delete. True por padrão.
|
||||
* @property {boolean} filename Nome que será salvo como descrição do Anexo.
|
||||
* @property {boolean|string} prefixName Adiciona prefixo ao anexo. False por padrão, True para prefixo aleatório, String para prefixo fixo.
|
||||
* @property {string} accept Tipos de arquivos aceitos. Segue a regra do accept do input tipo file.
|
||||
*/
|
||||
|
||||
;(function ($) {
|
||||
"use strict";
|
||||
|
||||
const pluginName = "fluigFormAttachment";
|
||||
|
||||
const deleteFileClassName = "BtnDeleteFile";
|
||||
const uploadFileClassname = "BtnUploadFile";
|
||||
const viewerFileClassname = "BtnViewerFile";
|
||||
const compressedExtensions = [
|
||||
'.7z', '.zip', '.rar', '.gz', '.tar', '.tbz2', '.tgz', '.bz2', '.lz', '.lz4','.txz',
|
||||
'.xz', '.z', '.zst', '.zstd', '.war', '.ear', '.jar','.apk', '.arj', '.ace', '.cab',
|
||||
];
|
||||
|
||||
const isString = item => typeof item === "string";
|
||||
|
||||
/**
|
||||
* Procura o índice do anexo de acordo com sua descrição
|
||||
*
|
||||
* @param {string} filename
|
||||
* @returns {number} -1 se não encontrar
|
||||
*/
|
||||
const attachmentFindIndex = (filename) => parent.ECM.attachmentTable.getData().findIndex(attachment => attachment.description === filename);
|
||||
|
||||
/**
|
||||
* Configuração padrão
|
||||
*
|
||||
* @type {AttachmentSettings}
|
||||
*/
|
||||
const defaults = {
|
||||
showActionButton: true,
|
||||
filename: "Anexo",
|
||||
prefixName: false,
|
||||
accept: "*",
|
||||
};
|
||||
|
||||
class Plugin {
|
||||
/**
|
||||
* @type {AttachmentSettings}
|
||||
*/
|
||||
#settings;
|
||||
|
||||
/**
|
||||
* Elemento do arquivo. Pode ser um input ou span (no modo leitura).
|
||||
*
|
||||
* @type {JQuery<HTMLElement>}
|
||||
*/
|
||||
#input;
|
||||
|
||||
/**
|
||||
* @type {JQuery<HTMLElement>}
|
||||
*/
|
||||
#container;
|
||||
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
#attachmentFilename;
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} element
|
||||
* @param {AttachmentSettings} options
|
||||
*/
|
||||
constructor(element, options) {
|
||||
|
||||
// Garantir um ID para o Input
|
||||
if (!element.id && element.nodeName.toLowerCase() === "input") {
|
||||
element.id = FLUIGC.utilities.randomUUID();
|
||||
}
|
||||
|
||||
this.#settings = $.extend({}, defaults, options);
|
||||
this.#input = $(element);
|
||||
this.#attachmentFilename = this.#input.val() || this.#input.text().trim();
|
||||
|
||||
this.#input
|
||||
.prop("readonly", true)
|
||||
.on("change", () => {
|
||||
this.#attachmentFilename = this.#input.val();
|
||||
this.#changeButtonsState();
|
||||
})
|
||||
.wrap(`<div class="${pluginName}Component"></div>`)
|
||||
.after(`<div class="${pluginName}Component_buttons">${this.#getButtonsTemplate()}</div>`);
|
||||
|
||||
this.#container = this.#input.closest(`.${pluginName}Component`);
|
||||
|
||||
this.#container
|
||||
.on("click", `.${pluginName}${deleteFileClassName}`, () => this.#confirmDeleteAttachment())
|
||||
.on("click", `.${pluginName}${uploadFileClassname}`, () => this.#uploadAttachment())
|
||||
.on("click", `.${pluginName}${viewerFileClassname}`, () => this.#viewAttachment())
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indica que o campo está válido
|
||||
*
|
||||
* Caso o campo possua algum valor é obrigatório que o anexo
|
||||
* esteja na tabela de anexos.
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
isValid() {
|
||||
return this.#attachmentFilename.length
|
||||
? this.hasAttachment()
|
||||
: true
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indica se o anexo está na tabela de anexos
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasAttachment() {
|
||||
const filename = this.#attachmentFilename || this.#input.val() || this.#input.text().trim();
|
||||
|
||||
return filename.length > 0 && attachmentFindIndex(filename) !== -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove o anexo
|
||||
*
|
||||
* Método útil para excluir anexos em tabela Pai x Filho.
|
||||
*/
|
||||
deleteAttachment() {
|
||||
const attachmentIndex = parent.ECM.attachmentTable.getData().findIndex(
|
||||
attachment => attachment.description === this.#attachmentFilename
|
||||
);
|
||||
|
||||
setTimeout(() => this.#input.val("").trigger("change"), 500);
|
||||
|
||||
if (attachmentIndex === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
parent.WKFViewAttachment.removeAttach([attachmentIndex]);
|
||||
}
|
||||
|
||||
showActionButton() {
|
||||
this.#settings.showActionButton = true;
|
||||
this.#input.trigger("change");
|
||||
}
|
||||
|
||||
hideActionButton() {
|
||||
this.#settings.showActionButton = false;
|
||||
this.#input.trigger("change");
|
||||
}
|
||||
|
||||
filename(fileName, prefixName) {
|
||||
if (fileName === undefined) {
|
||||
return this.#input.data("filename") || this.#settings.filename;
|
||||
}
|
||||
|
||||
this.#settings.filename = fileName;
|
||||
this.#input.data("filename", fileName);
|
||||
|
||||
if (prefixName !== undefined) {
|
||||
this.prefixName(prefixName);
|
||||
}
|
||||
}
|
||||
|
||||
prefixName(prefixName) {
|
||||
if (prefixName === undefined) {
|
||||
return this.#settings.prefixName;
|
||||
}
|
||||
|
||||
this.#settings.prefixName = prefixName;
|
||||
}
|
||||
|
||||
#getButtonsTemplate() {
|
||||
const hasFileSelected = this.#attachmentFilename.length !== 0;
|
||||
const canShowActionButton = this.#canDisplayActionButton();
|
||||
|
||||
return `<button type="button" class="${pluginName}BtnAction ${pluginName}${deleteFileClassName} btn btn-danger btn-sm ${(canShowActionButton && hasFileSelected) ? '' : 'hide'}" title="Remover Anexo"><i class="flaticon flaticon-trash icon-sm"></i></button>`
|
||||
+ `<button type="button" class="${pluginName}BtnAction ${pluginName}${uploadFileClassname} btn btn-success btn-sm ${(canShowActionButton && !hasFileSelected) ? '' : 'hide'}" title="Enviar Anexo"><i class="flaticon flaticon-upload icon-sm"></i></button>`
|
||||
+ `<button type="button" class="${pluginName}${viewerFileClassname} btn btn-info btn-sm ${hasFileSelected ? '' : 'hide'}" title="Visualizar Anexo"><i class="flaticon flaticon-view icon-sm"></i></button>`
|
||||
;
|
||||
}
|
||||
|
||||
#canDisplayActionButton() {
|
||||
const element = this.#input.get(0);
|
||||
|
||||
return this.#settings.showActionButton
|
||||
&& parent.ECM.workflowView.userPermissions.indexOf("P") >= 0
|
||||
&& location.href.includes('ManagerMode')
|
||||
&& !location.href.includes('token')
|
||||
&& element.nodeName.toLowerCase() === "input"
|
||||
&& !element.disabled
|
||||
;
|
||||
}
|
||||
|
||||
#changeButtonsState() {
|
||||
const hasFileSelected = this.#attachmentFilename.length !== 0;
|
||||
|
||||
if (this.#canDisplayActionButton()) {
|
||||
if (hasFileSelected) {
|
||||
this.#container.find(`.${pluginName}${uploadFileClassname}`).addClass("hide");
|
||||
this.#container.find(`.${pluginName}${deleteFileClassName}`).removeClass("hide");
|
||||
} else {
|
||||
this.#container.find(`.${pluginName}${deleteFileClassName}`).addClass("hide");
|
||||
this.#container.find(`.${pluginName}${uploadFileClassname}`).removeClass("hide");
|
||||
}
|
||||
} else {
|
||||
this.#container.find(`.${pluginName}BtnAction`).addClass("hide");
|
||||
}
|
||||
|
||||
if (hasFileSelected) {
|
||||
this.#container.find(`.${pluginName}${viewerFileClassname}`).removeClass("hide");
|
||||
} else {
|
||||
this.#container.find(`.${pluginName}${viewerFileClassname}`).addClass("hide");
|
||||
}
|
||||
}
|
||||
|
||||
#confirmDeleteAttachment() {
|
||||
if (!this.#canDisplayActionButton()) {
|
||||
return;
|
||||
}
|
||||
|
||||
FLUIGC.message.confirm({
|
||||
message: `Deseja remover o anexo <b>${this.#attachmentFilename}</b>?`,
|
||||
title: 'Confirmação',
|
||||
labelYes: 'Sim, quero remover',
|
||||
labelNo: 'Não, quero cancelar',
|
||||
}, result => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.deleteAttachment();
|
||||
});
|
||||
}
|
||||
|
||||
#uploadAttachment() {
|
||||
if (!this.#canDisplayActionButton()) {
|
||||
return;
|
||||
}
|
||||
|
||||
let filename = this.#input.data("filename") || this.#settings.filename;
|
||||
|
||||
if (this.#settings.prefixName === true) {
|
||||
filename = FLUIGC.utilities.randomUUID().substring(0, 9) + filename;
|
||||
} else if (this.#settings.prefixName !== false && isString(this.#settings.prefixName)) {
|
||||
filename = `${this.#settings.prefixName}-${filename}`;
|
||||
}
|
||||
|
||||
// Evitar conflito de descrição do anexo
|
||||
if (attachmentFindIndex(filename) !== -1) {
|
||||
FLUIGC.toast({
|
||||
title: "Atenção",
|
||||
message: "Já existe um anexo com essa descrição",
|
||||
type: "warning",
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
parent.$("#ecm-navigation-inputFile-clone")
|
||||
.attr({
|
||||
"data-on-camera": "true",
|
||||
"data-file-name-camera": filename,
|
||||
"data-inputid": this.#input.attr("id"),
|
||||
"data-filename": filename,
|
||||
"multiple": false,
|
||||
"accept": this.#input.data("accept") || this.#settings.accept,
|
||||
})
|
||||
.trigger("click")
|
||||
;
|
||||
}
|
||||
|
||||
#viewAttachment() {
|
||||
const attachmentIndex = parent.ECM.attachmentTable.getData().findIndex(
|
||||
attachment => attachment.description === this.#attachmentFilename
|
||||
);
|
||||
|
||||
if (attachmentIndex === -1) {
|
||||
FLUIGC.toast({
|
||||
title: "Atenção",
|
||||
message: "Anexo não encontrado",
|
||||
type: "warning"
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const attachment = parent.ECM.attachmentTable.getRow(attachmentIndex);
|
||||
const physicalFileName = String(
|
||||
attachment.physicalFileName || attachment.fileName || attachment.name || ""
|
||||
).toLowerCase();
|
||||
const isCompressedFile = compressedExtensions.some(extension => physicalFileName.endsWith(extension));
|
||||
|
||||
if (attachment.documentId && !isCompressedFile) {
|
||||
parent.WKFViewAttachment.openAttachmentView(parent.WCMAPI.userCode, attachment.documentId, attachment.version);
|
||||
} else {
|
||||
parent.WKFViewAttachment.downloadAttach([attachmentIndex]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Instancia o Plugin ou executa algum método do plugin
|
||||
*
|
||||
* @param {AttachmentSettings|string} options
|
||||
* @returns {undefined|boolean|void}
|
||||
*/
|
||||
$.fn[pluginName] = function (options) {
|
||||
if (!parent.WKFViewAttachment || !parent.ECM || !parent.ECM.attachmentTable) {
|
||||
console.error(`Plugin ${pluginName} executado fora de um processo.`)
|
||||
return this;
|
||||
}
|
||||
|
||||
// Executa o Método
|
||||
if (isString(options)) {
|
||||
const methodName = options;
|
||||
const methodArgs = Array.prototype.slice.call(arguments, 1);
|
||||
|
||||
let returnedValue = undefined;
|
||||
|
||||
this.each(function () {
|
||||
let pluginData = $.data(this, pluginName);
|
||||
|
||||
if (!pluginData) {
|
||||
pluginData = new Plugin(this, {});
|
||||
$.data(this, pluginName, pluginData);
|
||||
}
|
||||
|
||||
if (!pluginData[methodName]) {
|
||||
return;
|
||||
}
|
||||
|
||||
returnedValue = pluginData[methodName](...methodArgs);
|
||||
|
||||
if (returnedValue !== undefined) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return returnedValue !== undefined
|
||||
? returnedValue
|
||||
: this
|
||||
;
|
||||
}
|
||||
|
||||
return this.each(function () {
|
||||
if (!$.data(this, pluginName)) {
|
||||
$.data(this, pluginName, new Plugin(this, options));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (!parent.WKFViewAttachment || !parent.ECM || !parent.ECM.attachmentTable) {
|
||||
return;
|
||||
}
|
||||
|
||||
const loading = FLUIGC.loading(window, {
|
||||
title: "Aguarde",
|
||||
textMessage: "Enviando arquivo",
|
||||
})
|
||||
|
||||
$(() => {
|
||||
// Oculta aba anexos
|
||||
$("#tab-attachments", parent.document).hide();
|
||||
|
||||
parent.$("#ecm_navigation_fileupload")
|
||||
.on(`fileuploadadd.${pluginName}`, function(e, data) {
|
||||
// Impede abrir o Loading caso tenha erro no arquivo
|
||||
|
||||
const file = data.files[0];
|
||||
|
||||
if (parent.ECM.maxUploadSize > 0 && file.size >= (parent.ECM.maxUploadSize * 1024 * 1024)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (parent.ECM.newAttachmentsDocs.length
|
||||
&& parent.ECM.newAttachmentsDocs.findIndex(attachment => attachment.name === file.name) !== -1
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
loading.show();
|
||||
})
|
||||
.on(`fileuploadfail.${pluginName}`, () => loading.hide())
|
||||
.on(`fileuploaddone.${pluginName}`, function() {
|
||||
// Atualiza o campo do arquivo caso o upload tenha ocorrido
|
||||
|
||||
loading.hide();
|
||||
|
||||
const btnUpload = parent.document.getElementById("ecm-navigation-inputFile-clone");
|
||||
const filename = btnUpload.getAttribute("data-filename");
|
||||
|
||||
if (attachmentFindIndex(filename) === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(`#${btnUpload.getAttribute("data-inputid")}`).val(filename).trigger("change");
|
||||
});
|
||||
|
||||
parent.$(document).on(`fileuploadstop.${pluginName}`, () => loading.hide());
|
||||
});
|
||||
|
||||
|
||||
$("head").append(`<style>
|
||||
.${pluginName}Component { display: flex; align-items: center; flex-wrap: nowrap; }
|
||||
.${pluginName}Component input { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
|
||||
.${pluginName}Component_buttons { display: flex; align-items: center; justify-content: flex-end; }
|
||||
.${pluginName}Component_buttons .btn { outline: none !important; outline-offset: unset !important; border-radius: 0 !important; height: 32px; }
|
||||
</style>`);
|
||||
|
||||
}(jQuery));
|
||||
1
forms/40213 - checklist/fluigFormAttachment.min.js
vendored
Normal file
1
forms/40213 - checklist/fluigFormAttachment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
155
workflow/.resources/Ginseng Produção.ws.cache
Normal file
155
workflow/.resources/Ginseng Produção.ws.cache
Normal file
@ -0,0 +1,155 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<java version="1.8.0_481" class="java.beans.XMLDecoder">
|
||||
<object class="java.util.HashMap">
|
||||
<void method="put">
|
||||
<string>volume</string>
|
||||
<array class="java.lang.String" length="1">
|
||||
<void index="0">
|
||||
<string>Default</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>expediente</string>
|
||||
<array class="java.lang.String" length="4">
|
||||
<void index="0">
|
||||
<string>Default</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Expediente BackOffice, Logística e Motorista</string>
|
||||
</void>
|
||||
<void index="2">
|
||||
<string>Expediente Escritório Matriz</string>
|
||||
</void>
|
||||
<void index="3">
|
||||
<string>Expediente Lojas</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void method="put">
|
||||
<string>mecanismo</string>
|
||||
<array class="[Ljava.lang.Object;" length="12">
|
||||
<void index="0">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Associação</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Associado</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="1">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Campo de Formulário</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Campo Formulário</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="2">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>dpf_di_emp_filial_filtro</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>dpf_di_emp_filial_filtro</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="3">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>dpf_di_inicio_diadmissao</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>dpf_di_inicio_diadmissao</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="4">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Executor de Atividade</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Executor Atividade</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="5">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Grupo</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Grupo</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="6">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Grupos do Colaborador</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Grupos Colaborador</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="7">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>mecCustomAprov</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>mecCustomAprov</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="8">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Papel</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Papel</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="9">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição para um Grupo</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Pool Grupo</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="10">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição para um Papel</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Pool Papel</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
<void index="11">
|
||||
<array class="java.lang.Object" length="2">
|
||||
<void index="0">
|
||||
<string>Atribuição por Usuário</string>
|
||||
</void>
|
||||
<void index="1">
|
||||
<string>Usuário</string>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
</array>
|
||||
</void>
|
||||
</object>
|
||||
</java>
|
||||
BIN
workflow/.resources/checklist.png
Normal file
BIN
workflow/.resources/checklist.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
956
workflow/diagrams/checklist.process
Normal file
956
workflow/diagrams/checklist.process
Normal file
@ -0,0 +1,956 @@
|
||||
<?xml version="1.0" encoding="ASCII"?>
|
||||
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:al="http://eclipse.org/graphiti/mm/algorithms" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL-XMI" xmlns:pi="http://eclipse.org/graphiti/mm/pictograms">
|
||||
<pi:Diagram visible="true" gridUnit="10" diagramTypeId="BPMNdiagram" name="checklist" snapToGrid="true" pictogramLinks="/0/@children.0/@link /0/@children.0/@children.1/@link /0/@children.0/@children.0/@link /0/@children.1/@link /0/@children.2/@link /0/@children.3/@link /0/@children.4/@link /0/@children.5/@link /0/@children.6/@link /0/@connections.0/@link /0/@connections.1/@link /0/@connections.2/@link /0/@connections.3/@link /0/@connections.4/@link /0/@connections.5/@link" version="0.16.0">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" background="/0/@styles.7/@renderingStyle/@adaptedGradientColoredAreas/@adaptedGradientColoredAreas.0/@gradientColor.2/@end/@color" foreground="/0/@colors.0" lineWidth="1" transparency="0.0" width="1000" height="1000"/>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" background="/0/@styles.7/@renderingStyle/@adaptedGradientColoredAreas/@adaptedGradientColoredAreas.0/@gradientColor.2/@end/@color" foreground="/0/@colors.3" lineWidth="1" transparency="0.0" width="1521" height="571" x="10" y="100" style="/0/@styles.0"/>
|
||||
<link businessObjects="bpmnpool1"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.0/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" background="/0/@colors.5" foreground="/0/@colors.3" lineWidth="1" transparency="0.0" width="1491" height="286" x="30" y="285" style="/0/@styles.5"/>
|
||||
<link businessObjects="bpmnswimlane3"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.0/@children.0/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="30" height="286" style="/0/@styles.6" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" verticalAlignment="ALIGNMENT_MIDDLE" angle="270" value="Analista" rotation="270.0"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" background="/0/@styles.7/@renderingStyle/@adaptedGradientColoredAreas/@adaptedGradientColoredAreas.0/@gradientColor.2/@end/@color" foreground="/0/@colors.3" lineWidth="1" transparency="0.0" width="1491" height="285" x="30" style="/0/@styles.3"/>
|
||||
<link businessObjects="bpmnswimlane2"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.0/@children.1/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="30" height="285" style="/0/@styles.4" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" verticalAlignment="ALIGNMENT_MIDDLE" angle="270" value="Lojas" rotation="270.0"/>
|
||||
</children>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="30" height="571" style="/0/@styles.2" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" verticalAlignment="ALIGNMENT_MIDDLE" angle="270" value="Compliance" rotation="270.0"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="35" height="35" x="130" y="570">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Ellipse" lineWidth="1" transparency="0.0" width="35" height="35" style="/0/@styles.7"/>
|
||||
</graphicsAlgorithm>
|
||||
<link businessObjects="startevent4"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.0"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.1/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="320" y="550"/>
|
||||
<link businessObjects="task5"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.3" incomingConnections="/0/@connections.0 /0/@connections.2"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.2/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.8" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.9" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Validar Planograma"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="60" height="88" x="700" y="540">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Polygon" lineWidth="1" filled="true" transparency="0.0" width="60" height="60" style="/0/@styles.10">
|
||||
<points y="30"/>
|
||||
<points x="30"/>
|
||||
<points x="60" y="30"/>
|
||||
<points x="30" y="60"/>
|
||||
<points y="30"/>
|
||||
</graphicsAlgorithmChildren>
|
||||
</graphicsAlgorithm>
|
||||
<link businessObjects="exclusivegateway7"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.1 /0/@connections.5" incomingConnections="/0/@connections.3"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.3/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.1">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<anchors xsi:type="pi:ChopboxAnchor"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.3/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="0.51" relativeHeight="0.93">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="60" height="28" y="60" style="/0/@styles.11" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Análise
"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="670" y="169"/>
|
||||
<link businessObjects="task9"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.2" incomingConnections="/0/@connections.5"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.4/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.12" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.13" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Refazer Planograma"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Rectangle" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="106" height="70" x="1000" y="550"/>
|
||||
<link businessObjects="task11"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" outgoingConnections="/0/@connections.4" incomingConnections="/0/@connections.1"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.5/@graphicsAlgorithm" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:RoundedRectangle" lineWidth="1" transparency="0.0" width="106" height="70" style="/0/@styles.14" cornerHeight="5" cornerWidth="5"/>
|
||||
</children>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:MultiText" lineWidth="1" filled="false" lineVisible="true" transparency="0.0" width="96" height="60" x="5" y="5" style="/0/@styles.15" font="/0/@fonts.1" horizontalAlignment="ALIGNMENT_CENTER" value="Enviar Email e PDF"/>
|
||||
</children>
|
||||
</children>
|
||||
<children xsi:type="pi:ContainerShape" visible="true" active="true">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="35" height="35" x="1320" y="570">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Ellipse" lineWidth="3" transparency="0.0" width="35" height="35" style="/0/@styles.16"/>
|
||||
</graphicsAlgorithm>
|
||||
<link businessObjects="endterminate21"/>
|
||||
<anchors xsi:type="pi:ChopboxAnchor" incomingConnections="/0/@connections.4"/>
|
||||
<anchors xsi:type="pi:BoxRelativeAnchor" visible="true" active="true" referencedGraphicsAlgorithm="/0/@children.6/@graphicsAlgorithm/@graphicsAlgorithmChildren.0" relativeWidth="1.0" relativeHeight="0.51">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" filled="false" lineVisible="false"/>
|
||||
</anchors>
|
||||
<children visible="true">
|
||||
<graphicsAlgorithm xsi:type="al:Ellipse" lineWidth="1" filled="false" lineVisible="false" transparency="0.0" width="24" height="25" x="5" y="5">
|
||||
<graphicsAlgorithmChildren xsi:type="al:Ellipse" background="/0/@colors.8" lineWidth="1" filled="true" lineVisible="false" transparency="0.0" width="24" height="25"/>
|
||||
</graphicsAlgorithm>
|
||||
</children>
|
||||
</children>
|
||||
<styles background="/0/@colors.2" foreground="/0/@colors.1" id="BPMN-SWIM_LANE-NOSTYLE"/>
|
||||
<styles foreground="/0/@colors.1" id="BPMN-CLASS">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="blue-white-gloss" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="212" green="231" blue="248"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="250" green="251" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="1">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="129" green="185" blue="234"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="170" green="208" blue="242"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="2">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="187" green="218" blue="247"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="197" green="224" blue="247"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="3">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="153" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="51" green="153" blue="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="4">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="255" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="255" green="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.4" id="BPMNCLASS-TEXT-67-67-67"/>
|
||||
<styles background="/0/@colors.2" foreground="/0/@colors.1" id="BPMN-SWIM_LANE-NOSTYLE"/>
|
||||
<styles foreground="/0/@colors.4" id="BPMNCLASS-TEXT-67-67-67"/>
|
||||
<styles background="/0/@colors.2" foreground="/0/@colors.1" id="BPMN-SWIM_LANE-NOSTYLE"/>
|
||||
<styles foreground="/0/@colors.4" id="BPMNCLASS-TEXT-67-67-67"/>
|
||||
<styles foreground="/0/@colors.6" id="START-EVENT">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="START-EVENT" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="102" green="255" blue="102"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="10">
|
||||
<color red="150" green="255" blue="150"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="10">
|
||||
<color red="150" green="255" blue="150"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="20">
|
||||
<color red="182" green="255" blue="182"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="20">
|
||||
<color red="182" green="255" blue="182"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="50">
|
||||
<color red="255" green="255" blue="255"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.1" id="TASK">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="blue-white-gloss" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="212" green="231" blue="248"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="250" green="251" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="1">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="129" green="185" blue="234"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="170" green="208" blue="242"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="2">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="187" green="218" blue="247"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="197" green="224" blue="247"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="3">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="153" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="51" green="153" blue="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="4">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="255" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="255" green="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.3" id="GATEWAY">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="GATEWAY" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="250" green="251" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="255" green="255" blue="204"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.1" id="TASK">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="blue-white-gloss" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="212" green="231" blue="248"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="250" green="251" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="1">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="129" green="185" blue="234"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="170" green="208" blue="242"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="2">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="187" green="218" blue="247"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="197" green="224" blue="247"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="3">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="153" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="51" green="153" blue="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="4">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="255" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="255" green="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.1" id="TASK">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="blue-white-gloss" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="248" green="251" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="237" green="245" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="222" green="237" blue="250"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="212" green="231" blue="248"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="250" green="251" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="226" green="229" blue="233"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="1">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="238" green="246" blue="253"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="208" green="230" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="172" green="210" blue="244"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="129" green="185" blue="234"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="170" green="208" blue="242"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="154" green="191" blue="224"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="2">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="245" green="249" blue="254"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="1">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="226" green="239" blue="252"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="2">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="203" green="227" blue="249"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="3">
|
||||
<color red="187" green="218" blue="247"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="197" green="224" blue="247"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="2">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="178" green="205" blue="229"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="3">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="153" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="51" green="153" blue="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
<adaptedGradientColoredAreas styleAdaption="4">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="255" green="204"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_END" locationValue="0">
|
||||
<color red="255" green="102"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.8" id="END-EVENT">
|
||||
<renderingStyle>
|
||||
<adaptedGradientColoredAreas definedStyleId="END-EVENT" gradientType="0">
|
||||
<adaptedGradientColoredAreas styleAdaption="0">
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="0">
|
||||
<color red="255" green="102" blue="102"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="10">
|
||||
<color red="255" green="150" blue="150"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="10">
|
||||
<color red="255" green="150" blue="150"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="20">
|
||||
<color red="255" green="182" blue="182"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
<gradientColor>
|
||||
<start locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="20">
|
||||
<color red="255" green="182" blue="182"/>
|
||||
</start>
|
||||
<end locationType="LOCATION_TYPE_ABSOLUTE_START" locationValue="50">
|
||||
<color red="255" green="255" blue="255"/>
|
||||
</end>
|
||||
</gradientColor>
|
||||
</adaptedGradientColoredAreas>
|
||||
</adaptedGradientColoredAreas>
|
||||
</renderingStyle>
|
||||
</styles>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" id="BPMN-POLYGON-ARROW"/>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<styles foreground="/0/@colors.7" id="BPMNCLASS-TEXT"/>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.1/@anchors.0" end="/0/@children.2/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow6"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.17" font="/0/@fonts.0" value=""/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
</connections>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.3/@anchors.0" end="/0/@children.5/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow12"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.19" font="/0/@fonts.0" value="Conforme"/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
</connections>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.4/@anchors.0" end="/0/@children.2/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow15"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.20" font="/0/@fonts.0" value="Enviar correção do planograma"/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
<bendpoints x="372" y="208"/>
|
||||
</connections>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.2/@anchors.0" end="/0/@children.3/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow19"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.21" font="/0/@fonts.0" value=""/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
</connections>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.5/@anchors.0" end="/0/@children.6/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow22"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.22" font="/0/@fonts.0" value=""/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
</connections>
|
||||
<connections xsi:type="pi:FreeFormConnection" visible="true" active="true" start="/0/@children.3/@anchors.0" end="/0/@children.4/@anchors.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polyline" foreground="/0/@colors.3" lineWidth="1" filled="false" transparency="0.0"/>
|
||||
<link businessObjects="flow23"/>
|
||||
<connectionDecorators visible="true" active="true" locationRelative="true" location="0.5">
|
||||
<graphicsAlgorithm xsi:type="al:Text" lineWidth="1" filled="false" transparency="0.0" x="10" style="/0/@styles.23" font="/0/@fonts.0" value=""/>
|
||||
</connectionDecorators>
|
||||
<connectionDecorators visible="true" locationRelative="true" location="1.0">
|
||||
<graphicsAlgorithm xsi:type="al:Polygon" background="/0/@colors.3" foreground="/0/@colors.3" lineWidth="1" filled="true" transparency="0.0" style="/0/@styles.18">
|
||||
<points x="-10" y="-5" before="3" after="3"/>
|
||||
<points/>
|
||||
<points x="-10" y="5" before="3" after="3"/>
|
||||
<points x="-8" before="3" after="3"/>
|
||||
</graphicsAlgorithm>
|
||||
</connectionDecorators>
|
||||
</connections>
|
||||
<colors red="227" green="238" blue="249"/>
|
||||
<colors red="25" green="25" blue="112"/>
|
||||
<colors red="159" green="193" blue="198"/>
|
||||
<colors/>
|
||||
<colors red="67" green="67" blue="67"/>
|
||||
<colors red="192" green="192" blue="192"/>
|
||||
<colors red="51" green="102" blue="51"/>
|
||||
<colors red="51" green="51" blue="153"/>
|
||||
<colors red="153" green="51" blue="51"/>
|
||||
<fonts name="Arial" size="8"/>
|
||||
<fonts name="Arial" size="8" bold="true"/>
|
||||
</pi:Diagram>
|
||||
<bpmn2:BpmnPool id="bpmnpool1" name="Compliance" cores="FFFFFF"/>
|
||||
<bpmn2:BpmnSwimLane id="bpmnswimlane2" name="Lojas" cores="FFFFFF"/>
|
||||
<bpmn2:BpmnSwimLane id="bpmnswimlane3" name="Analista" cores="C0C0C0"/>
|
||||
<bpmn2:BpmnStartEvent id="startevent4" name="Início" outgoing="flow6" type="10" extendedFields="<list/>" signalId="0" expediente="Expediente BackOffice, Logística e Motorista" selecionaColaboradores="1" esforcoCalculo="0"/>
|
||||
<bpmn2:BpmnTask id="task5" name="Validar Planograma" incoming="flow6 flow15" outgoing="flow19" type="80" extendedFields="<list/>" managerMechanism="Usuário" managerAssignmentControllerString="<org.eclipse.bpmn2.impl.AssignmentControllerColleague>
 <colleagueId>andrey.cunha</colleagueId>
 <mechanismName>Usuário</mechanismName>
</org.eclipse.bpmn2.impl.AssignmentControllerColleague>" loopType="0" authNotify="true" expediente="Expediente BackOffice, Logística e Motorista" selecionaColaboradores="1" esforcoCalculo="0" executionAttempts="0" frequency="0"/>
|
||||
<bpmn2:BpmnGateway id="exclusivegateway7" name="Análise" incoming="flow19" outgoing="flow12 flow23" type="120" extendedFields="<list/>" condition="<list>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>1</order>
 <expression>hAPI.getCardValue(&quot;saidaAnalise&quot;) == &quot;NAO_CONFORME&quot;</expression>
 <targetTask>task9</targetTask>
 <mechanism>Executor Atividade</mechanism>
 <conditionType>0</conditionType>
 <mecanismoAtribuicaoConfiguracao class="org.eclipse.bpmn2.impl.AssignmentControllerExecutorMechanism">
 <idNode>startevent4</idNode>
 <returns>1</returns>
 <mechanismName>Executor Atividade</mechanismName>
 </mecanismoAtribuicaoConfiguracao>
 </org.eclipse.bpmn2.impl.ConditionImpl>
 <org.eclipse.bpmn2.impl.ConditionImpl>
 <order>2</order>
 <expression>hAPI.getCardValue(&quot;saidaAnalise&quot;) == &quot;CONFORME&quot;</expression>
 <targetTask>task11</targetTask>
 <conditionType>0</conditionType>
 </org.eclipse.bpmn2.impl.ConditionImpl>
</list>"/>
|
||||
<bpmn2:BpmnTask id="task9" name="Refazer Planograma" incoming="flow23" outgoing="flow15" type="80" extendedFields="<list/>" loopType="0" authNotify="true" expediente="" selecionaColaboradores="1" esforcoCalculo="0" executionAttempts="0" frequency="0"/>
|
||||
<bpmn2:BpmnTask id="task11" name="Enviar Email e PDF" incoming="flow12" outgoing="flow22" type="80" extendedFields="<list/>" managerMechanism="" loopType="0" authNotify="true" expediente="" prazoConclusao="10.0" selecionaColaboradores="1" esforcoCalculo="0" executionAttempts="0" frequency="0"/>
|
||||
<bpmn2:BpmnEndEvent id="endterminate21" name="Concluído" incoming="flow22" type="68" extendedFields="<list/>" signalId="0" notificaRequisitante="true"/>
|
||||
<bpmn2:BpmnProcess id="checklist" name="checklist" serverId="Ginseng Produção" version="6" author="" extendedFields="<list/>" cardIndex="40213" formSource="server" category="" volume="Default" expedient="Default" instruction="" complementsLevel="1" notifyResponsibleComplements="true" notifyRequisitionerComplements="true" formType="ECM_FORM_BUILDER"/>
|
||||
<bpmn2:SequenceFlow id="flow6" name="" sourceRef="startevent4" targetRef="task5" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow12" name="Conforme" sourceRef="exclusivegateway7" targetRef="task11" atividadeFluxo="Conforme" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow15" name="Enviar correção do planograma" sourceRef="task9" targetRef="task5" atividadeFluxo="Enviar correção" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow19" name="" sourceRef="task5" targetRef="exclusivegateway7" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow22" name="" sourceRef="task11" targetRef="endterminate21" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
<bpmn2:SequenceFlow id="flow23" name="" sourceRef="exclusivegateway7" targetRef="task9" atividadeFluxo="" atividadeRetorno="" extendedFields="<list/>"/>
|
||||
</xmi:XMI>
|
||||
Loading…
x
Reference in New Issue
Block a user