1 | /* armazena os parâmetro passados para a construção da interface */ |
---|
2 | var workflowInstancesParams; |
---|
3 | |
---|
4 | /* armazena os nomes dos usuários que possuem as instâncias */ |
---|
5 | var workflowInstancesUserNames; |
---|
6 | |
---|
7 | /* armazena informações dos processos */ |
---|
8 | var workflowInstancesProcessesInfo; |
---|
9 | |
---|
10 | /* armazena os nomes das atividades */ |
---|
11 | var workflowInstancesActivityNames; |
---|
12 | |
---|
13 | /* armazena a lista de processos cujas instâncias o usuário pode acessar */ |
---|
14 | var workflowInstancesProcesses; |
---|
15 | |
---|
16 | /* array que relaciona um status a uma imagem */ |
---|
17 | var workflowInstancesStatusImages = Array(); |
---|
18 | workflowInstancesStatusImages['active'] = 'i_active.png'; |
---|
19 | workflowInstancesStatusImages['exception'] = 'i_waiting.png'; |
---|
20 | workflowInstancesStatusImages['completed'] = 'i_completed.png'; |
---|
21 | workflowInstancesStatusImages['aborted'] = 'i_aborted.png'; |
---|
22 | |
---|
23 | /* array que relaciona um status a um texto */ |
---|
24 | var workflowInstancesStatusText = Array(); |
---|
25 | workflowInstancesStatusText['active'] = 'Ativa'; |
---|
26 | workflowInstancesStatusText['exception'] = 'Exceção'; |
---|
27 | workflowInstancesStatusText['completed'] = 'Completa'; |
---|
28 | workflowInstancesStatusText['aborted'] = 'Abortada'; |
---|
29 | |
---|
30 | /** |
---|
31 | * Recebe os dados do Ajax e chama os métodos para construção da interface |
---|
32 | * @param array data Os dados retornados por Ajax |
---|
33 | * @return void |
---|
34 | */ |
---|
35 | function instances(data) |
---|
36 | { |
---|
37 | if (_checkError(data)) |
---|
38 | return; |
---|
39 | |
---|
40 | workflowInboxLightVersion = data['light']; |
---|
41 | workflowInstancesProcessesInfo = data['processesInfo']; |
---|
42 | workflowInstancesParams = data['params']; |
---|
43 | workflowInstancesActivityNames = data['activityNames']; |
---|
44 | workflowInstancesUserNames = data['userNames']; |
---|
45 | workflowInstancesProcesses = data['processes']; |
---|
46 | |
---|
47 | var information = $('workflowInstancesInformation'); |
---|
48 | if (information) |
---|
49 | information.remove(); |
---|
50 | |
---|
51 | var currentInstancesMenu = $('table_tools_instances'); |
---|
52 | var currentInstancesElements = $('table_elements_instances'); |
---|
53 | if (currentInstancesElements) |
---|
54 | currentInstancesElements.remove(); |
---|
55 | |
---|
56 | if (currentInstancesMenu) |
---|
57 | currentInstancesMenu.remove(); |
---|
58 | createInstancesMenu(data['instances'].length); |
---|
59 | if (data['instances'].length > 0) |
---|
60 | { |
---|
61 | createInstances(data['instances'], data['paging_links']); |
---|
62 | } |
---|
63 | else |
---|
64 | { |
---|
65 | var pagingContainer = $('td_tools_instances_3'); |
---|
66 | if (pagingContainer) |
---|
67 | pagingContainer.innerHTML = ''; |
---|
68 | if (workflowInstancesParams['active'] == '1') |
---|
69 | $('content_id_2').innerHTML += '<p class="text_dsp" id="workflowInstancesInformation">Nenhum registro ativo foi encontrado.</p>'; |
---|
70 | else |
---|
71 | $('content_id_2').innerHTML += '<p class="text_dsp" id="workflowInstancesInformation">Nenhum registro encerrado foi encontrado.</p>'; |
---|
72 | } |
---|
73 | } |
---|
74 | |
---|
75 | /** |
---|
76 | * Busca os dados, por Ajax, para a construção da interface |
---|
77 | * @param int p_page O número da página (quando houver paginação) que está sendo exibida |
---|
78 | * @param string sort A ordenação selecionada |
---|
79 | * @param int pid O ID do processo que se quer filtrar (ao utilizar 0 (zero), todos os processos serão exibidos |
---|
80 | * @param char active Indica se estão sendo exibidas as instâncias ativas ('1') ou inativas ('0') |
---|
81 | * @return void |
---|
82 | */ |
---|
83 | function draw_instances_folder(p_page, sort, pid, active) |
---|
84 | { |
---|
85 | var p_page = (p_page == null) ? 0 : p_page; |
---|
86 | var sort = (sort == null) ? 0 : sort; |
---|
87 | var pid = (pid == null) ? 0 : pid; |
---|
88 | var active = (active == null) ? '1' : active; |
---|
89 | var params = 'sort=' + sort + '&pid=' + pid +'&active=' + active + '&p_page=' + p_page; |
---|
90 | cExecute('$this.bo_userinterface.instances', instances, params); |
---|
91 | } |
---|
92 | |
---|
93 | /** |
---|
94 | * Cria o menu da interface |
---|
95 | * @param int count O número de instâncias listadas |
---|
96 | * @return void |
---|
97 | */ |
---|
98 | function createInstancesMenu(count) |
---|
99 | { |
---|
100 | var content = '<div id="instancesExtraContent"></div>'; |
---|
101 | content += '<table id="table_tools_instances" width="100%">'; |
---|
102 | content += '<td id="td_tools_instances_1" width="370">'; |
---|
103 | content += '<ul class="horizontalMenu">'; |
---|
104 | content += '<li><a href="javascript:workflowInstancesAlternate()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/alternate.png"/> ') + 'Alternar</a></li>'; |
---|
105 | if (count > 0) |
---|
106 | { |
---|
107 | content += '<li><a href="javascript:group_instances()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/group.png"/> ') + 'Agrupar</a></li>'; |
---|
108 | content += '<li id="instancesProcessFilterButton"><a href="javascript:showInstancesProcessFilter()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/filter.png"/> ') + 'Filtrar por Processo...</a></li>'; |
---|
109 | } |
---|
110 | content += '</ul>'; |
---|
111 | content += '</td>'; |
---|
112 | content += '<td id="td_tools_instances_2">'; |
---|
113 | content += '</td>'; |
---|
114 | content += '<td id="td_tools_instances_3" align="right"></td>'; |
---|
115 | content += '</tr>'; |
---|
116 | content += '</table>'; |
---|
117 | |
---|
118 | $('content_id_2').innerHTML = content; |
---|
119 | } |
---|
120 | |
---|
121 | /** |
---|
122 | * Cria a tabela das instâncias |
---|
123 | * @param array data As instâncias que serão listadas |
---|
124 | * @param array paging Dados da paginação |
---|
125 | * @return void |
---|
126 | */ |
---|
127 | function createInstances(data, paging) |
---|
128 | { |
---|
129 | var content = ''; |
---|
130 | content += '<table id="table_elements_instances" cellpadding="2" class="inboxElements">'; |
---|
131 | content += '<tr>'; |
---|
132 | if (workflowInstancesParams['active'] == '0') |
---|
133 | { |
---|
134 | content += '<th width="13%" align="left">' + createInstancesSortingHeaders('Início Processo', 'wf_started') + '</th>'; |
---|
135 | content += '<th width="13%" align="left">' + createInstancesSortingHeaders('Fim do Processo', 'wf_ended') + '</th>'; |
---|
136 | content += '<th width="40%" align="left">' + createInstancesSortingHeaders('Processo', 'wf_procname') + '</th>'; |
---|
137 | content += '<th width="22%" align="left">' + createInstancesSortingHeaders('Identificador', 'insname') + '</th>'; |
---|
138 | content += '<th width="7%" align="left">Situação</th>'; |
---|
139 | content += '<th width="5%" align="left">Ações</th>'; |
---|
140 | } |
---|
141 | if (workflowInstancesParams['active'] == '1') |
---|
142 | { |
---|
143 | content += '<th width="15%" align="left">' + createInstancesSortingHeaders('Início da Atividade', 'wf_act_started') + '</th>'; |
---|
144 | content += '<th width="20%" align="left">' + createInstancesSortingHeaders('Processo', 'wf_procname') + '</th>'; |
---|
145 | content += '<th width="12%" align="left">' + createInstancesSortingHeaders('Identificador', 'insname') + '</th>'; |
---|
146 | content += '<th width="21%" align="left">' + createInstancesSortingHeaders('Atividade', 'wf_name') + '</th>'; |
---|
147 | content += '<th width="7%" align="left">Situação</th>'; |
---|
148 | content += '<th width="20%" align="left">Atribuído a</th>'; |
---|
149 | content += '<th width="5%" align="left">Ações</th>'; |
---|
150 | } |
---|
151 | content += '</tr>'; |
---|
152 | |
---|
153 | var instancesLimit = data.length; |
---|
154 | var current; |
---|
155 | for (var i = 0; i < instancesLimit; i++) |
---|
156 | { |
---|
157 | current = data[i]; |
---|
158 | content += '<tr>'; |
---|
159 | if (workflowInstancesParams['active'] == '0') |
---|
160 | { |
---|
161 | content += '<td>' + current['wf_started'] + '</td>'; |
---|
162 | content += '<td>' + current['wf_ended'] + '</td>'; |
---|
163 | if (current['viewRunAction']) |
---|
164 | content += '<td onclick="toggleHiddenView(\'instances\', ' + current['wf_instance_id'] + ', 0, ' + current['viewRunAction']['viewActivityID'] + ', ' + workflowInstancesProcessesInfo[current['wf_p_id']]['useHTTPS'] + ');" style="cursor: pointer;">'; |
---|
165 | else |
---|
166 | content += '<td>'; |
---|
167 | content += ((workflowInboxLightVersion) ? workflowInboxPriority[current['wf_priority']] : ('<img src="templateFile.php?file=images/pr' + current['wf_priority'] + '.png"/> ')); |
---|
168 | content += workflowInstancesProcessesInfo[current['wf_p_id']]['name'] + '</td>'; |
---|
169 | content += '<td>' + current['insname'] + '</td>'; |
---|
170 | content += '<td align="center">' + ((workflowInboxLightVersion) ? workflowInstancesStatusText[current['wf_status']] : '<img src="templateFile.php?file=images/actions/' + workflowInstancesStatusImages[current['wf_status']] + '" alt="' + workflowInstancesStatusText[current['wf_status']] + '" title="' + workflowInstancesStatusText[current['wf_status']] + '"/>') + '</td>'; |
---|
171 | content += '<td><a href="javascript:workflowInboxActionView(' + current['wf_instance_id'] + ', ' + current['wf_activity_id'] + ');">' + ((workflowInboxLightVersion) ? 'Visualizar' : '<img src="templateFile.php?file=images/actions/view.png" alt="visualizar" title="visualizar"/>') + '</a>'; |
---|
172 | } |
---|
173 | if (workflowInstancesParams['active'] == '1') |
---|
174 | { |
---|
175 | content += '<td>' + current['wf_act_started'] + '</td>'; |
---|
176 | |
---|
177 | if (current['viewRunAction']) |
---|
178 | content += '<td onclick="toggleHiddenView(\'instances\', ' + current['wf_instance_id'] + ', ' + current['wf_activity_id'] + ', ' + current['viewRunAction']['viewActivityID'] + ', ' + workflowInstancesProcessesInfo[current['wf_p_id']]['useHTTPS'] + ');" style="cursor: pointer;">' + workflowInstancesProcessesInfo[current['wf_p_id']]['name'] + '</td>'; |
---|
179 | else |
---|
180 | content += '<td>' + workflowInstancesProcessesInfo[current['wf_p_id']]['name'] + '</td>'; |
---|
181 | content += '<td>' + current['insname'] + '</td>'; |
---|
182 | content += '<td>' + ((workflowInboxLightVersion) ? workflowInboxPriority[current['wf_priority']] : ('<img src="templateFile.php?file=images/pr' + current['wf_priority'] + '.png"/> ')); |
---|
183 | content += workflowInstancesActivityNames[current['wf_activity_id']] + '</td>'; |
---|
184 | content += '<td align="center">' + ((workflowInboxLightVersion) ? workflowInstancesStatusText[current['wf_status']] : '<img src="templateFile.php?file=images/actions/' + workflowInstancesStatusImages[current['wf_status']] + '" alt="' + workflowInstancesStatusText[current['wf_status']] + '" title="' + workflowInstancesStatusText[current['wf_status']] + '"/>') + '</td>'; |
---|
185 | content += '<td>' + workflowInstancesUserNames[current['wf_user']] + '</td>'; |
---|
186 | content += '<td><a href="javascript:workflowInboxActionView(' + current['wf_instance_id'] + ', ' + current['wf_activity_id'] + ');">' + ((workflowInboxLightVersion) ? 'Visualizar' : '<img src="templateFile.php?file=images/actions/view.png" alt="visualizar" title="visualizar"/>') + '</a>'; |
---|
187 | } |
---|
188 | |
---|
189 | content += '</tr>'; |
---|
190 | if (current['viewRunAction']) |
---|
191 | if (workflowInstancesParams['active'] == '0') |
---|
192 | content += constructHiddenView('instances', 6, current['wf_instance_id'], 0, current['viewRunAction']['height']); |
---|
193 | else |
---|
194 | content += constructHiddenView('instances', 7, current['wf_instance_id'], current['wf_activity_id'], current['viewRunAction']['height']); |
---|
195 | } |
---|
196 | |
---|
197 | $('content_id_2').innerHTML += content; |
---|
198 | $('td_tools_instances_3').innerHTML = createInstancePagingLinks(paging); |
---|
199 | } |
---|
200 | |
---|
201 | /** |
---|
202 | * Cria os links de paginação |
---|
203 | * @param array paging Dados da paginação |
---|
204 | * @return string O código XHTML dos links de paginação |
---|
205 | */ |
---|
206 | function createInstancePagingLinks(pagingData) |
---|
207 | { |
---|
208 | var output = ''; |
---|
209 | if (pagingData) |
---|
210 | { |
---|
211 | var pagingSize = pagingData.length; |
---|
212 | for (var i = 0; i < pagingSize; i++) |
---|
213 | { |
---|
214 | if (pagingData[i].do_link == true) |
---|
215 | output += '<a href="javascript:draw_instances_folder(' + pagingData[i].p_page + ', \'' + workflowInstancesParams['sort'] + '\', ' + workflowInstancesParams['pid'] + ', \'' + workflowInstancesParams['active'] + '\');">' + pagingData[i].name + '</a> '; |
---|
216 | else |
---|
217 | output += '<strong>' + pagingData[i].name + '</strong> '; |
---|
218 | } |
---|
219 | } |
---|
220 | |
---|
221 | return output; |
---|
222 | } |
---|
223 | |
---|
224 | /** |
---|
225 | * Cria os links para ordenação das instâncias |
---|
226 | * @param string O texto do link |
---|
227 | * @param string A ordenação esperada |
---|
228 | * @return string O link criado |
---|
229 | */ |
---|
230 | function createInstancesSortingHeaders(text, expectedSort) |
---|
231 | { |
---|
232 | var currentSort = workflowInstancesParams['sort'].split('__'); |
---|
233 | var theSame = (expectedSort == currentSort[0]); |
---|
234 | direction = false; |
---|
235 | |
---|
236 | var output = ''; |
---|
237 | if (theSame) |
---|
238 | { |
---|
239 | output += '<strong>'; |
---|
240 | direction = (currentSort[1] == 'ASC'); |
---|
241 | } |
---|
242 | |
---|
243 | output += '<a href="javascript:sortInstances(\'' + expectedSort + '__' + (direction ? 'DESC' : 'ASC') + '\');">' + text + '</a>'; |
---|
244 | |
---|
245 | if (theSame) |
---|
246 | output += '<img src="templateFile.php?file=images/arrow_' + (direction ? 'ascendant' : 'descendant') + '.gif"/></strong>'; |
---|
247 | |
---|
248 | return output; |
---|
249 | } |
---|
250 | |
---|
251 | /** |
---|
252 | * Alterna entre a exibição de instâncias ativas e finalizadas |
---|
253 | * @return void |
---|
254 | */ |
---|
255 | function workflowInstancesAlternate() |
---|
256 | { |
---|
257 | if (workflowInstancesParams['active'] == '1') |
---|
258 | draw_instances_folder(0, workflowInstancesParams['sort'], workflowInstancesParams['pid'], '0'); |
---|
259 | else |
---|
260 | draw_instances_folder(0, workflowInstancesParams['sort'], workflowInstancesParams['pid'], '1'); |
---|
261 | } |
---|
262 | |
---|
263 | /** |
---|
264 | * Ordena as instâncias de acordo com o critério informado |
---|
265 | * @param string sort O campo/sentido utilizado na ordenação |
---|
266 | * @return void |
---|
267 | */ |
---|
268 | function sortInstances(sort) |
---|
269 | { |
---|
270 | draw_instances_folder(workflowInstancesParams['p_page'], sort, workflowInstancesParams['pid'], workflowInstancesParams['active']); |
---|
271 | } |
---|
272 | |
---|
273 | /** |
---|
274 | * Cria e exibe o menu listando os processos das instâncias que o usuário iniciou |
---|
275 | * @return void |
---|
276 | */ |
---|
277 | function showInstancesProcessFilter() |
---|
278 | { |
---|
279 | /* se o menu já existe, apenas o exibe */ |
---|
280 | if ($('instancesProcessFilter')) |
---|
281 | { |
---|
282 | $('instancesExtraContent').style.display = ''; |
---|
283 | return; |
---|
284 | } |
---|
285 | |
---|
286 | /* coleta informações sobre posicionamento */ |
---|
287 | var li = $('instancesProcessFilterButton'); |
---|
288 | var offset = Position.cumulativeOffset(li); |
---|
289 | var height = li.getHeight() - 1; |
---|
290 | |
---|
291 | /* cria as opções do menu */ |
---|
292 | var content = '<ul id="instancesProcessFilter" onmouseover="$(\'instancesExtraContent\').style.display = \'\'" onmouseout="$(\'instancesExtraContent\').style.display = \'none\'" class="submenu" style="top: ' + (offset[1] + height) + 'px; left: ' + offset[0] + 'px;">'; |
---|
293 | /* insere manualmente a linha para exibir todos os processos */ |
---|
294 | content += '<li><a href="javascript:$(\'instancesExtraContent\').style.display = \'none\';filterProcess(0)">Todos</a></li>'; |
---|
295 | var size = workflowInstancesProcesses.length; |
---|
296 | for (var i = 0; i < size; i++) |
---|
297 | content += '<li><a href="javascript:$(\'instancesExtraContent\').style.display = \'none\';filterProcess(' + workflowInstancesProcesses[i].pid +')">' + workflowInstancesProcesses[i].name + '</a></li>'; |
---|
298 | content += '</ul>'; |
---|
299 | |
---|
300 | /* insere o novo conteúdo */ |
---|
301 | $('instancesExtraContent').innerHTML += content; |
---|
302 | } |
---|
303 | |
---|
304 | function filterProcess(pid) |
---|
305 | { |
---|
306 | draw_instances_folder(workflowInstancesParams['p_page'], workflowInstancesParams['sort'], pid, workflowInstancesParams['active']); |
---|
307 | } |
---|
308 | |
---|
309 | function ConfigMenuStyle_instances(m, max) |
---|
310 | { |
---|
311 | m.SetPosition('relative',0,0); |
---|
312 | m.SetCorrection(1,-5); |
---|
313 | m.SetCellSpacing(0); |
---|
314 | m.SetBackground('whitesmoke','','',''); |
---|
315 | m.SetItemText('black','center','','',''); |
---|
316 | m.SetItemBorder(1,'buttonface','solid'); |
---|
317 | m.SetItemTextHL('darkblue','center','','',''); |
---|
318 | m.SetItemBackgroundHL('white','','',''); |
---|
319 | m.SetItemBorderHL(1,'black','solid'); |
---|
320 | m.SetItemTextClick('white','center','','',''); |
---|
321 | m.SetItemBackgroundClick('darkblue','','',''); |
---|
322 | m.SetItemBorderClick(1,'black','solid'); |
---|
323 | m.SetBorder(0,'navy','solid'); |
---|
324 | |
---|
325 | m._pop.SetCorrection(4,1); |
---|
326 | m._pop.SetItemDimension(max * 7 + 30,22); |
---|
327 | m._pop.SetPaddings(1); |
---|
328 | m._pop.SetBackground('white','','',''); |
---|
329 | m._pop.SetSeparator(150,'left','black',''); |
---|
330 | m._pop.SetExpandIcon(true,'>',9); |
---|
331 | m._pop.SetItemBorder(0,'#66CCFF','solid'); |
---|
332 | m._pop.SetItemBorderHL(0,'black','solid'); |
---|
333 | m._pop.SetItemPaddings(0); |
---|
334 | m._pop.SetItemPaddingsHL(0); |
---|
335 | m._pop.SetItemText('black','','','',''); |
---|
336 | m._pop.SetItemTextHL('darkblue','','','',''); |
---|
337 | m._pop.SetItemBackground('white','','',''); |
---|
338 | m._pop.SetItemBackgroundHL('whitesmoke','','',''); |
---|
339 | } |
---|