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 | |
parent | fa6d19928abcfa03861e264222dbe46ad2fdc15a (diff) |
Update task time tracking based on subtask time tracking
Diffstat (limited to 'app')
-rw-r--r-- | app/Controller/Base.php | 1 | ||||
-rw-r--r-- | app/Controller/Task.php | 1 | ||||
-rw-r--r-- | app/Model/Base.php | 69 | ||||
-rw-r--r-- | app/Model/Subtask.php | 39 | ||||
-rw-r--r-- | app/Model/TimeTracking.php | 45 | ||||
-rw-r--r-- | app/Subscriber/Base.php | 2 | ||||
-rw-r--r-- | app/Template/task/show.php | 2 | ||||
-rw-r--r-- | app/Template/task/timesheet.php | 8 |
8 files changed, 82 insertions, 85 deletions
diff --git a/app/Controller/Base.php b/app/Controller/Base.php index ac7e8907..7f65e882 100644 --- a/app/Controller/Base.php +++ b/app/Controller/Base.php @@ -56,6 +56,7 @@ use Symfony\Component\EventDispatcher\Event; * @property \Model\TaskValidator $taskValidator * @property \Model\CommentHistory $commentHistory * @property \Model\SubtaskHistory $subtaskHistory + * @property \Model\SubtaskTimeTracking $subtaskTimeTracking * @property \Model\TimeTracking $timeTracking * @property \Model\User $user * @property \Model\UserSession $userSession diff --git a/app/Controller/Task.php b/app/Controller/Task.php index 626ac9e6..67dfe14f 100644 --- a/app/Controller/Task.php +++ b/app/Controller/Task.php @@ -72,7 +72,6 @@ class Task extends Base 'subtasks' => $subtasks, 'task' => $task, 'values' => $values, - 'timesheet' => $this->timeTracking->getTaskTimesheet($task, $subtasks), 'columns_list' => $this->board->getColumnsList($task['project_id']), 'colors_list' => $this->color->getList(), 'date_format' => $this->config->get('application_date_format'), 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; - } -} diff --git a/app/Subscriber/Base.php b/app/Subscriber/Base.php index 19f41c84..489d49b0 100644 --- a/app/Subscriber/Base.php +++ b/app/Subscriber/Base.php @@ -16,12 +16,14 @@ use Pimple\Container; * @property \Model\Notification $notification * @property \Model\Project $project * @property \Model\ProjectPermission $projectPermission + * @property \Model\ProjectActivity $projectActivity * @property \Model\ProjectAnalytic $projectAnalytic * @property \Model\ProjectDailySummary $projectDailySummary * @property \Model\Subtask $subtask * @property \Model\Task $task * @property \Model\TaskExport $taskExport * @property \Model\TaskFinder $taskFinder + * @property \Model\SubtaskTimeTracking $subtaskTimeTracking * @property \Model\UserSession $userSession * @property \Model\Webhook $webhook */ diff --git a/app/Template/task/show.php b/app/Template/task/show.php index 3bc6796f..b8243cc6 100644 --- a/app/Template/task/show.php +++ b/app/Template/task/show.php @@ -2,6 +2,6 @@ <?= $this->render('task/time', array('task' => $task, 'values' => $values, 'date_format' => $date_format, 'date_formats' => $date_formats)) ?> <?= $this->render('task/show_description', array('task' => $task)) ?> <?= $this->render('subtask/show', array('task' => $task, 'subtasks' => $subtasks)) ?> -<?= $this->render('task/timesheet', array('timesheet' => $timesheet)) ?> +<?= $this->render('task/timesheet', array('task' => $task)) ?> <?= $this->render('file/show', array('task' => $task, 'files' => $files)) ?> <?= $this->render('task/comments', array('task' => $task, 'comments' => $comments, 'project' => $project)) ?>
\ No newline at end of file diff --git a/app/Template/task/timesheet.php b/app/Template/task/timesheet.php index fa76b84d..0210be7e 100644 --- a/app/Template/task/timesheet.php +++ b/app/Template/task/timesheet.php @@ -1,13 +1,13 @@ -<?php if ($timesheet['time_estimated'] > 0 || $timesheet['time_spent'] > 0): ?> +<?php if ($task['time_estimated'] > 0 || $task['time_spent'] > 0): ?> <div class="page-header"> <h2><?= t('Time tracking') ?></h2> </div> <ul class="listing"> - <li><?= t('Estimate:') ?> <strong><?= $this->e($timesheet['time_estimated']) ?></strong> <?= t('hours') ?></li> - <li><?= t('Spent:') ?> <strong><?= $this->e($timesheet['time_spent']) ?></strong> <?= t('hours') ?></li> - <li><?= t('Remaining:') ?> <strong><?= $this->e($timesheet['time_remaining']) ?></strong> <?= t('hours') ?></li> + <li><?= t('Estimate:') ?> <strong><?= $this->e($task['time_estimated']) ?></strong> <?= t('hours') ?></li> + <li><?= t('Spent:') ?> <strong><?= $this->e($task['time_spent']) ?></strong> <?= t('hours') ?></li> + <li><?= t('Remaining:') ?> <strong><?= $this->e($task['time_estimated'] - $task['time_spent']) ?></strong> <?= t('hours') ?></li> </ul> <?php endif ?>
\ No newline at end of file |