- Timestamp:
- 09/17/12 14:30:47 (12 years ago)
- Location:
- branches/2.4
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.4
- Property svn:mergeinfo changed
-
branches/2.4/prototype/modules/calendar/js/calendar.codecs.js
r6754 r7228 22 22 fontColor: "fff", 23 23 timezone: 'America/Sao_Paulo', 24 weekStart: 'SUN' 24 weekStart: 'SUN', 25 useDesktopNotification: 0 25 26 }; 26 27 … … 31 32 } 32 33 } 34 35 updateActivity = false; 33 36 34 37 constantsParticipant = { … … 54 57 importCalendar: null, 55 58 sharedCalendar: null, 56 copyCalendar: null 59 copyCalendar: null, 60 assingCalendar: null 57 61 } 58 62 } … … 81 85 borderColor: '#' + signature.borderColor || User.preferences.borderColor, 82 86 textColor: '#' + signature.fontColor || User.preferences.fontColor, 83 87 className: [], 84 88 editable: signature.isOwner 85 89 } … … 129 133 return returns; 130 134 }; 131 135 console.log(evtObj); 132 136 var res = $.map(evtObj, function( objEvent ){ 133 137 return { … … 137 141 user: objEvent.user, 138 142 acl: constantAcl(objEvent.acl) , 139 aclValues: objEvent.acl 143 aclValues: objEvent.acl, 144 owner: objEvent.owner 140 145 }; 141 146 }); … … 187 192 }); 188 193 189 /*Todo Melhorias ser ão feitas na API*/194 /*Todo Melhorias serço feitas na API*/ 190 195 //DataLayer.poll( "schedulable" ); 191 196 … … 195 200 DataLayer.commit( false, false, function(){ 196 201 Calendar.rerenderView(true); 202 if(updateActivity) 203 refreshTaskActivity(); 197 204 }); 198 205 } … … 262 269 user: User.me.id, 263 270 calendar: { 264 id: Calendar.calendarOf[form.signature].id,271 id: !!!parseInt(form.type) ? Calendar.calendarOf[form.signature].id : Calendar.groupOf[form.signature].id, 265 272 name: Encoder.htmlEncode(form.name), 266 273 description: Encoder.htmlEncode(form.description), … … 384 391 385 392 393 }); 394 395 DataLayer.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 386 476 }); 387 477 … … 510 600 calendar: objEvent.calendar, 511 601 summary: objEvent.summary, 602 type: !!objEvent.type ? objEvent.type : 1, 512 603 description: objEvent.description, 513 604 timezone: objEvent.timezone, … … 518 609 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 519 610 allDay: !!parseInt( objEvent.allDay ), 611 dueDate: objEvent.dueDate, 612 dueTime: objEvent.dueTime, 613 priority: objEvent.priority, 520 614 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 521 615 var attach = DataLayer.get('schedulableToAttachment', attachment, false); … … 595 689 }); 596 690 691 DataLayer.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 900 function 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 992 DataLayer.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 1030 DataLayer.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 }); 597 1216 598 1217 function decodeOwnerCalendar(calendar){ … … 727 1346 id: form.idEvent, 728 1347 location: form.location, 1348 type: 1, 729 1349 category: form.category, 730 summary: form.summary, 1350 priority: form.priority, 1351 summary: form.summary == '' ? 'Evento sem título' : form.summary, 731 1352 description: form.description, 732 1353 timezone: tzId, … … 800 1421 801 1422 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 } 804 1428 805 1429 if( !notArray ){ … … 814 1438 815 1439 for (var i=0; i < res.length; i++) { 1440 1441 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 816 1442 817 1443 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); … … 836 1462 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 837 1463 } ); 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]; 843 1467 844 1468 while (counter.compareTo( currentDate ) == 0) { … … 868 1492 }); 869 1493 1494 1495 DataLayer.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 870 1592 DataLayer.codec( "participant", "detail", { 871 1593 … … 937 1659 938 1660 if(!(typeof(evt) == 'object') || (evt.id.indexOf('java') >= 0)) 939 return (null);1661 return (null); 940 1662 941 1663 evt.calendar = evt.calendar || "1"; 942 1664 943 1665 if( !grouped[ evt.calendar ] ) 944 grouped[ evt.calendar ] = [];1666 grouped[ evt.calendar ] = []; 945 1667 946 1668 var calendar = DataLayer.get('calendar', evt.calendar); 947 1669 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 948 1691 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 961 1712 }; 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 } 972 1724 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 } 993 1739 } 1740 1741 var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 1742 1743 var occurrences = []; 994 1744 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; 1003 1749 }else 1004 occurrences[ occurrences.length ] = evt.startTime;1750 occurrences[ occurrences.length ] = evt.startTime; 1005 1751 1006 1752 //occurrences = DataLayer.unique( occurrences ).sort(); 1007 1753 var typeEvent; 1008 1754 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 } 1019 1770 }); 1020 1771 … … 1035 1786 return { 1036 1787 filter: ['AND', 1037 ['OR', 1788 ['OR', 1038 1789 ['AND', 1039 1790 ['>=', 'rangeEnd', filter.start.getTime()], 1040 ['<=', 'rangeEnd', filter.end.getTime()] ,1791 ['<=', 'rangeEnd', filter.end.getTime()] 1041 1792 ], 1042 1793 ['AND', 1043 1794 ['>=', 'rangeStart', filter.start.getTime()], 1044 ['<=', 'rangeStart', filter.end.getTime()] ,1795 ['<=', 'rangeStart', filter.end.getTime()] 1045 1796 ], 1046 1797 ['AND', 1047 1798 ['<=', 'rangeStart', filter.start.getTime()], 1048 ['>=', 'rangeEnd', filter.end.getTime()] ,1799 ['>=', 'rangeEnd', filter.end.getTime()] 1049 1800 ] 1050 1801 ], 1051 ['IN', 'calendar', Calendar.calendarIds]1802 ['IN', 'calendar', $.merge( Calendar.calendarIds, Calendar.groupIds )] 1052 1803 ], 1053 1804 criteria: {
Note: See TracChangeset
for help on using the changeset viewer.