source: sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js @ 6946

Revision 6946, 34.8 KB checked in by douglasz, 12 years ago (diff)

Ticket #2966 - Adicionado validacoes para status das tarefas.

  • Property svn:executable set to *
Line 
1function validDateTask(){
2       
3        var errors = {
4                'emptyInitData': 'Por favor, informe uma data inicial',
5                'emptyEndData': 'Por favor, informe uma data final',
6                'emptyInitHour': 'Por favor, informe uma hora inicial',
7                'emptyEndHour': 'Por favor, informe uma hora final',
8               
9                'invalidInitData' : 'Data inicial inválida',
10                'invalidEndData' : 'Data final inválida',
11               
12                'equalData' : 'Hora inicial igual a final',
13                'theirData' : 'Data final menor que a inicial',         
14                'theirHour' : 'Hora final menor que a inicial',
15               
16                'dueInitDate' : 'Previsão de término menor que a data inicial',
17                'dueEndDate'  : 'Previsão de término menor que a data final',
18                'dueTime'         : 'Deve ser definido a hora da Previsão de Término',
19                'dueDate'         : 'Deve ser definido a Previsão de Término',
20                'invalidDueData' : 'Data de Previsão de Término inválida'
21        };
22
23    var start_date = $(".new-task-win.active .start-date").val();
24    var end_date   = $(".new-task-win.active .end-date").val();
25    var start_time = $(".new-task-win.active .start-time").val();
26    var end_time   = $(".new-task-win.active .end-time").val();
27        var due_date   = $(".new-task-win.active .date-previsao").val();
28        var due_time   =  $.trim($(".new-task-win.active .time-previsao").val());
29    var isAllDay   = $('.new-task-win.active input[name="allDay"]').is(':checked');
30    var customDate = $(".endRepeat").val() == "customDate";
31    var occurrences = $(".endRepeat").val() == "occurrences";
32    var taskInterval = $('.taskInterval').val();
33   
34    if(start_date == "")
35                return errors['emptyInitData'];
36    else if(end_date == "")
37                return errors['emptyEndData'];
38    else if(!isAllDay && start_time == "")
39                return errors['emptyInitHour'];
40    else if(!isAllDay && end_time == "")
41                return errors['emptyEndHour'];
42        else if(due_date != "" && due_time == "")
43                return errors['dueTime'];
44        else if(due_date == "" && due_time != "")
45                return errors['dueDate'];
46       
47    var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat;
48               
49    var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString );
50    var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString );
51        var dueDate = Date.parseExact( due_date + " " + $.trim(due_time) , formatString );
52
53    if(startDate == null || startDate.getTime() < 0 )
54                return errors['invalidInitData'];
55    if(endDate == null || endDate.getTime() < 0)
56                return errors['invalidEndData'];
57        if(dueDate == null &&  due_time != "")
58                return errors['invalidDueData'];
59               
60        if(isAllDay){
61                startDate.clearTime();
62                endDate.clearTime();
63                if(endDate.compareTo(startDate) == -1)
64                        return errors['theirData'];
65        }else{
66                var condition = endDate.compareTo(startDate);
67                if(condition != 1){
68                        if(condition < 0){
69                                startDate.clearTime();
70                                endDate.clearTime();
71                                condition = endDate.compareTo(startDate);                               
72                                return (errors[ condition == 0 ? 'theirHour' : 'theirData'] );
73                        }
74                        else
75                                return errors['equalData'];
76                }
77               
78                if (dueDate != null && dueDate.compareTo(startDate) == -1)
79                        return errors['dueInitDate'];           
80        }
81   
82    if (customDate)   
83                if ( !($('.new-task-win.active .customDateEnd').val().length) )
84                   return errors['emptyEndData'];
85
86    return false;
87}
88function taskStatus(status){
89        if (status == "1"){
90                UI.dialogs.addTask.find('.subitem .span_done').removeClass('finished noAction inProcess canceled').addClass('noAction');
91        }else if (status == "2"){
92                UI.dialogs.addTask.find('.subitem .span_done').removeClass('finished noAction inProcess canceled').addClass('inProcess');
93        }else if (status == "3"){
94                UI.dialogs.addTask.find('.subitem .span_done').removeClass('finished noAction inProcess canceled').addClass('finished');
95        }else if (status == "4"){
96                UI.dialogs.addTask.find('.subitem .span_done').removeClass('finished noAction inProcess canceled').addClass('canceled');
97        }
98}
99
100function taskDetails(objTask, decoded, path, isMail, repeat) {
101
102    $('.qtip.qtip-blue').remove();
103
104    attendees = {};
105
106    if (path == undefined) path = "";
107
108    if (!decoded) objTask = DataLayer.decode("task:calendar", objTask);
109
110    if (!isMail) objTask = DataLayer.encode("schedulable:task", objTask);
111
112    if (typeof (objTask.id) == 'undefined') {
113        objTask.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false;
114        objTask.useAlarmDefault = 1;
115    }
116
117
118    if(objTask.me.id == User.me.id){
119        objTask.me.id = DataLayer.put('participant', {
120            user: objTask.me.id,
121            mail: objTask.me.mail
122        });
123        objTask.organizer.id = objTask.me.id;
124    }
125
126    var dependsDelegate = function(reference, inverse){
127        if(inverse){
128            if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val())
129                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val());
130        }else{
131            if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val())
132                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val());
133        }
134    };
135
136    var removeOthers = function(){
137        var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button');
138        if(other.lenght)
139            dependsDelegate(other.parents('li'), true);
140
141        blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button');
142        blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change');
143   
144    };
145
146    var callbackAttendee = function(){
147        var checked = false;
148        blkAddAtendee.find("li.not-attendee").addClass('hidden');
149       
150        blkAddAtendee.find("li .button").filter(".close.new").button({
151            icons: {
152            primary: "ui-icon-close"
153            },
154            text: false
155        }).click(function () {
156            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val());
157            if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){
158                removeOthers();
159                blkAddAtendee.find('.request-update').addClass('hidden');
160                blkAddAtendee.find('.status option').toggleClass('hidden');
161                       
162                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');
163            }
164               
165            $(this).parents('li').remove();
166               
167            if(blkAddAtendee.find(".attendee-list li").length == 1)
168                blkAddAtendee.find("li.not-attendee").removeClass('hidden');
169        })
170        .addClass('tiny disable ui-button-disabled ui-state-disabled')
171        .removeClass('new').end()
172       
173        .filter(".delegate.new").button({
174            icons: {
175                primary: "ui-icon-transferthick-e-w"
176            },
177            text: false
178        }).click(function () {
179            var me = $(this).parents('li');
180            if($(this).hasClass('attendee-permissions-change-button')){
181                $(this).removeClass('attendee-permissions-change-button')   
182                .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();               
183           
184                me.find('input[name="delegatedFrom[]"]').val('');
185                dependsDelegate(me, true);
186                       
187                blkAddAtendee.find('.request-update').addClass('hidden');
188                blkAddAtendee.find('.status option').toggleClass('hidden');
189
190                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');
191                   
192            }else{
193                removeOthers();
194               
195                $(this).addClass('attendee-permissions-change-button')   
196                .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();               
197               
198                me.find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val());
199               
200                dependsDelegate(me, false);
201                   
202                blkAddAtendee.find('.request-update').removeClass('hidden');
203                if(blkAddAtendee.find('.status option.hidden').length == 1)
204                    blkAddAtendee.find('.status option').toggleClass('hidden');
205                   
206                blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change');
207            }
208        })
209        .addClass('tiny disable ui-button-disabled ui-state-disabled')
210        .removeClass('new').end()           
211           
212        .filter(".open-delegate.new").click(function(){
213            if($(this).hasClass('ui-icon-triangle-1-e')){
214                $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s');
215                $(this).parents('li').find('.list-delegates').removeClass('hidden');
216            }else{
217                $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e');
218                $(this).parents('li').find('.list-delegates').addClass('hidden');
219            }
220           
221        }).removeClass('new');
222
223        UI.dialogs.addTask.find('.attendees-list li').hover(
224            function () {
225                $(this).addClass("hover-attendee");
226                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end()
227                .find('.attendee-options').addClass('hover-attendee');
228            },
229            function () {
230                $(this).removeClass("hover-attendee");
231                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end()
232                .find('.attendee-options').removeClass('hover-attendee');
233            }
234        );       
235    }
236
237    /**
238     * canDiscardTaskDialog deve ser true se não houver alterações no task
239     */
240    canDiscardTaskDialog = true;
241    /**
242     * zebraDiscardTaskDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog)
243     * já estão aberta na tela, uma vez que não é possivel acessar o task ESC utilizado para fechá-la
244     */
245    zebraDiscardTaskDialog = false;
246
247    var html = DataLayer.render(path + 'templates/task_add.ejs', {
248        task: objTask
249    });
250
251    if (!UI.dialogs.addTask) {
252
253        UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-task-win active"> <div>').find('.new-task-win.active').html(html).dialog({
254            resizable: false,
255            modal: true,
256            autoOpen: false,
257            width: 774,
258            position: 'center',
259            close: function (event, ui) {
260                /**
261                 * Remove tooltip possivelmente existente
262                 */
263                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy');
264                attendees = {};
265            },
266            beforeClose: function (event, ui) {
267
268                if (!canDiscardTaskDialog && !zebraDiscardTaskDialog) {
269                    zebraDiscardTaskDialog = true;
270                    window.setTimeout(function () {
271                        $.Zebra_Dialog('Suas alterações na tarefa não foram salvas. Deseja descartar as alterações?', {
272                            'type': 'question',
273                            'overlay_opacity': '0.5',
274                            'buttons': ['Descartar alterações', 'Continuar editando'],
275                            'onClose': function (clicked) {
276                                if (clicked == 'Descartar alterações') {
277                                    canDiscardTaskDialog = true;
278                                    /**
279                                     *Remoção dos anexos da task caso seja cancelado a ediçãoo
280                                     */
281                                    DataLayer.rollback();
282
283                                    var ids = false;
284                                    $.each($('.attachment-list input'), function (i, input) {
285                                        DataLayer.put('attachment', {
286                                            id: '' + input.value
287                                        });
288                                        DataLayer.remove('attachment', '' + input.value);
289                                        ids = true;
290                                    });
291                                    if (ids) DataLayer.commit();
292
293                                    UI.dialogs.addTask.dialog('close');
294                                } else {
295                                    zebraDiscardTaskDialog = false;
296                                }
297
298                                /**
299                                 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la
300                                 * com ESC, para que o task ESC nÃo seja propagado para fechamento da
301                                 * janela de edição de tasks, deve ser setada uma flag indicando que
302                                 * já existe uma janela de confirmação aberta.
303                                 */
304                                if (!clicked) {
305                                    window.setTimeout(function () {
306                                        zebraDiscardTaskDialog = false;
307                                    }, 200);
308                                }
309                            }
310                        });
311
312                    }, 300);
313
314                }
315                //DataLayer.rollback();
316                return canDiscardTaskDialog;
317            },
318            dragStart: function (task, ui) {
319                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy');
320            }
321        });
322
323    } else {
324        UI.dialogs.addTask.html(html);
325    }
326
327    var tabs = UI.dialogs.addTask.children('.content').tabs({
328        select: function (task, ui) {
329            if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy');
330        }
331    });
332    var group = DataLayer.get('calendar', objTask.group);
333
334    if (group.timezone != objTask.timezone) {
335        UI.dialogs.addTask.find('.calendar-addtask-details-txt-timezone').find('option[value="' + objTask.timezone + '"]').attr('selected', 'selected').trigger('change');
336        UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').addClass('hidden');
337        $('.calendar-addtask-details-txt-timezone').removeClass('hidden');
338
339    }
340
341    UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').click(function (e) {
342        $(this).addClass('hidden');
343        $('.calendar-addtask-details-txt-timezone').removeClass('hidden');
344        e.prtaskDefault();
345    });
346
347    UI.dialogs.addTask.find('.button.remove').button({
348    text:false,
349    icons:{
350        primary:'ui-icon-close'
351    }
352    }).click(function(el){
353        var id;
354        if( id = $(this).parent().find('input[name="alarmId[]"]').val())
355        DataLayer.remove('alarm', id);
356        $(this).parent().remove().find('li').is(':empty');
357    });
358
359    /*Seleciona a agenda padrão para visualização edição de um task*/
360    if (objTask.id) UI.dialogs.addTask.find('option[value="' + objTask.group + '"]').attr('selected', 'selected').trigger('change');
361       
362        UI.dialogs.addTask.find(':input').change(function(event){
363    if (event.keyCode != '27' && event.keyCode != '13')
364        canDiscardTaskDialog = false;
365        }).keydown(function(event){
366                if (event.keyCode != '27' && event.keyCode != '13')
367                canDiscardTaskDialog = false;
368        });
369
370    /* Checkbox allday */
371    UI.dialogs.addTask.find('input[name="allDay"]').click(function () {
372        $(this).attr("checked") ? UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden');
373        updateMap(true);
374    });
375       
376        if (objTask.taskStatus == "1" || objTask.taskStatus == undefined){
377                taskStatus(1);
378        }else if (objTask.taskStatus == "2"){
379                taskStatus(2);
380        }else if (objTask.taskStatus == "3"){
381                taskStatus(3);
382        }else if (objTask.taskStatus == "4"){
383                taskStatus(4);
384        }
385       
386        //Concluão das Tarefas
387        var conclusionTask = function(e){
388                var percentageTask = UI.dialogs.addTask.find('input[name="percentage"]');
389                if( percentageTask.val() == "")
390                        percentageTask.val(0);
391                percentageTask.blur().focus();
392               
393                var percentageValue = parseInt(percentageTask.val());
394                var statusTask = UI.dialogs.addTask.find('select[name=taskStatus]');
395               
396                if(percentageValue <= 0){
397                        statusTask.find('option.taskStatus-noAction').attr('selected', 'selected');
398                        taskStatus(1);         
399                }else if(percentageValue == 100){
400                        statusTask.find('option.taskStatus-finished').attr('selected', 'selected');
401                        taskStatus(3);
402                }else{
403                        statusTask.find('option.taskStatus-inProcess').attr('selected', 'selected');
404                        taskStatus(2);
405                }               
406                setTimeout(function(){
407                        percentageTask[0].selectionStart = percentageTask.val().length;
408                        percentageTask[0].selectionEnd = percentageTask.val().length;
409                }, 10)
410        }
411        UI.dialogs.addTask.find('input[name="percentage"]').spinner({ min: 0, max: 100 }).keyup(conclusionTask).next().find(".ui-spinner-button").click(conclusionTask);       
412
413        //Status das Tarefas
414        UI.dialogs.addTask.find('select[name=taskStatus]').change(function(){
415                var statusSelected = $('select[name=taskStatus] option:selected').val();
416                var percentageTask = UI.dialogs.addTask.find('input[name="percentage"]');
417                if (statusSelected == "1"){
418                        percentageTask.val(0);
419                        taskStatus(1);
420                }else if(statusSelected == "2"){
421                        percentageTask.val(percentageTask.val() != 0 ? (percentageTask.val() == 100 ? 99: percentageTask.val()) : 1);
422                        taskStatus(2);
423                }else if(statusSelected == "3"){
424                        percentageTask.val(100);
425                        taskStatus(3);
426                }else if(statusSelected == "4"){
427                        percentageTask.val(percentageTask.val() != 100 ? percentageTask.val() : 99);
428                        taskStatus(4);
429                }
430        });
431       
432    UI.dialogs.addTask.find('.button').button();
433    UI.dialogs.addTask.find('.button.add').button({
434        icons: {
435            secondary: "ui-icon-plus"
436        }
437    });
438
439    // ==== validation tasks ====
440    UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título");
441    if (User.preferences.hourFormat.length == 5) {
442        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", {
443            completed: function () {
444                updateMap();
445            }
446        });
447    } else {
448        $.mask.definitions['{'] = '[ap]';
449        $.mask.definitions['}'] = '[m]';
450        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", {
451            completed: function () {
452                $(this).val(date.Calendar.defaultToAmPm($(this).val()));
453                $(this).timepicker("refresh");
454                $(this).val($(this).val().replace(/[\.]/gi, ""));
455                updateMap();
456            }
457        });
458    }
459    UI.dialogs.addTask.find(".number").numeric();
460    User.preferences.dateFormat.indexOf('-') > 0 ? UI.dialogs.addTask.find(".date").mask("99-99-9999", {
461        completed: function () {
462            updateMap();
463        }
464    }) : UI.dialogs.addTask.find(".date").mask("99/99/9999", {
465        completed: function () {
466            updateMap();
467        }
468    });
469
470    UI.dialogs.addTask.find(".menu-addtask").children(".delete").click(function () {
471        $.Zebra_Dialog('Tem certeza que deseja excluir esta tarefa?', {
472            'type': 'question',
473            'overlay_opacity': '0.5',
474            'buttons': ['Sim', 'Não'],
475            'onClose': function (clicked) {
476                if (clicked == 'Sim') {
477                    canDiscardTaskDialog = true; /* Remove por filtro */
478                    DataLayer.removeFilter('schedulable', {
479                        filter: ['AND', ['=', 'id', objTask.id],
480                            ['=', 'calendar', objTask.group],
481                            ['=', 'user', (objTask.me.user ? objTask.me.user.id : objTask.me.id)]
482                        ]
483                    });
484                    Calendar.rerenderView(true); /********************/
485                    UI.dialogs.addTask.dialog("close");
486                }
487            }
488        });
489    }).end()
490
491    .children(".cancel").click(function () {
492        UI.dialogs.addTask.dialog("close");
493    }).end()
494
495    .children(".save").click(function () { /* Validação */
496        UI.dialogs.addTask.find('input[name="summary"]').focus();
497               
498                if (msg = validDateTask()) {
499            $(".new-task-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);
500            return false;
501        }
502                canDiscardTaskDialog = true;
503
504        UI.dialogs.addTask.children().find('form.form-addtask').submit();
505        UI.dialogs.addTask.dialog("close");
506
507    }).end()
508
509    .children(".export").click(function () {
510        UI.dialogs.addTask.children().find(".form-export").submit();
511    });
512
513    var attendeeHtml = DataLayer.render(path + 'templates/attendees_task.ejs', {
514        task: objTask
515    });
516
517    // load template of attendees
518    var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml);
519
520    if(objTask.attendee.length)
521        callbackAttendee();
522
523    /*
524     *   Opções de delegação do participante/organizer
525     */     
526    blkAddAtendee.find(".button.participant-delegate").button({
527        icons: {
528        primary: "ui-icon-transferthick-e-w"
529        },
530        text: false
531    }).click(function () {
532        if($(this).hasClass('attendee-permissions-change-button')){
533        if(!$(this).hasClass('disable')){
534            $(this).removeClass('attendee-permissions-change-button')   
535            .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();               
536            blkAddAtendee.find('.block-add-attendee.search').addClass('hidden');
537            blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos');
538        }
539        }else{                                 
540        $(this).addClass('attendee-permissions-change-button')   
541        .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();               
542        blkAddAtendee.find('.block-add-attendee.search dt').html('Delegar participação para');
543        blkAddAtendee.find('.block-add-attendee.search').removeClass('hidden');
544        blkAddAtendee.find('.block-add-attendee.search input.search').focus();
545        }
546    })
547    .addClass('tiny');
548
549    var dates = UI.dialogs.addTask.find('input.date').datepicker({
550        dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),
551        onSelect: function (selectedDate) {
552            updateMap();
553        }
554    });
555
556    UI.dialogs.addTask.find('input.time').timepicker({
557        closeText: 'Ok',
558        hourGrid: 4,
559        minuteGrid: 10,
560        ampm: ((User.preferences.hourFormat.length > 5) ? true : false),
561        timeFormat: "hh:mm tt",
562        onSelect: function (selectedDateTime) {
563            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, ""));
564            updateMap();
565        },
566        onClose: function (selectedDateTime) {
567            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, ""));
568        }
569    });
570
571    blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) {
572        blkAddAtendee.find('.add-attendee-search input').keydown();
573    });
574
575    blkAddAtendee.find('.add-attendee-search input').keydown(function (task) {
576
577        if (task.keyCode == '13' || typeof (task.keyCode) == 'undefined') {
578            var result = DataLayer.get('user', ["*", "name", $(this).val()], true);
579
580            /**
581             * TODO: trocar por template
582             */
583            blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden');
584            if (!result) {
585                blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');
586            }
587
588            for (i = 0; i < result.length; i++)
589            result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true;
590
591            blkAddAtendee.find('ul.search-result-list').append(DataLayer.render(path + 'templates/participants_search_itemlist.ejs', result));
592
593            blkAddAtendee.find('ul.search-result-list li').click(function (task, ui) {
594                if ($(task.target).is('input')) {
595                    old_item = $(task.target).parents('li');
596                    newAttendeeId = DataLayer.put('participant', {
597                        user: old_item.find('.id').html(),
598                        isExternal: old_item.find('.isExternal').html()
599                    });
600
601                    attendees[old_item.find('.id').html()] = old_item.find('.name').html();
602
603                    blkAddAtendee.find('dd.attendee-list ul.attendee-list').append(DataLayer.render(path + 'templates/participants_add_itemlist.ejs', [{
604                        id: newAttendeeId,
605                        name: old_item.find('.name').html(),
606                        mail: old_item.find('.mail').html(),
607                        isExternal: old_item.find('.isExternal').html(),
608                        notEvent: true,
609                        isDirty: !! !objTask.id,
610                                                isDelegate: !!(objTask.me.id != objTask.organizer.id)
611                    }])).scrollTo('max');
612                    /**
613                     * Delegação de participação de um participante com permissão apenas de leitura
614                     *
615                     */
616                    if (objTask.me.id != objTask.organizer.id) {
617
618                        blkAddAtendee.find('.block-add-attendee.search').addClass('hidden');
619                        blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos');
620
621                        blkAddAtendee.find('.status option').toggleClass('hidden');
622                        blkAddAtendee.find('option[value=5]').attr('selected', 'selected').trigger('change');
623                        blkAddAtendee.find('.request-update').removeClass('hidden');
624
625                        blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val());
626
627                        blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled');
628                        blkAddAtendee.find(".button.close").button({
629                            icons: {
630                                primary: "ui-icon-close"
631                            },
632                            text: false
633                        }).click(function () {
634
635                            $(this).parents('li').find('input[name="delegatedFrom[]"]').val('');
636                            blkAddAtendee.find('.request-update').addClass('hidden');
637                            blkAddAtendee.find('.status option').toggleClass('hidden');
638                            blkAddAtendee.find('option[value=1]').attr('selected', 'selected').trigger('change');
639                            blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button').find('.ui-icon-person').removeClass('attendee-permissions-change').end();
640
641                            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val());
642                            $(this).parents('li').remove();
643                        }).addClass('tiny');
644                    } else {
645                        callbackAttendee();
646                        old_item.remove();
647                    }
648                }
649            });
650
651            event.preventDefault();
652        }
653    });
654
655    UI.dialogs.addTask.find('.row.fileupload-buttonbar-task .button').filter('.delete').button({
656        icons: {
657            primary: "ui-icon-close"
658        },
659        text: 'Excluir'
660    }).click(function () {
661        $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {
662            'type': 'question',
663            'overlay_opacity': '0.5',
664            'buttons': ['Sim', 'Não'],
665            'onClose': function (clicked) {
666                if (clicked == 'Sim') {
667
668                    var ids = [];
669                    $.each($('.attachment-list input'), function (i, input) {
670                        DataLayer.remove('schedulableToAttachment', {
671                            filter: ['=', 'id', '' + input.value]
672                        });
673                    });
674                    $('.attachment-list input').remove();
675                    $('.row.fileupload-buttonbar .attachments-list p').remove();
676                }
677            }
678        });
679    }).end().filter('.close').button({
680        icons: {
681            primary: "ui-icon-close"
682        },
683        text: false
684    }).click(function () {
685        DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());
686        $(this).parents('p').remove();
687    }).end().filter('.downlaod-archive').button({
688        icons: {
689            primary: "ui-icon-arrowthickstop-1-s"
690        },
691        text: false
692    });
693    var maxSizeFile = 2000000;
694    $('#fileupload').fileupload({
695        sequentialUploads: true,
696        add: function (e, data) {
697            if (data.files[0].size < maxSizeFile) data.submit();
698        },
699        change: function (e, data) {
700            $.each(data.files, function (index, file) {
701                var attach = {};
702                attach.fileName = file.name;
703                var ext = file.name.split('.');
704                if (file.name.length > 10) attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length - 1];
705                attach.fileSize = formatBytes(file.size);
706                if (file.size > maxSizeFile) attach.error = 'Tamanho de arquivo nao permitido!!'
707
708                $('.attachments-list').append(DataLayer.render(path + 'templates/attachment_add_itemlist.ejs', {
709                    file: attach
710                }));
711
712                if (file.size < maxSizeFile) {
713                    $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new');
714                    $('.attachments-list').find('[type=file]').addClass('hidden');
715
716                } else $('.fileinput-button.new').removeClass('new');
717
718
719                $('.attachments-list').find('.button.close').button({
720                    icons: {
721                        primary: "ui-icon-close"
722                    },
723                    text: false
724                }).click(function () {
725                    var idAttach = $(this).parent().find('input[name="fileId[]"]').val();
726                    $('.attachment-list').find('input[value="' + idAttach + '"]')
727                    $(this).parent().remove();
728                });
729
730            })
731        },
732        done: function (e, data) {
733            var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide();
734
735            if ( !! data.result && data.result != "[]") {
736                var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data);
737                $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="' + newAttach['attachment'][0][0].id + '"/>');
738                currentUpload.removeClass('on-complete').parents('p').append('<input type="hidden" name="fileId[]" value="' + newAttach['attachment'][0][0].id + '"/>').find('.status-upload').addClass('ui-icon ui-icon-check');
739            } else currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel');
740        }
741    });
742    $('.attachments-list .button').button();
743
744    if ( !! window.FormData) $('#fileupload').bind('fileuploadstart', function () {
745        var widget = $(this),
746            progressElement = $('#fileupload-progress').fadeIn(),
747            interval = 500,
748            total = 0,
749            loaded = 0,
750            loadedBefore = 0,
751            progressTimer, progressHandler = function (e, data) {
752                loaded = data.loaded;
753                total = data.total;
754            },
755            stopHandler = function () {
756                widget.unbind('fileuploadprogressall', progressHandler).unbind('fileuploadstop', stopHandler);
757                window.clearInterval(progressTimer);
758                progressElement.fadeOut(function () {
759                    progressElement.html('');
760                });
761            },
762            formatTime = function (seconds) {
763                var date = new Date(seconds * 1000);
764                return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2) + ':' + ('0' + date.getUTCSeconds()).slice(-2);
765            },
766
767            formatPercentage = function (floatValue) {
768                return (floatValue * 100).toFixed(2) + ' %';
769            },
770            updateProgressElement = function (loaded, total, bps) {
771                progressElement.html(
772                formatBytes(bps) + 'ps | ' + formatTime((total - loaded) / bps) + ' | ' + formatPercentage(loaded / total) + ' | ' + formatBytes(loaded) + ' / ' + formatBytes(total));
773            },
774            intervalHandler = function () {
775                var diff = loaded - loadedBefore;
776                if (!diff) {
777                    return;
778                }
779                loadedBefore = loaded;
780                updateProgressElement(
781                loaded, total, diff * (1000 / interval));
782            };
783        widget.bind('fileuploadprogressall', progressHandler).bind('fileuploadstop', stopHandler);
784        progressTimer = window.setInterval(intervalHandler, interval);
785    });
786
787    disponibily(objTask, path, attendees, 'task');
788
789    UI.dialogs.addTask.find('.button-add-alarms').click(function () {
790        var li_attach = DataLayer.render(path + 'templates/alarms_add_itemlist.ejs', {
791            type: 1
792        });
793
794        jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({
795            text: false,
796            icons: {
797                primary: 'ui-icon-close'
798            }
799        }).click(function (el) {
800            $(this).parent().remove().find('li').is(':empty')
801        });
802        // valicacao de campos numericos
803        $('.number').numeric();
804    });
805
806
807    UI.dialogs.addTask.dialog('open');
808}
Note: See TracBrowser for help on using the repository browser.