Commit 49b4d8f3 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

HasIndicateursService

parent f3e37379
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
use Doctrine\ORM\Mapping\Driver\XmlDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use UnicaenIndicateur\Provider\Privilege\IndicateurPrivileges;
use UnicaenIndicateur\Service\HasIndicateurs\HasIndicateursService;
use UnicaenIndicateur\Service\HasIndicateurs\HasIndicateursServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;

return array(
@@ -39,6 +41,12 @@ return array(
        ],
    ],

    'service_manager' => [
        'factories' => [
            HasIndicateursService::class => HasIndicateursServiceFactory::class

        ],
    ],
    'form_elements' => [
        'factories' => [
        ],
+4 −2
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@ class Indicateur {
    const ENTITY_LIBRE = 'Libre';
    const ENTITY_ADAPTATIF = 'Adaptatif';

    const TOUS_LES_ROLES = "Tous les rôles";

    private ?int $id = null;
    private ?string $code = null;
    private ?string $titre = null;
@@ -31,9 +33,9 @@ class Indicateur {
    private ?int $nbElements = null;

    private ?string $perimetre = null;
    private ?string $rolesAutorises = null;
    private ?string $rolesAutorises = self::TOUS_LES_ROLES;


    const TOUS_LES_ROLES = "Tous les rôles";

    public function __construct()
    {
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ trait HasIndicateursTrait {

    private Collection $indicateurs;

    /** @return Indicateur[] */
    public function getIndicateurs(): array
    {
        return $this->indicateurs->toArray();
+65 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenIndicateur\Service\HasIndicateurs;

use DoctrineModule\Persistence\ProvidesObjectManager;
use UnicaenIndicateur\Entity\Db\Categorie;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Entity\Interface\HasIndicateursInterface;
use UnicaenIndicateur\Service\Categorie\CategorieServiceAwareTrait;
use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;

class HasIndicateursService
{
    use ProvidesObjectManager;
    use CategorieServiceAwareTrait;
    use IndicateurServiceAwareTrait;


    public function ajouterIndicateurs(HasIndicateursInterface $object, array $listing, string $key = ":object"): string
    {
        $log = "";

        foreach ($listing as $itemCategorie) {
            $categorieCode = $itemCategorie['code'];
            $categorie = $this->getCategorieService()->getCategorieByCode($categorieCode);
            if ($categorie === null) {
                $categorie = new Categorie();
                $categorie->setCode($categorieCode);
                $categorie->setLibelle($itemCategorie['libelle']);
                $this->getCategorieService()->create($categorie);
            }
            foreach ($itemCategorie['indicateurs'] as $itemIndicateur) {
                $indicateur = new Indicateur();
                $indicateur->setCode($categorie->getCode() . "__" . $itemIndicateur['code']);
                $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);
                $this->getIndicateurService()->create($indicateur);
                $this->getIndicateurService()->refresh($indicateur);
                $object->addIndicateur($indicateur);
            }
        }
        $this->getObjectManager()->flush($object);

        return $log;
    }

    public function retirerIndicateurs(HasIndicateursInterface $object): void
    {
        $indicateurs = $object->getIndicateurs();
        $categories = [];

        foreach ($indicateurs as $indicateur) {
            $categories[$indicateur->getCategorie()->getId()] = $indicateur->getCategorie();
            $this->getIndicateurService()->delete($indicateur, true);
        }
        foreach ($categories as $categorie) {
            if (empty($categorie->getIndicateurs()->toArray())) {
                $this->getCategorieService()->delete($categorie);
            }
        }
    }
}
+20 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenIndicateur\Service\HasIndicateurs;


trait HasIndicateursServiceAwareTrait
{
    private HasIndicateursService $hasIndicateursService;

    public function getHasIndicateursService(): HasIndicateursService
    {
        return $this->hasIndicateursService;
    }

    public function setHasIndicateursService(HasIndicateursService $hasIndicateursService): void
    {
        $this->hasIndicateursService = $hasIndicateursService;
    }

}
Loading