diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 9007a51..27fcb36 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -54,8 +54,7 @@ final class BackendController extends Controller $view->setTemplate('/Modules/Tasks/Theme/Backend/task-dashboard'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001101001, $request, $response)); - $open = TaskMapper::getOpen($request->getHeader()->getAccount()); - $tasks = TaskMapper::getNewest(25); + $tasks = TaskMapper::getAny($request->getHeader()->getAccount()); $view->addData('tasks', $tasks); diff --git a/Models/TaskElementMapper.php b/Models/TaskElementMapper.php index ac85bcb..3eb80cb 100644 --- a/Models/TaskElementMapper.php +++ b/Models/TaskElementMapper.php @@ -101,7 +101,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static $createdAt = 'task_created_at'; + protected static $createdAt = 'task_element_created_at'; /** * Primary field name. diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index 26959b5..81bda66 100644 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -127,7 +127,7 @@ final class TaskMapper extends DataMapperAbstract protected static $primaryField = 'task_id'; /** - * Get open tasks + * Get open tasks by createdBy * * @param int $user User * @@ -135,7 +135,7 @@ final class TaskMapper extends DataMapperAbstract * * @since 1.0.0 */ - public static function getOpen(int $user) : array + public static function getOpenCreatedBy(int $user) : array { $query = self::getQuery(); $query->where(self::$table . '.task_created_by', '=', $user) @@ -144,6 +144,158 @@ final class TaskMapper extends DataMapperAbstract return self::getAllByQuery($query); } + /** + * Get open tasks for user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getOpenTo(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(self::$table . '.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); + + return self::getAllByQuery($query); + } + + /** + * Get open tasks for mentioned user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getOpenAny(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(self::$table . '.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); + // todo: ->orWhere(self::$table . '.createdBy', '=', $user) this needs a where condition so we can create (...) or created by + + return self::getAllByQuery($query); + } + + /** + * Get open tasks by cc + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getOpenCC(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(self::$table . '.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); + + return self::getAllByQuery($query); + } + + /** + * Get tasks created by user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getCreatedBy(int $user) : array + { + $query = self::getQuery(); + $query->where(self::$table . '.task_created_by', '=', $user); + + return self::getAllByQuery($query); + } + + /** + * Get tasks sent to user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getTo(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); + + return self::getAllByQuery($query); + } + + /** + * Get tasks cc to user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getCC(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); + + return self::getAllByQuery($query); + } + + /** + * Get tasks that have something to do with the user + * + * @param int $user User + * + * @return array + * + * @since 1.0.0 + */ + public static function getAny(int $user) : array + { + $query = self::getQuery(); + $query->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) + ->orderBy(TaskElementMapper::getTable() . '.' . TaskElementMapper::getCreatedAt(), 'DESC'); + + return self::getAllByQuery($query); + } + /** * Count unread task * @@ -159,10 +311,14 @@ final class TaskMapper extends DataMapperAbstract $query = new Builder(self::$db); $query->prefix(self::$db->getPrefix()) - ->count() + ->count('*') ->from(self::$table) - ->where(self::$table . '.task_created_by', '=', $user) - ->andWhere(self::$table . '.task_status', '=', TaskStatus::OPEN); + ->innerJoin(TaskElementMapper::getTable()) + ->on(self::$table . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') + ->innerJoin(AccountRelationMapper::getTable()) + ->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') + ->where(self::$table . '.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); $sth = self::$db->con->prepare($query->toSql()); $sth->execute(); diff --git a/Theme/Backend/task-dashboard.tpl.php b/Theme/Backend/task-dashboard.tpl.php index 3de432a..3949705 100644 --- a/Theme/Backend/task-dashboard.tpl.php +++ b/Theme/Backend/task-dashboard.tpl.php @@ -21,7 +21,7 @@ $tasks = $this->getData('tasks'); echo $this->getData('nav')->render(); ?>
| = $this->getHtml('Received') ?> | 0 - |
|---|---|
| = $this->getHtml('Created') ?> | 0 - |
| = $this->getHtml('Forwarded') ?> | 0 - |
| = $this->getHtml('AverageAmount') ?> | 0 - |
| = $this->getHtml('AverageProcessTime') ?> | 0 - |
| = $this->getHtml('InTime') ?> | 0 - |