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 @@
-
+
+
+
+
+
+