Ignore:
Timestamp:
08/06/12 10:03:03 (12 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Criacao de atividades com suporte a alarmes e anexos

Location:
sandbox/2.4.2-expresso1
Files:
1 added
17 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.2-expresso1/expressoCalendar/setup/setup.inc.php

    r6797 r6945  
    3333        $setup_info['expressoCalendar']['tables'][]             =  'calendar_permission'; 
    3434        $setup_info['expressoCalendar']['tables'][]             =  'module_preference'; 
    35         $setup_info['expressoCalendar']['tables'][]             =  'calendar_repeat_ranges'; 
     35    $setup_info['expressoCalendar']['tables'][]     =  'calendar_repeat_ranges'; 
     36        $setup_info['expressoCalendar']['tables'][]             =  'calendar_task_to_activity_object'; 
    3637 
    3738        $setup_info['expressoCalendar']['enable']               = 1; 
  • sandbox/2.4.2-expresso1/expressoCalendar/setup/tables_current.inc.php

    r6876 r6945  
    101101            'uc' => array() 
    102102                ), 
     103 
     104       'calendar_task_to_activity_object' => array( 
     105            'fd' => array( 
     106                'id' => array( 'type' => 'auto', 'nullable' => False), 
     107                'calendar_object_activity_id' => array(  'type' => 'int', 'precision' => '8', 'nullable' => False), 
     108                'calendar_object_task_id' => array(  'type' => 'int', 'precision' => '8', 'nullable' => False), 
     109                'owner' => array(  'type' => 'int', 'precision' => '8', 'nullable' => False), 
     110            ), 
     111            'pk' => array('id'), 
     112            'fk' => array(), 
     113            'ix' => array(), 
     114            'uc' => array() 
     115        ), 
    103116             
    104117             
  • sandbox/2.4.2-expresso1/expressoCalendar/setup/tables_update.inc.php

    r6876 r6945  
    135135        $oProc->query("INSERT INTO calendar_object_type(id, name) VALUES ('2', 'TODO');"); 
    136136 
     137        $oProc->query("CREATE TABLE calendar_task_to_activity_object(id serial not null, calendar_object_activity_id integer not null, calendar_object_task_id integer not null, owner integer not null);"); 
     138 
    137139        $GLOBALS['setup_info']['expressoCalendar']['currentver'] = '1.008'; 
    138140        return $GLOBALS['setup_info']['expressoCalendar']['currentver']; 
  • sandbox/2.4.2-expresso1/prototype/config/schedulable.ini

    r6876 r6945  
    55participants = participant.schedulable 
    66attachments = schedulableToAttachment.schedulable 
     7taskToActivity = taskToActivity.activity 
    78         
    89[model.hasOne] 
     
    1415[after.create] 
    1516createCalendarToSchedulable = modules/calendar/interceptors/DBMapping.php 
     17;createTasksToActivity = modules/calendar/interceptors/DBMapping.php 
    1618 
    1719[before.find] 
    1820findSchedulable = modules/calendar/interceptors/DBMapping.php 
     21findTask = modules/calendar/interceptors/DBMapping.php 
    1922 
    2023[after.find] 
     
    2528encodeUpdateSchedulable = modules/calendar/interceptors/DBMapping.php 
    2629updateEvent = modules/calendar/interceptors/Notifications.php 
    27  
    2830 
    2931[after.update] 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/css/layout.css

    r6881 r6945  
    264264#calendar_addactivity_details8 .block-attendee-list, #calendar_addactivity_details8 .block-activity-list { width:430px; margin-right: 5px; } 
    265265 
    266 .block-attendee-list, .block-activity-list, .block-add-activity { float:left;} 
     266.block-activity-list, .block-activity-group-select{width: 405px} 
     267.block-add-activity.search{width: 298px} 
     268 
     269.block-attendee-list, .block-activity-list, .block-add-activity, .block-activity-group-select { float:left;} 
    267270.block-attendee-list { width:400px; margin-right: 5px; } 
    268271.new-event-win .block-add-attendee { width:260px; margin-right: 5px; } 
    269272.new-task-win .block-add-attendee { width:335px; margin-right: 5px; } 
    270 .block-attendee-list dd, .block-add-attendee dd, .block-activity-list dd, .block-add-activity dd { border: 1px solid #BFBFBF; } 
    271 .block-attendee-list dt, .block-add-attendee dt,.block-activity-list dt, .block-add-activity dt { background-color:#FFF; margin: 5px 0 -6px 5px; font-weight: bold; display: table;  position: relative; display: table;} 
     273.block-attendee-list dd, .block-add-attendee dd, .block-activity-list dd, .block-add-activity dd, .block-activity-group-select dd { border: 1px solid #BFBFBF; } 
     274.block-attendee-list dt, .block-add-attendee dt,.block-activity-list dt, .block-add-activity dt, .block-activity-group-select dt { background-color:#FFF; margin: 5px 0 -6px 5px; font-weight: bold; display: table;  position: relative; display: table;} 
    272275.block-attendee-list dd.attendee-list { height: 196px; } 
    273276.block-attendee-list dd.attendee-list ul, .block-activity-list dd.task-activity-list ul { max-height: 186px; overflow: auto; margin-top: 10px;} 
     
    276279.block-attendee-list dd.attendee-list-brief, .block-activity-list dd.activity-list-brief { border:none !important; margin: 5px 0; color:#777; } 
    277280#calendar_addactivity_details8 .block-attendee-list, #calendar_addactivity_details8 .block-activity-list { width:430px; margin-right: 5px; } 
    278 .block-activity-list dd.task-activity-list { height: 292px; } 
     281 
     282/* Pesquisa de tarefas */ 
     283.block-activity-group-select dd.task-activity-list { height: 181px; } 
     284.block-activity-group-select dd.group-select { height: 40px; } 
     285 
     286fieldset.block-add-activity ul.search-result-list li{ width: 9999px; } 
     287fieldset.block-add-activity ul.search-result-list{width: 290px;} 
     288 
     289fieldset.block-add-activity fieldset.add-activity-search{max-width: 320px; width: 282px} 
     290fieldset.block-add-activity fieldset.add-activity-search input{max-width: 260px; width: 245px;} 
     291 
     292.block-activity-group-select dd.group-select select{margin: 12px 8px;} 
     293.block-activity-group-select dd.task-activity-list{padding: 10px 5px} 
     294 
     295/** Pesquisa de tarefas **/ 
     296 
     297select.group-addactivity-details-txt-timezone{width: 175px;} 
     298 
    279299 
    280300dl.block-add-attendee, dl.block-add-activity { 
     
    283303} 
    284304 
    285 .new-event-win dl.block-add-attendee dd.add-attendee, dl.block-add-activity dd.add-activity { 
     305dl.block-add-activity dd.add-activity{ 
     306    width: 295px; 
     307    min-height: 254px; 
     308    display: block; 
     309} 
     310 
     311.new-event-win dl.block-add-attendee dd.add-attendee{ 
    286312        width: 260px; 
    287313        min-height: 260px; 
     
    294320        display: block; 
    295321} 
     322 
     323.new-activity-win dl.block-activity-group-select li.task{overflow: hidden; position: relative;} 
     324.new-activity-win dl.block-activity-group-select ul{overflow: hidden;} 
    296325 
    297326#calendar_addactivity_details8 dl.block-add-attendee dd.add-attendee ,#calendar_addactivity_details8 dl.block-add-activity dd.add-activity { 
     
    322351*/ 
    323352 
    324 .attendee-options{ position: absolute; top: 0; left: 287px; background-color: white; z-index: 100; width: 90px; background-color: #FFF; padding: 0 20px 0 3px; text-align: right;} 
     353.attendee-options, .activity-options{ position: absolute; top: 0; left: 287px; background-color: white; z-index: 100; width: 90px; background-color: #FFF;      padding: 0 20px 0 3px; text-align: right;} 
    325354.attendees-list .not-attendee, .activitys-list .not-activity { height:16px; } 
    326355 
     
    383412        min-width: 99999px; 
    384413} 
     414 
     415 ul.task-activity-list li label.name{display: table-cell;} 
     416 
    385417dd.task-activity-list ul.task-activity-list li label[title=''] { display:none } 
    386418/* 
     
    754786 
    755787.button.add.button-add-attachment{margin: -9px 0 0 8px;} 
    756 .button.btn-danger.delete{margin: 0 0 0 0;} 
     788.button.btn-danger.delete{margin: 0 0 0 0; min-width: 143px;} 
    757789 
    758790.button.upload{top: 4px;} 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/css/style.css

    r6881 r6945  
    5353 
    5454.new-activity-win fieldset { border: none; margin: 0; padding: 0; } 
    55 .new-activity-win fieldset.tab-level2 { padding: 0px 5px; min-height: 310px; max-height: 310px; overflow: auto;} 
     55.new-activity-win fieldset.tab-level2 { padding: 0px 5px; min-height: 250px; max-height: 310px; overflow: auto;} 
    5656 
    5757.new-activity-win .overflow_add_calender { overflow: auto; max-height: 320px; } 
     
    102102.new-event-win div.div-addevent{ padding: 0; width: 700px; border: 0;} 
    103103.new-task-win div.div-addtask { padding: 0; width: 774px; border: 0;} 
    104 .new-event-win form.form-addevent, .new-task-win form.form-addtask { padding: 9px; } 
    105  
    106 .new-activity-win div.div-addevent { padding: 0; width: 700px; border: 0;} 
    107 .new-activity-win form.form-addevent { padding: 9px; } 
     104 
     105.new-event-win form.form-addevent,  
     106.new-task-win form.form-addtask, 
     107.new-activity-win form.form-addactivity { padding: 9px; } 
     108 
     109.new-activity-win input.time{width: 45px;} 
     110.new-activity-win input.date{width: 80px;} 
     111 
     112.new-activity-win div.div-addactivity { padding: 0; width: 734px; border: 0;} 
     113.new-activity-win form.form-addactivity { padding: 9px; } 
    108114 
    109115.expresso-calendar-container input[type="text"] { height: 18px; } 
     
    590596.div-addactivity #calendar_addactivity_details1 .subitem .done { width: 45px;} 
    591597 
    592  
    593 .div-addactivity  #calendar_addactivity_details6 .parent {width: 680px; min-height: 268px; float: left;} 
    594 .div-addactivity  #calendar_addactivity_details6 .parent .child-top {width: 690px; height: 30px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 
    595 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom {width: 690px; height: 220px; overflow: auto;  float: left; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 
    596 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each { height: 30px; } 
    597 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each:hover { background: #FFF2F2; cursor: pointer;} 
    598  
    599  
    600 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour { width: 30%; float: left; height: 30px} 
    601 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 
    602 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each .organization{ width: 69%; float: left;  height: 30px; border-left: 1px solid #CCC; } 
    603 .div-addactivity  #calendar_addactivity_details6 .parent .child-bottom .child-bottom-each .organization span{ margin: 8px; float: left; } 
    604  
    605  
    606 .div-addactivity  #calendar_addactivity_details6 .parent .child-top .date-hour { width: 29%; float: left; background: #E8F4FD; height: 30px; } 
    607 .div-addactivity  #calendar_addactivity_details6 .parent .child-top .date-hour span{ margin: 8px; float: left; font-weight: bold; color: #2E6E9E; } 
    608 .div-addactivity  #calendar_addactivity_details6 .parent .child-top .organization { width: 70%; float: left; background: #E8F4FD; height: 30px; border-left: 1px solid #CCC; font-weight: bold; color: #2E6E9E; } 
    609 .div-addactivity  #calendar_addactivity_details6 .parent .child-top .organization span{margin: 8px; float: left; } 
     598.div-addactivity  #group_addactivity_details6 .parent {width: 680px; min-height: 268px; float: left;} 
     599.div-addactivity  #group_addactivity_details6 .parent .child-top {width: 690px; height: 30px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 
     600.div-addactivity  #group_addactivity_details6 .parent .child-bottom {width: 690px; height: 220px; overflow: auto;  float: left; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 
     601.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each { height: 30px; } 
     602.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each:hover { background: #FFF2F2; cursor: pointer;} 
     603 
     604.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour { width: 30%; float: left; height: 30px} 
     605.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 
     606.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each .organization{ width: 69%; float: left;  height: 30px; border-left: 1px solid #CCC; } 
     607.div-addactivity  #group_addactivity_details6 .parent .child-bottom .child-bottom-each .organization span{ margin: 8px; float: left; } 
     608 
     609.div-addactivity  #group_addactivity_details6 .parent .child-top .date-hour { width: 29%; float: left; background: #E8F4FD; height: 30px; } 
     610.div-addactivity  #group_addactivity_details6 .parent .child-top .date-hour span{ margin: 8px; float: left; font-weight: bold; color: #2E6E9E; } 
     611.div-addactivity  #group_addactivity_details6 .parent .child-top .organization { width: 70%; float: left; background: #E8F4FD; height: 30px; border-left: 1px solid #CCC; font-weight: bold; color: #2E6E9E; } 
     612.div-addactivity  #group_addactivity_details6 .parent .child-top .organization span{margin: 8px; float: left; } 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php

    r6891 r6945  
    150150                .'calendar FROM calendar_to_calendar_object , calendar_object ' 
    151151                .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][2][2]) . '\')) ' 
    152                 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ';     
     152                .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 
     153        .'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') ';       
    153154             
    154155            if(isset($criteria['searchEvent']) && $criteria['searchEvent']){ 
     
    180181                $params = array_merge($params, $occ);            
    181182            } 
     183            $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 
     184            return false; 
     185        } 
     186    } 
     187 
     188    public function findTask(&$uri, &$params, &$criteria, $original) { 
     189 
     190        ob_start(); 
     191        print_r('$uri' . "\n"); 
     192        print_r($uri); 
     193        print_r('$params' . "\n"); 
     194        print_r($params); 
     195        print_r('$criteria' . "\n"); 
     196        print_r($criteria); 
     197        print_r('$original' . "\n"); 
     198        print_r($original); 
     199        $output = ob_get_clean(); 
     200        file_put_contents( "/tmp/acoutinho.log",  $output , FILE_APPEND); 
     201        if (isset($criteria['filterTasks']) && $criteria['filterTasks']) { 
     202 
     203            $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 
     204            .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 
     205            .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 
     206            .'calendar_object.priority as "priority", calendar_object.due as "due", ' 
     207            .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 
     208            .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 
     209            .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 
     210            .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 
     211            .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 
     212            .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 
     213            .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 
     214            .'calendar FROM calendar_to_calendar_object , calendar_object ' 
     215            .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][3][2]) . '\')) ' 
     216            .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 
     217        .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_activity_id from calendar_task_to_activity_object where owner =  \'' . Config::me("uidNumber") . '\' ) '     
     218        .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_task_id from calendar_task_to_activity_object where owner =  \'' . Config::me("uidNumber") . '\' ) ';     
     219 
     220        if(isset($criteria['filter'][4])) 
     221            $sql .= 'AND (((upper("summary") like upper(\'%'.$criteria['filter'][4][1][2].'%\') OR upper("description") like upper(\'%'.$criteria['filter'][4][1][2].'%\'))))'; 
     222 
     223            $sql .= 'AND (range_start >= \'' . $criteria['filter'][2][2] . '\' AND type_id <= \'' .  $criteria['filter'][1][2] . '\')'; 
     224 
     225            $params = Controller::service('PostgreSQL')->execResultSql($sql); 
    182226            $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 
    183227            return false; 
     
    495539    } 
    496540 
     541    //TODO: Remover apos suporte a ManytoMany na api  
     542    public function createTasksToActivity(&$uri, &$result, &$criteria, $original) { 
     543 
     544        ob_start(); 
     545        print_r('$uri' . "\n"); 
     546        print_r($uri); 
     547        print_r('$params' . "\n"); 
     548        print_r($params); 
     549        print_r('$criteria' . "\n"); 
     550        print_r($criteria); 
     551        print_r('$original' . "\n"); 
     552        print_r($original); 
     553        $output = ob_get_clean(); 
     554        file_put_contents( "/tmp/acoutinho.log",  $output , FILE_APPEND); 
     555 
     556        if(isset($original['properties']['taskToActivity']) && $original['properties']['taskToActivity']){ 
     557 
     558            foreach($original['properties']['taskToActivity'] as $relational) 
     559 
     560                Controller::create(array('concept' => 'taskToActivity'), array('task' => $relational['task'], 'owner' => $relational['owner'], 'activity' => $result['id'])); 
     561 
     562        } 
     563    } 
     564 
    497565    public function createCreateSchedulableToAttachment(&$uri, &$params, &$criteria, $original) { 
    498566        if (array_key_exists('attachments', $original['properties'])) 
     
    541609 
    542610    //TODO: Remover apos suporte a deepness na api  
     611    public function deepnessFindTask(&$uri, &$result, &$criteria, $original) { 
     612        if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0)  
     613           foreach($result as &$value) 
     614                $value['task'] = Controller::read(array('concept' => 'schedulable', 'id' => $value['task'])); 
     615            
     616         
     617        return $result; 
     618    } 
     619 
     620 
     621 
     622    //TODO: Remover apos suporte a deepness na api  
    543623    public function deepnessFindEvent(&$uri, &$result, &$criteria, $original) { 
    544624        if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 
     
    572652 
    573653                $result[$i]['DayLigth'] = $DayLigth; 
     654 
     655        if(((int)$v['type']) == 2){ 
     656 
     657            $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $v['id']), array('=','owner', Config::me('uidNumber'))) , 'deepness' => 2)); 
     658 
     659            if($taskToActivity) 
     660                $result[$i]['taskToActivity'] = $taskToActivity; 
     661 
     662        } 
    574663 
    575664                if (isset($v['id'])) { 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/activity.helpers.js

    r6881 r6945  
    1 function activityDetails( objEvent, decoded, path, isMail, repeat){ 
    2  
    3  
    4     attendees = {}; 
     1function activityDetails( objActivity, decoded, path, isMail, repeat){ 
     2 
     3    tasks = {length: 0}; 
    54         
    65    if(path == undefined) 
     
    87                 
    98    if( !decoded ) 
    10         objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 
     9        objActivity = DataLayer.decode( "schedulable:group", objActivity ); 
    1110 
    1211    if(!isMail) 
    13         objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
    14          
    15     if(typeof(objEvent.id) == 'undefined'){ 
    16                 objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
    17                 objEvent.useAlarmDefault = 1; 
    18                 //Código provisório ... Mockup 
    19                 objEvent.alarms.taskActivity = {}; 
    20     } 
    21          
     12        objActivity = DataLayer.encode( "schedulable:activity", objActivity ); 
     13     
     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 
     22        var allDay = true; 
     23 
     24        var formatString =  User.preferences.dateFormat + " " +  User.preferences.hourFormat; 
     25 
     26        if(tasks.length == 0){ 
     27 
     28            startDate = new Date(); 
     29            var configData = (startDate.toString('mm') < 30)  ? {minutes: (30 - parseInt(startDate.toString('mm')))} : {hours: 1, minutes: '-'+startDate.toString('mm')}; 
     30            startDate.add(configData);  
     31 
     32            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)))); 
     33 
     34            blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 
     35            blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 
     36 
     37            blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 
     38            blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 
     39 
     40            blkAuto.find('input[name="dueDate"]').val(''); 
     41            blkAuto.find('input[name="dueHour"]').val(''); 
     42                         
     43            blkAuto.find('input[name="percentage"]').val(percentage); 
     44 
     45            blkAuto.find('input[name="allDay"]').attr('checked', false); 
     46 
     47            return true; 
     48        } 
     49 
     50        for (var i in tasks){ 
     51 
     52            if(i == 'length') 
     53                continue; 
     54 
     55            stTime = Date.parseExact( tasks[i].startDate + " "+$.trim( tasks[i].startHour) , formatString); 
     56            enTime = Date.parseExact( tasks[i].endDate + " "+$.trim( tasks[i].endHour), formatString ); 
     57             
     58            startDate = (startDate && startDate.compareTo(stTime) == -1) ? startDate : stTime; 
     59            endDate = endDate.compareTo(enTime) == -1 ? enTime : endDate; 
     60             
     61            if(tasks[i].dueDate != ''){ 
     62                pvTime = Date.parseExact( tasks[i].dueDate + " "+$.trim( tasks[i].dueTime), formatString ); 
     63                dueDate = dueDate.compareTo(pvTime) == -1 ? pvTime : dueDate; 
     64            } 
     65 
     66            if(parseInt(tasks[i].percentage) > 0) 
     67                percentage += parseInt((100 / tasks.length)) * ( parseInt(tasks[i].percentage) / 100); 
     68        } 
     69 
     70        dueDate = dueDate.compareTo(endDate) == -1 ? endDate : dueDate; 
     71 
     72        blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat )); 
     73        blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat )); 
     74 
     75        blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat )); 
     76        blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat )); 
     77 
     78        blkAuto.find('input[name="dueDate"]').val(dueDate.toString(User.preferences.dateFormat )); 
     79        blkAuto.find('input[name="dueHour"]').val(dueDate.toString(User.preferences.hourFormat )); 
     80 
     81        blkAuto.find('input[name="percentage"]').val(percentage); 
     82 
     83        blkAuto.find('input[name="allDay"]').attr('checked', (!!(startDate.compareTo(endDate) == 0) || (startDate.toString('HH:mm') == endDate.toString('HH:mm')) ? true : false)); 
     84    } 
     85 
     86 
     87    var callbackTask = function(){ 
     88 
     89        blkAddTask.find("li .button").filter(".close.new").button({ 
     90            icons: { 
     91            primary: "ui-icon-close" 
     92            }, 
     93            text: false 
     94        }).click(function () { 
     95 
     96            delete tasks[$(this).parents('li').find('input[name="idtask[]"]').val()] 
     97            tasks.length +=  -1; 
     98 
     99            idTaskToActivity = $(this).parents('li').find('input[name="idTaskToActivity[]"]').val() 
     100 
     101            if(idTaskToActivity != '') 
     102                DataLayer.remove('taskToActivity', idTaskToActivity); 
     103             
     104            $(this).parents('li').remove(); 
     105                 
     106            if(blkAddTask.find(".task-activity-list li").length == 1) 
     107                blkAddTask.find("li.not-activity    ").removeClass('hidden'); 
     108 
     109            registerStatus(); 
     110        }) 
     111        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     112        .removeClass('new').end() 
     113 
     114        .filter(".info.new").button({ 
     115            icons: { 
     116                primary:  "ui-icon-notice" 
     117            }, 
     118            text: false 
     119        }).click(function () { 
     120            var positionY = $(this).parents("li").offset().top; 
     121              
     122            var name = $(this).parents('li').find("div").find(".name").text(); 
     123            var email = $(this).parents('li').find("div").find(".mail").text() 
     124                         
     125            if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 
     126                $(this).qtip({ 
     127                    show: { 
     128                        ready: true, 
     129                        solo: true, 
     130                        when: { 
     131                            event: 'click' 
     132                        } 
     133                    }, 
     134                    hide: false, 
     135                    content: { 
     136                        text: $('<div></div>').html( DataLayer.render( path + 'templates/activity_information_task.ejs', { 
     137                            'name' : name 
     138                        } ) ), 
     139                        title: { 
     140                            text:'Informações', 
     141                            button: '<a class="button close" href="#">close</a>' 
     142                        } 
     143                    }, 
     144                style: { 
     145                    name: 'blue', 
     146                        tip: { 
     147                             }, 
     148                        border: { 
     149                            width: 4, 
     150                            radius: 8 
     151                        }, 
     152                        width: { 
     153                            min: 230, 
     154                            max:230 
     155                        } 
     156                }, 
     157                position: { 
     158                    corner: { 
     159                        target: 'rightMiddle', 
     160                        tooltip: 'leftMiddle' 
     161                    }, 
     162                    adjust: { 
     163                        x: 30, 
     164                        y: 0 
     165                    } 
     166                } 
     167            }) 
     168            .qtip("api").onShow = function(arg0) { 
     169                $('.qtip-active .button.close').button({ 
     170                    icons: { 
     171                        primary: "ui-icon-close" 
     172                    }, 
     173                    text: false 
     174                }) 
     175                .click(function(){ 
     176                    blkAddAtendee.find('dd.task-activity-list').qtip('destroy'); 
     177                }); 
     178                                         
     179                $('.qtip-active .button.cancel').button().click(function(){ 
     180                    blkAddAtendee.find('dd.activity-list [type=checkbox]').attr('checked', false); 
     181                    blkAddAtendee.find('dd.activity-list').qtip('destroy'); 
     182                }); 
     183 
     184                $('.qtip .button').button(); 
     185                                         
     186            }; 
     187         }              
     188     }) 
     189 .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     190 .removeClass('new').end()     
     191 
     192        UI.dialogs.addActivity.find('.task-activity-list li').hover( 
     193            function () { 
     194                $(this).addClass("hover-attendee"); 
     195                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 
     196                .find('.activity-options').addClass('hover-attendee'); 
     197            }, 
     198            function () { 
     199                $(this).removeClass("hover-attendee"); 
     200                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 
     201                .find('.activity-options').removeClass('hover-attendee'); 
     202            } 
     203        );         
     204    } 
     205 
     206 
    22207    /** 
    23          * canDiscardEventDialog deve ser true se não houver alterações no evento 
     208         * canDiscardEventDialog deve ser true se não houver alterações no evento 
    24209         */ 
    25210    canDiscardEventDialog = true; 
    26211    /** 
    27          * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
    28          * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
     212         * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
     213         * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
    29214         */ 
    30215    zebraDiscardEventDialog = false; 
    31216         
    32     /** 
    33                 ACLs do participant 
    34         */ 
    35     acl_names = { 
    36         'w': 'acl-white', 
    37         'i': 'acl-invite-guests', 
    38         'p': 'acl-participation-required' 
    39     }; 
    40  
    41  
    42 var callbackAttendee = function(){ 
    43         //Cria qtip de permissões pelo click do checkbox 
    44         var checked = false; 
    45         blkAddAtendee.find("li.not-activity").addClass('hidden'); 
    46          
    47         blkAddAtendee.find("li .button").filter(".close.new").button({ 
    48             icons: { 
    49                 primary: "ui-icon-close" 
    50             }, 
    51             text: false 
    52         }).click(function () { 
    53             DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
    54             if($(this).parent().find('.button.delegate').hasClass('activity-permissions-change-button')){ 
    55                 removeOthers(); 
    56                 blkAddAtendee.find('.request-update').addClass('hidden'); 
    57                 blkAddAtendee.find('.status option').toggleClass('hidden'); 
    58                                  
    59                 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
    60             } 
    61                          
    62             $(this).parents('li').remove(); 
    63                          
    64             if(blkAddAtendee.find(".activity-list li").length == 1) 
    65                 blkAddAtendee.find("li.not-activity").removeClass('hidden'); 
    66         }) 
    67         .addClass('tiny disable ui-button-disabled ui-state-disabled') 
    68         .removeClass('new').end() 
    69          
    70         .filter(".delegate.new").button({ 
    71             icons: { 
    72                 primary: "ui-icon-transferthick-e-w" 
    73             }, 
    74             text: false 
    75         }).click(function () { 
    76             var me = $(this).parents('li'); 
    77             if($(this).hasClass('activity-permissions-change-button')){ 
    78                 $(this).removeClass('activity-permissions-change-button')    
    79                     .find('.ui-icon-transferthick-e-w').removeClass('activity-permissions-change').end();                
    80                  
    81                 me.find('input[name="delegatedFrom[]"]').val(''); 
    82                 dependsDelegate(me, true); 
    83                                  
    84                 blkAddAtendee.find('.request-update').addClass('hidden'); 
    85                 blkAddAtendee.find('.status option').toggleClass('hidden'); 
    86  
    87                 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
    88                                  
    89             }else{ 
    90                 removeOthers(); 
    91                          
    92                 $(this).addClass('activity-permissions-change-button')    
    93                 .find('.ui-icon-transferthick-e-w').addClass('activity-permissions-change').end();                
    94                  
    95                 me.find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    96                  
    97                 dependsDelegate(me, false); 
    98                          
    99                 blkAddAtendee.find('.request-update').removeClass('hidden'); 
    100                 if(blkAddAtendee.find('.status option.hidden').length == 1) 
    101                     blkAddAtendee.find('.status option').toggleClass('hidden'); 
    102                          
    103                 blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
    104             } 
    105         }) 
    106         .addClass('tiny disable ui-button-disabled ui-state-disabled') 
    107         .removeClass('new').end() 
    108                  
    109         .filter(".edit.new").button({ 
    110             icons: { 
    111                 primary: "ui-icon-notice" 
    112             }, 
    113             text: false 
    114         }).click(function() { 
    115  
    116                 console.log($(this).parents("li").position().top); 
    117  
    118                 var positionY = $(this).parents("li").offset().top; 
    119  
    120             if(!!!checked) 
    121                 $(this).parents('li').find('[type=checkbox]').attr('checked', (!$(this).parent().find('[type=checkbox]').is(':checked'))).end(); 
    122                  
    123                 var name = $(this).parents('li').find("div").find(".name").text(); 
    124                 var email = $(this).parents('li').find("div").find(".mail").text() 
    125             //var aclsParticipant =  $(this).parents('li') 
    126             checked = false; 
    127                          
    128             if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 
    129                 $(this).qtip({ 
    130                     show: { 
    131                     ready: true,  
    132                         solo: true,  
    133             when: { 
    134                     event: 'click' 
    135                     } 
    136                 }, 
    137                 hide: false, 
    138                 content: { 
    139                                 text: $('<div></div>').html( DataLayer.render( path + 'templates/activity_information_task.ejs', { 
    140                                         'name' : name 
    141                                 } ) ),  
    142                                 title: { 
    143                                         text:'Informações',  
    144                                         button: '<a class="button close" href="#">close</a>' 
    145                                 } 
    146                 }, 
    147                 style: { 
    148                 name: 'blue',  
    149                     tip: { 
    150                                 corner: 'leftMiddle' 
    151                         },  
    152                     border: { 
    153                                 width: 4,  
    154                             radius: 8 
    155                         },  
    156                     width: { 
    157                                 min: 230,  
    158                             max:230 
    159                         } 
    160             }, 
    161             position: { 
    162             corner: { 
    163             target: 'rightMiddle', 
    164             tooltip: 'leftMiddle' 
    165             }, 
    166             adjust: { 
    167                     x: 30,  
    168                     y: 0 
    169             } 
    170             } 
    171             }) 
    172         .qtip("api").onShow = function(arg0) { 
    173             $('.qtip-active .button.close').button({ 
    174                 icons: { 
    175                     primary: "ui-icon-close" 
    176                 }, 
    177                 text: false 
    178             }) 
    179             .click(function(){ 
    180                 blkAddAtendee.find('dd.task-activity-list').qtip('destroy'); 
    181             }); 
    182                                          
    183             $('.qtip-active .button.save').button().click(function(){ 
    184                                                  
    185                 var acl = ''; 
    186                 $('.qtip-active').find('[type=checkbox]:checked').each(function(i, obj) { 
    187                     acl+= obj.value; 
    188                 }); 
    189  
    190                 blkAddAtendee.find('dd.task-activity-list [type=checkbox]:checked').siblings('input[name="attendeeAcl[]"]').each(function(i, obj) {  
    191                     obj.value = 'r'+acl; 
    192                 }).parents('li').find('.button.edit').addClass('activity-permissions-change-button')    
    193                 .find('.ui-icon-key').addClass('activity-permissions-change');                
    194                                                  
    195                 blkAddAtendee.find('dd.task-activity-list [type=checkbox]').attr('checked', false); 
    196                                                  
    197                 blkAddAtendee.find('dd.task-activity-list').qtip('destroy'); 
    198                                          
    199             }); 
    200             $('.qtip-active .button.cancel').button().click(function(){ 
    201                 blkAddAtendee.find('dd.activity-list [type=checkbox]').attr('checked', false); 
    202                 blkAddAtendee.find('dd.activity-list').qtip('destroy'); 
    203             }); 
    204                                          
    205             if(aclsParticipant) 
    206                 for(var i = 1; i < aclsParticipant.length; i++){ 
    207                     $('.qtip-active').find('input[name="'+acl_names[aclsParticipant.charAt(i)]+'"]').attr('checked', true); 
    208                 } 
    209                                                          
    210             $('.qtip .button').button(); 
    211                                          
    212         }; 
    213         }else{ 
    214             if(!$('.new-activity-win dd.task-activity-list').find('[type=checkbox]:checked').length){ 
    215                 blkAddAtendee.find('dd.attendee-list').qtip('destroy'); 
    216             }else{ 
    217                 $('.qtip-active .button.save .ui-button-text').html('Aplicar a todos') 
    218             } 
    219                          
    220         };                       
    221     }) 
    222 .addClass('tiny disable ui-button-disabled ui-state-disabled') 
    223 .removeClass('new').end() 
    224                  
    225 .filter(".open-delegate.new").click(function(){ 
    226     if($(this).hasClass('ui-icon-triangle-1-e')){ 
    227         $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 
    228         $(this).parents('li').find('.list-delegates').removeClass('hidden'); 
    229     }else{ 
    230         $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 
    231         $(this).parents('li').find('.list-delegates').addClass('hidden'); 
    232     } 
    233                  
    234 }).removeClass('new'); 
    235          
    236          
    237 blkAddAtendee.find("li input[type=checkbox].new").click(function(){ 
    238     if(!$('.new-activity-win dd.task-activity-list').find('[type=checkbox]:checked').length){ 
    239         blkAddAtendee.find('dd.task-activity-list').qtip('destroy'); 
    240     }else{ 
    241         checked = true; 
    242         $(this).parents('li').find('.button.edit').click(); 
    243     } 
    244 }).removeClass('new'); 
    245          
    246 UI.dialogs.addActivity.find('.task-activity-list li').hover( 
    247     function () { 
    248         $(this).addClass("hover-activity"); 
    249         $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 
    250         .find('.activity-options').addClass('hover-activity'); 
    251     }, 
    252     function () { 
    253         $(this).removeClass("hover-activity"); 
    254         $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 
    255         .find('.activity-options').removeClass('hover-activity');; 
    256     } 
    257     ); 
    258          
    259 } 
    260     var dependsDelegate = function(reference, inverse){ 
    261         if(inverse){ 
    262             if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    263                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    264         }else{ 
    265             if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    266                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 
    267         } 
    268          
    269     }; 
    270      
    271     var removeOthers = function(){ 
    272         var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 
    273         if(other.lenght){ 
    274             dependsDelegate(other.parents('li'), true); 
    275         } 
    276         blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 
    277         blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 
    278          
    279     }; 
    280          
    281217        var html = DataLayer.render( path+'templates/activity_add.ejs', { 
    282             event:objEvent 
     218            activity:objActivity 
    283219        });      
    284220                         
     
    286222 
    287223            UI.dialogs.addActivity = jQuery('#sandbox').append('<div title="Criar Atividade" class="new-activity-win active"> <div>').find('.new-activity-win.active').html(html).dialog({ 
    288                 resizable: false,  
    289                 modal:true,  
    290                 autoOpen: false, 
    291                 width:734,  
    292                 position: 'center',  
    293                 close: function(event, ui) { 
    294                         /** 
    295                          * Remove tooltip possivelmente existente 
    296                          */ 
    297                         if ($('.qtip.qtip-blue.qtip-active').length) 
    298                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
    299                         attendees  = {}; 
    300                 }, 
    301                 beforeClose: function(event, ui) { 
    302                  
    303                     if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 
    304                         zebraDiscardEventDialog = true; 
    305                         window.setTimeout(function() { 
    306                             $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', { 
    307                                 'type':     'question', 
    308                                 'overlay_opacity': '0.5', 
    309                                 'buttons':  ['Descartar alterações', 'Continuar editando'], 
    310                                 'onClose':  function(clicked) { 
    311                                     if(clicked == 'Descartar alterações') { 
    312                                         canDiscardEventDialog = true; 
    313                                         /** 
    314                                         *Remoção dos anexos do eventos caso seja cancelado a edição 
    315                                         */ 
    316                                         DataLayer.rollback(); 
    317  
    318                                         var ids = false; 
    319                                         $.each($('.attachment-list input'), function (i, input) { 
    320                                             DataLayer.put('attachment', {id: ''+input.value}); 
    321                                             DataLayer.remove('attachment', ''+input.value); 
    322                                                 ids = true; 
    323                                         }); 
    324                                         if(ids) 
    325                                                 DataLayer.commit(); 
    326                                  
    327                                          
    328                                                                                          
    329                                         UI.dialogs.addActivity.dialog('close'); 
    330                                     }else{ 
    331                                         zebraDiscardEventDialog = false; 
    332                                     } 
    333                                                                                  
    334                                     /** 
    335                                     * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
    336                                     * com ESC, para que o evento ESC não seja propagado para fechamento da 
    337                                     * janela de edição de eventos, deve ser setada uma flag indicando que 
    338                                     * já existe uma janela de confirmação aberta. 
    339                                     */ 
    340                                     if (!clicked) { 
    341                                         window.setTimeout(function() { 
    342                                             zebraDiscardEventDialog = false; 
    343                                         }, 200); 
    344                                     } 
    345                                 } 
    346                             }); 
    347                                                                  
    348                         }, 300); 
    349  
    350                     } 
    351                     //DataLayer.rollback(); 
    352                     return canDiscardEventDialog; 
    353                 }, 
    354                 dragStart: function(event, ui) { 
    355                         if ($('.qtip.qtip-blue.qtip-active').length) 
    356                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    357                 } 
    358             }); 
     224                resizable: false,  
     225                modal:true,  
     226                autoOpen: false, 
     227                width:734,  
     228                position: 'center',  
     229                close: function(event, ui) { 
     230                        /** 
     231                         * Remove tooltip possivelmente existente 
     232                         */ 
     233                        if ($('.qtip.qtip-blue.qtip-active').length) 
     234                                $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
     235                         
     236                attendees  = {}; 
     237                }, 
     238                beforeClose: function(event, ui) { 
     239                 
     240                    if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 
     241                                zebraDiscardEventDialog = true; 
     242                                window.setTimeout(function() { 
     243                                    $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', { 
     244                                        'type':     'question', 
     245                                        'overlay_opacity': '0.5', 
     246                                        'buttons':  ['Descartar alterações', 'Continuar editando'], 
     247                                        'onClose':  function(clicked) { 
     248                                            if(clicked == 'Descartar alterações') { 
     249                                                canDiscardEventDialog = true; 
     250                                                /** 
     251                                                *Remoção dos anexos do eventos caso seja cancelado a edição 
     252                                                */ 
     253                                                DataLayer.rollback(); 
     254 
     255                                                var ids = false; 
     256                                                $.each($('.attachment-list input'), function (i, input) { 
     257                                                    DataLayer.put('attachment', {id: ''+input.value}); 
     258                                                    DataLayer.remove('attachment', ''+input.value); 
     259                                                        ids = true; 
     260                                                }); 
     261                                                if(ids) 
     262                                                        DataLayer.commit(); 
     263 
     264                                                UI.dialogs.addActivity.dialog('close'); 
     265                                            }else{ 
     266                                                   zebraDiscardEventDialog = false; 
     267                                            } 
     268                                                                                         
     269                                            /** 
     270                                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     271                                            * com ESC, para que o evento ESC não seja propagado para fechamento da 
     272                                            * janela de edição de eventos, deve ser setada uma flag indicando que 
     273                                            * já existe uma janela de confirmação aberta. 
     274                                            */ 
     275                                            if (!clicked) { 
     276                                                window.setTimeout(function() { 
     277                                                    zebraDiscardEventDialog = false; 
     278                                                }, 200); 
     279                                            } 
     280                                        } 
     281                            }); 
     282                                                                         
     283                        }, 300); 
     284            } 
     285            //DataLayer.rollback(); 
     286            return canDiscardEventDialog; 
     287        }, 
     288        dragStart: function(event, ui) { 
     289                if ($('.qtip.qtip-blue.qtip-active').length) 
     290                        $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     291       } 
     292    }); 
    359293                                 
    360294        } else { 
    361295            UI.dialogs.addActivity.html(html); 
    362296        } 
     297 
     298/* Checkbox allday */ 
     299UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){ 
     300    $(this).attr("checked") ?  
     301    UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') : 
     302    UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden');  
     303}); 
    363304                 
    364305var tabs = UI.dialogs.addActivity.children('.content').tabs({ 
     
    368309        }        
    369310        }); 
    370 var calendar = DataLayer.get('calendar', objEvent.calendar); 
     311 
     312var group = DataLayer.get('calendar', objActivity.group); 
    371313                                 
    372 if (calendar.timezone != objEvent.timezone){ 
    373     UI.dialogs.addActivity.find('.calendar_addactivity_details_lnk_timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 
    374     UI.dialogs.addActivity.find('.calendar_addactivity_details_lnk_timezone').addClass('hidden'); 
    375     $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 
     314if (group.timezone != objActivity.timezone){ 
     315    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').find('option[value="'+objActivity.timezone+'"]').attr('selected','selected').trigger('change'); 
     316    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').addClass('hidden'); 
     317    $('.group-addevent-details-txt-timezone').removeClass('hidden'); 
    376318                         
    377319} 
    378320 
    379 UI.dialogs.addActivity.find('.calendar_addactivity_details_lnk_timezone').click(function(e){ 
     321UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').click(function(e){ 
    380322    $(this).addClass('hidden'); 
    381     $('.calendar-addactivity-details-txt-timezone').removeClass('hidden'); 
     323    $('.group-addactivity-details-txt-timezone').removeClass('hidden'); 
    382324    e.preventDefault(); 
    383325}); 
    384326 
    385 /*Seleciona a agenda padrão para visualização/edição de um evento*/ 
    386 if(objEvent.id) 
    387     UI.dialogs.addActivity.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 
    388  
    389 /* Checkbox allday */ 
    390  
    391 UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){ 
    392     $(this).attr("checked") ?  
    393     UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') : 
    394     UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden');  
    395     updateMap(true); 
    396 }); 
     327UI.dialogs.addActivity.find('.button.remove').button({ 
     328    text:false,  
     329    icons:{ 
     330        primary:'ui-icon-close' 
     331    } 
     332}).click(function(el){ 
     333    var id; 
     334    if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 
     335        DataLayer.remove('alarm', id); 
     336    $(this).parent().remove().find('li').is(':empty'); 
     337}); 
     338 
     339UI.dialogs.addActivity.find('.button-add-alarms').click(function(){ 
     340            DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){                      
     341            jQuery('.activity-alarms-list').append(template) 
     342            .find('li:last label:eq(0)').remove().end() 
     343            .find('.number').numeric().end() 
     344            .find('.button.remove').button({ 
     345                text:false,  
     346                icons:{ 
     347                    primary:'ui-icon-close' 
     348                } 
     349            }).click(function(el) { 
     350                $(this).parent().remove(); 
     351            });     
     352            }); 
     353        }); 
     354 
     355/*Seleciona a agenda padrão para visualização/edição de um evento*/ 
     356if(objActivity.id) 
     357    UI.dialogs.addActivity.find('option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change'); 
    397358 
    398359UI.dialogs.addActivity.find('.button').button(); 
    399 UI.dialogs.addActivity.find('.button.add').button({ 
    400     icons: { 
    401         secondary: "ui-icon-plus" 
    402     } 
     360    UI.dialogs.addActivity.find('.button.add').button({ 
     361        icons: { 
     362           secondary: "ui-icon-plus" 
     363        } 
    403364}); 
    404365 
    405366// ==== validation events ==== 
    406 UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título"); 
    407 if(User.preferences.hourFormat.length == 5) { 
    408     UI.dialogs.addActivity.find(".end-time, .start-time").mask("99:99", { 
    409         completed: function(){ 
    410             updateMap(); 
    411         } 
    412     }); 
    413 } else { 
    414     $.mask.definitions['{']='[ap]'; 
    415     $.mask.definitions['}']='[m]'; 
    416     UI.dialogs.addActivity.find(".end-time, .start-time").mask("99:99 {}", { 
    417         completed:function(){ 
    418             $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
    419             $(this).timepicker("refresh"); 
    420             $(this).val($(this).val().replace(/[\.]/gi, "")); 
    421             updateMap(); 
    422         } 
    423     }); 
    424 } 
     367UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título"); 
     368 
    425369UI.dialogs.addActivity.find(".number").numeric(); 
     370 
    426371User.preferences.dateFormat.indexOf('-') > 0 ?  
    427372UI.dialogs.addActivity.find(".date").mask("99-99-9999", { 
     
    430375    } 
    431376}) :  
     377 
    432378UI.dialogs.addActivity.find(".date").mask("99/99/9999", { 
    433379    completed:function(){ 
     
    436382}); 
    437383 
    438 UI.dialogs.addActivity.find(".menu-addActivity") 
     384UI.dialogs.addActivity.find(".menu-addactivity") 
    439385.children(".delete").click(function(){ 
    440386    $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', { 
    441387        'type':     'question', 
    442388        'overlay_opacity': '0.5', 
    443         'buttons':  ['Sim', 'Não'], 
     389        'buttons':  ['Sim', 'Não'], 
    444390        'onClose':  function(clicked) { 
    445391            if(clicked == 'Sim'){ 
    446392                canDiscardEventDialog = true; 
    447393                /* Remove por filtro */ 
    448                 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar], ['=','user',(objEvent.me.user ? objEvent.me.user.id : objEvent.me.id)]]}); 
     394                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'group', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)]]}); 
    449395                Calendar.rerenderView(true); 
    450396                /********************/ 
     
    460406             
    461407.children(".save").click(function(){ 
    462     /* Validação */ 
     408    /* Validação  
    463409    var msg = false;                     
    464410    if(msg = validDateEvent()){ 
    465         $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);  
    466         return false; 
    467     } 
    468                          
     411        $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);  
     412        return false; 
     413    } 
     414    */ 
    469415    canDiscardEventDialog = true; 
    470416                         
    471     var exit = function(event){ 
    472         if(event) 
    473             DataLayer.remove('schedulable', event, false);  
    474  
    475         UI.dialogs.addActivity.children().find('form.form-addevent').submit(); 
    476         UI.dialogs.addActivity.dialog("close");    } 
    477                          
    478     if(repeat){ 
    479         DataLayer.remove('repeat', false); 
    480         DataLayer.put('repeat', repeat); 
    481         DataLayer.commit('repeat', false, exit(repeat.schedulable)); 
    482     }else 
    483         exit(); 
     417        UI.dialogs.addActivity.children().find('form.form-addactivity').submit(); 
     418        UI.dialogs.addActivity.dialog("close"); 
     419 
    484420}).end() 
    485421                 
     
    488424}); 
    489425 
    490 var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', { 
    491         event:objEvent 
    492 }); 
    493  
    494  
    495 var blkAddAtendee = UI.dialogs.addActivity.find('#calendar_addactivity_details8').append(task_activityHtml); 
     426var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', {     activity: objActivity}); 
     427var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml); 
    496428 
    497429var dates = UI.dialogs.addActivity.find('input.date').datepicker({ 
     
    502434}); 
    503435 
    504 UI.dialogs.addActivity.find('input.time').timepicker({  
    505     closeText: 'Ok', 
    506     hourGrid: 4, 
    507     minuteGrid: 10, 
    508     ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 
    509     timeFormat: "hh:mm tt", 
    510     onSelect: function (selectedDateTime){ 
    511         if(!(User.preferences.hourFormat.length == 5)) 
    512             $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                                                 
    513         updateMap(); 
    514     }, 
    515     onClose : function (selectedDateTime){ 
    516         if(!(User.preferences.hourFormat.length == 5)) 
    517             $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
    518     } 
    519          
    520  
    521 }); 
    522  
    523 blkAddAtendee.find('.add-activity-search .ui-icon-search').click(function(event) { 
    524     blkAddAtendee.find('.add-activity-search input').keydown(); 
     436blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) { 
     437    blkAddTask.find('.add-activity-search input').keydown(); 
    525438}); 
    526439                         
    527440                         
    528 blkAddAtendee.find('.add-activity-search input').keydown(function(event) { 
     441blkAddTask.find('.add-activity-search input').keydown(function(event) { 
    529442 
    530443    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {  
    531444    // Fazer get das tarefas     
    532         var result = [ {'name': 'Tarefa 01'} , {'name': 'Tarefa 02'} , {'name' : 'Tarefa 03'} ]; 
    533         //DataLayer.get('user', ["*", "name", $(this).val()], true); 
    534  
    535  
     445        var filter =  
     446        { 
     447            filter:  
     448                ['AND', 
     449                    ['=', 'type', '2'],  
     450                    ['>=','startTime', $.now()],  
     451                    ['in', 'calendar',  
     452                        [$('div.new-activity-win.active select[name="groupFilter"]').val()] 
     453                    ] 
     454                ], criteria: {'filterTasks': true} 
     455        }; 
     456    if($(this).val() != ''){ 
     457        filter['filter'].push(['OR', 
     458                            ["i*", "summary", $(this).val()],  
     459                            ["i*", "description", $(this).val()] 
     460                           ]); 
     461    } 
     462 
     463    var result = DataLayer.get('schedulable:taskSearch', filter, true) 
    536464        /** 
    537         * TODO: trocar por template 
    538         */ 
    539         blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
     465    * TODO: trocar por template 
     466    */ 
     467        blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
    540468        if (!result) { 
    541             blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
    542         } 
    543  
    544         for(i=0; i<result.length; i++) 
    545             result[i].enabled = (blkAddAtendee.find('dd.task-helpers-list ul.task-helpers-list label.mail[title="' +  result[i].mail + '"]').length) ? false : true; 
    546                                                                                          
    547         blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result)); 
    548  
    549  
    550         blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){ 
    551             if ($(event.target).is('input')) { 
    552                 old_item = $(event.target).parents('li'); 
    553                 newAttendeeId = DataLayer.put('participant', { 
    554                     user: old_item.find('.id').html(),  
    555                     isExternal: old_item.find('.isExternal').html() 
    556                 }); 
    557                                                          
    558                 attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
    559                                                          
    560                 blkAddAtendee.find('dd.task-activity-list ul.task-activity-list') 
    561                 .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 
    562                     id: newAttendeeId,  
    563                     name: old_item.find('.name').html(),  
    564                     mail: old_item.find('.mail').html(),  
    565                     isExternal: old_item.find('.isExternal').html(),  
    566                     acl: objEvent.acl, 
    567                     isDirty: !!!objEvent.id 
    568                  }])) 
    569                 .scrollTo('max'); 
    570                 /** 
    571                                                         * Delegação de participação de um participante com permissão apenas de leitura 
    572                                                         * 
    573                                                         */ 
    574                         if(!objEvent.acl.organization && !objEvent.acl.write && !objEvent.acl.inviteGuests && objEvent.acl.read ){ 
    575                                                                          
    576                             blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
    577                             blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
    578                                                                          
    579                             blkAddAtendee.find('.status option').toggleClass('hidden'); 
    580                             blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
    581                             blkAddAtendee.find('.request-update').removeClass('hidden'); 
    582  
    583                             blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    584                                                                          
    585                             blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 
    586                             blkAddAtendee.find(".button.close").button({ 
    587                                 icons: { 
    588                                     primary: "ui-icon-close" 
    589                                 }, 
    590                                 text: false 
    591                             }).click(function () { 
    592                                                                                  
    593                                 $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 
    594                                 blkAddAtendee.find('.request-update').addClass('hidden'); 
    595                                 blkAddAtendee.find('.status option').toggleClass('hidden'); 
    596                                 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');                     
    597                                 blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button') 
    598                                 .find('.ui-icon-person').removeClass('attendee-permissions-change').end();                       
    599                                                                                  
    600                                 DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
    601                                 $(this).parents('li').remove(); 
    602                             }) 
    603                             .addClass('tiny'); 
    604                         }else{ 
    605                             callbackAttendee(); 
    606                             old_item.remove(); 
    607                         } 
    608             } 
    609         }); 
    610  
    611  
     469            blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
     470        }else{ 
     471        for(i=0; i<result.length; i++) 
     472            result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' +  result[i].id + '"]').length) ? false : true; 
     473                                                                                         
     474        blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result)); 
     475 
     476        /* TODO - Verificar id da aitividade*/ 
     477        blkAddTask.find('ul.search-result-list li').click(function(event, ui){ 
     478            if ($(event.target).is('input')) { 
     479                old_item = $(event.target).parents('li'); 
     480 
     481                tasks[old_item.find('[name="id"]').val()] = { 
     482                    startDate: old_item.find('[name="taskStartDate"]').val(), 
     483                    startHour: old_item.find('[name="taskStartHour"]').val(), 
     484                    endDate: old_item.find('[name="taskEndDate"]').val(), 
     485                    endHour: old_item.find('[name="taskEndHour"]').val(), 
     486                    dueDate: old_item.find('[name="taskDueDate"]').val(), 
     487                    dueTime: old_item.find('[name="taskDueTime"]').val(), 
     488                    allDay: old_item.find('[name="taskAllDay"]').val(), 
     489                    percentage: old_item.find('[name="taskPercentage"]').val(), 
     490                }; 
     491 
     492                tasks.length += 1; 
     493 
     494    /* 
     495                        newTaskToActivity = DataLayer.put('taskToActivity', { 
     496                            owner: User.me.id, 
     497                    task: old_item.find('.id').html(),  
     498                            activity: 'VER ISSO AQUI' 
     499                        }); 
     500    */                                                           
     501                        //attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
     502                                                                 
     503                        blkAddTask.find('dd.task-activity-list ul.task-activity-list') 
     504                        .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 
     505                    idTask: old_item.find('[name="id"]').val(), 
     506                            description: old_item.find('.description').html() 
     507                         }])) 
     508                        .scrollTo('max'); 
     509 
     510                    callbackTask(); 
     511                registerStatus(); 
     512                blkAddTask.find('.not-activity').addClass('hidden'); 
     513                old_item.remove(); 
     514            } 
     515        }); 
     516 
     517    } 
    612518        event.preventDefault(); 
    613519    } 
    614520}); 
    615521 
    616 UI.dialogs.addActivity.find('.row.fileupload-buttonbar .button').filter('.delete').button({ 
     522/*Carrega as tarefas já existentes em uma atividade*/ 
     523if(objActivity.tasks.length){ 
     524    tasks = objActivity.tasks; 
     525 
     526    for(var i in objActivity.tasks){ 
     527        if(i != 'length') 
     528            blkAddTask.find('dd.task-activity-list ul.task-activity-list') 
     529                .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 
     530                    idTask: i, 
     531                    description: tasks[i].description, 
     532                    idTaskToActivity: tasks[i].taskToActivity 
     533                 }])) 
     534            .scrollTo('max'); 
     535    } 
     536 
     537    callbackTask(); 
     538    registerStatus(); 
     539    blkAddTask.find('.not-activity').addClass('hidden'); 
     540} 
     541 
     542UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({ 
    617543    icons: { 
    618         primary: "ui-icon-close" 
     544           primary: "ui-icon-close" 
    619545    }, 
    620546    text: 'Excluir' 
     
    623549        'type':     'question', 
    624550        'overlay_opacity': '0.5', 
    625         'buttons':  ['Sim', 'Não'], 
     551        'buttons':  ['Sim', 'Não'], 
    626552        'onClose':  function(clicked) { 
    627553            if(clicked == 'Sim'){ 
     
    640566.filter('.close').button({ 
    641567    icons: { 
    642         primary: "ui-icon-close" 
     568           primary: "ui-icon-close" 
    643569    }, 
    644570    text: false 
     
    649575.filter('.downlaod-archive').button({ 
    650576    icons: { 
    651         primary: "ui-icon-arrowthickstop-1-s" 
     577           primary: "ui-icon-arrowthickstop-1-s" 
    652578    }, 
    653579    text: false 
     
    697623        }, 
    698624    done: function(e, data){ 
    699         var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
    700  
    701         if(!!data.result && data.result != "[]"){ 
    702             var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
    703             $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 
    704             currentUpload.removeClass('on-complete').parents('p') 
    705             .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 
    706             .find('.status-upload').addClass('ui-icon ui-icon-check'); 
    707         }else 
    708             currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
    709     } 
     625        var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
     626 
     627        if(!!data.result && data.result != "[]"){ 
     628            var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
     629            $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 
     630            currentUpload.removeClass('on-complete').parents('p') 
     631            .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 
     632            .find('.status-upload').addClass('ui-icon ui-icon-check'); 
     633        }else 
     634            currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
     635        } 
    710636}); 
    711637$('.attachments-list .button').button(); 
     
    779705    progressTimer = window.setInterval(intervalHandler, interval); 
    780706}); 
    781          
    782 if(objEvent.isShared){ 
    783                  
    784     var acls = Calendar.signatureOf[objEvent.calendar].permission.acl; 
    785                  
    786     if(!acls.write){ 
    787         UI.dialogs.addActivity.find(':input').attr('disabled', 'disabled'); 
    788         UI.dialogs.addActivity.find('.button').hide(); 
    789     } 
    790                  
    791     if(acls.remove) 
    792         UI.dialogs.addActivity.find('.button.remove').show(); 
    793      
    794     UI.dialogs.addActivity.find('.button.cancel').show();        
    795 } 
    796  
    797 disponibily(objEvent, path, attendees); 
    798  
    799 UI.dialogs.addActivity.find('.button-add-alarms').click(function(){ 
    800     var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {type: 1}); 
    801  
    802     jQuery('.activity-alarms-list').append(li_attach).find('.button.remove').button({ 
    803         text:false,  
    804         icons:{ 
    805             primary:'ui-icon-close' 
    806         } 
    807     }).click(function(el) { 
    808                 $(this).parent().remove().find('li').is(':empty') 
    809         }); 
    810 // valicacao de campos numericos 
    811 $('.number').numeric(); 
    812 }); 
    813  
    814707 
    815708UI.dialogs.addActivity.dialog('open'); 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js

    r6903 r6945  
    799799        }; 
    800800    }); 
    801  
     801    return (notArray ? res[0] : res); 
     802    } 
     803}); 
     804 
     805DataLayer.codec( "schedulable", "taskSearch", { 
     806 
     807    decoder: function( evtObj ){ 
     808 
     809    }, 
     810 
     811    encoder: function( evtObj ){ 
     812 
     813    var notArray = false; 
     814       
     815    if( notArray = $.type(evtObj) !== "array" ) 
     816        evtObj = [ evtObj ]; 
     817 
     818    var res = $.map(evtObj, function( objEvent ){            
     819             
     820        if(!(typeof(objEvent) == 'object')) 
     821            return (null); 
     822 
     823        return { 
     824            id: objEvent.id, 
     825            description: !!objEvent.summary ? objEvent.summary : objEvent.description, 
     826            startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     827            startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     828            endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     829            endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     830            dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     831            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), 
     832            allDay: !!parseInt( objEvent.allDay ), 
     833            percentage: (objEvent.percentage) ? objEvent.percentage : '0' 
     834        } 
     835    }); 
     836    return (notArray ? res[0] : res); 
     837    } 
     838}); 
     839 
     840DataLayer.codec( "schedulable", "activity", { 
     841 
     842    decoder: function( evtObj ){ 
     843    Encoder.EncodeType = "entity"; 
     844     
     845    if( notArray = $.type(evtObj) !== "array" ) 
     846        evtObj = [ evtObj ]; 
     847 
     848    var pref = User.preferences; 
     849 
     850    var res = $.map(evtObj, function( form ){ 
     851     
     852        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     853 
     854        formatString = pref.dateFormat + " " + pref.hourFormat; 
     855 
     856        var decodeParticipants = function(attend){ 
     857            return [DataLayer.merge( 
     858                {   
     859                    user: User.me.id,  
     860                    isOrganizer: 1, 
     861                    acl: 'row', 
     862                    alarms: $.map( form.alarmTime || [], function( alarmTime, i ){ 
     863                        if( alarmTime === "" ) 
     864                            return( null ); 
     865                        return !!form.alarmId[i] ? { 
     866                            type: form.alarmType[i],  
     867                            unit: form.alarmUnit[i],  
     868                            time: form.alarmTime[i],  
     869                            id: form.alarmId[i] 
     870                            }: 
     871 
     872                            { 
     873                            type: form.alarmType[i], 
     874                            unit: form.alarmUnit[i],  
     875                            time: form.alarmTime[i] 
     876                            }; 
     877                    }) 
     878                }, attend != '0' ? {id: attend} : {})]; 
     879        }; 
     880 
     881        return DataLayer.merge({ 
     882        "class": form["class"], 
     883        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     884        endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
     885        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'), 
     886        allDay: ( !!form.allDay ? 1 : 0 ),       
     887        status: form.taskStatus,       
     888        id: form.idActivity, 
     889        type: !!form.type ?  form.type : 2, 
     890        percentage: form.percentage, 
     891        priority: form.priority, 
     892        category: form.category, 
     893        summary: form.summary, 
     894        description: form.description, 
     895        timezone: tzId, 
     896        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     897            return { 
     898            attachment: attachment 
     899            } 
     900        }), 
     901        participants: decodeParticipants(form.idAttendee), 
     902        taskToActivity:$.map( form.idtask || [], function( task, i ){ 
     903 
     904            return DataLayer.merge({ 
     905                task: task, 
     906                owner: User.me.id 
     907            }, form.idTaskToActivity[i] != '' ? {id: form.idTaskToActivity[i]} : {}); 
     908 
     909        }) 
     910        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     911    }); 
     912 
     913    return notArray ? res[0] : res; 
     914    }, 
     915 
     916    encoder: function( evtObj ){ 
     917 
     918    var notArray = false; 
     919       
     920    if( notArray = $.type(evtObj) !== "array" ) 
     921        evtObj = [ evtObj ]; 
     922     
     923    var res = $.map(evtObj, function( objEvent ){            
     924             
     925        if(!(typeof(objEvent) == 'object')) 
     926            return (null); 
     927 
     928        var decodeTasks = function(obj){ 
     929 
     930            var tasks = {}, task = {}; 
     931 
     932            for(var i =0; i < obj.taskToActivity.length; i++){ 
     933 
     934                taskToActivity = DataLayer.get('taskToActivity', obj.taskToActivity[i]);  
     935                task = taskToActivity.task; 
     936 
     937                if($.type(task) != 'object') 
     938                    task = DataLayer.get('schedulable', task); 
     939 
     940                tasks[task.id] = { 
     941                    taskToActivity: taskToActivity.id, 
     942                    allDay: !!parseInt(task.allDay), 
     943                    dueDate: (!task.due || task.due == '' || task.due == '0') ? '' : new Date( parseInt(task.due) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     944                    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), 
     945                    startDate: new Date( parseInt(task.startTime) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     946                    startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.startTime)), task.timezone, task.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 
     947                    endDate: new Date( parseInt(task.endTime) - (!!parseInt(task.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
     948                    endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)),  task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat), 
     949                } 
     950 
     951                tasks[task.id].description = tasks[task.id].startDate + ' - ' + (!!task.summary ? task.summary : task.description); 
     952 
     953            } 
     954 
     955            tasks.length = obj.taskToActivity.length; 
     956            return tasks; 
     957 
     958        }; 
     959 
     960        return { 
     961        "class": objEvent["class"], 
     962        id: objEvent.id, 
     963        location: objEvent.location, 
     964        category: objEvent.category, 
     965        activityStatus: objEvent.status, 
     966        groups: Calendar.groups, 
     967        group: objEvent.group ? objEvent.group : objEvent.calendar, 
     968        summary: objEvent.summary, 
     969        type: !!objEvent.type ? objEvent.type : 2, 
     970        description: objEvent.description, 
     971        timezone: objEvent.timezone, 
     972        timezones: Timezone.timezones, 
     973        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     974        priority: objEvent.priority, 
     975        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     976        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     977        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     978        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     979        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     980        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), 
     981        allDay: !!parseInt( objEvent.allDay ), 
     982        historic: [], 
     983        tasks: objEvent.taskToActivity ? decodeTasks(objEvent) : {}, 
     984        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     985            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     986            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     987            if(!attach.name) return(null);  
     988             
     989            var ext = attach.name.split('.'); 
     990            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])); 
     991            attach.size = formatBytes(attach.size); 
     992            return attach; 
     993        }), 
     994        me : User.me, 
     995        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     996 
     997            var attend = DataLayer.get('participant', (participant.id || participant)); 
     998            attend.user = DataLayer.get('user', attend.user); 
     999 
     1000            return { 
     1001                id: attend.id, 
     1002                alarms : $.map(attend.alarms || [], function( alarm ){ 
     1003                    var alarm = DataLayer.get('alarm', alarm); 
     1004                    return (alarm == "" ? (null) : alarm); 
     1005                }) 
     1006            }; 
     1007        }), 
     1008 
     1009        }; 
     1010    }); 
    8021011    return (notArray ? res[0] : res); 
    8031012    } 
     
    10891298     
    10901299    if(!(!!evtObj)) 
    1091         return undefined; 
     1300        evtObj = []; 
    10921301 
    10931302    var notArray = false; 
     
    13141523 
    13151524            //occurrences = DataLayer.unique( occurrences ).sort(); 
    1316                    
    1317             for( var i = 0; i < occurrences.length; i++ ) 
    1318                 grouped[ evt.calendar ].push( DataLayer.merge( 
    1319                 { 
    1320                     id: evt.URI || evt.id+ '-' + i, 
    1321                     title: Encoder.htmlDecode(evt.summary), 
    1322                     start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
    1323                     end:   Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
    1324                     allDay: parseInt( evt.allDay ), 
    1325                     isRepeat: isRepeat, 
    1326                     occurrence: i, 
    1327                     type: evt.type, 
    1328                     calendar: evt.calendar 
    1329                     }, eventEditable(evt.id, isRepeat, i ) ) ); 
     1525                var typeEvent;   
     1526            for( var i = 0; i < occurrences.length; i++ ){ 
     1527 
     1528            typeEvent = (evt.type == 2 && evt.taskToActivity ? 3 : evt.type) 
     1529                grouped[ evt.calendar ].push( DataLayer.merge( 
     1530                { 
     1531                    id: evt.URI || evt.id+ '-' + i, 
     1532                    title: Encoder.htmlDecode(evt.summary), 
     1533                    start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1534                    end:   Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     1535                    allDay: parseInt( evt.allDay ), 
     1536                    isRepeat: isRepeat, 
     1537                    occurrence: i, 
     1538                    type: typeEvent, 
     1539                    calendar: evt.calendar 
     1540                    }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? {editable: true, disableResizing: false, disableDragging: false} : {editable: false, disableResizing: true, disableDragging: true}) )) ); 
     1541        } 
    13301542        }); 
    13311543 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js

    r6916 r6945  
    25222522                var data = { 
    25232523                        type : type == "tasks" ? "task-list" : ( type == "events" ? "event-list" : "search"), 
    2524                         html : listEvents,                                       
     2524                        html : listEvents 
    25252525                } 
    25262526                window_print.document.open();            
     
    27132713                                var data = { 
    27142714                                        type : $(this).parents('.details-event-list').hasClass("details-event") ? "event-detail" : "task-detail", 
    2715                                         html : html,                                     
     2715                                        html : html 
    27162716                                } 
    27172717                                window_print.document.open();            
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js

    r6934 r6945  
    440440                        evt.id = evt.id.split('-')[0]; 
    441441             
    442                         if(evt.type == 1){ 
    443  
    444                         if(evt.selectable){ 
    445                             if(evt.isRepeat){ 
    446                                 $.Zebra_Dialog(evt.title + ' é um evento com repetição.', { 
    447                                         'type':     'question', 
    448                                         'overlay_opacity': '0.5', 
    449                                         'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'], 
    450                                         'onClose':  function(clicked) { 
    451                                                 if(clicked == 'Editar todas ocorrências') { 
    452                                                     eventDetails( DataLayer.get( "schedulable", evt.id), true); 
    453                                                 }else{ 
    454                                                     /* 
    455                                                     * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do 
    456                                                     *DataLayer, repeat somente é usado quando se trata da criação de um evento 
    457                                                     *pela edição de uma ocorrência. 
    458                                                     */       
    459                                                     var repeat = mount_exception(evt.id, evt.occurrence); 
    460                                                                                                    
    461                                                     $('.calendar-copy-move input[name="typeEvent"]').val("3"); 
    462                                                      
    463                                                     eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat); 
    464                                                 }        
    465                                         } 
    466                                 }); 
    467                             }else{ 
    468                                 var schedulable = DataLayer.get( "schedulable", evt.id); 
    469                                 schedulable.group = evt.calendar; 
    470                                 eventDetails( schedulable, true); 
    471                             } 
     442            switch (parseInt(evt.type)){ 
     443                case 1: 
     444                    if(evt.selectable){ 
     445                        if(evt.isRepeat){ 
     446                            $.Zebra_Dialog(evt.title + ' é um evento com repetição.', { 
     447                                'type':     'question', 
     448                                'overlay_opacity': '0.5', 
     449                                'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'], 
     450                                'onClose':  function(clicked) { 
     451                                    if(clicked == 'Editar todas ocorrências') { 
     452                                        eventDetails( DataLayer.get( "schedulable", evt.id), true); 
     453                                    }else{ 
     454                                        /* 
     455                                        * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do 
     456                                        *DataLayer, repeat somente é usado quando se trata da criação de um evento 
     457                                        *pela edição de uma ocorrência. 
     458                                        */       
     459                                        var repeat = mount_exception(evt.id, evt.occurrence); 
     460                                                                                           
     461                                        $('.calendar-copy-move input[name="typeEvent"]').val("3"); 
     462                                         
     463                                        eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat); 
     464                                    }        
     465                                } 
     466                            }); 
     467                        }else{ 
     468                            var schedulable = DataLayer.get( "schedulable", evt.id); 
     469                            schedulable.group = evt.calendar; 
     470                            eventDetails( schedulable, true); 
     471                            } 
    472472                        } 
    473             }else{ 
    474                 var task = DataLayer.get( "schedulable", evt.id); 
    475                 task.group = evt.calendar; 
    476                 taskDetails( task, true); 
     473                        break; 
     474                    case 2: 
     475                        var task = DataLayer.get( "schedulable", evt.id); 
     476                        task.group = evt.calendar; 
     477                        taskDetails( task, true); 
     478                        break; 
     479                    case 3: 
     480                        var activity = DataLayer.get( "schedulable", evt.id); 
     481                        activity.group = evt.calendar; 
     482                        activityDetails( activity, true); 
     483                        break; 
    477484            } 
    478485                }, 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/activity_add.ejs

    r6881 r6945  
    11<div title="Criar Tarefa" class="div-addactivity content"> 
    2     <form method="POST" action="<%=(data.event.acl.organization || data.event.acl.write) ?  "schedulable:detail" : "schedulable:preview"%>" class="form-addevent content"> 
    3  
    4         <fieldset id="calendar_addactivity_details1"> 
    5                 <legend class="hidden">Detalhes da tarefa</legend> 
     2    <form method="POST" action="schedulable:activity" class="form-addactivity content"> 
     3 
     4        <fieldset id="group_addactivity_details1"> 
     5                <legend class="hidden">Detalhes da atividade</legend> 
    66                <p class="input-group"> 
    7                         <input type="text" class="h1" name="summary" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> value="<%= (data.event.summary) ? data.event.summary : '' %>"/> 
    8                         <% if( data.event.id ){ %> 
    9                                 <input type="hidden" class="id-event" name="idEvent" value="<%= data.event.id %>"/> 
     7                        <input type="text" class="h1" name="summary" value="<%= (data.activity.summary) ? data.activity.summary : '' %>"/> 
     8                        <% if( data.activity.id ){ %> 
     9                <input type="hidden" class="id-activity" name="idActivity" value="<%= data.activity.id %>"/> 
    1010                        <% } %> 
    11                         <% if( data.event.id && data.event.calendar ){ %> 
    12                                 <input type="hidden" class="last-calendar" name="lastCalendar" value="<%= data.event.calendar %>"/> 
     11            <% if( data.activity.id && data.activity.group ){ %> 
     12                                <input type="hidden" class="last-group" name="lastCalendar" value="<%= data.activity.group %>"/> 
    1313                        <% } %> 
     14            <input type="hidden" class="id-attendee" name="idAttendee" value="<%= data.activity.attendee[0] ? data.activity.attendee[0].id : '0'%>"/> 
    1415                </p> 
    1516                <p class="input-group date-info"> 
    16                         <input type="text" class="date start-date" value="<%= (data.event.startDate) ? data.event.startDate : '' %>" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="startDate" /> 
    17                         <input type="text" class="time start-time<%= (data.event.allDay) ? ' hidden' : '' %>" value="<%= (data.event.startHour) ? data.event.startHour : '' %>" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="startHour" />  
     17                        <input type="text" class="date start-date" value="<%= (data.activity.startDate) ? data.activity.startDate : '' %>" name="startDate" /> 
     18                        <input type="text" class="time start-time<%= (data.activity.allDay) ? ' hidden' : '' %>" value="<%= (data.activity.startHour) ? data.activity.startHour : '' %>" name="startHour" />  
    1819                        <span>até</span> 
    19                         <input type="text" class="date end-date" value="<%= (data.event.endDate) ? data.event.endDate : '' %>" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="endDate" /> 
    20                         <input type="text" class="time end-time<%= (data.event.allDay) ? ' hidden' : '' %>" value="<%= (data.event.endHour) ? data.event.endHour : '' %>" <%=(data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> name="endHour" /> 
     20                        <input type="text" class="date end-date" value="<%= (data.activity.endDate) ? data.activity.endDate : '' %>" name="endDate" /> 
     21                        <input type="text" class="time end-time<%= (data.activity.allDay) ? ' hidden' : '' %>" value="<%= (data.activity.endHour) ? data.activity.endHour : '' %>" name="endHour" /> 
    2122 
    2223                                <span class="previsao-termino">Previsão término:</span> 
    23                                 <input type="text" class="date date-previsao"> 
    24                                 <input type="text" class="time time-previsao"> 
    25  
    26                                 <a href="#" class="calendar_addactivity_details_lnk_timezone <%=((!data.event.acl.organization || !data.event.acl.write) && (data.event.id)) ? "hidden" : '' %>">Fuso horário</a> 
    27                          
    28                          
    29 <!--                    <input type="text" name="timezone" style="display: none;" />--> 
    30                         <select name="timezone" class="hidden calendar-addactivity-details-txt-timezone"> 
     24                                <input type="text" class="date date-due" name="dueDate"> 
     25                                <input type="text" class="time time-due" name="dueHour"> 
     26 
     27                                <a href="#" class="group_addactivity_details_lnk_timezone">Fuso horário</a> 
     28                         
     29                        <select name="timezone" class="hidden group-addactivity-details-txt-timezone"> 
    3130                                <option value="">- None selected -</option> 
    32                                 <% for( var tzId in data.event.timezones ){ %> 
    33                                   <option value="<%= tzId %>" <%= data.timezone === tzId ? 'selected="selected"' : '' %>><%= tzId + ' (' + data.event.timezones[ tzId ] + ')' %></option> 
     31                                <% for( var tzId in data.activity.timezones ){ %> 
     32                                  <option value="<%= tzId %>" <%= data.timezone === tzId ? 'selected="selected"' : '' %>><%= tzId + ' (' + data.activity.timezones[ tzId ] + ')' %></option> 
    3433                                <% } %> 
    3534                        </select> 
    36                          
    37                         <a class="button suggestion-hours small <%=(data.event.acl.organization || data.event.acl.write || !data.event.isAttendee) ? "hidden" : '' %>" href="#">Sugerir horário</a> 
    3835                         
    3936                </p> 
     
    4946                 
    5047                <p class="input-group activity-type"> 
    51                         <input type="checkbox" name="allDay" value="true" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> <%= (data.event.allDay) ? 'checked="checked"' : '' %>/> 
     48                        <input type="checkbox" name="allDay" value="true" <%= (data.activity.allDay) ? 'checked="checked"' : '' %>/> 
    5249                        <label for="allDay">Dia inteiro</label> 
    5350                </p> 
    5451                <div class="subitem"> 
    55                                 % Conclusão: <input type="number" class="done" value="1">  
    56                                 <span class="span_done"><input type="checkbox" class="button-repeat" /> Completo<span> 
    57                                 <select style="margin: 0 0 0 20px;"> 
    58                                         <option>Desenvolvimento</option> 
    59                                 </select> 
    60                                 <span style="margin:0 0 0 20px;">Prioridade<span>  
    61                                 <select> 
    62                                         <option>Alta</option> 
    63                                         <option selected="selected">Média</option> 
    64                                         <option>Baixa</option> 
    65                                 </select> 
    66                 </div> 
     52                % Conclusão: <input type="number" name="percentage" class="done" value="<%= data.activity.percentage %>">  
     53                <span style="margin:0 0 0 5px;">Status:<span>  
     54                <select name="activityStatus" style="margin: 0 0 0 5px;"> 
     55                    <option <%= (data.activity.activityStatus == '1') ? 'selected="selected"' : '' %> value="1">Sem ações</option> 
     56                    <option <%= (data.activity.activityStatus == '2') ? 'selected="selected"' : '' %> value="2">Em Processo</option> 
     57                    <option <%= (data.activity.activityStatus == '3') ? 'selected="selected"' : '' %> value="3">Finalizada</option> 
     58                    <option <%= (data.activity.activityStatus == '4') ? 'selected="selected"' : '' %> value="4">Cancelada</option> 
     59                </select> 
     60                <span style="margin:0 0 0 5px;">Prioridade<span>  
     61                <select name="priority"> 
     62                    <option <%= (data.activity.priority == '1') ? 'selected="selected"' : '' %> value="1">Alta</option> 
     63                    <option <%= (data.activity.priority == '2') ? 'selected="selected"' : '' %> value="2">Normal</option> 
     64                    <option <%= (data.activity.priority == '3') ? 'selected="selected"' : '' %> value="3">Baixa</option> 
     65                </select> 
     66                <span class="span_done"><img src="../prototype/modules/calendar/img/empty-status.png"/> Completo<span> 
     67        </div> 
    6768        </fieldset> 
    6869        <ul style="width: 710px"> 
    69                 <li><a href="#calendar_addactivity_details2">Detalhes da tarefa</a></li> 
    70                 <li><a href="#calendar_addactivity_details8">Tarefas</a></li> 
    71                 <li><a href="#calendar_addactivity_details4">Lembretes</a></li> 
    72                 <li><a href="#calendar_addactivity_details5">Anexos</a></li> 
    73                 <li><a href="#calendar_addactivity_details6">Histórico</a></li> 
     70                <li><a href="#group_addactivity_details2">Detalhes da atividade</a></li> 
     71                <li><a href="#group_addactivity_details8">Tarefas</a></li> 
     72                <li><a href="#group_addactivity_details4">Lembretes</a></li> 
     73                <li><a href="#group_addactivity_details5">Anexos</a></li> 
     74                <li><a href="#group_addactivity_details6">Histórico</a></li> 
    7475        </ul> 
    75         <fieldset id="calendar_addactivity_details2" class="tab-level2"> 
    76                 <legend class="hidden">Detalhes do evento</legend> 
     76        <fieldset id="group_addactivity_details2" class="tab-level2"> 
     77                <legend class="hidden">Detalhes da atividade</legend> 
    7778 
    7879                <p class="input-group"> 
    79                         <label for="calendar_addactivity_details_txtarea_description" class="for-textarea" >Descrição</label> 
    80                         <textarea name="description" <%= (data.event.acl.organization || data.event.acl.write) ? '' : 'disabled="disabled"' %> ><%=(data.event) ? data.event.description : '' %></textarea> 
     80                        <label for="group_addactivity_details_txtarea_description" class="for-textarea" >Descrição</label> 
     81                        <textarea name="description"><%=(data.activity) ? data.activity.description : '' %></textarea> 
    8182                </p> 
    8283 
    8384                <p class="input-group"> 
    84                         <label for="calendar_addactivity_details_slt_cal">Grupo</label> 
    85                                 <select> 
    86                                         <%  
    87                                           for (var i=0; i< data.event.calendars.length; i++) { 
    88                                             if(data.event.calendars[i].id != data.event.calendar && Calendar.signatureOf[data.event.calendars[i].id].isOwner != '1' && (!Calendar.signatureOf[data.event.calendars[i].id].permission.acl.write) ) 
    89                                                 continue; 
    90                                         %> 
    91                                               <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>> 
    92                                               <%= data.event.calendars[i].name %> 
    93                                               </option> 
    94                                         <% } %> 
    95                                 </select> 
    96                         <!--<select name="calendar" > 
    97                         <%  
    98                           for (var i=0; i< data.event.calendars.length; i++) { 
    99                             if(data.event.calendars[i].id != data.event.calendar && Calendar.signatureOf[data.event.calendars[i].id].isOwner != '1' && !Calendar.signatureOf[data.event.calendars[i].id].permission.acl.write) 
    100                                 continue; 
    101                         %> 
    102                               <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>> 
    103                               <%= data.event.calendars[i].name %> 
    104                               </option> 
    105                         <% } %> 
     85                        <label for="group_addactivity_details_slt_cal">Grupo</label> 
     86                        <select name="group"> 
     87                                <% for (var i=0; i< data.activity.groups.length; i++) { %> 
     88                    <option value="<%= data.activity.groups[i].id %>" <%= data.activity.groups[i].id == data.activity.group ? 'selected="selected"':'' %>> 
     89                                       <%= data.activity.groups[i].name %> 
     90                                </option> 
     91                                <% } %> 
    10692                        </select> 
    107                 --> 
    10893                </p> 
    10994                 
     
    11499                                <label class="input-group">Mostrar-me como</label> 
    115100                                <input type="radio" checked="checked"/> 
    116                                 <label for="calendar_addevent_details_rdo_status1">Dispon?vel</label> 
     101                                <label for="group_addactivity_details_rdo_status1">Dispon?vel</label> 
    117102                                <input type="radio"/> 
    118                                 <label for="calendar_addevent_details_rdo_status2">Ocupado</label> 
     103                                <label for="group_addactivity_details_rdo_status2">Ocupado</label> 
    119104                        </p> 
    120105                        --> 
     
    122107                                <label class="input-group">Privacidade</label> 
    123108                                <input type="radio" name="class" value="1" checked="checked"/> 
    124                                 <label for="calendar_addactivity_details_rdo_class1">Padrão</label> 
     109                                <label for="group_addactivity_details_rdo_class1">Padrão</label> 
    125110                                <input type="radio" name="class" value="2" /> 
    126                                 <label for="calendar_addactivity_details_rdo_class2">Público</label> 
     111                                <label for="group_addactivity_details_rdo_class2">Público</label> 
    127112                                <input type="radio" name="class" value="3" /> 
    128                                 <label for="calendar_addactivity_details_rdo_class3">Privado</label> 
     113                                <label for="group_addactivity_details_rdo_class3">Privado</label> 
    129114                        </p> 
    130115                         
     
    134119         
    135120        <div class="overflow_add_calender"> 
    136         <fieldset id="calendar_addactivity_details4" class="tab-level2"> 
     121        <fieldset id="group_addactivity_details4" class="tab-level2"> 
    137122                <legend class="hidden">Lembretes</legend> 
    138123                 
    139                 <p class="default-alarm-event <%= (!data.event.id && data.event.alarms) ? '' : 'hidden'%>"> 
     124                <p class="default-alarm-activity <%= (!data.activity.id && data.activity.alarms) ? '' : 'hidden'%>"> 
    140125                        <input type="checkbox" name="defaultAlarm" value="true" checked="checked"/> 
    141126                        <label class="input-default-alarm" for="defautAlarm">Usar alarmes padrões</label> 
     
    143128         
    144129                <ul class="activity-alarms-list"> 
    145                         <% if (data.event && data.event.alarms) { 
    146                                 for (var i=0; i< data.event.alarms.length; i++) { 
     130                        <% if (data.activity && data.activity.attendee && !!data.activity.attendee.length && data.activity.attendee[0].alarms) { 
     131                                var alarms = data.activity.attendee[0].alarms; 
     132                                for (var i=0; i< alarms.length; i++) { 
    147133                        %> 
    148134                        <li class="input-group"> 
    149                                 <label>Avisar-me por </label> 
    150                                 <select name="alarmType[]"> 
    151                                     <option value="alert" <%= data.event.alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
    152                                     <option value="mail" <%= data.event.alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option> 
    153                                     <!--<option value="sms" <%= data.event.alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option>--> 
    154                                 </select> 
    155                                 <input type="text" name="alarmTime[]" class="number input-small" value="<%= data.event.alarms[i].time %>"/> 
    156                                 <select name="alarmUnit[]"> 
    157                                         <option value="m" <%= data.event.alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
    158                                         <option value="h" <%= data.event.alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
    159                                         <option value="d" <%= data.event.alarms[i].unit=='d' ? 'selected="selected"':'' %>>Dias</option> 
    160                                 </select> 
    161                                 <input type="hidden" name="alarmId[]" value="<%=data.event.useAlarmDefault ? '' : data.event.alarms[i].id%>" /> 
    162                                 <input type="hidden" name="isDefaultAlarm[]" value="<%=data.event.useAlarmDefault ? 1 : 0%>" /> 
    163                                 <label> antes de cada evento.</label> 
     135                            <label>Avisar-me por </label> 
     136                            <select name="alarmType[]"> 
     137                                <option value="alert" <%= alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
     138                                <option value="mail" <%= alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option> 
     139                                <!--<option value="sms" <%= alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option>--> 
     140                            </select> 
     141                            <input type="text" name="alarmTime[]" class="number input-small" value="<%= alarms[i].time %>"/> 
     142                            <select name="alarmUnit[]"> 
     143                                <option value="m" <%= alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
     144                                <option value="h" <%= alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
     145                                <option value="d" <%= alarms[i].unit=='d' ? 'selected="selected"':'' %>>Dias</option> 
     146                            </select> 
     147                                <input type="hidden" name="alarmId[]" value="<%=data.activity.useAlarmDefault ? '' : alarms[i].id%>" /> 
     148                                <input type="hidden" name="isDefaultAlarm[]" value="<%=data.activity.useAlarmDefault ? 1 : 0%>" /> 
     149                                <label> antes de cada activityo.</label> 
    164150                                <a class="button remove tiny"></a> 
    165151                        </li> 
    166                         <%      } 
     152                        <%} 
    167153                           } 
    168154                        %> 
     
    173159        </div> 
    174160         
    175         <fieldset id="calendar_addactivity_details6" class="tab-level2" title="Participantes"> 
     161        <fieldset id="group_addactivity_details6" class="tab-level2" title="Participantes"> 
    176162                <div class="parent"  > 
    177163                         
     
    193179        </fieldset>      
    194180         
    195         <fieldset id="calendar_addactivity_details8" class="tab-level2" title="Tarefas"> 
     181        <fieldset id="group_addactivity_details8" class="tab-level2" title="Tarefas"> 
    196182                 
    197183        </fieldset> 
    198184 
    199185        <fieldset class="attachment-list hidden"> 
    200              <%if(data.event && data.event.attachments){ 
    201                 for (var i=0; i< data.event.attachments.length; i++) {%> 
    202                     <input type="hidden" name="fileId[]" value="<%=data.event.attachments[i].id%>"/> 
     186             <%if(data.activity && data.activity.attachments){ 
     187                for (var i=0; i< data.activity.attachments.length; i++) {%> 
     188                    <input type="hidden" name="fileId[]" value="<%=data.activity.attachments[i].id%>"/> 
    203189                <%} 
    204190            }%> 
     
    207193     
    208194<div class="overflow_add_calender"> 
    209         <fieldset id="calendar_addactivity_details5" class="tab-level2"> 
     195        <fieldset id="group_addactivity_details5" class="tab-level2"> 
    210196        <form id="fileupload" action="attachment:detail" method="POST"> 
    211197        <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload --> 
     
    213199            <div class="button-files-upload"> 
    214200                <!-- The fileinput-button span is used to style the file input field as button --> 
    215                 <%if(data.event.acl.organization || data.event.acl.write){%> 
    216                     <span class="button btn-success fileinput-button"> 
     201                 
     202                <span class="button btn-success fileinput-button"> 
    217203                    <span><i class="icon-plus icon-white"></i> Adicionar</span> 
    218204                    <input type="file" name="files[]" multiple> 
    219205                </span> 
    220                                 <%}%> 
    221                                 <%if(data.event.acl.organization || data.event.acl.write){%> 
    222                                         <button type="button" class="button btn-danger delete"> 
    223                                                 <i class="icon-trash icon-white"></i> Remover Todos 
    224                                         </button> 
    225                                 <%}%> 
     206 
     207                                <button type="button" class="button btn-danger delete"> 
     208                                        <i class="icon-trash icon-white"></i> Remover Todos 
     209                                </button> 
     210                                 
    226211            </div> 
    227212            <div id="fileupload-progress"></div> 
    228213            <div class="files-list"> 
    229214               <ul class="attachments-list"> 
    230                            <%if(data.event && data.event.attachments){ 
    231                                         for (var i=0; i< data.event.attachments.length; i++) { 
     215                           <%if(data.activity && data.activity.attachments){ 
     216                                        for (var i=0; i< data.activity.attachments.length; i++) { 
    232217                                        %> 
    233218                                                <p class="input-group arquive-info"> 
    234219                                                        <label class="lbl-archive-nome">Nome:</label> 
    235                                                         <span class="archive-nome"><%=data.event.attachments[i].name%></span> 
     220                                                        <span class="archive-nome"><%=data.activity.attachments[i].name%></span> 
    236221                                                         
    237222                                                        <label class="lbl-archive-size">Tamanho:</label> 
    238                                                         <span class="archive-size"><%=data.event.attachments[i].size%></span> 
    239                                                         <a href="../prototype/getArchive.php?attachment=<%=data.event.attachments[i].id%>" class="button tiny upload downlaod-archive">Download</a> 
    240                                                         <%if(data.event.acl.organization || data.event.acl.write){%> 
    241                                                                 <span class="button close tiny upload edit delete-upload" title="Deletar">Deletar</span> 
    242                                                         <%}%> 
    243                                                         <input type="hidden" name="fileId[]" value="<%=data.event.attachments[i].id%>"/> 
     223                                                        <span class="archive-size"><%=data.activity.attachments[i].size%></span> 
     224                                                        <a href="../prototype/getArchive.php?attachment=<%=data.activity.attachments[i].id%>" class="button tiny upload downlaod-archive">Download</a> 
     225                                                         
     226                                                        <span class="button close tiny upload edit delete-upload" title="Deletar">Deletar</span> 
     227                                                 
     228                                                        <input type="hidden" name="fileId[]" value="<%=data.activity.attachments[i].id%>"/> 
    244229                                                </p> 
    245230                                        <%} 
     
    255240        </fieldset> 
    256241</div> 
    257         <form action="../prototype/modules/calendar/export.php" method="GET" class="form-export content"> 
    258                 <input type="hidden" class="id-activity" name="activity" value="<%= data.event.id %>"/> 
     242        <form action="../prototype/modules/group/export.php" method="GET" class="form-export content"> 
     243                <input type="hidden" class="id-activity" name="activity" value="<%= data.activity.id %>"/> 
    259244        </form> 
    260245 
    261246    <div title="" class="menu-container footer-container menu-addactivity"> 
    262             <% if (data.event.id) { %> 
     247            <% if (data.activity.id) { %> 
    263248                        <a title="Exportar" class="button export" href="#">Exportar</a> 
    264249                        <a title="Excluir" class="button delete" href="#">Excluir</a> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/index.ejs

    r6881 r6945  
    158158        </div> 
    159159</body> 
    160  
    161160</html> 
    162  
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_activity_add.ejs

    r6881 r6945  
    1         <dl class="block-activity-list activitys-list"> 
    2                 <dt class="activity-list">Tarefas</dt> 
     1    <dl class="block-activity-group-select activitys-list"> 
     2        <dt class="activity-group-select">Grupo de evento</dt> 
     3        <dd class="group-select"> 
     4            <ul class="activity-group-select"> 
     5                <select name="groupFilter"> 
     6                    <%for(var i = 0; i < Calendar.groups.length; i++){%> 
     7                        <option value="<%= Calendar.groups[i].id  %>"><%= Calendar.groups[i].name %></option> 
     8                    <%}%> 
     9                </select> 
     10            </ul> 
     11        </dd> 
     12     
     13        <dt class="activity-list">Tarefas</dt> 
    314                <dd class="task-activity-list"> 
    415                        <ul class="task-activity-list"> 
    516 
    6         <% if(data.event.me.id == data.event.organizer.id && !(data.event.attendee.length > 0) ) { %> 
    7                         <li class="not-activity">Não há outros participantes.</li> 
     17        <% if(data.activity.tasks.length <= 0) { %> 
     18                <li class="not-activity">Não há outras tarefas.</li> 
    819        <% } %> 
    920                 
     
    1324 
    1425<dl class="block-add-activity search" style=""> 
    15         <dt class="add-activity search">Adicionar tarefa</dt> 
     26        <dt class="add-activity search">Pesquisar tarefa</dt> 
    1627        <dd class="add-activity"> 
    1728                <fieldset class="block-add-activity" title="Participantes"> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs

    r6876 r6945  
    7777                <li><a href="#calendar_addtask_details6">Participantes</a></li> 
    7878                <li><a href="#calendar_addtask_details7">Disponibilidade</a></li> 
    79                 <li><a href="#calendar_addtask_details8">Histórico de alterações</a></li> 
     79                <li><a href="#calendar_addtask_details8">Histórico</a></li> 
    8080        </ul> 
    8181        <fieldset id="calendar_addtask_details2" class="tab-level2"> 
     
    163163        </fieldset> 
    164164         
    165         <fieldset id="calendar_addtask_details8" class="tab-level2" title="Histórico de alterações"> 
     165        <fieldset id="calendar_addtask_details8" class="tab-level2" title="Histórico"> 
    166166                <div class="parent"  > 
    167167                         
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add_itemlist.ejs

    r6881 r6945  
    1 <li class="attendee">  
     1<%console.log(data)%> 
     2<li class="task">  
    23        <div style="overflow:hidden; width:100%; display:table;">        
    34                <div class="activity-options" style="float: right; margin: 0 10px 0 0;"> 
    4                         <a class="button edit activity-options-button-edit new ui-icon-notice">Informações</a> 
     5                        <a class="button info activity-options-button-edit new ui-icon-notice">Informações</a> 
    56                        <a class="button close new">Remover</a> 
    67                </div>   
    7                 <input class="new" type="checkbox" value="<%= data[0].id %>"> 
    8                 <input type="hidden" name="attendee[]" value="<%= data[0].id %>"> 
    9                 <input type="hidden" name="attendeeType[]" value="<%=data[0].isExternal%>"> 
    10                 <input type="hidden" name="attendeeAcl[]" value="r"> 
    11                 <input type="hidden" name="delegatedFrom[]" value="0"> 
    12                 <label title="<%= data[0].name ? data[0].name : '' %>" class="name"><%= data[0].name ? data[0].name : '' %></label> 
    13                 <label title="<%= data[0].mail ? data[0].mail : '' %>" class="mail <%= data[0].name ? 'hidden' : ''%>"><%= data[0].mail ? data[0].mail : '' %></label> 
    14         </div> 
     8                <input class="new" type="checkbox" value="<%= data[0].idTask %>"> 
     9        <input type="hidden" name="idtask[]" value="<%= data[0].idTask %>"> 
     10                <input type="hidden" name="idTaskToActivity[]" value="<%= data[0].idTaskToActivity %>"> 
     11                <label title="<%= data[0].description %>" class="name"><%= data[0].description %></label> 
    1512</li> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_search_itemlist.ejs

    r6881 r6945  
    11<% for (var i=0; i < data.length; i++) { %> 
    22<li class="ui-widget-content" title="<%=data[i]['name']%>" style="border: 0;"> 
    3         <input type="checkbox" name="opcao" /> 
    4         <input type="hidden" value="<%=data[i]['id']%>" /> 
    5         <input class="id hidden" value="<%=data[i]['id']%>"/> 
    6     <input class="isExternal hidden" value="<%=data[i]['isExternal']%>"/> 
    7  
    8     <label class="name"><%=data[i]['name']%></label> 
    9         <label class="mail hidden"><%=data[i]['mail']%></label> 
     3        <input type="checkbox" name="option" <%= (data[i].enabled) ?  '' : 'disabled="disabled"' %> value="<%= data[i].id %>" /> 
     4    <input type="hidden" name="id" value="<%=data[i]['id']%>" /> 
     5    <input type="hidden" name="taskStartDate" value="<%=data[i]['startDate']%>" /> 
     6    <input type="hidden" name="taskStartHour" value="<%=data[i]['startHour']%>" /> 
     7    <input type="hidden" name="taskEndDate" value="<%=data[i]['endDate']%>" /> 
     8    <input type="hidden" name="taskEndHour" value="<%=data[i]['endHour']%>" /> 
     9    <input type="hidden" name="taskDueDate" value="<%=data[i]['dueDate']%>" /> 
     10    <input type="hidden" name="taskDueTime" value="<%=data[i]['dueTime']%>" /> 
     11    <input type="hidden" name="taskAllDay" value="<%=data[i]['allDay']%>" /> 
     12    <input type="hidden" name="taskPercentage" value="<%=data[i]['percentage']%>" /> 
     13    <label class="description"><%=data[i]['startDate']%> - <%=data[i]['description']%></label> 
    1014</li> 
    1115<% } %> 
Note: See TracChangeset for help on using the changeset viewer.