diff --git a/Model/Proyecto.php b/Model/Proyecto.php index c825754..7c8df4f 100644 --- a/Model/Proyecto.php +++ b/Model/Proyecto.php @@ -181,6 +181,10 @@ public function test(): bool $this->descripcion = Tools::noHtml($this->descripcion); $this->nombre = Tools::noHtml($this->nombre); + // sincronizamos editable con el estado seleccionado, tanto en el alta como en la edición + // (onChange sólo se dispara al actualizar, así que en el alta no se ejecutaría) + $this->editable = $this->getStatus()->editable; + return parent::test(); } diff --git a/Test/main/ProyectoTest.php b/Test/main/ProyectoTest.php index b2438ce..5d31103 100644 --- a/Test/main/ProyectoTest.php +++ b/Test/main/ProyectoTest.php @@ -79,6 +79,32 @@ public function testCloseProject(): void $this->assertTrue($proyecto->delete()); } + public function testCreateProjectDirectlyClosed(): void + { + // buscamos un estado no editable + $proyecto = new Proyecto(); + $closedStatus = null; + foreach ($proyecto->getAvailableStatus() as $status) { + if (false === $status->editable) { + $closedStatus = $status; + break; + } + } + $this->assertNotNull($closedStatus, 'no-closed-status-found'); + + // creamos el proyecto ya con ese estado desde el alta (no es un update) + $proyecto->nombre = 'Proyecto de prueba'; + $proyecto->descripcion = 'Este es un proyecto de prueba'; + $proyecto->idestado = $closedStatus->idestado; + $this->assertTrue($proyecto->save()); + + // comprobamos que editable se ha sincronizado también en el alta + $this->assertFalse($proyecto->editable); + + // eliminamos el proyecto + $this->assertTrue($proyecto->delete()); + } + protected function tearDown(): void { $this->logErrors();