[795] | 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 | } |
---|