예제 #1
0
 public function deepCopy($destProject_id = 0, $destTask_id = 0)
 {
     global $AppUI;
     $children = $this->getChildren();
     $newObj = $this->copy($destProject_id, $destTask_id);
     $new_id = $newObj->task_id;
     if (!empty($children)) {
         $tempTask = new CTask();
         foreach ($children as $child) {
             $tempTask->load($child);
             $tempTask->htmlDecode($child);
             $newChild = $tempTask->deepCopy($destProject_id, $new_id);
             $newChild->store($AppUI);
         }
     }
     return $newObj;
 }
예제 #2
0
    } else {
        $AppUI->setMsg('deleted', UI_MSG_ALERT);
    }
    $AppUI->redirect();
} else {
    $obj->task_log_costcode = cleanText($obj->task_log_costcode);
    if ($msg = $obj->store()) {
        $AppUI->setMsg($msg, UI_MSG_ERROR);
        $AppUI->redirect();
    } else {
        $AppUI->setMsg(@$_POST['task_log_id'] ? 'updated' : 'inserted', UI_MSG_OK, true);
    }
}
$task = new CTask();
$task->load($obj->task_log_task);
$task->htmlDecode();
$task->check();
$task_end_date = new CDate($task->task_end_date);
$task->task_percent_complete = dPgetParam($_POST, 'task_percent_complete', null);
if (dPgetParam($_POST, 'task_end_date', '') != '') {
    $new_date = new CDate($_POST['task_end_date']);
    $new_date->setTime($task_end_date->hour, $task_end_date->minute, $task_end_date->second);
    $task->task_end_date = $new_date->format(FMT_DATETIME_MYSQL);
}
if ($task->task_percent_complete >= 100 && (!$task->task_end_date || $task->task_end_date == '0000-00-00 00:00:00')) {
    $task->task_end_date = $obj->task_log_date;
}
if ($msg = $task->store()) {
    $AppUI->setMsg($msg, UI_MSG_ERROR, true);
}
$new_task_end = new CDate($task->task_end_date);
예제 #3
0
 function deepMove($destProject_id = 0, $destTask_id = 0)
 {
     $children = $this->getChildren();
     $this->move($destProject_id, $destTask_id);
     if (!empty($children)) {
         foreach ($children as $child) {
             $tempChild = new CTask();
             $tempChild->peek($child);
             $tempChild->htmlDecode($child);
             $tempChild->deepMove($destProject_id, $this->task_id);
             $tempChild->store();
         }
     }
     $this->store();
 }
예제 #4
0
 function updateDynamics($fromChildren = false)
 {
     //Has a parent or children, we will check if it is dynamic so that it's info is updated also
     $q =& new DBQuery();
     $modified_task = new CTask();
     if ($fromChildren) {
         $modified_task =& $this;
     } else {
         $modified_task->load($this->task_parent);
         $modified_task->htmlDecode();
     }
     if ($modified_task->task_dynamic == 1) {
         //Update allocated hours based on children with duration type of 'hours'
         $q->addTable($this->_tbl);
         $q->addQuery('SUM(task_duration * task_duration_type)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_duration_type = 1 ');
         $q->addGroup('task_parent');
         $sql = $q->prepare();
         $q->clear();
         $children_allocated_hours1 = (double) db_loadResult($sql);
         /*
          * Update allocated hours based on children with duration type of 'days'
          * use the daily working hours instead of the full 24 hours to calculate 
          * dynamic task duration!
          */
         $q->addTable($this->_tbl);
         $q->addQuery(' SUM(task_duration * ' . dPgetConfig('daily_working_hours') . ')');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_duration_type <> 1 ');
         $q->addGroup('task_parent');
         $sql = $q->prepare();
         $q->clear();
         $children_allocated_hours2 = (double) db_loadResult($sql);
         // sum up the two distinct duration values for the children with duration type 'hrs'
         // and for those with the duration type 'day'
         $children_allocated_hours = $children_allocated_hours1 + $children_allocated_hours2;
         if ($modified_task->task_duration_type == 1) {
             $modified_task->task_duration = round($children_allocated_hours, 2);
         } else {
             $modified_task->task_duration = round($children_allocated_hours / dPgetConfig('daily_working_hours'), 2);
         }
         //Update worked hours based on children
         $q->addTable('tasks', 't');
         $q->innerJoin('task_log', 'tl', 't.task_id = tl.task_log_task');
         $q->addQuery('SUM(task_log_hours)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_dynamic <> 1 ');
         $sql = $q->prepare();
         $q->clear();
         $children_hours_worked = (double) db_loadResult($sql);
         //Update worked hours based on dynamic children tasks
         $q->addTable('tasks');
         $q->addQuery('SUM(task_hours_worked)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_dynamic = 1 ');
         $sql = $q->prepare();
         $q->clear();
         $children_hours_worked += (double) db_loadResult($sql);
         $modified_task->task_hours_worked = $children_hours_worked;
         //Update percent complete
         $q->addTable('tasks');
         $q->addQuery('SUM(task_percent_complete * task_duration * task_duration_type)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_duration_type = 1 ');
         $sql = $q->prepare();
         $q->clear();
         $real_children_hours_worked = (double) db_loadResult($sql);
         $q->addTable('tasks');
         $q->addQuery('SUM(task_percent_complete * task_duration * task_duration_type)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND task_duration_type <> 1 ');
         $sql = $q->prepare();
         $q->clear();
         $real_children_hours_worked += (double) db_loadResult($sql);
         $total_hours_allocated = (double) ($modified_task->task_duration * ($modified_task->task_duration_type > 1 ? dPgetConfig('daily_working_hours') : 1));
         if ($total_hours_allocated > 0) {
             $modified_task->task_percent_complete = ceil($real_children_hours_worked / $total_hours_allocated);
         } else {
             $q->addTable('tasks');
             $q->addQuery('AVG(task_percent_complete)');
             $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id);
             $sql = $q->prepare();
             $q->clear();
             $modified_task->task_percent_complete = db_loadResult($sql);
         }
         //Update start date
         $q->addTable('tasks');
         $q->addQuery('MIN(task_start_date)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND ! isnull(task_start_date)' . " AND task_start_date <>\t'0000-00-00 00:00:00'");
         $sql = $q->prepare();
         $q->clear();
         $d = db_loadResult($sql);
         if ($d) {
             $modified_task->task_start_date = $d;
         } else {
             $modified_task->task_start_date = '0000-00-00 00:00:00';
         }
         //Update end date
         $q->addTable('tasks');
         $q->addQuery('MAX(task_end_date)');
         $q->addWhere('task_parent = ' . $modified_task->task_id . ' AND task_id <> ' . $modified_task->task_id . ' AND ! isnull(task_end_date)');
         $sql = $q->prepare();
         $q->clear();
         $modified_task->task_end_date = db_loadResult($sql);
         //If we are updating a dynamic task from its children we don't want to store() it
         //when the method exists the next line in the store calling function will do that
         if ($fromChildren == false) {
             $modified_task->store();
         }
     }
 }