Commit 7100f01c authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Service

parent b7585fbb
Loading
Loading
Loading
Loading
+31 −4
Changes for src/UnicaenValidation/Service/ValidationInstance/ValidationInstanceService.php: 31 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -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
    {
        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')
        ;
                ->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