diff --git a/src/UnicaenValidation/Service/ValidationInstance/ValidationInstanceService.php b/src/UnicaenValidation/Service/ValidationInstance/ValidationInstanceService.php index 1d673eb4dd60b4181f1843f5f143b5ec2af6c503..d2fe5efecff3e6bf9449996d503668880c6f0cbb 100644 --- a/src/UnicaenValidation/Service/ValidationInstance/ValidationInstanceService.php +++ b/src/UnicaenValidation/Service/ValidationInstance/ValidationInstanceService.php @@ -2,14 +2,16 @@ namespace UnicaenValidation\Service\ValidationInstance; +use Doctrine\ORM\Exception\NotSupported; +use Doctrine\ORM\Exception\ORMException; use Doctrine\ORM\NonUniqueResultException; -use Doctrine\ORM\ORMException; use Doctrine\ORM\QueryBuilder; use Laminas\Mvc\Controller\AbstractActionController; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenUtilisateur\Entity\Db\User; use UnicaenValidation\Entity\Db\ValidationInstance; +use UnicaenValidation\Entity\HasValidationsInterface; use UnicaenValidation\Service\ValidationType\ValidationTypeServiceAwareTrait; class ValidationInstanceService { @@ -105,11 +107,14 @@ class ValidationInstanceService { */ public function createQueryBuilder() : QueryBuilder { - $qb = $this->getEntityManager()->getRepository(ValidationInstance::class)->createQueryBuilder('vinstance') - ->addSelect('createur')->join('vinstance.histoCreateur', 'createur') - ->addSelect('modificateur')->join('vinstance.histoModificateur', 'modificateur') - ->addSelect('vtype')->join('vinstance.type', 'vtype') - ; + try { + $qb = $this->getEntityManager()->getRepository(ValidationInstance::class)->createQueryBuilder('vinstance') + ->addSelect('createur')->join('vinstance.histoCreateur', 'createur') + ->addSelect('modificateur')->join('vinstance.histoModificateur', 'modificateur') + ->addSelect('vtype')->join('vinstance.type', 'vtype'); + } catch (NotSupported $e) { + throw new RuntimeException("Un problème est survenu lors de la création du QueryBuilder [".ValidationInstance::class."]",0,$e); + } return $qb; } @@ -142,7 +147,7 @@ class ValidationInstanceService { try { $result = $qb->getQuery()->getOneOrNullResult(); } catch (NonUniqueResultException $e) { - throw new RuntimeException("Plusieurs ValidationInstance partagent le même id [".$id."]", 0, true); + throw new RuntimeException("Plusieurs ValidationInstance partagent le même id [".$id."]", 0, $e); } return $result; } @@ -205,6 +210,7 @@ class ValidationInstanceService { /** * @param string $code * @param string|null $valeur + * @param string|null $justification * @return ValidationInstance */ public function createWithCode(string $code, ?string $valeur = null, ?string $justification = null) : ValidationInstance @@ -219,4 +225,25 @@ class ValidationInstanceService { return $instance; } + + public function setValidationActive(HasValidationsInterface $element, string $code, ?string $value = null) : HasValidationsInterface + { + //historisation de l'état actif actuel (s'il existe) + $validationActive = $element->getValidationActiveByTypeCode($code); + if (isset($validationActive)) { + $this->historise($validationActive); + } + + //creation de la nouvelle instance + $validation = $this->createWithCode($code, $value); + + //ajout à l'element et persist + $element->addValidation($validation); + try { + $this->getEntityManager()->persist($element); + } catch (ORMException $e) { + throw new RuntimeException("Un problème est survenu lors de l'ajout de actif de [".get_class($element)."]",0,$e); + } + return $element; + } } \ No newline at end of file