source: branches/1.2/workflow/js/userinterface/instances.js @ 1349

Revision 1349, 14.5 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

  • Property svn:executable set to *
Line 
1/* armazena os parâmetro passados para a construção da interface */
2var workflowInstancesParams;
3
4/* armazena os nomes dos usuários que possuem as instâncias */
5var workflowInstancesUserNames;
6
7/* armazena informações dos processos */
8var workflowInstancesProcessesInfo;
9
10/* armazena os nomes das atividades */
11var workflowInstancesActivityNames;
12
13/* armazena a lista de processos cujas instâncias o usuário pode acessar */
14var workflowInstancesProcesses;
15
16/* array que relaciona um status a uma imagem */
17var workflowInstancesStatusImages = Array();
18workflowInstancesStatusImages['active'] = 'i_active.png';
19workflowInstancesStatusImages['exception'] = 'i_waiting.png';
20workflowInstancesStatusImages['completed'] = 'i_completed.png';
21workflowInstancesStatusImages['aborted'] = 'i_aborted.png';
22
23/* array que relaciona um status a um texto */
24var workflowInstancesStatusText = Array();
25workflowInstancesStatusText['active'] = 'Ativa';
26workflowInstancesStatusText['exception'] = 'Exceção';
27workflowInstancesStatusText['completed'] = 'Completa';
28workflowInstancesStatusText['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 */
35function 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 */
83function 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 */
98function 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"/>&nbsp;') + '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"/>&nbsp;') + 'Agrupar</a></li>';
108                content += '<li id="instancesProcessFilterButton"><a href="javascript:showInstancesProcessFilter()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/filter.png"/>&nbsp;') + '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 */
127function 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"/>&nbsp;'));
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"/>&nbsp;'));
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 */
206function 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>&nbsp;';
216                        else
217                                output += '<strong>' + pagingData[i].name + '</strong>&nbsp;';
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 */
230function 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 */
255function 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 */
268function 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 */
277function 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
304function filterProcess(pid)
305{
306        draw_instances_folder(workflowInstancesParams['p_page'], workflowInstancesParams['sort'], pid, workflowInstancesParams['active']);
307}
308
309function 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}
Note: See TracBrowser for help on using the repository browser.