summaryrefslogtreecommitdiff
path: root/plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php')
-rw-r--r--plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php133
1 files changed, 133 insertions, 0 deletions
diff --git a/plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php b/plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php
new file mode 100644
index 00000000..1fcf8738
--- /dev/null
+++ b/plugins/Timetrackingeditor/Model/SubtaskTimeTrackingModel.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace Kanboard\Plugin\TimetrackingEditor\Model;
+
+use Kanboard\Model\SubtaskModel;
+use Kanboard\Model\TaskModel;
+use Kanboard\Model\UserModel;
+
+/**
+ * @author Thomas Stinner
+ */
+
+class SubtaskTimeTrackingModel extends \Kanboard\Model\SubtaskTimeTrackingModel
+{
+ /**
+ * Log start time
+ *
+ * @access public
+ * @param integer $subtask_id
+ * @param integer $user_id
+ * @return boolean
+ */
+ public function logStartTimeExtended($subtask_id, $user_id, $comment, $is_billable)
+ {
+ return
+ ! $this->hasTimer($subtask_id, $user_id) &&
+ $this->db
+ ->table(self::TABLE)
+ ->insert(array('subtask_id' => $subtask_id,
+ 'user_id' => $user_id,
+ 'comment' => $comment,
+ 'is_billable' => $is_billable,
+ 'start' => time(),
+ 'end' => 0));
+ }
+
+ /**
+ * Log end time
+ *
+ * @access public
+ * @param integer $subtask_id
+ * @param integer $user_id
+ * @return boolean
+ */
+ public function logEndTimeExtended($subtask_id, $user_id, $comment, $is_billable)
+ {
+ $time_spent = $this->getTimeSpent($subtask_id, $user_id);
+
+ if ($time_spent > 0) {
+ $this->updateSubtaskTimeSpent($subtask_id, $time_spent);
+ }
+
+ return $this->db
+ ->table(self::TABLE)
+ ->eq('subtask_id', $subtask_id)
+ ->eq('user_id', $user_id)
+ ->eq('end', 0)
+ ->update(array(
+ 'end' => time(),
+ 'time_spent' => $time_spent,
+ 'comment' => $comment,
+ 'is_billable' => $is_billable
+ ));
+ }
+
+ /**
+ * Get query for task timesheet (pagination)
+ *
+ * @access public
+ * @param integer $task_id Task id
+ * @return \PicoDb\Table
+ */
+ public function getTaskQuery($task_id)
+ {
+ return $this->db
+ ->table(self::TABLE)
+ ->columns(
+ self::TABLE.'.id',
+ self::TABLE.'.subtask_id',
+ self::TABLE.'.end',
+ self::TABLE.'.start',
+ self::TABLE.'.time_spent',
+ self::TABLE.'.user_id',
+ self::TABLE.'.comment',
+ self::TABLE.'.is_billable',
+ SubtaskModel::TABLE.'.task_id',
+ SubtaskModel::TABLE.'.title AS subtask_title',
+ TaskModel::TABLE.'.project_id',
+ UserModel::TABLE.'.username',
+ UserModel::TABLE.'.name AS user_fullname'
+ )
+ ->join(SubtaskModel::TABLE, 'id', 'subtask_id')
+ ->join(TaskModel::TABLE, 'id', 'task_id', SubtaskModel::TABLE)
+ ->join(UserModel::TABLE, 'id', 'user_id', self::TABLE)
+ ->eq(TaskModel::TABLE.'.id', $task_id);
+ }
+
+ /**
+ * Update subtask time billable
+ *
+ * @access public
+ * @param integer $subtask_id
+ * @param float $time_billable
+ * @return bool
+ */
+ public function updateSubtaskTimeBillable($subtask_id, $time_billable)
+ {
+ $subtask = $this->subtaskModel->getById($subtask_id);
+
+ return $this->subtaskModel->update(array(
+ 'id' => $subtask['id'],
+ 'time_billable' => $subtask['time_billable'] + $time_billable,
+ 'task_id' => $subtask['task_id'],
+ ), false);
+ }
+
+ /**
+ * get a Subtasktimetracking entry by Id
+ *
+ * @access public
+ * @param $id the subtasktimetracking id
+ * @return array
+ */
+ public function getById($id)
+ {
+ return $this->db
+ ->table(SubtaskTimeTrackingModel::TABLE)
+ ->eq('id', $id)
+ ->findOne();
+ }
+
+
+}