diff --git a/Controller/EditTareaProyecto.php b/Controller/EditTareaProyecto.php index f645983..ca3d726 100644 --- a/Controller/EditTareaProyecto.php +++ b/Controller/EditTareaProyecto.php @@ -51,6 +51,9 @@ public function getPageData(): array protected function createViews() { parent::createViews(); + + // the 'nick' field is defined in Table/tareas.xml and will be loaded automatically + // set tabs position and create notes view $this->setTabsPosition('bottom'); $this->createViewsNotes(); } diff --git a/Controller/ListTareaProyecto.php b/Controller/ListTareaProyecto.php index a19396f..d0c0743 100644 --- a/Controller/ListTareaProyecto.php +++ b/Controller/ListTareaProyecto.php @@ -46,9 +46,29 @@ public function getPageData(): array protected function createViews() { $this->createViewsTasks(); + $this->createViewsMine(); $this->createViewsPrivateTasks(); } + protected function createViewsMine(string $viewName = 'ListTareaProyecto-mine') + { + $this->addView($viewName, 'Join\\TareaProyecto', 'Mis tareas', 'fa-solid fa-list-check') + ->addOrderBy(['fecha'], 'date', 2) + ->addOrderBy(['fechainicio'], 'start-date') + ->addOrderBy(['fechafin'], 'end-date') + ->addOrderBy(['nombre'], 'title') + ->addOrderBy(['descripcion'], 'description') + ->addSearchFields(['tareas.nombre', 'tareas.descripcion']); + + $status = $this->codeModel->all('tareas_fases', 'idfase', 'nombre'); + + // filtros + $this->listView($viewName) + ->addFilterPeriod('fecha', 'date', 'tareas.fecha') + ->addFilterAutocomplete('idproyecto', 'project', 'tareas.idproyecto', 'proyectos', 'idproyecto', 'nombre') + ->addFilterSelect('idfase', 'phase', 'tareas.idfase', $status); + } + protected function createViewsPrivateTasks(string $viewName = 'ListTareaProyecto-private'): void { $this->addView($viewName, 'Join\TareaProyecto', 'private', 'fa-solid fa-unlock-alt') @@ -66,6 +86,12 @@ protected function createViewsPrivateTasks(string $viewName = 'ListTareaProyecto ->addFilterPeriod('fecha', 'date', 'tareas.fecha') ->addFilterAutocomplete('idproyecto', 'project', 'tareas.idproyecto', 'proyectos', 'idproyecto', 'nombre') ->addFilterSelect('idfase', 'phase', 'tareas.idfase', $status); + + // filtro por usuario asignado + $users = $this->codeModel->all('users', 'nick', 'nick'); + if (count($users) > 1) { + $this->listView($viewName)->addFilterSelect('nick', 'user', 'tareas.nick', $users); + } } protected function createViewsTasks(string $viewName = 'ListTareaProyecto') @@ -85,6 +111,12 @@ protected function createViewsTasks(string $viewName = 'ListTareaProyecto') ->addFilterPeriod('fecha', 'date', 'tareas.fecha') ->addFilterAutocomplete('idproyecto', 'project', 'tareas.idproyecto', 'proyectos', 'idproyecto', 'nombre') ->addFilterSelect('idfase', 'phase', 'tareas.idfase', $status); + + // filtro por usuario asignado + $users = $this->codeModel->all('users', 'nick', 'nick'); + if (count($users) > 1) { + $this->listView($viewName)->addFilterSelect('nick', 'user', 'tareas.nick', $users); + } } /** @@ -106,6 +138,18 @@ protected function loadData($viewName, $view) $view->loadData('', $where); break; + case 'ListTareaProyecto-mine': + // projects accessible to the user (public in same company OR owned by user OR user assigned) + $sql = 'SELECT idproyecto FROM proyectos WHERE idempresa = ' . $this->dataBase->var2str($this->user->idempresa) + . ' UNION SELECT idproyecto FROM proyectos WHERE nick = ' . $this->dataBase->var2str($this->user->nick) + . ' UNION SELECT idproyecto FROM proyectos_users WHERE nick = ' . $this->dataBase->var2str($this->user->nick); + $where = [ + new DataBaseWhere('tareas.nick', $this->user->nick), + new DataBaseWhere('tareas.idproyecto', $sql, 'IN') + ]; + $view->loadData('', $where); + break; + case 'ListTareaProyecto-private': $sql = 'SELECT idproyecto FROM proyectos WHERE nick = ' . $this->dataBase->var2str($this->user->nick) . ' UNION SELECT idproyecto FROM proyectos_users WHERE nick = ' . $this->dataBase->var2str($this->user->nick); diff --git a/Model/Join/TareaProyecto.php b/Model/Join/TareaProyecto.php index dd81d83..dcaca83 100644 --- a/Model/Join/TareaProyecto.php +++ b/Model/Join/TareaProyecto.php @@ -50,6 +50,7 @@ protected function getFields(): array 'fechafin' => 'tareas.fechafin', 'fechainicio' => 'tareas.fechainicio', 'nombre' => 'tareas.nombre', + 'nick' => 'tareas.nick', 'idempresa' => 'proyectos.idempresa', 'privado' => 'proyectos.privado', 'editable' => 'proyectos.editable', diff --git a/Model/TareaProyecto.php b/Model/TareaProyecto.php index a35f38f..0c4345b 100644 --- a/Model/TareaProyecto.php +++ b/Model/TareaProyecto.php @@ -65,6 +65,9 @@ class TareaProyecto extends ModelClass /** @var string */ public $nombre; + /** @var string */ + public $nick; + public function clear(): void { parent::clear(); diff --git a/Table/tareas.xml b/Table/tareas.xml index 1a95d6c..106a193 100644 --- a/Table/tareas.xml +++ b/Table/tareas.xml @@ -48,6 +48,11 @@ character varying(100) NO + + nick + character varying(50) + YES + tareas_pkey PRIMARY KEY (idtarea) @@ -60,4 +65,8 @@ ca_tareas_tareas_fases FOREIGN KEY (idfase) REFERENCES tareas_fases (idfase) ON DELETE RESTRICT ON UPDATE CASCADE + + ca_tareas_users + FOREIGN KEY (nick) REFERENCES users (nick) ON DELETE SET NULL ON UPDATE CASCADE + \ No newline at end of file diff --git a/XMLView/EditTareaProyecto.xml b/XMLView/EditTareaProyecto.xml index 96ff855..79bcbf9 100644 --- a/XMLView/EditTareaProyecto.xml +++ b/XMLView/EditTareaProyecto.xml @@ -19,6 +19,11 @@ + + + + + diff --git a/XMLView/ListTareaProyecto.xml b/XMLView/ListTareaProyecto.xml index 285ea4d..7a1a8d2 100644 --- a/XMLView/ListTareaProyecto.xml +++ b/XMLView/ListTareaProyecto.xml @@ -29,11 +29,16 @@ - + + + + + +