From ff7de045e6bf2bad92b3d792f0fe582e00b67918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20S=C3=A1nchez?= Date: Tue, 22 Sep 2026 12:55:00 +0200 Subject: [PATCH] =?UTF-8?q?Sincroniza=20el=20estado=20editable=20en=20la?= =?UTF-8?q?=20creaci=C3=B3n=20y=20edici=C3=B3n=20de=20proyectos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://facturascripts.com/roadmap/5218 - Se actualiza la clase Proyecto para sincronizar el atributo 'editable' con el estado seleccionado al crear o editar un proyecto. - Se añade un nuevo test en ProyectoTest para verificar la creación de un proyecto con un estado no editable, asegurando que 'editable' se establece correctamente. Archivos modificados: - Proyecto.php - ProyectoTest.php --- Model/Proyecto.php | 4 ++++ Test/main/ProyectoTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) 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();