Ignore:
Timestamp:
08/10/12 19:11:37 (12 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Merge de novas funcionalidades com trunk #2951, #2952

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r6533 r6996  
    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 = { 
     
    195198        DataLayer.commit( false, false, function(){      
    196199            Calendar.rerenderView(true); 
     200            if(updateActivity) 
     201                refreshTaskActivity(); 
    197202        }); 
    198203    } 
     
    262267                user: User.me.id,        
    263268                calendar: { 
    264                     id: Calendar.calendarOf[form.signature].id, 
     269                    id: !!!parseInt(form.type) ? Calendar.calendarOf[form.signature].id : Calendar.groupOf[form.signature].id, 
    265270                    name: Encoder.htmlEncode(form.name), 
    266271                    description: Encoder.htmlEncode(form.description), 
     
    384389 
    385390       
     391}); 
     392 
     393DataLayer.codec( "schedulable", "taskEdit", { 
     394 
     395    decoder: function( evtObj ){ 
     396        Encoder.EncodeType = "entity"; 
     397         
     398        if( notArray = $.type(evtObj) !== "array" ) 
     399            evtObj = [ evtObj ]; 
     400 
     401        var pref = User.preferences; 
     402                 
     403        var res = $.map(evtObj, function( form ){ 
     404                         
     405            return DataLayer.merge({ 
     406                id: form.idTask, 
     407                percentage: form.percentage, 
     408                type: '2',  
     409                status: form.taskStatus, 
     410                participants : $.map(form.attendee, function( attendee, i ){ 
     411                    if(isNaN(attendee)){ 
     412                        return{ 
     413                            id: attendee, 
     414                            acl: form.attendeeAcl[i], 
     415                            delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0, 
     416                            isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     417                            isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     418                            acl: form.attendeeAcl[i].replace('o', '') 
     419                        }; 
     420                    }else{ 
     421                        if(DataLayer.get('participant', attendee).user == User.me.id){ 
     422                            var me = { 
     423                                user: User.me.id, 
     424                                status: form.status, 
     425                                id: attendee, 
     426                                isOrganizer: 0, 
     427                                receiveNotification : (!!form.receiveNotification ? 1 : 0), 
     428                                alarms: typeof(form.alarmTime) != 'undefined' ?  
     429                                $.map( form.alarmTime || [], function( alarmTime, i ){ 
     430 
     431                                    if( alarmTime === "" ) 
     432                                        return( null ); 
     433 
     434                                    return !!form.alarmId[i] ? 
     435                                    { 
     436                                        type: form.alarmType[i],  
     437                                        unit: form.alarmUnit[i],  
     438                                        time: form.alarmTime[i],  
     439                                        id: form.alarmId[i] 
     440                                        } :  
     441{ 
     442                                        type: form.alarmType[i], 
     443                                        unit: form.alarmUnit[i],  
     444                                        time: form.alarmTime[i] 
     445                                        }; 
     446                                }) : [] 
     447                            }; 
     448                                                         
     449                            if(form.startDate){ 
     450                                var tzId =  DataLayer.get('schedulable', form.idEvent).timezone || User.preferences.timezone, 
     451                                formatString = pref.dateFormat + " " + pref.hourFormat; 
     452                                                                 
     453                                DataLayer.put('notification', { 
     454                                    participant: me.id, 
     455                                    type: 'suggestion', 
     456                                    startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     457                                    endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     458                                    allDay: ( !!form.allDay ? 1 : 0 ), 
     459                                    schedulable: form.idEvent 
     460                                }); 
     461                                                         
     462                            } 
     463                            return me; 
     464                        }else return(null); 
     465                    }; 
     466                }) 
     467            }, (form.group != form.lastGroup? {calendar: form.group, lastCalendar: form.lastGroup} : {})) 
     468        }); 
     469        return notArray ? res[0] : res; 
     470    }, 
     471 
     472    encoder: function( evtObj ){} 
     473 
    386474}); 
    387475 
     
    510598                calendar: objEvent.calendar, 
    511599                summary: objEvent.summary, 
     600        type: !!objEvent.type ? objEvent.type : 1, 
    512601                description: objEvent.description, 
    513602                timezone: objEvent.timezone, 
     
    595684}); 
    596685 
     686DataLayer.codec( "schedulable", "task", { 
     687 
     688    decoder: function( evtObj ){ 
     689    Encoder.EncodeType = "entity"; 
     690     
     691    if( notArray = $.type(evtObj) !== "array" ) 
     692        evtObj = [ evtObj ]; 
     693 
     694    var pref = User.preferences; 
     695 
     696    var res = $.map(evtObj, function( form ){ 
     697     
     698        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     699 
     700        formatString = pref.dateFormat + " " + pref.hourFormat; 
     701 
     702        return DataLayer.merge({ 
     703        "class": form["class"], 
     704        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     705        endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
     706        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'), 
     707        allDay: ( !!form.allDay ? 1 : 0 ),       
     708        status: form.taskStatus,       
     709        id: form.idTask, 
     710        location: form.location, 
     711        type: !!form.type ?  form.type : 2, 
     712        percentage: form.percentage, 
     713        priority: form.priority, 
     714        category: form.category, 
     715        summary: form.summary == '' ? 'Tarefa sem título' : form.summary, 
     716        description: form.description, 
     717        timezone: tzId, 
     718        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     719            return { 
     720            attachment: attachment 
     721            } 
     722        }), 
     723        participants: $.map( form.attendee || [], function( attendee, i ){ 
     724 
     725            if( !attendee || attendee === "" ) 
     726            return( null ); 
     727 
     728            var participant = {}; 
     729            participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
     730 
     731            if( participant.user === User.me.id ){ 
     732            return DataLayer.merge({ 
     733                id: attendee, 
     734                isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     735                alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     736                if( alarmTime === "" ) 
     737                    return( null ); 
     738                return !!form.alarmId[i] ? { 
     739                    type: form.alarmType[i],  
     740                    unit: form.alarmUnit[i],  
     741                    time: form.alarmTime[i],  
     742                    id: form.alarmId[i] 
     743                    }: 
     744 
     745                    { 
     746                    type: form.alarmType[i], 
     747                    unit: form.alarmUnit[i],  
     748                    time: form.alarmTime[i] 
     749                    }; 
     750                }), 
     751                status: !!form.status ? form.status : 3 
     752            }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '')  ? { 
     753                delegatedFrom: form.delegatedFrom[i] 
     754                } : {}); 
     755            }else{ 
     756                return { 
     757                    id: attendee, 
     758                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     759                    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0 
     760                    }; 
     761            }; 
     762        }) 
     763        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     764    }); 
     765 
     766    return notArray ? res[0] : res; 
     767    }, 
     768 
     769    encoder: function( evtObj ){ 
     770 
     771    var notArray = false; 
     772       
     773    if( notArray = $.type(evtObj) !== "array" ) 
     774        evtObj = [ evtObj ]; 
     775 
     776    var statusParticipants = {},  isAttendee = false, 
     777    
     778    statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 
     779 
     780    participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 
     781     
     782    var delegateAttendee = {}; 
     783     
     784    for( var i = 0; i < statusLabels.length; i++ ) 
     785        statusParticipants[ statusLabels[i] ] = 0; 
     786     
     787    var res = $.map(evtObj, function( objEvent ){            
     788             
     789        if(!(typeof(objEvent) == 'object')) 
     790            return (null); 
     791 
     792        var limitAttendee = false; 
     793 
     794        return { 
     795        "class": objEvent["class"], 
     796        id: objEvent.id, 
     797        location: objEvent.location, 
     798        category: objEvent.category, 
     799        taskStatus: objEvent.status, 
     800        groups: Calendar.groups, 
     801        group: objEvent.group ? objEvent.group : objEvent.calendar, 
     802        summary: objEvent.summary, 
     803        type: !!objEvent.type ? objEvent.type : 2, 
     804        description: objEvent.description, 
     805        timezone: objEvent.timezone, 
     806        timezones: Timezone.timezones, 
     807        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     808        priority: objEvent.priority, 
     809        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     810        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     811        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     812        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     813        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     814        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), 
     815        allDay: !!parseInt( objEvent.allDay ), 
     816            historic: !!objEvent.historic ? decodeHistoric(objEvent) : [] , 
     817        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     818            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     819            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     820            if(!attach.name) return(null);  
     821             
     822            var ext = attach.name.split('.'); 
     823            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])); 
     824            attach.size = formatBytes(attach.size); 
     825            return attach; 
     826        }),                      
     827        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     828 
     829            if(delegateAttendee[participant]) 
     830                return(null); 
     831 
     832            var attend = DataLayer.get('participant', (participant.id || participant)); 
     833            attend.user = DataLayer.get('user', attend.user); 
     834 
     835            statusParticipants[ statusLabels[attend.status] ]++;     
     836 
     837            if(attend.user.mail == User.me.mail) 
     838                isAttendee = true; 
     839 
     840            if( attend.user.id ===  me.id ){ 
     841                participantInfo.user = { 
     842                    id: attend.id, 
     843                    status : attend.status, 
     844                    delegatedFrom: attend.delegatedFrom || '0', 
     845                    acl: attend.acl, 
     846                    receiveNotification : attend.receiveNotification, 
     847                    alarms : $.map(attend.alarms || [], function( alarm ){ 
     848                    var alarm = DataLayer.get('alarm', alarm); 
     849                    return (alarm == "" ? (null) : alarm); 
     850                    }) 
     851                }; 
     852                me = attend; 
     853                return(null); 
     854            }; 
     855 
     856            var person = { 
     857                id: attend.id, 
     858                name: attend.user.name != 'false' ? attend.user.name : '', 
     859                mail: attend.user.mail, 
     860                status : attend.status, 
     861                isExternal: attend.isExternal, 
     862                acl: attend.acl, 
     863                delegatedFrom: attend.delegatedFrom 
     864            }; 
     865 
     866            if(!!parseInt(attend.delegatedFrom)){ 
     867                delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
     868                return(null); 
     869            } 
     870 
     871            if( !!parseInt(attend.isOrganizer)){ 
     872                participantInfo.organizer = DataLayer.copy(person); 
     873                return(null); 
     874            };                   
     875 
     876            return (person); 
     877        }), 
     878        organizer: participantInfo.organizer || me, 
     879        isOrganizer: (participantInfo.organizer || me).id == me.id, 
     880        alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
     881        status: !!participantInfo.user ? participantInfo.user.status : 1, 
     882        isAttendee: isAttendee, 
     883        me: me, 
     884        delegatedFrom: delegatedFrom, 
     885        statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     886        sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
     887        }; 
     888    }); 
     889    return (notArray ? res[0] : res); 
     890    } 
     891}); 
     892 
     893function decodeHistoric ( evt ) { 
     894    var historic = evt.historic; 
     895    var decoded = []; 
     896    var attributeDecoded = { 
     897        'startTime': 'Data de inicio', 
     898        'endTime' : 'Data de fim', 
     899        'summary' : 'Título', 
     900        'description': 'Descrição', 
     901        'status': 'Status', 
     902        'percentage': 'Porcentagem', 
     903        'priority': 'Priorudade', 
     904        'due' : 'Previsão de término' 
     905    } 
     906     
     907    var statusDecoded = { 
     908        1: 'Sem ações', 
     909        2: 'Em processo', 
     910        3: 'Finalzada', 
     911        4: 'Cancelada', 
     912    } 
     913 
     914    var decodeDate = function(time){ 
     915        return new Date( parseInt( time) ).setTimezoneOffset( Timezone.timezone( evt.timezone ) ).toString( User.preferences.dateFormat+' - '+User.preferences.hourFormat ); 
     916    }; 
     917 
     918    var decodeItem = function(historic){ 
     919        switch(historic.attribute){ 
     920            case 'startTime': 
     921            case 'endTime' : 
     922            case 'due': 
     923                return { 
     924                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     925                    attribute : attributeDecoded[historic.attribute], 
     926                    beforeValue : decodeDate(historic.beforeValue), 
     927                    afterValue : decodeDate(historic.afterValue), 
     928                    time: decodeDate(historic.time) 
     929                } 
     930            break; 
     931            case 'participant': 
     932                return{ 
     933                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     934                    attribute : historic.beforeValue == '' ? ('Novo participante') : ('Rem. participante'), 
     935                    beforeValue : historic.beforeValue == '' ? '' : historic.beforeValue.mail, 
     936                    afterValue : historic.afterValue == '' ? '' : historic.afterValue.mail, 
     937                    time: decodeDate(historic.time) 
     938                } 
     939            break; 
     940            case 'attachment': 
     941                return{ 
     942                    user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     943                    attribute : historic.beforeValue == '' ? ('Novo anexo') : ('Rem. anexo'), 
     944                    beforeValue : historic.beforeValue, 
     945                    afterValue : historic.afterValue, 
     946                    time: decodeDate(historic.time) 
     947                } 
     948            case 'percentage': 
     949                    return{ 
     950                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     951                    attribute :attributeDecoded[historic.attribute], 
     952                    beforeValue : historic.beforeValue+' %', 
     953                    afterValue : historic.afterValue+' %', 
     954                    time: decodeDate(historic.time) 
     955                } 
     956            case 'status': 
     957                    return{ 
     958                    user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     959                    attribute :attributeDecoded[historic.attribute], 
     960                    beforeValue : statusDecoded[historic.beforeValue], 
     961                    afterValue : statusDecoded[historic.afterValue], 
     962                    time: decodeDate(historic.time) 
     963                } 
     964            break; 
     965            default: 
     966                return { 
     967                    user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 
     968                    attribute : attributeDecoded[historic.attribute], 
     969                    beforeValue : historic.beforeValue, 
     970                    afterValue : historic.afterValue, 
     971                    time: decodeDate(historic.time) 
     972                } 
     973            break; 
     974 
     975        } 
     976    } 
     977 
     978    for(var i = 0; i < historic.length; i++) 
     979        decoded.push(decodeItem(historic[i])); 
     980 
     981    return decoded; 
     982 
     983} 
     984 
     985DataLayer.codec( "schedulable", "taskSearch", { 
     986 
     987    decoder: function( evtObj ){ 
     988 
     989    }, 
     990 
     991    encoder: function( evtObj ){ 
     992 
     993    var notArray = false; 
     994       
     995    if( notArray = $.type(evtObj) !== "array" ) 
     996        evtObj = [ evtObj ]; 
     997 
     998    var res = $.map(evtObj, function( objEvent ){            
     999             
     1000        if(!(typeof(objEvent) == 'object')) 
     1001            return (null); 
     1002 
     1003        return { 
     1004            id: objEvent.id, 
     1005            description: !!objEvent.summary ? objEvent.summary : objEvent.description, 
     1006            startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1007            startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1008            endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1009            endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1010            dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1011            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), 
     1012            allDay: !!parseInt( objEvent.allDay ), 
     1013            percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     1014                        status: objEvent.status 
     1015        } 
     1016    }); 
     1017    return (notArray ? res[0] : res); 
     1018    } 
     1019}); 
     1020 
     1021DataLayer.codec( "schedulable", "activity", { 
     1022 
     1023    decoder: function( evtObj ){ 
     1024    Encoder.EncodeType = "entity"; 
     1025     
     1026    if( notArray = $.type(evtObj) !== "array" ) 
     1027        evtObj = [ evtObj ]; 
     1028 
     1029    var pref = User.preferences; 
     1030 
     1031    var res = $.map(evtObj, function( form ){ 
     1032     
     1033        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     1034        formatString = pref.dateFormat + " " + pref.hourFormat; 
     1035 
     1036        var decodeParticipants = function(attend){ 
     1037            return [DataLayer.merge( 
     1038                {   
     1039                    user: User.me.id,  
     1040                    isOrganizer: 1, 
     1041                    acl: 'row', 
     1042                    alarms: $.map( form.alarmTime || [], function( alarmTime, i ){ 
     1043                        if( alarmTime === "" ) 
     1044                            return( null ); 
     1045                        return !!form.alarmId[i] ? { 
     1046                            type: form.alarmType[i],  
     1047                            unit: form.alarmUnit[i],  
     1048                            time: form.alarmTime[i],  
     1049                            id: form.alarmId[i] 
     1050                            }: 
     1051 
     1052                            { 
     1053                            type: form.alarmType[i], 
     1054                            unit: form.alarmUnit[i],  
     1055                            time: form.alarmTime[i] 
     1056                            }; 
     1057                    }) 
     1058                }, attend != '0' ? {id: attend} : {})]; 
     1059        }; 
     1060 
     1061        return DataLayer.merge({ 
     1062        "class": form["class"], 
     1063        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     1064        endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
     1065        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'), 
     1066        allDay: ( !!form.allDay ? 1 : 0 ),       
     1067        status: form.activityStatus,       
     1068        id: form.idActivity, 
     1069        type: !!form.type ?  form.type : 2, 
     1070        percentage: form.percentage, 
     1071        priority: form.priority, 
     1072        category: form.category, 
     1073        summary: form.summary == '' ? 'Atividade sem título' : form.summary, 
     1074        description: form.description, 
     1075        timezone: tzId, 
     1076        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     1077            return { 
     1078            attachment: attachment 
     1079            } 
     1080        }), 
     1081        participants: decodeParticipants(form.idAttendee), 
     1082        taskToActivity:$.map( form.idtask || [], function( task, i ){ 
     1083 
     1084            return DataLayer.merge({ 
     1085                task: task, 
     1086                owner: User.me.id 
     1087            }, form.idTaskToActivity[i] != '' ? {id: form.idTaskToActivity[i]} : {}); 
     1088 
     1089        }) 
     1090        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     1091    }); 
     1092 
     1093    return notArray ? res[0] : res; 
     1094    }, 
     1095 
     1096    encoder: function( evtObj ){ 
     1097 
     1098    var notArray = false; 
     1099       
     1100    if( notArray = $.type(evtObj) !== "array" ) 
     1101        evtObj = [ evtObj ]; 
     1102     
     1103    var res = $.map(evtObj, function( objEvent ){            
     1104             
     1105        if(!(typeof(objEvent) == 'object')) 
     1106            return (null); 
     1107         
     1108        var historic = []; 
     1109 
     1110        var decodeTasks = function(obj){ 
     1111 
     1112            var tasks = {}, task = {}; 
     1113 
     1114            for(var i =0; i < obj.taskToActivity.length; i++){ 
     1115 
     1116                taskToActivity = DataLayer.get('taskToActivity', obj.taskToActivity[i]);  
     1117                task = taskToActivity.task; 
     1118 
     1119                if($.type(task) != 'object') 
     1120                    task = DataLayer.get('schedulable', task); 
     1121 
     1122                tasks[task.id] = { 
     1123                    taskToActivity: taskToActivity.id, 
     1124                    allDay: !!parseInt(task.allDay), 
     1125                    dueDate: (!task.due || task.due == '' || task.due == '0') ? '' : new Date( parseInt(task.due) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1126                    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), 
     1127                    startDate: new Date( parseInt(task.startTime) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1128                    startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.startTime)), task.timezone, task.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1129                    endDate: new Date( parseInt(task.endTime) - (!!parseInt(task.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     1130                    endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)),  task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1131                    status: task.status, 
     1132                    percentage: task.percentage 
     1133                } 
     1134 
     1135                tasks[task.id].description = tasks[task.id].startDate + ' - ' + (!!task.summary ? task.summary : task.description); 
     1136 
     1137                historic.push({'task': (!!task.summary ? task.summary : task.description) , 'historic': decodeHistoric(task)}); 
     1138            } 
     1139 
     1140            tasks.length = obj.taskToActivity.length; 
     1141            return tasks; 
     1142 
     1143        }; 
     1144 
     1145        return { 
     1146        "class": objEvent["class"], 
     1147        id: objEvent.id, 
     1148        location: objEvent.location, 
     1149        category: objEvent.category, 
     1150        activityStatus: objEvent.status, 
     1151        groups: Calendar.groups, 
     1152        group: objEvent.group ? objEvent.group : objEvent.calendar, 
     1153        summary: objEvent.summary, 
     1154        type: !!objEvent.type ? objEvent.type : 2, 
     1155        description: objEvent.description, 
     1156        timezone: objEvent.timezone, 
     1157        timezones: Timezone.timezones, 
     1158        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     1159        priority: objEvent.priority, 
     1160        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1161        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     1162        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1163        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     1164        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     1165        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), 
     1166        allDay: !!parseInt( objEvent.allDay ), 
     1167        historic: historic, 
     1168        tasks: objEvent.taskToActivity ? decodeTasks(objEvent) : {}, 
     1169        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     1170            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     1171            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     1172            if(!attach.name) return(null);  
     1173             
     1174            var ext = attach.name.split('.'); 
     1175            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])); 
     1176            attach.size = formatBytes(attach.size); 
     1177            return attach; 
     1178        }), 
     1179        me : User.me, 
     1180        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     1181 
     1182            var attend = DataLayer.get('participant', (participant.id || participant)); 
     1183            attend.user = DataLayer.get('user', attend.user); 
     1184 
     1185            return { 
     1186                id: attend.id, 
     1187                alarms : $.map(attend.alarms || [], function( alarm ){ 
     1188                    var alarm = DataLayer.get('alarm', alarm); 
     1189                    return (alarm == "" ? (null) : alarm); 
     1190                }) 
     1191            }; 
     1192        }) 
     1193 
     1194        }; 
     1195    }); 
     1196    return (notArray ? res[0] : res); 
     1197    } 
     1198}); 
    5971199 
    5981200function decodeOwnerCalendar(calendar){ 
     
    7271329                id: form.idEvent, 
    7281330                location: form.location, 
     1331                type: 1, 
    7291332                category: form.category, 
    730                 summary: form.summary, 
     1333                summary: form.summary == '' ? 'Evento sem título' : form.summary, 
    7311334                description: form.description, 
    7321335                timezone: tzId, 
     
    8001403 
    8011404        var pref = User.preferences; 
    802  
    803         var res =  DataLayer.encode('schedulable:preview', evtObj); 
     1405    var res = []; 
     1406 
     1407    for(var i = 0; i < evtObj.length; i++){ 
     1408           res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ?  'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 
     1409    } 
    8041410 
    8051411        if( !notArray ){ 
     
    8141420 
    8151421            for (var i=0; i < res.length; i++) { 
     1422 
     1423        res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 
    8161424                           
    8171425                var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
     
    8361444                        'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 
    8371445                        } ); 
    838                                    
    839                                    
    840                                    
    841                                    
    842                     res2.repeat = typeRepeat[res[i].repeat.frequency]; 
     1446 
     1447                    if(res[i].repeat) 
     1448                res2.repeat = typeRepeat[res[i].repeat.frequency]; 
    8431449                                   
    8441450                    while (counter.compareTo( currentDate ) == 0) { 
     
    8641470 
    8651471        return notArray ? res[0] : res; 
     1472    } 
     1473 
     1474}); 
     1475 
     1476 
     1477DataLayer.codec( "schedulable", "print", { 
     1478 
     1479    decoder: function( evtObj ){ 
     1480 
     1481    }, 
     1482 
     1483 
     1484    encoder: function( evtObj ){ 
     1485     
     1486    if(!(!!evtObj)) 
     1487        evtObj = []; 
     1488 
     1489    var notArray = false; 
     1490           
     1491    if( notArray = $.type(evtObj) !== "array" ) 
     1492        evtObj = [ evtObj ]; 
     1493 
     1494    var pref = User.preferences; 
     1495    var res = []; 
     1496 
     1497    for(var i = 0; i < evtObj.length; i++){ 
     1498       res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ?  'preview' : 'task'), evtObj[i])); 
     1499    } 
     1500 
     1501    if( !notArray ){ 
     1502        var dates = {}; 
     1503 
     1504        var typeRepeat = { 
     1505        'none': false,  
     1506        'daily': 'Repetição diária', 
     1507        'weekly': 'Repetição semanal', 
     1508        'monthly': 'Repetição mensal', 
     1509        'yearly': 'repetição anual' 
     1510        } 
     1511 
     1512        for (var i=0; i < res.length; i++) { 
     1513            var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
     1514            var endDate   = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 
     1515                   
     1516            var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 
     1517             
     1518            var occurrences = [ startDate.getTime() ]; 
     1519                     
     1520            if( res[i].occurrences ) 
     1521            { 
     1522                occurrences = res[i].occurrences; 
     1523            } 
     1524 
     1525            for( var ii = 0; ii < occurrences.length; ii++ ) 
     1526            { 
     1527                var currentDate = new Date( occurrences[ii] ); 
     1528                var counter = currentDate.clone(); 
     1529                         
     1530                var res2 = $.extend( {}, res[i], { 
     1531                    'startDate': currentDate.toString( User.preferences.dateFormat ),  
     1532                    'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 
     1533                }); 
     1534 
     1535                if(res[i].repeat) 
     1536                    res2.repeat = typeRepeat[res[i].repeat.frequency]; 
     1537                       
     1538                var index = dateCalendar.dayNames[counter.getDay()] +' '+counter.toString('dd/MM'); 
     1539 
     1540                if(!dates[index] || !$.isArray(dates[index].events)) 
     1541                    dates[index] = {events:  []};                     
     1542 
     1543                                res2['isOneDay'] = res2.startDate == res2.endDate ? true : false; 
     1544 
     1545                dates[index].events.push(res2); 
     1546                   
     1547            } 
     1548        } 
     1549 
     1550        var calendarView = $('#calendar').fullCalendar('getView'); 
     1551        var start = calendarView.start.getTime(); 
     1552        var end = (calendarView.end.getTime() - (calendarView.name == 'month' ? 86400000 : 0 )); 
     1553        var next = start; 
     1554        var response = []; 
     1555 
     1556        while (next){ 
     1557            var index = dateCalendar.dayNames[new Date(next).getDay()] +' '+ new Date(next).toString('dd/MM'); 
     1558             
     1559            var event = {}; 
     1560            event[index] = {events: dates[index] ? dates[index].events : false}; 
     1561 
     1562            response[response.length] = event; 
     1563            next = (next + 86400000) > end ? false : (next + 86400000); 
     1564        } 
     1565        res = {events: response}; 
     1566    } 
     1567 
     1568    return notArray ? res[0] : res; 
    8661569    } 
    8671570 
     
    9521655                        attendee = DataLayer.get('participant', evt.participants[i]); 
    9531656                        if(attendee.user == User.me.id) 
    954                             return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? { 
     1657                                            return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ?  
     1658                                                { 
    9551659                                selectable: true,  
    9561660                                className: 'fullcalendar-context-menu  event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
     
    9781682                        return returns; 
    9791683                    }                            
    980                     return DataLayer.merge({ 
     1684                    return DataLayer.merge( 
     1685                        { 
    9811686                        editable: aclSignature.acl['write'] && !isRecurrence, 
    9821687                        disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 
    9831688                        disableDragging  : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 
    9841689                        className: mountClass(aclSignature.acl) 
    985                     }, aclSignature.acl['busy'] ? { 
    986                         title: 'Ocupado',  
    987                         selectable: false 
    988                     } : { 
    989                         selectable: true 
    990                     }); 
     1690                        }, aclSignature.acl['busy'] ?  
     1691                        { 
     1692                            title: 'Ocupado',  
     1693                            selectable: false 
     1694                        } : { 
     1695                            selectable: true 
     1696                        });      
    9911697                } 
    992                          
    9931698            } 
    9941699                 
     
    10051710 
    10061711            //occurrences = DataLayer.unique( occurrences ).sort(); 
    1007                    
    1008             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 ) ) ); 
     1712                var typeEvent;   
     1713            for( var i = 0; i < occurrences.length; i++ ){ 
     1714 
     1715            typeEvent = (evt.type == 2 && evt.taskToActivity ? 3 : evt.type) 
     1716                grouped[ evt.calendar ].push( DataLayer.merge( 
     1717                { 
     1718                    id: evt.URI || evt.id+ '-' + i, 
     1719                    title: Encoder.htmlDecode(evt.summary), 
     1720                    start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1721                    end:   Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1722                    allDay: parseInt( evt.allDay ), 
     1723                    isRepeat: isRepeat, 
     1724                    occurrence: i, 
     1725                    type: typeEvent, 
     1726                    calendar: evt.calendar 
     1727                    }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? {editable: true, disableResizing: false, disableDragging: false} : {editable: false, disableResizing: true, disableDragging: true}) )) ); 
     1728        } 
    10191729        }); 
    10201730 
     
    10491759                            ] 
    10501760                        ], 
    1051                         ['IN', 'calendar',  Calendar.calendarIds] 
     1761                        ['IN', 'calendar',  $.merge( Calendar.calendarIds, Calendar.groupIds )] 
    10521762                ],  
    10531763            criteria: { 
Note: See TracChangeset for help on using the changeset viewer.