diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-02-07 19:39:39 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-02-07 19:39:39 -0500 |
commit | 2d890cbc712371f17ba4bbceb02af3c5ba04e6da (patch) | |
tree | f16630432aa7fa22ebc3784839ed77c55e96e6a8 /app/Model | |
parent | fa6d19928abcfa03861e264222dbe46ad2fdc15a (diff) |
Update task time tracking based on subtask time tracking
Diffstat (limited to 'app/Model')
-rw-r--r-- | app/Model/Base.php | 69 | ||||
-rw-r--r-- | app/Model/Subtask.php | 39 | ||||
-rw-r--r-- | app/Model/TimeTracking.php | 45 |
3 files changed, 74 insertions, 79 deletions
diff --git a/app/Model/Base.php b/app/Model/Base.php index cf5f2e9f..319e53fc 100644 --- a/app/Model/Base.php +++ b/app/Model/Base.php @@ -10,40 +10,41 @@ use Pimple\Container; * @package model * @author Frederic Guillot * - * @property \Core\Session $session - * @property \Core\Template $template - * @property \Model\Acl $acl - * @property \Model\Action $action - * @property \Model\Authentication $authentication - * @property \Model\Board $board - * @property \Model\Category $category - * @property \Model\Comment $comment - * @property \Model\CommentHistory $commentHistory - * @property \Model\Color $color - * @property \Model\Config $config - * @property \Model\DateParser $dateParser - * @property \Model\File $file - * @property \Model\Helper $helper - * @property \Model\LastLogin $lastLogin - * @property \Model\Notification $notification - * @property \Model\Project $project - * @property \Model\ProjectDuplication $projectDuplication - * @property \Model\ProjectPermission $projectPermission - * @property \Model\Subtask $subtask - * @property \Model\SubtaskHistory $subtaskHistory - * @property \Model\Swimlane $swimlane - * @property \Model\Task $task - * @property \Model\TaskCreation $taskCreation - * @property \Model\TaskDuplication $taskDuplication - * @property \Model\TaskExport $taskExport - * @property \Model\TaskFinder $taskFinder - * @property \Model\TaskHistory $taskHistory - * @property \Model\TaskPosition $taskPosition - * @property \Model\TaskValidator $taskValidator - * @property \Model\TimeTracking $timeTracking - * @property \Model\User $user - * @property \Model\UserSession $userSession - * @property \Model\Webhook $webhook + * @property \Core\Session $session + * @property \Core\Template $template + * @property \Model\Acl $acl + * @property \Model\Action $action + * @property \Model\Authentication $authentication + * @property \Model\Board $board + * @property \Model\Category $category + * @property \Model\Comment $comment + * @property \Model\CommentHistory $commentHistory + * @property \Model\Color $color + * @property \Model\Config $config + * @property \Model\DateParser $dateParser + * @property \Model\File $file + * @property \Model\Helper $helper + * @property \Model\LastLogin $lastLogin + * @property \Model\Notification $notification + * @property \Model\Project $project + * @property \Model\ProjectDuplication $projectDuplication + * @property \Model\ProjectPermission $projectPermission + * @property \Model\Subtask $subtask + * @property \Model\SubtaskHistory $subtaskHistory + * @property \Model\Swimlane $swimlane + * @property \Model\Task $task + * @property \Model\TaskCreation $taskCreation + * @property \Model\TaskDuplication $taskDuplication + * @property \Model\TaskExport $taskExport + * @property \Model\TaskFinder $taskFinder + * @property \Model\TaskHistory $taskHistory + * @property \Model\TaskPosition $taskPosition + * @property \Model\TaskValidator $taskValidator + * @property \Model\TimeTracking $timeTracking + * @property \Model\SubtaskTimeTracking $subtaskTimeTracking + * @property \Model\User $user + * @property \Model\UserSession $userSession + * @property \Model\Webhook $webhook */ abstract class Base { diff --git a/app/Model/Subtask.php b/app/Model/Subtask.php index 9ecd2c6a..1d5ed566 100644 --- a/app/Model/Subtask.php +++ b/app/Model/Subtask.php @@ -176,6 +176,9 @@ class Subtask extends Base $subtask_id = $this->persist(self::TABLE, $values); if ($subtask_id) { + + $this->updateTaskTimeTracking($values['task_id']); + $this->container['dispatcher']->dispatch( self::EVENT_CREATE, new SubtaskEvent(array('id' => $subtask_id) + $values) @@ -198,6 +201,11 @@ class Subtask extends Base $result = $this->db->table(self::TABLE)->eq('id', $values['id'])->save($values); if ($result) { + + if (isset($values['task_id'])) { + $this->updateTaskTimeTracking($values['task_id']); + } + $this->container['dispatcher']->dispatch( self::EVENT_UPDATE, new SubtaskEvent($values) @@ -260,6 +268,37 @@ class Subtask extends Base } /** + * Update task time tracking based on subtasks time tracking + * + * @access public + * @param integer $task_id Task id + * @return bool + */ + public function updateTaskTimeTracking($task_id) + { + $result = $this->db + ->table(self::TABLE) + ->eq('task_id', $task_id) + ->columns( + 'SUM(time_spent) AS total_spent', + 'SUM(time_estimated) AS total_estimated' + ) + ->findOne(); + + if (empty($result['total_spent']) && empty($result['total_estimated'])) { + return true; + } + + return $this->db + ->table(Task::TABLE) + ->eq('id', $task_id) + ->update(array( + 'time_spent' => $result['total_spent'], + 'time_estimated' => $result['total_estimated'], + )); + } + + /** * Remove * * @access public diff --git a/app/Model/TimeTracking.php b/app/Model/TimeTracking.php deleted file mode 100644 index 4ddddf12..00000000 --- a/app/Model/TimeTracking.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php - -namespace Model; - -/** - * Time tracking model - * - * @package model - * @author Frederic Guillot - */ -class TimeTracking extends Base -{ - /** - * Calculate time metrics for a task - * - * Use subtasks time metrics if not empty otherwise return task time metrics - * - * @access public - * @param array $task Task properties - * @param array $subtasks Subtasks list - * @return array - */ - public function getTaskTimesheet(array $task, array $subtasks) - { - $timesheet = array( - 'time_spent' => 0, - 'time_estimated' => 0, - 'time_remaining' => 0, - ); - - foreach ($subtasks as &$subtask) { - $timesheet['time_estimated'] += $subtask['time_estimated']; - $timesheet['time_spent'] += $subtask['time_spent']; - } - - if ($timesheet['time_estimated'] == 0 && $timesheet['time_spent'] == 0) { - $timesheet['time_estimated'] = $task['time_estimated']; - $timesheet['time_spent'] = $task['time_spent']; - } - - $timesheet['time_remaining'] = $timesheet['time_estimated'] - $timesheet['time_spent']; - - return $timesheet; - } -} |