source: branches/1.2/workflow/js/monitors/filters.js @ 1349

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

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

Line 
1var filters = new Array();
2var completedFilters = new Array();
3
4var Filter = Class.create();
5
6Filter.prototype =
7{
8        initialize: function()
9        {
10                this.index = null;
11                this.id = '';
12        },
13
14        generateHTML: function()
15        {
16        },
17
18        remove: function()
19        {
20                var div = $('divFilterSelection_' + this.index);
21                if (div)
22                        div.remove();
23                div = $('filter_' + this.index)
24                if (div)
25                        div.remove();
26        },
27
28        removeButtonHTML: function()
29        {
30                var output = '';
31                output = '<a href="javascript:removeFilter(' + this.index + ')"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/button_cancel.png"/></a>';
32                return output;
33        },
34
35        setup: function()
36        {
37        },
38
39        serialize: function(data)
40        {
41                return JSON.stringify(data);
42        },
43
44        ajaxData: function()
45        {
46                return '';
47        }
48};
49
50var FilterActivityDate =
51{
52        id: 'activityDate',
53        generateHTML: function()
54        {
55                var output = '';
56                output += '<div id="filter_' + this.index + '">';
57                output += 'A <strong>data de chegada na atividade</strong> atual é <select id="' + this.id + '_' + this.index + '_operator">';
58                output += '<option value="EQ">Igual a</option>';
59                output += '<option value="LT">Antes de</option>';
60                output += '<option value="GT">Depois de</option>';
61                output += '</select>';
62                output += ' <input type="text" id="' + this.id + '_' + this.index + '_date" name="' + this.id + '_' + this.index + '_date" value="" size="10" maxlength="10" onkeypress="return(formatCalendarInput(this, event))"/>';
63                output += '<button id="' + this.id + '_' + this.index + '_date-trigger">...</button>';
64                output += '&nbsp;' + this.removeButtonHTML();
65                output += '</div>';
66                return output;
67        },
68
69        setup: function()
70        {
71                Calendar.setup({"inputField":this.id + '_' + this.index + '_date',"button":this.id + '_' + this.index + '_date-trigger',"singleClick":true,"name":this.id + '_' + this.index + '_date',"default":true});
72        },
73
74        ajaxData: function()
75        {
76                var data =
77                        {
78                                id: this.id,
79                                operator: $F(this.id + '_' + this.index + '_operator'),
80                                date: $F(this.id + '_' + this.index + '_date')
81                        };
82                return this.serialize(data);
83        }
84};
85
86var FilterInstanceName =
87{
88        id: 'instanceName',
89        generateHTML: function()
90        {
91                var output = '';
92                output += '<div id="filter_' + this.index + '">';
93                output += 'O <strong>identificador da instância</strong> contém: <input type="text" id="' + this.id + '_' + this.index + '_name">';
94                output += '&nbsp;' + this.removeButtonHTML();
95                output += '</div>';
96                return output;
97        },
98
99        ajaxData: function()
100        {
101                var data =
102                        {
103                                id: this.id,
104                                name: $F(this.id + '_' + this.index + '_name')
105                        };
106                return this.serialize(data);
107        }
108};
109
110var FilterInstanceID =
111{
112        id: 'instanceID',
113        generateHTML: function()
114        {
115                var output = '';
116                output += '<div id="filter_' + this.index + '">';
117                output += 'O <strong>ID da instância</strong> é <select id="' + this.id + '_' + this.index + '_operator">';
118                output += '<option value="EQ">Igual a</option>';
119                output += '<option value="LT">Menor que</option>';
120                output += '<option value="GT">Maior que</option>';
121                output += '</select>';
122                output += ' <input type="text" id="' + this.id + '_' + this.index + '_number" size="5"/>';
123                output += '&nbsp;' + this.removeButtonHTML();
124                output += '</div>';
125                return output;
126        },
127
128        ajaxData: function()
129        {
130                var data =
131                        {
132                                id: this.id,
133                                operator: $F(this.id + '_' + this.index + '_operator'),
134                                number: $F(this.id + '_' + this.index + '_number')
135                        };
136                return this.serialize(data);
137        }
138};
139
140var FilterInstancePriority =
141{
142        id: 'instancePriority',
143        generateHTML: function()
144        {
145                var output = '';
146                output += '<div id="filter_' + this.index + '">';
147                output += 'A <strong>prioridade da instância</strong> é <select id="' + this.id + '_' + this.index + '_operator">';
148                output += '<option value="EQ">Igual a</option>';
149                output += '<option value="LT">Menor que</option>';
150                output += '<option value="GT">Maior que</option>';
151                output += '</select>';
152                output += ' <select id="' + this.id + '_' + this.index + '_priority">';
153                for (var i = 0; i < 5; i++)
154                        output += '<option value="' + i + '">' + i + '</option>';
155                output += '</select>';
156                output += '&nbsp;' + this.removeButtonHTML();
157                output += '</div>';
158                return output;
159        },
160
161        ajaxData: function()
162        {
163                var data =
164                        {
165                                id: this.id,
166                                operator: $F(this.id + '_' + this.index + '_operator'),
167                                priority: $F(this.id + '_' + this.index + '_priority')
168                        };
169                return this.serialize(data);
170        }
171};
172
173var FilterInstanceDate =
174{
175        id: 'instanceDate',
176        generateHTML: function()
177        {
178                var output = '';
179                output += '<div id="filter_' + this.index + '">';
180                output += 'A <strong>data de criação da instância</strong> é <select id="' + this.id + '_' + this.index + '_operator">';
181                output += '<option value="EQ">Igual a</option>';
182                output += '<option value="LT">Antes de</option>';
183                output += '<option value="GT">Depois de</option>';
184                output += '</select>';
185                output += ' <input type="text" id="' + this.id + '_' + this.index + '_date" name="' + this.id + '_' + this.index + '_date" value="" size="10" maxlength="10" onkeypress="return(formatCalendarInput(this, event))"/>';
186                output += '<button id="' + this.id + '_' + this.index + '_date-trigger">...</button>';
187                output += '&nbsp;' + this.removeButtonHTML();
188                output += '</div>';
189                return output;
190        },
191
192        setup: function()
193        {
194                Calendar.setup({"inputField":this.id + '_' + this.index + '_date',"button":this.id + '_' + this.index + '_date-trigger',"singleClick":true,"name":this.id + '_' + this.index + '_date',"default":true});
195        },
196
197        ajaxData: function()
198        {
199                var data =
200                        {
201                                id: this.id,
202                                operator: $F(this.id + '_' + this.index + '_operator'),
203                                date: $F(this.id + '_' + this.index + '_date')
204                        };
205                return this.serialize(data);
206        }
207};
208
209var FilterInstanceEndDate =
210{
211        id: 'instanceEndDate',
212        generateHTML: function()
213        {
214                var output = '';
215                output += '<div id="filter_' + this.index + '">';
216                output += 'A <strong>data de finalização da instância</strong> é <select id="' + this.id + '_' + this.index + '_operator">';
217                output += '<option value="EQ">Igual a</option>';
218                output += '<option value="LT">Antes de</option>';
219                output += '<option value="GT">Depois de</option>';
220                output += '</select>';
221                output += ' <input type="text" id="' + this.id + '_' + this.index + '_date" name="' + this.id + '_' + this.index + '_date" value="" size="10" maxlength="10" onkeypress="return(formatCalendarInput(this, event))"/>';
222                output += '<button id="' + this.id + '_' + this.index + '_date-trigger">...</button>';
223                output += '&nbsp;' + this.removeButtonHTML();
224                output += '</div>';
225                return output;
226        },
227
228        setup: function()
229        {
230                Calendar.setup({"inputField":this.id + '_' + this.index + '_date',"button":this.id + '_' + this.index + '_date-trigger',"singleClick":true,"name":this.id + '_' + this.index + '_date',"default":true});
231        },
232
233        ajaxData: function()
234        {
235                var data =
236                        {
237                                id: this.id,
238                                operator: $F(this.id + '_' + this.index + '_operator'),
239                                date: $F(this.id + '_' + this.index + '_date')
240                        };
241                return this.serialize(data);
242        }
243};
244
245var FilterInstanceStatus =
246{
247        id: 'instanceStatus',
248        generateHTML: function()
249        {
250                var output = '';
251                output += '<div id="filter_' + this.index + '">';
252                output += 'O <strong>status da instância</strong> é: ';
253                output += ' <select id="' + this.id + '_' + this.index + '_status">';
254                for (var i = 0; i < statusCorrelation.length; i++)
255                        output += '<option value="' + statusCorrelation[i]['id'] + '">' + statusCorrelation[i]['name'] + '</option>';
256                output += '</select>';
257                output += '&nbsp;' + this.removeButtonHTML();
258                output += '</div>';
259                return output;
260        },
261
262        ajaxData: function()
263        {
264                var data =
265                        {
266                                id: this.id,
267                                status: $F(this.id + '_' + this.index + '_status')
268                        };
269                return this.serialize(data);
270        }
271};
272
273var FilterInstanceActivity =
274{
275        id: 'instanceActivity',
276        generateHTML: function()
277        {
278                var output = '';
279                output += '<div id="filter_' + this.index + '">';
280                output += 'A <strong>instância encontra-se na atividade</strong>: ';
281                output += '<span id="dummy_' + this.index + '"></span>';
282                output += '&nbsp;' + this.removeButtonHTML();
283                output += '</div>';
284                return output;
285        },
286
287        setup: function()
288        {
289                var filterIndex = this.index;
290                var filterID = this.id;
291                function resultInstanceActivitySetup(data)
292                {
293                        var content = '';
294                        content += ' <select id="' + filterID + '_' + filterIndex + '_activity">';
295                        for (var i = 0; i < data['data'].length; i++)
296                                content += '<option value="' + data['data'][i]['id'] + '">' + data['data'][i]['name'] + '</option>';
297                        content += '</select>';
298
299                        new Insertion.Before($('dummy_' + filterIndex), content);
300                        $('dummy_' + filterIndex).remove();
301                }
302                cExecute('$this.bo_monitors.listActivities', resultInstanceActivitySetup, 'pid=' + workflowMonitorInstancesParams['pid']);
303        },
304
305        ajaxData: function()
306        {
307                var data =
308                        {
309                                id: this.id,
310                                activity: $F(this.id + '_' + this.index + '_activity')
311                        };
312                return this.serialize(data);
313        }
314};
315
316var FilterInstanceUser =
317{
318        id: 'instanceUser',
319        generateHTML: function()
320        {
321                var output = '';
322                output += '<div id="filter_' + this.index + '">';
323                output += 'A <strong>instância encontra-se com o usuário</strong>: ';
324                output += '<span id="dummy_' + this.index + '"></span>';
325                output += '&nbsp;' + this.removeButtonHTML();
326                output += '</div>';
327                return output;
328        },
329
330        setup: function()
331        {
332                var filterIndex = this.index;
333                var filterID = this.id;
334                function resultInstanceUserSetup(data)
335                {
336                        var content = '';
337                        content += ' <select id="' + filterID + '_' + filterIndex + '_user">';
338                        for (var i = 0; i < data['users'].length; i++)
339                                content += '<option value="' + data['users'][i]['id'] + '">' + data['users'][i]['name'] + '</option>';
340                        content += '</select>';
341
342                        new Insertion.Before($('dummy_' + filterIndex), content);
343                        $('dummy_' + filterIndex).remove();
344                }
345                cExecute("$this.bo_monitors.getUsersInInstances", resultInstanceUserSetup, 'pid=' + workflowMonitorInstancesParams['pid']);
346        },
347
348        ajaxData: function()
349        {
350                var data =
351                        {
352                                id: this.id,
353                                user: $F(this.id + '_' + this.index + '_user')
354                        };
355                return this.serialize(data);
356        }
357};
358
359var FilterInstanceOwner =
360{
361        id: 'instanceOwner',
362        generateHTML: function()
363        {
364                var output = '';
365                output += '<div id="filter_' + this.index + '">';
366                output += 'O <strong> proprietário da instância</strong> é: ';
367                output += '<span id="dummy_' + this.index + '"></span>';
368                output += '&nbsp;' + this.removeButtonHTML();
369                output += '</div>';
370                return output;
371        },
372
373        setup: function()
374        {
375                var filterIndex = this.index;
376                var filterID = this.id;
377                function resultInstanceOwnerSetup(data)
378                {
379                        var content = '';
380                        content += ' <select id="' + filterID + '_' + filterIndex + '_owners">';
381                        for (var i = 0; i < data['owners'].length; i++)
382                                content += '<option value="' + data['owners'][i]['id'] + '">' + (data['owners'][i]['name'] ? data['owners'][i]['name'] : 'ID: ' + data['owners'][i]['id']) + '</option>';
383                        content += '</select>';
384
385                        new Insertion.Before($('dummy_' + filterIndex), content);
386                        $('dummy_' + filterIndex).remove();
387                }
388                cExecute("$this.bo_monitors.getInstancesOwners", resultInstanceOwnerSetup, 'pid=' + workflowMonitorInstancesParams['pid'] + '&currentList=' + workflowMonitorCurrentList);
389        },
390
391        ajaxData: function()
392        {
393                var data =
394                        {
395                                id: this.id,
396                                owner: $F(this.id + '_' + this.index + '_owners')
397                        };
398                return this.serialize(data);
399        }
400};
401
402function addFilterSelection(onlyCompletedInstances)
403{
404        var content = '';
405        var index = filters.length;
406
407        var objFilter = new Filter();
408        objFilter.index = index;
409        filters[index] = objFilter;
410
411        content += '<div id="divFilterSelection_' + index + '">';
412        content += '<select id="filterSelect_' + index + '">';
413        if (!onlyCompletedInstances)
414                content += '<option value="instanceActivity">Atividade da Instância</option>';
415        content += '<option value="instanceDate">Data da Instância</option>';
416        if (onlyCompletedInstances)
417                content += '<option value="instanceEndDate">Data de Finalização da Instância</option>';
418        if (!onlyCompletedInstances)
419                content += '<option value="activityDate">Data na Atividade</option>';
420        content += '<option value="instanceID">ID da Instância</option>';
421        content += '<option value="instanceName">Identificador</option>';
422        content += '<option value="instancePriority">Prioridade da Instância</option>';
423        content += '<option value="instanceOwner">Proprietário da Instância</option>';
424        content += '<option value="instanceStatus">Status da Instância</option>';
425        if (!onlyCompletedInstances)
426                content += '<option value="instanceUser">Usuário da Instância</option>';
427        content += '</select>';
428        content += '&nbsp;<a href="javascript:addFilter(' + index + ')"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/apply.png"/></a>';
429        content += '&nbsp;' + objFilter.removeButtonHTML();
430        content += '</div>';
431        new Insertion.Before($('filterMenu'), content)
432}
433
434function addFilter(index)
435{
436        var div = $('divFilterSelection_' + index);
437        var selectBox = $('filterSelect_' + index);
438        var selected = $F(selectBox);
439        var content = '';
440
441        switch (selected)
442        {
443                case 'activityDate':
444                        Object.extend(filters[index], FilterActivityDate);
445                        break;
446
447                case 'instanceName':
448                        Object.extend(filters[index], FilterInstanceName);
449                        break;
450
451                case 'instanceID':
452                        Object.extend(filters[index], FilterInstanceID);
453                        break;
454
455                case 'instancePriority':
456                        Object.extend(filters[index], FilterInstancePriority);
457                        break;
458
459                case 'instanceDate':
460                        Object.extend(filters[index], FilterInstanceDate);
461                        break;
462
463                case 'instanceEndDate':
464                        Object.extend(filters[index], FilterInstanceEndDate);
465                        break;
466
467                case 'instanceStatus':
468                        Object.extend(filters[index], FilterInstanceStatus);
469                        break;
470
471                case 'instanceActivity':
472                        Object.extend(filters[index], FilterInstanceActivity);
473                        break;
474
475                case 'instanceUser':
476                        Object.extend(filters[index], FilterInstanceUser);
477                        break;
478
479                case 'instanceOwner':
480                        Object.extend(filters[index], FilterInstanceOwner);
481                        break;
482        }
483        content += filters[index].generateHTML();
484        new Insertion.Before(div, content);
485
486        filters[index].setup();
487        div.remove();
488}
489
490function removeFilter(index)
491{
492        filters[index].remove();
493        filters[index] = null;
494}
495
496function filterInstances(completedInstances)
497{
498        var ajaxData = new Array();
499        var currentData = '';
500        for (var i = 0; i < filters.length; i++)
501        {
502                /* ignora se o filtro foi removido */
503                if (filters[i] == null)
504                        continue;
505
506                /* verifica se os critérios foram satisfeitos */
507                currentData = filters[i].ajaxData();
508                if (currentData == '')
509                        continue;
510
511                /* filtro com JSON */
512                ajaxData[ajaxData.length] = filters[i].ajaxData();
513        }
514
515        if (completedInstances)
516        {
517                if (ajaxData.length > 0)
518                        callCompletedInstanceList(workflowMonitorInstancesParams['pid'], workflowMonitorInstancesParams['str'], 0, JSON.stringify(ajaxData));
519                else
520                        callCompletedInstanceList(workflowMonitorInstancesParams['pid'], workflowMonitorInstancesParams['str'], 0);
521        }
522        else
523        {
524                if (ajaxData.length > 0)
525                        callInstanceList(workflowMonitorInstancesParams['pid'], workflowMonitorInstancesParams['str'], 0, JSON.stringify(ajaxData));
526                else
527                        callInstanceList(workflowMonitorInstancesParams['pid'], workflowMonitorInstancesParams['str'], 0);
528        }
529}
Note: See TracBrowser for help on using the repository browser.