Commit 35d2afaf authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Traitement dans un transaction pour rollback

parent c521bb63
Loading
Loading
Loading
Loading
Loading
+29 −5
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace UnicaenIndicateur\Service\HasIndicateurs;

use DoctrineModule\Persistence\ProvidesObjectManager;
use Exception;
use UnicaenIndicateur\Entity\Db\Categorie;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Entity\Interface\HasIndicateursInterface;
@@ -31,6 +32,10 @@ class HasIndicateursService
    {
        $log = "";

        $em = $this->getObjectManager();
        $conn = $em->getConnection();
        $conn->beginTransaction();

        foreach ($listing as $itemCategorie) {
            $categorieCode = $itemCategorie['code'];
            $categorie = $this->getCategorieService()->getCategorieByCode($categorieCode);
@@ -38,22 +43,41 @@ class HasIndicateursService
                $categorie = new Categorie();
                $categorie->setCode($categorieCode);
                $categorie->setLibelle($itemCategorie['libelle']);
                try {
                    $this->getCategorieService()->create($categorie);
                } catch(Exception $e) {
                    $log .= "Un problème s'est produit lors de la création de la catégorie d'indicateur [$categorieCode].\n" . $e->getMessage() . "\n";
                    $this->getObjectManager()->rollback();
                    $this->getObjectManager()->close();
                }
            }
            foreach ($itemCategorie['indicateurs'] as $itemIndicateur) {
                $indicateur = new Indicateur();
                $indicateur->setCode($categorie->getCode() . "__" . $itemIndicateur['code']);
                $indicateurCode = $categorie->getCode() . "__" . $itemIndicateur['code'];
                $indicateur->setCode($indicateurCode);
                $indicateur->setTitre($itemIndicateur['libelle']);
                $indicateur->setCategorie($categorie);
                $indicateur->setViewId('mv_indicateur_' . strtolower($indicateur->getCode()));
                $requete = str_replace($key, $object->getId(), $itemIndicateur['requete']);
                $indicateur->setRequete($requete);
                try {
                    $this->getIndicateurService()->create($indicateur);
                    $this->getIndicateurService()->refresh($indicateur);
                } catch(Exception $e) {
                    $log .= "Un problème s'est produit lors de la création de l'indicateur [$indicateurCode].<br>" . $e->getMessage() . "<br>";
                    if ($conn->isTransactionActive()) {
                        $conn->rollback();
                    }
                   $em->close();
                }
                $object->addIndicateur($indicateur);
            }
        }
        if ($conn->isTransactionActive()) {
            $conn->commit();
            $this->getObjectManager()->flush($object);
        }


        return $log;
    }