Ignore:
Timestamp:
09/17/12 14:30:47 (12 years ago)
Author:
douglas
Message:

Ticket #0000 - Copiadas as alterações do Trunk. Versão final da 2.4.2.

Location:
branches/2.4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2.4

  • branches/2.4/prototype/modules/calendar/js/calendar.codecs.js

    r6754 r7228  
    2222            fontColor: "fff", 
    2323            timezone: 'America/Sao_Paulo', 
    24             weekStart: 'SUN' 
     24            weekStart: 'SUN', 
     25            useDesktopNotification: 0 
    2526        }; 
    2627 
     
    3132    } 
    3233} 
     34 
     35updateActivity = false; 
    3336 
    3437constantsParticipant = { 
     
    5457        importCalendar: null, 
    5558        sharedCalendar: null, 
    56         copyCalendar: null 
     59        copyCalendar: null, 
     60    assingCalendar: null 
    5761    } 
    5862} 
     
    8185                borderColor: '#' + signature.borderColor || User.preferences.borderColor, 
    8286                textColor: '#' + signature.fontColor || User.preferences.fontColor, 
    83                 className: [], 
     87            className: [], 
    8488                editable:  signature.isOwner 
    8589                } 
     
    129133            return returns; 
    130134        }; 
    131  
     135    console.log(evtObj); 
    132136        var res = $.map(evtObj, function( objEvent ){                    
    133137            return { 
     
    137141                user: objEvent.user, 
    138142                acl: constantAcl(objEvent.acl)  , 
    139                 aclValues: objEvent.acl 
     143                aclValues: objEvent.acl, 
     144                owner: objEvent.owner 
    140145            }; 
    141146        });      
     
    187192}); 
    188193 
    189 /*Todo Melhorias serão feitas na API*/ 
     194/*Todo Melhorias serço feitas na API*/ 
    190195//DataLayer.poll( "schedulable" ); 
    191196 
     
    195200        DataLayer.commit( false, false, function(){      
    196201            Calendar.rerenderView(true); 
     202            if(updateActivity) 
     203                refreshTaskActivity(); 
    197204        }); 
    198205    } 
     
    262269                user: User.me.id,        
    263270                calendar: { 
    264                     id: Calendar.calendarOf[form.signature].id, 
     271                    id: !!!parseInt(form.type) ? Calendar.calendarOf[form.signature].id : Calendar.groupOf[form.signature].id, 
    265272                    name: Encoder.htmlEncode(form.name), 
    266273                    description: Encoder.htmlEncode(form.description), 
     
    384391 
    385392       
     393}); 
     394 
     395DataLayer.codec( "schedulable", "taskEdit", { 
     396 
     397    decoder: function( evtObj ){ 
     398        Encoder.EncodeType = "entity"; 
     399         
     400        if( notArray = $.type(evtObj) !== "array" ) 
     401            evtObj = [ evtObj ]; 
     402 
     403        var pref = User.preferences; 
     404                 
     405        var res = $.map(evtObj, function( form ){ 
     406                         
     407            return DataLayer.merge({ 
     408                id: form.idTask, 
     409                percentage: form.percentage, 
     410                type: '2',  
     411                status: form.taskStatus, 
     412                participants : $.map(form.attendee, function( attendee, i ){ 
     413                    if(isNaN(attendee)){ 
     414                        return{ 
     415                            id: attendee, 
     416                            acl: form.attendeeAcl[i], 
     417                            delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0, 
     418                            isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     419                            isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     420                            acl: form.attendeeAcl[i].replace('o', '') 
     421                        }; 
     422                    }else{ 
     423                        if(DataLayer.get('participant', attendee).user == User.me.id){ 
     424                            var me = { 
     425                                user: User.me.id, 
     426                                status: form.status, 
     427                                id: attendee, 
     428                                isOrganizer: 0, 
     429                                receiveNotification : (!!form.receiveNotification ? 1 : 0), 
     430                                alarms: typeof(form.alarmTime) != 'undefined' ?  
     431                                $.map( form.alarmTime || [], function( alarmTime, i ){ 
     432 
     433                                    if( alarmTime === "" ) 
     434                                        return( null ); 
     435 
     436                                    return !!form.alarmId[i] ? 
     437                                    { 
     438                                        type: form.alarmType[i],  
     439                                        unit: form.alarmUnit[i],  
     440                                        time: form.alarmTime[i],  
     441                                        id: form.alarmId[i] 
     442                                        } :  
     443{ 
     444                                        type: form.alarmType[i], 
     445                                        unit: form.alarmUnit[i],  
     446                                        time: form.alarmTime[i] 
     447                                        }; 
     448                                }) : [] 
     449                            }; 
     450                                                         
     451                            if(form.startDate){ 
     452                                var tzId =  DataLayer.get('schedulable', form.idEvent).timezone || User.preferences.timezone, 
     453                                formatString = pref.dateFormat + " " + pref.hourFormat; 
     454                                                                 
     455                                DataLayer.put('notification', { 
     456                                    participant: me.id, 
     457                                    type: 'suggestion', 
     458                                    startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     459                                    endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     460                                    allDay: ( !!form.allDay ? 1 : 0 ), 
     461                                    schedulable: form.idEvent 
     462                                }); 
     463                                                         
     464                            } 
     465                            return me; 
     466                        }else return(null); 
     467                    }; 
     468                }) 
     469            }, (form.group != form.lastGroup? {calendar: form.group, lastCalendar: form.lastGroup} : {})) 
     470        }); 
     471        return notArray ? res[0] : res; 
     472    }, 
     473 
     474    encoder: function( evtObj ){} 
     475 
    386476}); 
    387477 
     
    510600                calendar: objEvent.calendar, 
    511601                summary: objEvent.summary, 
     602        type: !!objEvent.type ? objEvent.type : 1, 
    512603                description: objEvent.description, 
    513604                timezone: objEvent.timezone, 
     
    518609                endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
    519610                allDay: !!parseInt( objEvent.allDay ), 
     611                dueDate: objEvent.dueDate, 
     612                dueTime: objEvent.dueTime, 
     613                priority: objEvent.priority, 
    520614                attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
    521615                    var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     
    595689}); 
    596690 
     691DataLayer.codec( "schedulable", "task", { 
     692 
     693    decoder: function( evtObj ){ 
     694    Encoder.EncodeType = "entity"; 
     695     
     696    if( notArray = $.type(evtObj) !== "array" ) 
     697        evtObj = [ evtObj ]; 
     698 
     699    var pref = User.preferences; 
     700 
     701    var res = $.map(evtObj, function( form ){ 
     702     
     703        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     704 
     705        formatString = pref.dateFormat + " " + pref.hourFormat; 
     706 
     707        return DataLayer.merge({ 
     708        "class": form["class"], 
     709        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     710        endTime: (form.dueDate == '' ) ? 
     711            Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00') : 
     712            Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     713        due: (form.dueDate == '' ) ? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     714        allDay: ( form.dueDate == ''  ? 1 : 0 ), 
     715        status: form.taskStatus,       
     716        id: form.idTask, 
     717        location: form.location, 
     718        type: !!form.type ?  form.type : 2, 
     719        percentage: form.percentage, 
     720        priority: form.priority, 
     721        category: form.category, 
     722        summary: form.summary == '' ? 'Tarefa sem título' : form.summary, 
     723        description: form.description, 
     724        timezone: tzId, 
     725        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     726            return { 
     727            attachment: attachment 
     728            } 
     729        }), 
     730        participants: $.map( form.attendee || [], function( attendee, i ){ 
     731 
     732            if( !attendee || attendee === "" ) 
     733            return( null ); 
     734 
     735            var participant = {}; 
     736            participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
     737 
     738            if( participant.user === User.me.id ){ 
     739            return DataLayer.merge({ 
     740                id: attendee, 
     741                isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     742                alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     743                if( alarmTime === "" ) 
     744                    return( null ); 
     745                return !!form.alarmId[i] ? { 
     746                    type: form.alarmType[i],  
     747                    unit: form.alarmUnit[i],  
     748                    time: form.alarmTime[i],  
     749                    id: form.alarmId[i] 
     750                    }: 
     751 
     752                    { 
     753                    type: form.alarmType[i], 
     754                    unit: form.alarmUnit[i],  
     755                    time: form.alarmTime[i] 
     756                    }; 
     757                }), 
     758                status: !!form.status ? form.status : 3 
     759            }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '')  ? { 
     760                delegatedFrom: form.delegatedFrom[i] 
     761                } : {}); 
     762            }else{ 
     763                return { 
     764                    id: attendee, 
     765                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     766                    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0 
     767                    }; 
     768            }; 
     769        }) 
     770        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     771    }); 
     772 
     773    return notArray ? res[0] : res; 
     774    }, 
     775 
     776    encoder: function( evtObj ){ 
     777 
     778    var notArray = false; 
     779       
     780    if( notArray = $.type(evtObj) !== "array" ) 
     781        evtObj = [ evtObj ]; 
     782 
     783    var statusParticipants = {},  isAttendee = false, 
     784    
     785    statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 
     786 
     787    participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 
     788     
     789    var delegateAttendee = {}; 
     790     
     791    for( var i = 0; i < statusLabels.length; i++ ) 
     792        statusParticipants[ statusLabels[i] ] = 0; 
     793     
     794    var res = $.map(evtObj, function( objEvent ){            
     795             
     796        if(!(typeof(objEvent) == 'object')) 
     797            return (null); 
     798 
     799        var limitAttendee = false; 
     800 
     801        return { 
     802        "class": objEvent["class"], 
     803        id: objEvent.id, 
     804        location: objEvent.location, 
     805        category: objEvent.category, 
     806        taskStatus: objEvent.status, 
     807        groups: Calendar.groups, 
     808        group: objEvent.group ? objEvent.group : objEvent.calendar, 
     809        summary: objEvent.summary, 
     810        type: !!objEvent.type ? objEvent.type : 2, 
     811        description: objEvent.description, 
     812        timezone: objEvent.timezone, 
     813        timezones: Timezone.timezones, 
     814        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     815        priority: objEvent.priority, 
     816        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     817        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     818        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     819        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     820        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     821        dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     822        allDay: !!parseInt( objEvent.allDay ), 
     823            historic: !!objEvent.historic ? decodeHistoric(objEvent) : [] , 
     824        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     825            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     826            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     827            if(!attach.name) return(null);  
     828             
     829            var ext = attach.name.split('.'); 
     830            attach.name = attach.name.length < 10 ?  attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' +  ext[ext.length -1])); 
     831            attach.size = formatBytes(attach.size); 
     832            return attach; 
     833        }),                      
     834        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     835 
     836            if(delegateAttendee[participant]) 
     837                return(null); 
     838 
     839            var attend = DataLayer.get('participant', (participant.id || participant)); 
     840            attend.user = DataLayer.get('user', attend.user); 
     841 
     842            statusParticipants[ statusLabels[attend.status] ]++;     
     843 
     844            if(attend.user.mail == User.me.mail) 
     845                isAttendee = true; 
     846 
     847            if( attend.user.id ===  me.id ){ 
     848                participantInfo.user = { 
     849                    id: attend.id, 
     850                    status : attend.status, 
     851                    delegatedFrom: attend.delegatedFrom || '0', 
     852                    acl: attend.acl, 
     853                    receiveNotification : attend.receiveNotification, 
     854                    alarms : $.map(attend.alarms || [], function( alarm ){ 
     855                    var alarm = DataLayer.get('alarm', alarm); 
     856                    return (alarm == "" ? (null) : alarm); 
     857                    }) 
     858                }; 
     859                me = attend; 
     860                return(null); 
     861            }; 
     862 
     863            var person = { 
     864                id: attend.id, 
     865                name: attend.user.name != 'false' ? attend.user.name : '', 
     866                mail: attend.user.mail, 
     867                status : attend.status, 
     868                isExternal: attend.isExternal, 
     869                acl: attend.acl, 
     870                delegatedFrom: attend.delegatedFrom 
     871            }; 
     872 
     873            if(!!parseInt(attend.delegatedFrom)){ 
     874                delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
     875                return(null); 
     876            } 
     877 
     878            if( !!parseInt(attend.isOrganizer)){ 
     879                participantInfo.organizer = DataLayer.copy(person); 
     880                return(null); 
     881            };                   
     882 
     883            return (person); 
     884        }), 
     885        organizer: participantInfo.organizer || me, 
     886                isOrganizer: (participantInfo.organizer || me).id == me.id, 
     887        alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
     888        status: !!participantInfo.user ? participantInfo.user.status : 1, 
     889        isAttendee: isAttendee, 
     890        me: me, 
     891        delegatedFrom: delegatedFrom, 
     892        statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     893        sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
     894        }; 
     895    }); 
     896    return (notArray ? res[0] : res); 
     897    } 
     898}); 
     899 
     900function decodeHistoric ( evt ) { 
     901    var historic = evt.historic; 
     902    var decoded = []; 
     903    var attributeDecoded = { 
     904        'startTime': 'Data de inicio', 
     905        'endTime' : 'Data de fim', 
     906        'summary' : 'Título', 
     907        'description': 'Descrição', 
     908        'status': 'Status', 
     909        'percentage': 'Porcentagem', 
     910        'priority': 'Prioridade', 
     911        'due' : 'Previsão de término' 
     912    }; 
     913     
     914    var statusDecoded = { 
     915        1: 'Sem ações', 
     916        2: 'Em processo', 
     917        3: 'Finalzada', 
     918        4: 'Cancelada' 
     919    }; 
     920 
     921    var decodeDate = function(time){ 
     922        return new Date( parseInt( time) ).setTimezoneOffset( Timezone.timezone( evt.timezone ) ).toString( User.preferences.dateFormat+' - '+User.preferences.hourFormat ); 
     923    }; 
     924 
     925    var decodeItem = function(historic){ 
     926        switch(historic.attribute){ 
     927            case 'startTime': 
     928            case 'endTime' : 
     929            case 'due': 
     930                return { 
     931                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     932                    attribute : attributeDecoded[historic.attribute], 
     933                    beforeValue : decodeDate(historic.beforeValue), 
     934                    afterValue : decodeDate(historic.afterValue), 
     935                    time: decodeDate(historic.time) 
     936                } 
     937            break; 
     938            case 'participant': 
     939                return{ 
     940                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     941                    attribute : historic.beforeValue == '' ? ('Novo participante') : ('Rem. participante'), 
     942                    beforeValue : historic.beforeValue == '' ? '' : historic.beforeValue.mail, 
     943                    afterValue : historic.afterValue == '' ? '' : historic.afterValue.mail, 
     944                    time: decodeDate(historic.time) 
     945                } 
     946            break; 
     947            case 'attachment': 
     948                return{ 
     949                    user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     950                    attribute : historic.beforeValue == '' ? ('Novo anexo') : ('Rem. anexo'), 
     951                    beforeValue : historic.beforeValue, 
     952                    afterValue : historic.afterValue, 
     953                    time: decodeDate(historic.time) 
     954                } 
     955            case 'percentage': 
     956                    return{ 
     957                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     958                    attribute :attributeDecoded[historic.attribute], 
     959                    beforeValue : historic.beforeValue+' %', 
     960                    afterValue : historic.afterValue+' %', 
     961                    time: decodeDate(historic.time) 
     962                } 
     963            case 'status': 
     964                    return{ 
     965                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     966                    attribute :attributeDecoded[historic.attribute], 
     967                    beforeValue : statusDecoded[historic.beforeValue], 
     968                    afterValue : statusDecoded[historic.afterValue], 
     969                    time: decodeDate(historic.time) 
     970                } 
     971            break; 
     972            default: 
     973                return { 
     974                    user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     975                    attribute : attributeDecoded[historic.attribute], 
     976                    beforeValue : historic.beforeValue, 
     977                    afterValue : historic.afterValue, 
     978                    time: decodeDate(historic.time) 
     979                } 
     980            break; 
     981 
     982        } 
     983    } 
     984 
     985    for(var i = 0; i < historic.length; i++) 
     986        decoded.push(decodeItem(historic[i])); 
     987 
     988    return decoded; 
     989 
     990} 
     991 
     992DataLayer.codec( "schedulable", "taskSearch", { 
     993 
     994    decoder: function( evtObj ){ 
     995 
     996    }, 
     997 
     998    encoder: function( evtObj ){ 
     999 
     1000    var notArray = false; 
     1001       
     1002    if( notArray = $.type(evtObj) !== "array" ) 
     1003        evtObj = [ evtObj ]; 
     1004 
     1005    var res = $.map(evtObj, function( objEvent ){            
     1006             
     1007        if(!(typeof(objEvent) == 'object')) 
     1008            return (null); 
     1009 
     1010        return { 
     1011            id: objEvent.id, 
     1012            summary: objEvent.summary, 
     1013            description: !!objEvent.summary ? objEvent.summary : objEvent.description, 
     1014            startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1015            startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1016            endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1017            endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1018            dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1019            dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1020            allDay: !!parseInt( objEvent.allDay ), 
     1021            percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     1022                        status: objEvent.status, 
     1023                        priority: objEvent.priority 
     1024        } 
     1025    }); 
     1026    return (notArray ? res[0] : res); 
     1027    } 
     1028}); 
     1029 
     1030DataLayer.codec( "schedulable", "activity", { 
     1031 
     1032    decoder: function( evtObj ){ 
     1033    Encoder.EncodeType = "entity"; 
     1034     
     1035    if( notArray = $.type(evtObj) !== "array" ) 
     1036        evtObj = [ evtObj ]; 
     1037 
     1038    var pref = User.preferences; 
     1039 
     1040    var res = $.map(evtObj, function( form ){ 
     1041     
     1042        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     1043        formatString = pref.dateFormat + " " + pref.hourFormat; 
     1044 
     1045        var decodeParticipants = function(attend){ 
     1046            return [DataLayer.merge( 
     1047                {   
     1048                    user: User.me.id,  
     1049                    isOrganizer: 1, 
     1050                    acl: 'row', 
     1051                    alarms: $.map( form.alarmTime || [], function( alarmTime, i ){ 
     1052                        if( alarmTime === "" ) 
     1053                            return( null ); 
     1054                        return !!form.alarmId[i] ? { 
     1055                            type: form.alarmType[i],  
     1056                            unit: form.alarmUnit[i],  
     1057                            time: form.alarmTime[i],  
     1058                            id: form.alarmId[i] 
     1059                            }: 
     1060 
     1061                            { 
     1062                            type: form.alarmType[i], 
     1063                            unit: form.alarmUnit[i],  
     1064                            time: form.alarmTime[i] 
     1065                            }; 
     1066                    }) 
     1067                }, attend != '0' ? {id: attend} : {})]; 
     1068        }; 
     1069 
     1070        return DataLayer.merge({ 
     1071        "class": form["class"], 
     1072        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     1073        endTime:  (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     1074        due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     1075        allDay: ( !!form.allDay ? 1 : 0 ),       
     1076        status: form.activityStatus,       
     1077        id: form.idActivity, 
     1078        type: !!form.type ?  form.type : 2, 
     1079        percentage: form.percentage, 
     1080        priority: form.priority, 
     1081        category: form.category, 
     1082        summary: form.summary == '' ? 'Atividade sem título' : form.summary, 
     1083        description: form.description, 
     1084        timezone: tzId, 
     1085        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     1086            return { 
     1087            attachment: attachment 
     1088            } 
     1089        }), 
     1090        participants: decodeParticipants(form.idAttendee), 
     1091        taskToActivity:$.map( form.idtask || [], function( task, i ){ 
     1092 
     1093            return DataLayer.merge({ 
     1094                task: task, 
     1095                owner: User.me.id 
     1096            }, form.idTaskToActivity[i] != '' ? {id: form.idTaskToActivity[i]} : {}); 
     1097 
     1098        }) 
     1099        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     1100    }); 
     1101 
     1102    return notArray ? res[0] : res; 
     1103    }, 
     1104 
     1105    encoder: function( evtObj ){ 
     1106 
     1107    var notArray = false; 
     1108       
     1109    if( notArray = $.type(evtObj) !== "array" ) 
     1110        evtObj = [ evtObj ]; 
     1111     
     1112    var res = $.map(evtObj, function( objEvent ){            
     1113             
     1114        if(!(typeof(objEvent) == 'object')) 
     1115            return (null); 
     1116         
     1117        var historic = []; 
     1118 
     1119        var decodeTasks = function(obj){ 
     1120 
     1121            var tasks = {}, task = {}; 
     1122 
     1123            for(var i =0; i < obj.taskToActivity.length; i++){ 
     1124 
     1125                taskToActivity = DataLayer.get('taskToActivity', obj.taskToActivity[i]);  
     1126                task = taskToActivity.task; 
     1127 
     1128                if($.type(task) != 'object') 
     1129                    task = DataLayer.get('schedulable', task); 
     1130 
     1131                //Resolve problemas com atualização na camada Cliente 
     1132                if(!$.isNumeric(task.startTime)){ 
     1133                    DataLayer.remove('schedulable', task.id, false); 
     1134                    task = DataLayer.get('schedulable', task.id); 
     1135                } 
     1136 
     1137                tasks[task.id] = { 
     1138                    taskToActivity: taskToActivity.id, 
     1139                    allDay: !!parseInt(task.allDay), 
     1140                    dueDate: (!task.due || task.due == '' || task.due == '0') ? '' : new Date( parseInt(task.due) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1141                    dueTime: (!task.due || task.due == '' || task.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.due)), task.timezone, obj.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1142                    startDate: new Date( parseInt(task.startTime) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1143                    startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.startTime)), task.timezone, task.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1144                    endDate: new Date( parseInt(task.endTime) - (!!parseInt(task.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1145                    endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)),  task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1146                                        status: task.status, 
     1147                                        percentage: task.percentage, 
     1148                                        priority: task.priority, 
     1149                                        summary: task.summary 
     1150                } 
     1151 
     1152                tasks[task.id].description = tasks[task.id].startDate + ' - ' + (!!task.summary ? task.summary : task.description); 
     1153 
     1154                historic.push({'task': (!!task.summary ? task.summary : task.description) , 'historic': decodeHistoric(task)}); 
     1155            } 
     1156 
     1157            tasks.length = obj.taskToActivity.length; 
     1158            return tasks; 
     1159 
     1160        }; 
     1161 
     1162        return { 
     1163        "class": objEvent["class"], 
     1164        id: objEvent.id, 
     1165        location: objEvent.location, 
     1166        category: objEvent.category, 
     1167        activityStatus: objEvent.status, 
     1168        groups: Calendar.groups, 
     1169        group: objEvent.group ? objEvent.group : objEvent.calendar, 
     1170        summary: objEvent.summary, 
     1171        type: !!objEvent.type ? objEvent.type : 2, 
     1172        description: objEvent.description, 
     1173        timezone: objEvent.timezone, 
     1174        timezones: Timezone.timezones, 
     1175        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     1176        priority: objEvent.priority, 
     1177        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1178        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1179        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1180        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1181        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1182        dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1183        allDay: !!parseInt( objEvent.allDay ), 
     1184        historic: historic, 
     1185        tasks: objEvent.taskToActivity ? decodeTasks(objEvent) : {}, 
     1186        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     1187            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     1188            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     1189            if(!attach.name) return(null);  
     1190             
     1191            var ext = attach.name.split('.'); 
     1192            attach.name = attach.name.length < 10 ?  attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' +  ext[ext.length -1])); 
     1193            attach.size = formatBytes(attach.size); 
     1194            return attach; 
     1195        }), 
     1196        me : User.me, 
     1197        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     1198 
     1199            var attend = DataLayer.get('participant', (participant.id || participant)); 
     1200            attend.user = DataLayer.get('user', attend.user); 
     1201 
     1202            return { 
     1203                id: attend.id, 
     1204                alarms : $.map(attend.alarms || [], function( alarm ){ 
     1205                    var alarm = DataLayer.get('alarm', alarm); 
     1206                    return (alarm == "" ? (null) : alarm); 
     1207                }) 
     1208            }; 
     1209        }) 
     1210 
     1211        }; 
     1212    }); 
     1213    return (notArray ? res[0] : res); 
     1214    } 
     1215}); 
    5971216 
    5981217function decodeOwnerCalendar(calendar){ 
     
    7271346                id: form.idEvent, 
    7281347                location: form.location, 
     1348                type: 1, 
    7291349                category: form.category, 
    730                 summary: form.summary, 
     1350                priority: form.priority, 
     1351                summary: form.summary == '' ? 'Evento sem título' : form.summary, 
    7311352                description: form.description, 
    7321353                timezone: tzId, 
     
    8001421 
    8011422        var pref = User.preferences; 
    802  
    803         var res =  DataLayer.encode('schedulable:preview', evtObj); 
     1423    var res = []; 
     1424 
     1425    for(var i = 0; i < evtObj.length; i++){ 
     1426           res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ?  'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 
     1427    } 
    8041428 
    8051429        if( !notArray ){ 
     
    8141438 
    8151439            for (var i=0; i < res.length; i++) { 
     1440 
     1441        res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 
    8161442                           
    8171443                var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
     
    8361462                        'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 
    8371463                        } ); 
    838                                    
    839                                    
    840                                    
    841                                    
    842                     res2.repeat = typeRepeat[res[i].repeat.frequency]; 
     1464 
     1465                    if(res[i].repeat) 
     1466                res2.repeat = typeRepeat[res[i].repeat.frequency]; 
    8431467                                   
    8441468                    while (counter.compareTo( currentDate ) == 0) { 
     
    8681492}); 
    8691493 
     1494 
     1495DataLayer.codec( "schedulable", "print", { 
     1496 
     1497    decoder: function( evtObj ){ 
     1498 
     1499    }, 
     1500 
     1501 
     1502    encoder: function( evtObj ){ 
     1503     
     1504    if(!(!!evtObj)) 
     1505        evtObj = []; 
     1506 
     1507    var notArray = false; 
     1508           
     1509    if( notArray = $.type(evtObj) !== "array" ) 
     1510        evtObj = [ evtObj ]; 
     1511 
     1512    var pref = User.preferences; 
     1513    var res = []; 
     1514 
     1515    for(var i = 0; i < evtObj.length; i++){ 
     1516       res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ?  'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 
     1517    } 
     1518 
     1519    if( !notArray ){ 
     1520        var dates = {}; 
     1521 
     1522        var typeRepeat = { 
     1523        'none': false,  
     1524        'daily': 'Repetição diária', 
     1525        'weekly': 'Repetição semanal', 
     1526        'monthly': 'Repetição mensal', 
     1527        'yearly': 'repetição anual' 
     1528        } 
     1529 
     1530        for (var i=0; i < res.length; i++) { 
     1531                        res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 
     1532                 
     1533            var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
     1534            var endDate   = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 
     1535                   
     1536            var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 
     1537             
     1538            var occurrences = [ startDate.getTime() ]; 
     1539                     
     1540            if( res[i].occurrences ) 
     1541            { 
     1542                occurrences = res[i].occurrences; 
     1543            } 
     1544 
     1545            for( var ii = 0; ii < occurrences.length; ii++ ) 
     1546            { 
     1547                var currentDate = new Date( occurrences[ii] ); 
     1548                var counter = currentDate.clone(); 
     1549                         
     1550                var res2 = $.extend( {}, res[i], { 
     1551                    'startDate': currentDate.toString( User.preferences.dateFormat ),  
     1552                    'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 
     1553                }); 
     1554 
     1555                if(res[i].repeat) 
     1556                    res2.repeat = typeRepeat[res[i].repeat.frequency]; 
     1557                       
     1558                var index = dateCalendar.dayNames[counter.getDay()] +' '+counter.toString('dd/MM'); 
     1559 
     1560                if(!dates[index] || !$.isArray(dates[index].events)) 
     1561                    dates[index] = {events:  []};                     
     1562 
     1563                                res2['isOneDay'] = res2.startDate == res2.endDate ? true : false; 
     1564 
     1565                dates[index].events.push(res2); 
     1566                   
     1567            } 
     1568        } 
     1569 
     1570        var calendarView = $('#calendar').fullCalendar('getView'); 
     1571        var start = calendarView.start.getTime(); 
     1572        var end = (calendarView.end.getTime() - (calendarView.name == 'month' ? 86400000 : 0 )); 
     1573        var next = start; 
     1574        var response = []; 
     1575        while (next){ 
     1576            var index = dateCalendar.dayNames[new Date(next).getDay()] +' '+ new Date(next).toString('dd/MM'); 
     1577             
     1578            var event = {}; 
     1579            event[index] = {events: dates[index] ? dates[index].events : false}; 
     1580 
     1581            response[response.length] = event; 
     1582            next = (next + 86400000) > end ? false : (next + 86400000); 
     1583        } 
     1584        res = {events: response}; 
     1585    } 
     1586 
     1587    return notArray ? res[0] : res; 
     1588    } 
     1589 
     1590}); 
     1591 
    8701592DataLayer.codec( "participant", "detail", { 
    8711593   
     
    9371659                 
    9381660            if(!(typeof(evt) == 'object') || (evt.id.indexOf('java') >= 0)) 
    939                 return (null); 
     1661                        return (null); 
    9401662 
    9411663            evt.calendar = evt.calendar || "1"; 
    9421664 
    9431665            if( !grouped[ evt.calendar ] ) 
    944                 grouped[ evt.calendar ] = []; 
     1666                        grouped[ evt.calendar ] = []; 
    9451667                         
    9461668            var calendar = DataLayer.get('calendar', evt.calendar); 
    9471669                 
     1670                var taskEditable = function(idTask){ 
     1671                        for(var i = 0; i < evt.participants.length; i++){ 
     1672                                attendee = DataLayer.get('participant', evt.participants[i]); 
     1673                                if(attendee.user == User.me.id) 
     1674                                        return attendee.isOrganizer == '1' ?  
     1675                                        { 
     1676                                                editable: true,  
     1677                                                disableResizing: false,  
     1678                                                disableDragging: false, 
     1679                                                className: 'fullcalendar-context-menu  event-type-2 event-id-'+idTask+' calendar-id-'+calendar.id 
     1680                                        }  
     1681                                        :  
     1682                                        { 
     1683                                                editable: false,  
     1684                                                disableResizing: true,  
     1685                                                disableDragging: true, 
     1686                                                className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idTask 
     1687                                        }; 
     1688                        } 
     1689                } 
     1690                 
    9481691            var eventEditable = function(idEvent, isRecurrence, Recurrence){ 
    949                 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 
    950                     var attendee = {}; 
    951                     for(var i = 0; i < evt.participants.length; i++){ 
    952                         attendee = DataLayer.get('participant', evt.participants[i]); 
    953                         if(attendee.user == User.me.id) 
    954                             return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? { 
    955                                 selectable: true,  
    956                                 className: 'fullcalendar-context-menu  event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
    957                                 } : { 
    958                                 editable: false,  
    959                                 selectable: true , 
    960                                 className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent 
     1692                        if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 
     1693                                var attendee = {}; 
     1694                                for(var i = 0; i < evt.participants.length; i++){ 
     1695                                        attendee = DataLayer.get('participant', evt.participants[i]); 
     1696                                        if(attendee.user == User.me.id) 
     1697                                                return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ?  
     1698                                                { 
     1699                                                        selectable: true,  
     1700                                                        className: 'fullcalendar-context-menu  event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
     1701                                                } : { 
     1702                                                        editable: false,  
     1703                                                        selectable: true , 
     1704                                                        className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent 
     1705                                                }; 
     1706                                } 
     1707                                return { 
     1708                                        editable: false,  
     1709                                        className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id,   
     1710                                        selectable: true,  
     1711                                        disableDragging: isRecurrence 
    9611712                                }; 
    962                     } 
    963                     return { 
    964                         editable: false,  
    965                         className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id,   
    966                         selectable: true,  
    967                         disableDragging: isRecurrence 
    968                     }; 
    969                 } 
    970                 else{ 
    971                     var aclSignature = Calendar.signatureOf[calendar.id].permission; 
     1713                        } 
     1714                        else{ 
     1715                                var aclSignature = Calendar.signatureOf[calendar.id].permission; 
     1716                                         
     1717                                var mountClass =  function(acl){ 
     1718                                        var returns = "" 
     1719                                        returns += acl['write'] ? "" :  'blocked-event-permision '; 
     1720                                        returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read']  ?  'fullcalendar-context-menu '+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 
     1721                                        returns += 'event-id-'+idEvent+' calendar-id-'+calendar.id; 
     1722                                        return returns; 
     1723                                } 
    9721724                                 
    973                     var mountClass =  function(acl){ 
    974                         var returns = "" 
    975                         returns += acl['write'] ? "" :  'blocked-event-permision '; 
    976                         returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read']  ?  'fullcalendar-context-menu '+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 
    977                         returns += 'event-id-'+idEvent+' calendar-id-'+calendar.id; 
    978                         return returns; 
    979                     }                            
    980                     return DataLayer.merge({ 
    981                         editable: aclSignature.acl['write'] && !isRecurrence, 
    982                         disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 
    983                         disableDragging  : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 
    984                         className: mountClass(aclSignature.acl) 
    985                     }, aclSignature.acl['busy'] ? { 
    986                         title: 'Ocupado',  
    987                         selectable: false 
    988                     } : { 
    989                         selectable: true 
    990                     }); 
    991                 } 
    992                          
     1725                                return DataLayer.merge({ 
     1726                                        editable: aclSignature.acl['write'] && !isRecurrence, 
     1727                                        disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 
     1728                                        disableDragging  : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 
     1729                                        className: mountClass(aclSignature.acl) 
     1730                                        }, aclSignature.acl['busy'] ?  
     1731                                        { 
     1732                                                title: 'Ocupado',  
     1733                                                selectable: false 
     1734                                        } : { 
     1735                                                selectable: true 
     1736                                        } 
     1737                                );       
     1738                        } 
    9931739            } 
     1740 
     1741                var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 
     1742 
     1743                var occurrences = []; 
    9941744                 
    995             var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 
    996                  
    997             var occurrences = []; 
    998                  
    999             if( evt.occurrences ) 
    1000             { 
    1001                 isRepeat = true; 
    1002                 occurrences = evt.occurrences; 
     1745                if( evt.occurrences ) 
     1746                { 
     1747                        isRepeat = true; 
     1748                        occurrences = evt.occurrences; 
    10031749            }else 
    1004                 occurrences[ occurrences.length ] = evt.startTime; 
     1750                        occurrences[ occurrences.length ] = evt.startTime; 
    10051751 
    10061752            //occurrences = DataLayer.unique( occurrences ).sort(); 
    1007                    
     1753                var typeEvent;   
    10081754            for( var i = 0; i < occurrences.length; i++ ) 
    1009                 grouped[ evt.calendar ].push( DataLayer.merge({ 
    1010                     id: evt.URI || evt.id+ '-' + i, 
    1011                     title: Encoder.htmlDecode(evt.summary), 
    1012                     start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
    1013                     end:   Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
    1014                     allDay: parseInt( evt.allDay ), 
    1015                     isRepeat: isRepeat, 
    1016                     occurrence: i, 
    1017                     calendar: evt.calendar 
    1018                     }, eventEditable(evt.id, isRepeat, i ) ) ); 
     1755                { 
     1756            typeEvent = (evt.type == 2 && evt.taskToActivity ? 3 : evt.type) 
     1757                grouped[ evt.calendar ].push( DataLayer.merge( 
     1758                { 
     1759                                id: evt.URI || evt.id+ '-' + i, 
     1760                                title: Encoder.htmlDecode(evt.summary), 
     1761                                start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1762                                end:   Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1763                                allDay: parseInt( evt.allDay ), 
     1764                                isRepeat: isRepeat, 
     1765                                occurrence: i, 
     1766                                type: typeEvent, 
     1767                                calendar: evt.calendar 
     1768                                }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? taskEditable(evt.id) : {editable: false, disableResizing: true, disableDragging: true})))); 
     1769        } 
    10191770        }); 
    10201771 
     
    10351786        return { 
    10361787            filter: ['AND',  
    1037                         ['OR',  
     1788                        ['OR', 
    10381789                            ['AND',  
    10391790                                ['>=', 'rangeEnd', filter.start.getTime()],  
    1040                                 ['<=', 'rangeEnd', filter.end.getTime()] ,  
     1791                                ['<=', 'rangeEnd', filter.end.getTime()] 
    10411792                            ], 
    10421793                            ['AND',  
    10431794                                ['>=', 'rangeStart', filter.start.getTime()],  
    1044                                 ['<=', 'rangeStart', filter.end.getTime()] ,  
     1795                                ['<=', 'rangeStart', filter.end.getTime()] 
    10451796                            ], 
    10461797                            ['AND',  
    10471798                                ['<=', 'rangeStart', filter.start.getTime()],  
    1048                                 ['>=', 'rangeEnd', filter.end.getTime()] ,  
     1799                                ['>=', 'rangeEnd', filter.end.getTime()] 
    10491800                            ] 
    10501801                        ], 
    1051                         ['IN', 'calendar',  Calendar.calendarIds] 
     1802                        ['IN', 'calendar',  $.merge( Calendar.calendarIds, Calendar.groupIds )] 
    10521803                ],  
    10531804            criteria: { 
Note: See TracChangeset for help on using the changeset viewer.