- Timestamp:
- 08/09/12 16:46:57 (11 years ago)
- Location:
- sandbox/2.4.2-expresso1/prototype/modules/calendar
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/2.4.2-expresso1/prototype/modules/calendar/css/style.css
r6974 r6977 582 582 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each:hover { background: #FFF2F2; cursor: pointer;} 583 583 584 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .date-hour { width: 140px; float: left; height: 20px}584 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .date-hour {overflow: hidden; width: 140px; float: left; height: 20px} 585 585 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 586 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .user{ width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; }586 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .user{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 587 587 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .user span{ margin: 8px; float: left; } 588 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .attribute{ width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; }588 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .attribute{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 589 589 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .attribute span{ margin: 8px; float: left; } 590 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .beforeValue{ width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; }590 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .beforeValue{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 591 591 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .beforeValue span{ margin: 8px; float: left; } 592 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .afterValue{ width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; }592 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .afterValue{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 593 593 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .afterValue span{ margin: 8px; float: left; } 594 594 595 595 .div-addtask #calendar_addtask_details8 .parent .child-top .date-hour { width: 140px; float: left; background: #E8F4FD; height: 20px; text-align: center; } 596 .div-addtask #calendar_addtask_details8 .parent .child-top .date-hour span{ margin: 6px 0; position: absolute; font-weight: bold; color: #2E6E9E; }596 .div-addtask #calendar_addtask_details8 .parent .child-top .date-hour span{ display: block; padding: 6px; font-weight: bold; color: #2E6E9E; } 597 597 .div-addtask #calendar_addtask_details8 .parent .child-top .user { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 598 .div-addtask #calendar_addtask_details8 .parent .child-top .user span{ margin: 6px 0; position: absolute;}598 .div-addtask #calendar_addtask_details8 .parent .child-top .user span{display: block; padding: 6px;} 599 599 .div-addtask #calendar_addtask_details8 .parent .child-top .attribute { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 600 .div-addtask #calendar_addtask_details8 .parent .child-top .attribute span{ margin: 6px 0; position: absolute;}600 .div-addtask #calendar_addtask_details8 .parent .child-top .attribute span{display: block; padding: 6px;} 601 601 .div-addtask #calendar_addtask_details8 .parent .child-top .beforeValue { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 602 .div-addtask #calendar_addtask_details8 .parent .child-top .beforeValue span{ margin: 6px 0; position: absolute; }602 .div-addtask #calendar_addtask_details8 .parent .child-top .beforeValue span{display: block; padding: 6px; } 603 603 .div-addtask #calendar_addtask_details8 .parent .child-top .afterValue { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 604 .div-addtask #calendar_addtask_details8 .parent .child-top .afterValue span{ margin: 6px 0; position: absolute; }604 .div-addtask #calendar_addtask_details8 .parent .child-top .afterValue span{display: block; padding: 6px; } 605 605 606 606 /*Atividades*/ … … 641 641 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task { height: 25px; text-align: center; background: #FEFEAD; border-bottom: 1px solid #CCC;} 642 642 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task.left {border-top: 1px solid #CCC;} 643 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task span{ position: absolute; margin-top: 6px;}644 645 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour { width: 140px; float: left; height: 20px}643 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task span{padding: 5px; display: block;} 644 645 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour {overflow: hidden; width: 140px; float: left; height: 20px} 646 646 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 647 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .user{ width: 145px; float: left; height: 20px; border-left: 1px solid #CCC; }647 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .user{overflow: hidden; width: 145px; float: left; height: 20px; border-left: 1px solid #CCC; } 648 648 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .user span{ margin: 8px; float: left; } 649 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .attribute{ width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; }649 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .attribute{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 650 650 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .attribute span{ margin: 8px; float: left; } 651 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .beforeValue{ width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; }651 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .beforeValue{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 652 652 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .beforeValue span{ margin: 8px; float: left; } 653 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .afterValue{ width: 145px; float: left; height: 20px; border-left: 1px solid #CCC; }653 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .afterValue{overflow: hidden; width: 129px; float: left; height: 20px; border-left: 1px solid #CCC; } 654 654 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .afterValue span{ margin: 8px; float: left; } 655 655 656 656 .div-addactivity #group_addactivity_details6 .parent .child-top .date-hour { width: 140px; float: left; background: #E8F4FD; height: 20px; text-align: center; } 657 .div-addactivity #group_addactivity_details6 .parent .child-top .date-hour span{ margin: 6px 0; position: absolute; font-weight: bold; color: #2E6E9E; }657 .div-addactivity #group_addactivity_details6 .parent .child-top .date-hour span{ display: block; padding: 6px; font-weight: bold; color: #2E6E9E; } 658 658 .div-addactivity #group_addactivity_details6 .parent .child-top .user { width: 145px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 659 .div-addactivity #group_addactivity_details6 .parent .child-top .user span{ margin: 6px 0; position: absolute; }659 .div-addactivity #group_addactivity_details6 .parent .child-top .user span{display: block; padding: 6px; } 660 660 .div-addactivity #group_addactivity_details6 .parent .child-top .attribute { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 661 .div-addactivity #group_addactivity_details6 .parent .child-top .attribute span{ margin: 6px 0; position: absolute; }661 .div-addactivity #group_addactivity_details6 .parent .child-top .attribute span{display: block; padding: 6px; } 662 662 .div-addactivity #group_addactivity_details6 .parent .child-top .beforeValue { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 663 .div-addactivity #group_addactivity_details6 .parent .child-top .beforeValue span{ margin: 6px 0; position: absolute; }664 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue { width: 1 45px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;}665 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue span{ margin: 6px 0; position: absolute; }663 .div-addactivity #group_addactivity_details6 .parent .child-top .beforeValue span{display: block; padding: 6px; } 664 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue { width: 129px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 665 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue span{display: block; padding: 6px; } 666 666 667 667 -
sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php
r6974 r6977 498 498 unset($criteria['historic']['due']); 499 499 500 //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada 501 if(isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])){ 502 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'schedulable', $event['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 503 504 if(!empty($taskToActivity)){ 505 $activity = Controller::read(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), array('startTime', 'endTime', 'rangeStart', 'rangeEnd')); 506 $start = $params['startTime']; 507 $end = $params['endTime']; 508 foreach($taskToActivity as $t){ 509 if($t['task']['id'] != $params['id']){ 510 $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 511 $end = $t['task']['endTime'] < $end ? $t['task']['endTime'] : $end; 512 } 513 } 514 515 $toUpdate = array(); 516 517 if($start != $activity['startTime']) 518 $toUpdate['starTime'] = $start; 519 520 if($end != $activity['endTime']) 521 $toUpdate['endTime'] = $end; 522 523 if(!empty($toUpdate)) 524 Controller::update(array('concept' => 'schedulable', 'id' => $activity['id']), $toUpdate); 525 } 526 } 527 500 528 unset($criteria['historic']['rangeEnd']); 501 529 unset($criteria['historic']['rangeStart']); 530 unset($criteria['historic']['class']); 531 unset($criteria['historic']['type']); 532 unset($criteria['historic']['allDay']); 502 533 unset($criteria['historic']['id']); 503 534 } -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/activity.helpers.js
r6974 r6977 11 11 if(!isMail) 12 12 objActivity = DataLayer.encode( "schedulable:activity", objActivity ); 13 14 /** 15 * canDiscardActivityDialog deve ser true se não houver alterações no evento 16 */ 17 canDiscardActivityDialog = true; 18 /** 19 * zebraDiscardActivityDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 20 * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 21 */ 22 zebraDiscardActivityDialog = false; 23 24 var html = DataLayer.render( path+'templates/activity_add.ejs', { 25 activity:objActivity 26 }); 27 28 if (!UI.dialogs.addActivity) { 29 30 UI.dialogs.addActivity = jQuery('#sandbox').append('<div title="Criar Atividade" class="new-activity-win active"> <div>').find('.new-activity-win.active').html(html).dialog({ 31 resizable: false, 32 modal:true, 33 autoOpen: false, 34 width:735, 35 position: 'center', 36 close: function(event, ui) { 37 /** 38 * Remove tooltip possivelmente existente 39 */ 40 if ($('.qtip.qtip-blue.qtip-active').length) 41 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 42 43 attendees = {}; 44 }, 45 beforeClose: function(event, ui) { 46 47 if (!canDiscardActivityDialog && !zebraDiscardActivityDialog) { 48 zebraDiscardActivityDialog = true; 49 window.setTimeout(function() { 50 $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', { 51 'type': 'question', 52 'overlay_opacity': '0.5', 53 'buttons': ['Descartar alterações', 'Continuar editando'], 54 'onClose': function(clicked) { 55 if(clicked == 'Descartar alterações') { 56 canDiscardActivityDialog = true; 57 /** 58 *Remoção dos anexos do eventos caso seja cancelado a edição 59 */ 60 DataLayer.rollback(); 61 62 var ids = false; 63 $.each($('.attachment-list input'), function (i, input) { 64 DataLayer.put('attachment', {id: ''+input.value}); 65 DataLayer.remove('attachment', ''+input.value); 66 ids = true; 67 }); 68 if(ids) 69 DataLayer.commit(); 70 71 UI.dialogs.addActivity.dialog('close'); 72 }else{ 73 zebraDiscardActivityDialog = false; 74 } 75 76 /** 77 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 78 * com ESC, para que o evento ESC não seja propagado para fechamento da 79 * janela de edição de eventos, deve ser setada uma flag indicando que 80 * já existe uma janela de confirmação aberta. 81 */ 82 if (!clicked) { 83 window.setTimeout(function() { 84 zebraDiscardActivityDialog = false; 85 }, 200); 86 } 87 } 88 }); 89 90 }, 300); 91 } 92 //DataLayer.rollback(); 93 return canDiscardActivityDialog; 94 }, 95 dragStart: function(event, ui) { 96 if ($('.qtip.qtip-blue.qtip-active').length) 97 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 98 } 99 }); 100 101 } else { 102 UI.dialogs.addActivity.html(html); 103 } 104 105 /* Checkbox allday */ 106 UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){ 107 $(this).attr("checked") ? 108 UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') : 109 UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden'); 110 }); 111 112 var tabs = UI.dialogs.addActivity.children('.content').tabs({ 113 select: function(event, ui) { 114 if ($('.qtip.qtip-blue.qtip-active').length) 115 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 116 } 117 }); 118 119 var group = DataLayer.get('calendar', objActivity.group); 120 121 if (group.timezone != objActivity.timezone){ 122 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').find('option[value="'+objActivity.timezone+'"]').attr('selected','selected').trigger('change'); 123 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').addClass('hidden'); 124 $('.group-addevent-details-txt-timezone').removeClass('hidden'); 125 126 } 127 128 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').click(function(e){ 129 $(this).addClass('hidden'); 130 $('.group-addactivity-details-txt-timezone').removeClass('hidden'); 131 e.preventDefault(); 132 }); 133 134 UI.dialogs.addActivity.find('.button.remove').button({ 135 text:false, 136 icons:{ 137 primary:'ui-icon-close' 138 } 139 }).click(function(el){ 140 var id; 141 if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 142 DataLayer.remove('alarm', id); 143 $(this).parent().remove().find('li').is(':empty'); 144 }); 145 146 UI.dialogs.addActivity.find('.button-add-alarms').click(function(){ 147 DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){ 148 jQuery('.activity-alarms-list').append(template) 149 .find('li:last label:eq(0)').remove().end() 150 .find('.number').numeric().end() 151 .find('.button.remove').button({ 152 text:false, 153 icons:{ 154 primary:'ui-icon-close' 155 } 156 }).click(function(el) { 157 $(this).parent().remove(); 158 }); 159 }); 160 }); 161 162 /*Seleciona a agenda padrão para visualização/edição de um evento*/ 163 if(objActivity.id) 164 UI.dialogs.addActivity.find('select[name="group"] option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change'); 165 166 UI.dialogs.addActivity.find('.button').button(); 167 UI.dialogs.addActivity.find('.button.add').button({ 168 icons: { 169 secondary: "ui-icon-plus" 170 } 171 }); 172 173 todoStatus('addActivity', (objActivity.activityStatus != undefined) ? objActivity.activityStatus : 1); 174 175 UI.dialogs.addActivity.find('select[name="activityStatus"]').attr('disabled', 'disabled'); 176 177 // ==== validation events ==== 178 UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título"); 179 180 UI.dialogs.addActivity.find(".number").numeric(); 181 182 User.preferences.dateFormat.indexOf('-') > 0 ? 183 UI.dialogs.addActivity.find(".date").mask("99-99-9999", { 184 completed:function(){ 185 updateMap(); 186 } 187 }) : 188 189 UI.dialogs.addActivity.find(".date").mask("99/99/9999", { 190 completed:function(){ 191 updateMap(); 192 } 193 }); 194 195 UI.dialogs.addActivity.find(".menu-addactivity") 196 .children(".delete").click(function(){ 197 $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', { 198 'type': 'question', 199 'overlay_opacity': '0.5', 200 'buttons': ['Sim', 'Não'], 201 'onClose': function(clicked) { 202 if(clicked == 'Sim'){ 203 canDiscardActivityDialog = true; 204 /* Remove por filtro */ 205 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'calendar', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)], ['=', 'type', '2']]}); 206 Calendar.rerenderView(true); 207 /********************/ 208 UI.dialogs.addActivity.dialog("close"); 209 } 210 } 211 }); 212 }).end() 213 214 .children(".cancel").click(function(){ 215 UI.dialogs.addActivity.dialog("close"); 216 }).end() 217 218 .children(".save").click(function(){ 219 /* Validação 220 var msg = false; 221 if(msg = validDateEvent()){ 222 $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 223 return false; 224 } 225 */ 226 UI.dialogs.addActivity.find('select[name="activityStatus"]').removeAttr('disabled'); 227 canDiscardActivityDialog = true; 228 229 UI.dialogs.addActivity.children().find('form.form-addactivity').submit(); 230 UI.dialogs.addActivity.dialog("close"); 231 232 }).end() 233 234 .children(".export").click(function(){ 235 UI.dialogs.addActivity.children().find(".form-export").submit(); 236 }); 237 238 var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', { activity: objActivity}); 239 var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml); 240 241 var dates = UI.dialogs.addActivity.find('input.date').datepicker({ 242 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 243 onSelect : function( selectedDate ){ 244 updateMap(); 245 } 246 }); 247 248 blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) { 249 blkAddTask.find('.add-activity-search input').keydown(); 250 }); 251 252 253 blkAddTask.find('.add-activity-search input').keydown(function(event) { 254 255 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 256 // Fazer get das tarefas 257 var filter = 258 { 259 filter: 260 ['AND', 261 ['=', 'type', '2'], 262 ['>=','startTime', $.now()], 263 ['in', 'calendar', 264 [$('div.new-activity-win.active select[name="groupFilter"]').val()] 265 ] 266 ], criteria: {'filterTasks': true} 267 }; 268 if($(this).val() != ''){ 269 filter['filter'].push(['OR', 270 ["i*", "summary", $(this).val()], 271 ["i*", "description", $(this).val()] 272 ]); 273 } 274 275 var result = DataLayer.get('schedulable:taskSearch', filter, true) 276 /** 277 * TODO: trocar por template 278 */ 279 blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden'); 280 if (!result) { 281 blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 282 }else{ 283 for(i=0; i<result.length; i++) 284 result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' + result[i].id + '"]').length) ? false : true; 285 286 blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result)); 287 288 /* TODO - Verificar id da aitividade*/ 289 blkAddTask.find('ul.search-result-list li').click(function(event, ui){ 290 if ($(event.target).is('input')) { 291 old_item = $(event.target).parents('li'); 292 293 tasks[old_item.find('[name="id"]').val()] = { 294 startDate: old_item.find('[name="taskStartDate"]').val(), 295 startHour: old_item.find('[name="taskStartHour"]').val(), 296 endDate: old_item.find('[name="taskEndDate"]').val(), 297 endHour: old_item.find('[name="taskEndHour"]').val(), 298 dueDate: old_item.find('[name="taskDueDate"]').val(), 299 dueTime: old_item.find('[name="taskDueTime"]').val(), 300 allDay: old_item.find('[name="taskAllDay"]').val(), 301 percentage: old_item.find('[name="taskPercentage"]').val(), 302 status: old_item.find('[name="taskStatus"]').val() 303 }; 304 305 tasks.length += 1; 306 307 blkAddTask.find('dd.task-activity-list ul.task-activity-list') 308 .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 309 idTask: old_item.find('[name="id"]').val(), 310 description: old_item.find('.description').html(), 311 isWrite: false 312 }])) 313 .scrollTo('max'); 314 callbackTask(); 315 registerStatus(); 316 blkAddTask.find('.not-activity').addClass('hidden'); 317 old_item.remove(); 318 } 319 }); 320 } 321 event.preventDefault(); 322 } 323 }); 324 325 /*Carrega as tarefas já existentes em uma atividade*/ 326 if(objActivity.tasks.length){ 327 tasks = objActivity.tasks; 328 329 for(var i in objActivity.tasks){ 330 if(i != 'length') 331 blkAddTask.find('dd.task-activity-list ul.task-activity-list') 332 .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 333 idTask: i, 334 description: tasks[i].description, 335 idTaskToActivity: tasks[i].taskToActivity, 336 isWrite: true 337 }])) 338 .scrollTo('max'); 339 } 340 341 callbackTask(); 342 registerStatus(); 343 blkAddTask.find('.not-activity').addClass('hidden'); 344 } 345 346 UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({ 347 icons: { 348 primary: "ui-icon-close" 349 }, 350 text: 'Excluir' 351 }).click(function () { 352 $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 353 'type': 'question', 354 'overlay_opacity': '0.5', 355 'buttons': ['Sim', 'Não'], 356 'onClose': function(clicked) { 357 if(clicked == 'Sim'){ 358 359 var ids = []; 360 $.each($('.attachment-list input'), function (i, input) { 361 DataLayer.remove('schedulableToAttachment', { 362 filter: ['=', 'id', ''+input.value] 363 }); 364 }); 365 $('.attachment-list input').remove(); 366 $('.row.fileupload-buttonbar-activity .attachments-list p').remove(); 367 } 368 }}); 369 }).end() 370 .filter('.close').button({ 371 icons: { 372 primary: "ui-icon-close" 373 }, 374 text: false 375 }).click(function () { 376 DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 377 $(this).parents('p').remove(); 378 }).end() 379 .filter('.downlaod-archive').button({ 380 icons: { 381 primary: "ui-icon-arrowthickstop-1-s" 382 }, 383 text: false 384 }); 385 var maxSizeFile = 2000000; 386 $('#fileuploadactivity').fileupload({ 387 sequentialUploads: true, 388 add: function (e, data) { 389 if(data.files[0].size < maxSizeFile) 390 data.submit(); 391 }, 392 change: function (e, data) { 393 $.each(data.files, function (index, file) { 394 var attach = {}; 395 attach.fileName = file.name; 396 var ext = file.name.split('.'); 397 if(file.name.length > 10) 398 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1]; 399 attach.fileSize = formatBytes(file.size); 400 if(file.size > maxSizeFile) 401 attach.error = 'Tamanho de arquivo nao permitido!!' 402 403 $('div.new-activity-win .attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 404 file : attach 405 })); 406 407 if(file.size < maxSizeFile){ 408 $('div.new-activity-win .fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 409 $('div.new-activity-win .attachments-list').find('[type=file]').addClass('hidden'); 410 411 }else 412 $('div.new-activity-win .fileinput-button.new').removeClass('new'); 413 414 415 $('div.new-activity-win .attachments-list').find('.button.close').button({ 416 icons: { 417 primary: "ui-icon-close" 418 }, 419 text: false 420 }).click(function(){ 421 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 422 $('.attachment-list').find('input[value="'+idAttach+'"]') 423 $(this).parent().remove(); 424 }); 425 426 }) 427 }, 428 done: function(e, data){ 429 var currentUpload = $('div.new-activity-win .progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 430 431 if(!!data.result && data.result != "[]"){ 432 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 433 $('div.new-activity-win .attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 434 currentUpload.removeClass('on-complete').parents('p') 435 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 436 .find('.status-upload').addClass('ui-icon ui-icon-check'); 437 }else 438 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 439 } 440 }); 441 $('.attachments-list .button').button(); 442 443 if(!!window.FormData) 444 $('#fileuploadactivity').bind('fileuploadstart', function () { 445 var widget = $(this), 446 progressElement = $('#fileupload-progress-activity').fadeIn(), 447 interval = 500, 448 total = 0, 449 loaded = 0, 450 loadedBefore = 0, 451 progressTimer, 452 progressHandler = function (e, data) { 453 loaded = data.loaded; 454 total = data.total; 455 }, 456 stopHandler = function () { 457 widget 458 .unbind('fileuploadprogressall', progressHandler) 459 .unbind('fileuploadstop', stopHandler); 460 window.clearInterval(progressTimer); 461 progressElement.fadeOut(function () { 462 progressElement.html(''); 463 }); 464 }, 465 formatTime = function (seconds) { 466 var date = new Date(seconds * 1000); 467 return ('0' + date.getUTCHours()).slice(-2) + ':' + 468 ('0' + date.getUTCMinutes()).slice(-2) + ':' + 469 ('0' + date.getUTCSeconds()).slice(-2); 470 }, 471 /* formatBytes = function (bytes) { 472 if (bytes >= 1000000000) { 473 return (bytes / 1000000000).toFixed(2) + ' GB'; 474 } 475 if (bytes >= 1000000) { 476 return (bytes / 1000000).toFixed(2) + ' MB'; 477 } 478 if (bytes >= 1000) { 479 return (bytes / 1000).toFixed(2) + ' KB'; 480 } 481 return bytes + ' B'; 482 },*/ 483 formatPercentage = function (floatValue) { 484 return (floatValue * 100).toFixed(2) + ' %'; 485 }, 486 updateProgressElement = function (loaded, total, bps) { 487 progressElement.html( 488 formatBytes(bps) + 'ps | ' + 489 formatTime((total - loaded) / bps) + ' | ' + 490 formatPercentage(loaded / total) + ' | ' + 491 formatBytes(loaded) + ' / ' + formatBytes(total) 492 ); 493 }, 494 intervalHandler = function () { 495 var diff = loaded - loadedBefore; 496 if (!diff) { 497 return; 498 } 499 loadedBefore = loaded; 500 updateProgressElement( 501 loaded, 502 total, 503 diff * (1000 / interval) 504 ); 505 }; 506 widget 507 .bind('fileuploadprogressall', progressHandler) 508 .bind('fileuploadstop', stopHandler); 509 progressTimer = window.setInterval(intervalHandler, interval); 510 }); 511 512 UI.dialogs.addActivity.find(':input').change(function(event){ 513 if (event.keyCode != '27' && event.keyCode != '13') 514 canDiscardActivityDialog = false; 515 }).keydown(function(event){ 516 if (event.keyCode != '27' && event.keyCode != '13') 517 canDiscardActivityDialog = false; 518 }); 519 520 UI.dialogs.addActivity.dialog('open'); 521 } 522 523 function refreshTaskActivity(){ 524 updateActivity = false; 525 526 var objActivity = DataLayer.get('schedulable:activity', UI.dialogs.addActivity.find('input[name="idActivity"]').val()); 527 var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8'); 528 var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1'); 13 529 14 var registerStatus = function(){ 15 var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1'); 16 17 var startDate = false; 18 var endDate = new Date; 19 var dueDate = new Date; 20 var percentage = 0; 21 var statusTasks = {1: 0, 2: 0, 3: 0, 4: 0}; 22 23 var allDay = true; 24 25 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 26 27 if(tasks.length == 0){ 28 29 startDate = new Date(); 30 var configData = (startDate.toString('mm') < 30) ? {minutes: (30 - parseInt(startDate.toString('mm')))} : {hours: 1, minutes: '-'+startDate.toString('mm')}; 31 startDate.add(configData); 32 33 endDate = new Date(dateCalendar.decodeRange(startDate, (!!User.preferences.defaultCalendar ? ( !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))); 34 35 blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 36 blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 37 38 blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 39 blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 40 41 blkAuto.find('input[name="dueDate"]').val(''); 42 blkAuto.find('input[name="dueHour"]').val(''); 43 44 blkAuto.find('input[name="percentage"]').val(percentage); 45 46 todoStatus('addActivity', 1); 47 48 UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+1+'"]').attr('selected','selected'); 49 50 blkAuto.find('input[name="allDay"]').attr('checked', false); 51 52 return true; 53 } 54 55 for (var i in tasks){ 56 57 if(i == 'length') 58 continue; 59 60 statusTasks[tasks[i].status]++; 61 62 stTime = Date.parseExact( tasks[i].startDate + " "+$.trim( tasks[i].startHour) , formatString); 63 enTime = Date.parseExact( tasks[i].endDate + " "+$.trim( tasks[i].endHour), formatString ); 64 65 startDate = (startDate && startDate.compareTo(stTime) == -1) ? startDate : stTime; 66 endDate = endDate.compareTo(enTime) == -1 ? enTime : endDate; 67 68 if(tasks[i].dueDate != ''){ 69 pvTime = Date.parseExact( tasks[i].dueDate + " "+$.trim( tasks[i].dueTime), formatString ); 70 dueDate = dueDate.compareTo(pvTime) == -1 ? pvTime : dueDate; 71 } 72 73 if(parseInt(tasks[i].percentage) > 0) 74 percentage += parseInt((100 / tasks.length)) * ( parseInt(tasks[i].percentage) / 100); 75 } 76 var statusActivity = 1; 77 78 if(statusTasks[4] != 0) 79 statusActivity = 4; 80 else if(statusTasks[2] != 0) 81 statusActivity = 2; 82 else if(statusTasks[3] == tasks.length) 83 statusActivity = 3; 84 else if(statusTasks[1] == tasks.length) 85 statusActivity = 1; 86 else 87 statusActivity = 2; 88 89 todoStatus('addActivity', statusActivity); 90 91 UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+statusActivity+'"]').attr('selected','selected'); 92 93 dueDate = dueDate.compareTo(endDate) == -1 ? endDate : dueDate; 94 95 blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 96 blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 97 98 blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 99 blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 100 101 blkAuto.find('input[name="dueDate"]').val(dueDate.toString(User.preferences.dateFormat )); 102 blkAuto.find('input[name="dueHour"]').val(dueDate.toString(User.preferences.hourFormat )); 103 104 blkAuto.find('input[name="percentage"]').val(percentage); 105 106 blkAuto.find('input[name="allDay"]').attr('checked', (!!(startDate.compareTo(endDate) == 0) || (startDate.toString('HH:mm') == endDate.toString('HH:mm')) ? true : false)); 107 } 108 109 110 var callbackTask = function(){ 530 tasks = objActivity.tasks; 531 blkAddTask.find('dd.task-activity-list ul.task-activity-list').html(''); 532 533 for(var i in tasks) 534 DataLayer.remove('schedulable', i, false); 535 536 for(var i in objActivity.tasks){ 537 if(i != 'length') 538 blkAddTask.find('dd.task-activity-list ul.task-activity-list') 539 .append(DataLayer.render('templates/task_add_itemlist.ejs', [{ 540 idTask: i, 541 description: tasks[i].description, 542 idTaskToActivity: tasks[i].taskToActivity, 543 isWrite: true 544 }])) 545 .scrollTo('max'); 546 } 547 548 callbackTask(blkAddTask); 549 registerStatus(blkAuto); 550 } 551 552 function registerStatus(blkAuto){ 553 if(!blkAuto) 554 blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1'); 555 556 var startDate = false; 557 var endDate = new Date; 558 var dueDate = new Date; 559 var percentage = 0; 560 var statusTasks = {1: 0, 2: 0, 3: 0, 4: 0}; 561 var allDay = true; 562 563 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 564 565 if(tasks.length == 0){ 566 567 startDate = new Date(); 568 var configData = (startDate.toString('mm') < 30) ? {minutes: (30 - parseInt(startDate.toString('mm')))} : {hours: 1, minutes: '-'+startDate.toString('mm')}; 569 startDate.add(configData); 570 571 endDate = new Date(dateCalendar.decodeRange(startDate, (!!User.preferences.defaultCalendar ? ( !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))); 572 573 blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 574 blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 575 576 blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 577 blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 578 579 blkAuto.find('input[name="dueDate"]').val(''); 580 blkAuto.find('input[name="dueHour"]').val(''); 581 582 blkAuto.find('input[name="percentage"]').val(percentage); 583 584 todoStatus('addActivity', 1); 585 586 UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+1+'"]').attr('selected','selected'); 587 588 blkAuto.find('input[name="allDay"]').attr('checked', false); 589 590 return true; 591 } 592 593 for (var i in tasks){ 594 595 if(i == 'length') 596 continue; 597 598 statusTasks[tasks[i].status]++; 599 600 var stTime = Date.parseExact( tasks[i].startDate + " "+$.trim( tasks[i].startHour) , formatString); 601 var enTime = Date.parseExact( tasks[i].endDate + " "+$.trim( tasks[i].endHour), formatString ); 602 603 startDate = (startDate && startDate.compareTo(stTime) == -1) ? startDate : stTime; 604 endDate = endDate.compareTo(enTime) == -1 ? enTime : endDate; 605 606 if(tasks[i].dueDate != ''){ 607 var pvTime = Date.parseExact( tasks[i].dueDate + " "+$.trim( tasks[i].dueTime), formatString ); 608 dueDate = dueDate.compareTo(pvTime) == -1 ? pvTime : dueDate; 609 } 610 611 if(parseInt(tasks[i].percentage) > 0) 612 percentage += parseInt(parseInt((100 / tasks.length)) * ( parseInt(tasks[i].percentage) / 100)); 613 } 614 var statusActivity = 1; 615 616 if(statusTasks[4] != 0) 617 statusActivity = 4; 618 else if(statusTasks[2] != 0) 619 statusActivity = 2; 620 else if(statusTasks[3] == tasks.length) 621 statusActivity = 3; 622 else if(statusTasks[1] == tasks.length) 623 statusActivity = 1; 624 else 625 statusActivity = 2; 626 627 todoStatus('addActivity', statusActivity); 628 629 UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+statusActivity+'"]').attr('selected','selected'); 630 631 dueDate = dueDate.compareTo(endDate) == -1 ? endDate : dueDate; 632 633 blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 634 blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 635 636 blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 637 blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 638 639 blkAuto.find('input[name="dueDate"]').val(dueDate.toString(User.preferences.dateFormat )); 640 blkAuto.find('input[name="dueHour"]').val(dueDate.toString(User.preferences.hourFormat )); 641 642 blkAuto.find('input[name="percentage"]').val(percentage); 643 644 blkAuto.find('input[name="allDay"]').attr('checked', (!!(startDate.compareTo(endDate) == 0) || (startDate.toString('HH:mm') == endDate.toString('HH:mm')) ? true : false)); 645 } 646 647 function callbackTask(blkAddTask){ 648 if(!blkAddTask) 649 blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8'); 111 650 112 651 blkAddTask.find("li .button").filter(".close.new").button({ … … 211 750 }) 212 751 .addClass('tiny disable ui-button-disabled ui-state-disabled') 213 .removeClass('new').end() 752 .removeClass('new').end() 753 .filter(".edit.new").button({ 754 icons: { 755 primary: "ui-icon-pencil" 756 }, 757 text: false 758 }).click(function () { 759 var task = DataLayer.get('schedulable:task', $(this).parents('li').find('input[name="idtask[]"]').val()); 760 taskDetails(task, true, '',true, null, true); 761 }) 762 .addClass('tiny disable ui-button-disabled ui-state-disabled') 763 .removeClass('new').end() 214 764 215 765 UI.dialogs.addActivity.find('.task-activity-list li').hover( … … 226 776 ); 227 777 } 228 229 230 /**231 * canDiscardActivityDialog deve ser true se não houver alterações no evento232 */233 canDiscardActivityDialog = true;234 /**235 * zebraDiscardActivityDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog)236 * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la237 */238 zebraDiscardActivityDialog = false;239 240 var html = DataLayer.render( path+'templates/activity_add.ejs', {241 activity:objActivity242 });243 244 if (!UI.dialogs.addActivity) {245 246 UI.dialogs.addActivity = jQuery('#sandbox').append('<div title="Criar Atividade" class="new-activity-win active"> <div>').find('.new-activity-win.active').html(html).dialog({247 resizable: false,248 modal:true,249 autoOpen: false,250 width:735,251 position: 'center',252 close: function(event, ui) {253 /**254 * Remove tooltip possivelmente existente255 */256 if ($('.qtip.qtip-blue.qtip-active').length)257 $('.qtip.qtip-blue.qtip-active').qtip('destroy');258 259 attendees = {};260 },261 beforeClose: function(event, ui) {262 263 if (!canDiscardActivityDialog && !zebraDiscardActivityDialog) {264 zebraDiscardActivityDialog = true;265 window.setTimeout(function() {266 $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', {267 'type': 'question',268 'overlay_opacity': '0.5',269 'buttons': ['Descartar alterações', 'Continuar editando'],270 'onClose': function(clicked) {271 if(clicked == 'Descartar alterações') {272 canDiscardActivityDialog = true;273 /**274 *Remoção dos anexos do eventos caso seja cancelado a edição275 */276 DataLayer.rollback();277 278 var ids = false;279 $.each($('.attachment-list input'), function (i, input) {280 DataLayer.put('attachment', {id: ''+input.value});281 DataLayer.remove('attachment', ''+input.value);282 ids = true;283 });284 if(ids)285 DataLayer.commit();286 287 UI.dialogs.addActivity.dialog('close');288 }else{289 zebraDiscardActivityDialog = false;290 }291 292 /**293 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la294 * com ESC, para que o evento ESC não seja propagado para fechamento da295 * janela de edição de eventos, deve ser setada uma flag indicando que296 * já existe uma janela de confirmação aberta.297 */298 if (!clicked) {299 window.setTimeout(function() {300 zebraDiscardActivityDialog = false;301 }, 200);302 }303 }304 });305 306 }, 300);307 }308 //DataLayer.rollback();309 return canDiscardActivityDialog;310 },311 dragStart: function(event, ui) {312 if ($('.qtip.qtip-blue.qtip-active').length)313 $('.qtip.qtip-blue.qtip-active').qtip('destroy');314 }315 });316 317 } else {318 UI.dialogs.addActivity.html(html);319 }320 321 /* Checkbox allday */322 UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){323 $(this).attr("checked") ?324 UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') :325 UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden');326 });327 328 var tabs = UI.dialogs.addActivity.children('.content').tabs({329 select: function(event, ui) {330 if ($('.qtip.qtip-blue.qtip-active').length)331 $('.qtip.qtip-blue.qtip-active').qtip('destroy');332 }333 });334 335 var group = DataLayer.get('calendar', objActivity.group);336 337 if (group.timezone != objActivity.timezone){338 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').find('option[value="'+objActivity.timezone+'"]').attr('selected','selected').trigger('change');339 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').addClass('hidden');340 $('.group-addevent-details-txt-timezone').removeClass('hidden');341 342 }343 344 UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').click(function(e){345 $(this).addClass('hidden');346 $('.group-addactivity-details-txt-timezone').removeClass('hidden');347 e.preventDefault();348 });349 350 UI.dialogs.addActivity.find('.button.remove').button({351 text:false,352 icons:{353 primary:'ui-icon-close'354 }355 }).click(function(el){356 var id;357 if( id = $(this).parent().find('input[name="alarmId[]"]').val())358 DataLayer.remove('alarm', id);359 $(this).parent().remove().find('li').is(':empty');360 });361 362 UI.dialogs.addActivity.find('.button-add-alarms').click(function(){363 DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){364 jQuery('.activity-alarms-list').append(template)365 .find('li:last label:eq(0)').remove().end()366 .find('.number').numeric().end()367 .find('.button.remove').button({368 text:false,369 icons:{370 primary:'ui-icon-close'371 }372 }).click(function(el) {373 $(this).parent().remove();374 });375 });376 });377 378 /*Seleciona a agenda padrão para visualização/edição de um evento*/379 if(objActivity.id)380 UI.dialogs.addActivity.find('select[name="group"] option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change');381 382 UI.dialogs.addActivity.find('.button').button();383 UI.dialogs.addActivity.find('.button.add').button({384 icons: {385 secondary: "ui-icon-plus"386 }387 });388 389 todoStatus('addActivity', (objActivity.activityStatus != undefined) ? objActivity.activityStatus : 1);390 391 UI.dialogs.addActivity.find('select[name="activityStatus"]').attr('disabled', 'disabled');392 393 // ==== validation events ====394 UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título");395 396 UI.dialogs.addActivity.find(".number").numeric();397 398 User.preferences.dateFormat.indexOf('-') > 0 ?399 UI.dialogs.addActivity.find(".date").mask("99-99-9999", {400 completed:function(){401 updateMap();402 }403 }) :404 405 UI.dialogs.addActivity.find(".date").mask("99/99/9999", {406 completed:function(){407 updateMap();408 }409 });410 411 UI.dialogs.addActivity.find(".menu-addactivity")412 .children(".delete").click(function(){413 $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', {414 'type': 'question',415 'overlay_opacity': '0.5',416 'buttons': ['Sim', 'Não'],417 'onClose': function(clicked) {418 if(clicked == 'Sim'){419 canDiscardActivityDialog = true;420 /* Remove por filtro */421 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'calendar', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)], ['=', 'type', '2']]});422 Calendar.rerenderView(true);423 /********************/424 UI.dialogs.addActivity.dialog("close");425 }426 }427 });428 }).end()429 430 .children(".cancel").click(function(){431 UI.dialogs.addActivity.dialog("close");432 }).end()433 434 .children(".save").click(function(){435 /* Validação436 var msg = false;437 if(msg = validDateEvent()){438 $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);439 return false;440 }441 */442 UI.dialogs.addActivity.find('select[name="activityStatus"]').removeAttr('disabled');443 canDiscardActivityDialog = true;444 445 UI.dialogs.addActivity.children().find('form.form-addactivity').submit();446 UI.dialogs.addActivity.dialog("close");447 448 }).end()449 450 .children(".export").click(function(){451 UI.dialogs.addActivity.children().find(".form-export").submit();452 });453 454 var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', { activity: objActivity});455 var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml);456 457 var dates = UI.dialogs.addActivity.find('input.date').datepicker({458 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),459 onSelect : function( selectedDate ){460 updateMap();461 }462 });463 464 blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) {465 blkAddTask.find('.add-activity-search input').keydown();466 });467 468 469 blkAddTask.find('.add-activity-search input').keydown(function(event) {470 471 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {472 // Fazer get das tarefas473 var filter =474 {475 filter:476 ['AND',477 ['=', 'type', '2'],478 ['>=','startTime', $.now()],479 ['in', 'calendar',480 [$('div.new-activity-win.active select[name="groupFilter"]').val()]481 ]482 ], criteria: {'filterTasks': true}483 };484 if($(this).val() != ''){485 filter['filter'].push(['OR',486 ["i*", "summary", $(this).val()],487 ["i*", "description", $(this).val()]488 ]);489 }490 491 var result = DataLayer.get('schedulable:taskSearch', filter, true)492 /**493 * TODO: trocar por template494 */495 blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden');496 if (!result) {497 blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');498 }else{499 for(i=0; i<result.length; i++)500 result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' + result[i].id + '"]').length) ? false : true;501 502 blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result));503 504 /* TODO - Verificar id da aitividade*/505 blkAddTask.find('ul.search-result-list li').click(function(event, ui){506 if ($(event.target).is('input')) {507 old_item = $(event.target).parents('li');508 509 tasks[old_item.find('[name="id"]').val()] = {510 startDate: old_item.find('[name="taskStartDate"]').val(),511 startHour: old_item.find('[name="taskStartHour"]').val(),512 endDate: old_item.find('[name="taskEndDate"]').val(),513 endHour: old_item.find('[name="taskEndHour"]').val(),514 dueDate: old_item.find('[name="taskDueDate"]').val(),515 dueTime: old_item.find('[name="taskDueTime"]').val(),516 allDay: old_item.find('[name="taskAllDay"]').val(),517 percentage: old_item.find('[name="taskPercentage"]').val(),518 status: old_item.find('[name="taskStatus"]').val()519 };520 521 tasks.length += 1;522 523 blkAddTask.find('dd.task-activity-list ul.task-activity-list')524 .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{525 idTask: old_item.find('[name="id"]').val(),526 description: old_item.find('.description').html()527 }]))528 .scrollTo('max');529 callbackTask();530 registerStatus();531 blkAddTask.find('.not-activity').addClass('hidden');532 old_item.remove();533 }534 });535 }536 event.preventDefault();537 }538 });539 540 /*Carrega as tarefas já existentes em uma atividade*/541 if(objActivity.tasks.length){542 tasks = objActivity.tasks;543 544 for(var i in objActivity.tasks){545 if(i != 'length')546 blkAddTask.find('dd.task-activity-list ul.task-activity-list')547 .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{548 idTask: i,549 description: tasks[i].description,550 idTaskToActivity: tasks[i].taskToActivity551 }]))552 .scrollTo('max');553 }554 555 callbackTask();556 registerStatus();557 blkAddTask.find('.not-activity').addClass('hidden');558 }559 560 UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({561 icons: {562 primary: "ui-icon-close"563 },564 text: 'Excluir'565 }).click(function () {566 $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {567 'type': 'question',568 'overlay_opacity': '0.5',569 'buttons': ['Sim', 'Não'],570 'onClose': function(clicked) {571 if(clicked == 'Sim'){572 573 var ids = [];574 $.each($('.attachment-list input'), function (i, input) {575 DataLayer.remove('schedulableToAttachment', {576 filter: ['=', 'id', ''+input.value]577 });578 });579 $('.attachment-list input').remove();580 $('.row.fileupload-buttonbar-activity .attachments-list p').remove();581 }582 }});583 }).end()584 .filter('.close').button({585 icons: {586 primary: "ui-icon-close"587 },588 text: false589 }).click(function () {590 DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());591 $(this).parents('p').remove();592 }).end()593 .filter('.downlaod-archive').button({594 icons: {595 primary: "ui-icon-arrowthickstop-1-s"596 },597 text: false598 });599 var maxSizeFile = 2000000;600 $('#fileuploadactivity').fileupload({601 sequentialUploads: true,602 add: function (e, data) {603 if(data.files[0].size < maxSizeFile)604 data.submit();605 },606 change: function (e, data) {607 $.each(data.files, function (index, file) {608 var attach = {};609 attach.fileName = file.name;610 var ext = file.name.split('.');611 if(file.name.length > 10)612 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1];613 attach.fileSize = formatBytes(file.size);614 if(file.size > maxSizeFile)615 attach.error = 'Tamanho de arquivo nao permitido!!'616 617 $('div.new-activity-win .attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {618 file : attach619 }));620 621 if(file.size < maxSizeFile){622 $('div.new-activity-win .fileinput-button.new').append(data.fileInput[0]).removeClass('new');623 $('div.new-activity-win .attachments-list').find('[type=file]').addClass('hidden');624 625 }else626 $('div.new-activity-win .fileinput-button.new').removeClass('new');627 628 629 $('div.new-activity-win .attachments-list').find('.button.close').button({630 icons: {631 primary: "ui-icon-close"632 },633 text: false634 }).click(function(){635 var idAttach = $(this).parent().find('input[name="fileId[]"]').val();636 $('.attachment-list').find('input[value="'+idAttach+'"]')637 $(this).parent().remove();638 });639 640 })641 },642 done: function(e, data){643 var currentUpload = $('div.new-activity-win .progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide();644 645 if(!!data.result && data.result != "[]"){646 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data);647 $('div.new-activity-win .attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>');648 currentUpload.removeClass('on-complete').parents('p')649 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>')650 .find('.status-upload').addClass('ui-icon ui-icon-check');651 }else652 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel');653 }654 });655 $('.attachments-list .button').button();656 657 if(!!window.FormData)658 $('#fileuploadactivity').bind('fileuploadstart', function () {659 var widget = $(this),660 progressElement = $('#fileupload-progress-activity').fadeIn(),661 interval = 500,662 total = 0,663 loaded = 0,664 loadedBefore = 0,665 progressTimer,666 progressHandler = function (e, data) {667 loaded = data.loaded;668 total = data.total;669 },670 stopHandler = function () {671 widget672 .unbind('fileuploadprogressall', progressHandler)673 .unbind('fileuploadstop', stopHandler);674 window.clearInterval(progressTimer);675 progressElement.fadeOut(function () {676 progressElement.html('');677 });678 },679 formatTime = function (seconds) {680 var date = new Date(seconds * 1000);681 return ('0' + date.getUTCHours()).slice(-2) + ':' +682 ('0' + date.getUTCMinutes()).slice(-2) + ':' +683 ('0' + date.getUTCSeconds()).slice(-2);684 },685 /* formatBytes = function (bytes) {686 if (bytes >= 1000000000) {687 return (bytes / 1000000000).toFixed(2) + ' GB';688 }689 if (bytes >= 1000000) {690 return (bytes / 1000000).toFixed(2) + ' MB';691 }692 if (bytes >= 1000) {693 return (bytes / 1000).toFixed(2) + ' KB';694 }695 return bytes + ' B';696 },*/697 formatPercentage = function (floatValue) {698 return (floatValue * 100).toFixed(2) + ' %';699 },700 updateProgressElement = function (loaded, total, bps) {701 progressElement.html(702 formatBytes(bps) + 'ps | ' +703 formatTime((total - loaded) / bps) + ' | ' +704 formatPercentage(loaded / total) + ' | ' +705 formatBytes(loaded) + ' / ' + formatBytes(total)706 );707 },708 intervalHandler = function () {709 var diff = loaded - loadedBefore;710 if (!diff) {711 return;712 }713 loadedBefore = loaded;714 updateProgressElement(715 loaded,716 total,717 diff * (1000 / interval)718 );719 };720 widget721 .bind('fileuploadprogressall', progressHandler)722 .bind('fileuploadstop', stopHandler);723 progressTimer = window.setInterval(intervalHandler, interval);724 });725 726 UI.dialogs.addActivity.find(':input').change(function(event){727 if (event.keyCode != '27' && event.keyCode != '13')728 canDiscardActivityDialog = false;729 }).keydown(function(event){730 if (event.keyCode != '27' && event.keyCode != '13')731 canDiscardActivityDialog = false;732 });733 734 UI.dialogs.addActivity.dialog('open');735 } -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js
r6974 r6977 32 32 } 33 33 } 34 35 updateActivity = false; 34 36 35 37 constantsParticipant = { … … 196 198 DataLayer.commit( false, false, function(){ 197 199 Calendar.rerenderView(true); 200 if(updateActivity) 201 refreshTaskActivity(); 198 202 }); 199 203 } -
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js
r6974 r6977 99 99 } 100 100 101 function taskDetails(objTask, decoded, path, isMail, repeat ) {101 function taskDetails(objTask, decoded, path, isMail, repeat, isActivityView) { 102 102 103 103 $('.qtip.qtip-blue').remove(); … … 278 278 canDiscardTaskDialog = true; 279 279 /** 280 *Remoção dos anexos da task caso seja cancelado a edição o280 *Remoção dos anexos da task caso seja cancelado a edição 281 281 */ 282 282 DataLayer.rollback(); … … 487 487 UI.dialogs.addTask.find('input[name="summary"]').focus(); 488 488 489 489 if (msg = validDateTask()) { 490 490 $(".new-task-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 491 491 return false; 492 492 } 493 canDiscardTaskDialog = true; 493 canDiscardTaskDialog = true; 494 495 if(isActivityView) 496 updateActivity = true; 494 497 495 498 UI.dialogs.addTask.children().find('form.form-addtask').submit(); -
sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add_itemlist.ejs
r6974 r6977 2 2 <div style="overflow:hidden; width:100%; display:table;"> 3 3 <div class="activity-options" style="float: right; margin: 0 10px 0 0;"> 4 <a class="button info activity-options-button-edit new ui-icon-notice">Informações</a> 4 <%if(data[0].isWrite){%> 5 <a class="button edit activity-options-button-edit new ui-icon-pencil">Editar</a> 6 <%}%> 7 <a class="button info activity-options-button-notice new ui-icon-notice">Informações</a> 5 8 <a class="button close new">Remover</a> 6 9 </div>
Note: See TracChangeset
for help on using the changeset viewer.