Commit 2a3e3d37 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Transformation de la relation Domaine<-> Famille en many-to-many

parent 529b552e
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -28,9 +28,6 @@ create table metier_domaine
        constraint domaine_pk
        primary key,
    libelle               varchar(256)            not null,
    famille_id            integer
        constraint domaine_famille_professionnelle_id_fk
        references metier_familleprofessionnelle,
    type_fonction         varchar(256),
    histo_creation        timestamp default now() not null,
    histo_createur_id     integer   default 0     not null
@@ -159,6 +156,17 @@ create table metier_reference
create unique index metier_reference_id_uindex
    on metier_reference (id);

create table metier_domaine_famille
(
    domaine_id integer not null
        constraint metier_domaine_famille_metier_domaine_id_fk
            references metier_domaine,
    famille_id integer not null
        constraint metier_domaine_famille_metier_familleprofessionnelle_id_fk
            references metier_familleprofessionnelle,
    constraint metier_domaine_famille_pk
        primary key (domaine_id, famille_id)
);

----------------------------------------------------------------------------------------
-- PRIVILEGE ---------------------------------------------------------------------------
+28 −1
Original line number Diff line number Diff line
@@ -6,11 +6,16 @@

* Ajout de gardes pour le filtre des fiches métiers afin d'éviter les avertissements (indicatifs) lorsque aucune valeur de sélectionnée.
* Ajout de privilèges pour les niveaux de carrière 
* Transformation de la relation Domaine <-> Famille en relation "many to many"
* [FIX] Correction de routes erronées pour la gestion des niveaux de carrière

**Modifications de la base de donnée**

```sql

----------------------------------------------------------------
-- Ajout de privilèges pour la gestion des niveaux de carrières 
----------------------------------------------------------------
INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
VALUES ('niveaucarriere', 'Gestion des niveaux de carrière ', 1000, 'Carriere\Provider\Privilege');
INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
@@ -26,7 +31,29 @@ SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'niveaucarriere';
-- pensez à attribuer ces nouveaux privilèges

---------------------------------------------------------------------
-- Modification de la structure pour la gestion n-n metier/famille --
---------------------------------------------------------------------
create table metier_domaine_famille
(
    domaine_id integer not null
        constraint metier_domaine_famille_metier_domaine_id_fk
        references metier_domaine,
    famille_id integer not null
        constraint metier_domaine_famille_metier_familleprofessionnelle_id_fk
        references metier_familleprofessionnelle,
    constraint metier_domaine_famille_pk
        primary key (domaine_id, famille_id)
);

insert into metier_domaine_famille (domaine_id, famille_id)
with d(domaine_id, famille_id) as (
    select id as domaine_id, famille_id from metier_domaine
)
SELECT d.domaine_id, d.famille_id FROM d

alter table metier_domaine drop column famille_id;
```

**Évolution des bibliothèques**
+3 −1
Original line number Diff line number Diff line
@@ -26,7 +26,9 @@ class DomaineController extends AbstractActionController {
        $historise = $this->params()->fromQuery('historise');

        $domaines = $this->getDomaineService()->getDomaines();
        if ($famille_ !== null) $domaines = array_filter($domaines, function (Domaine $m) use ($famille_) { return $m->getFamille() === $famille_; });
        if ($famille_ !== null) $domaines = array_filter($domaines, function (Domaine $m) use ($famille_) {
            return in_array($famille_, $m->getFamilles());
        });
        if ($type !== null and $type !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($type) { return $m->getTypeFonction() === $type; });
        if ($historise !== null and $historise !== ' ') $domaines = array_filter($domaines, function (Domaine $m) use ($historise) { if ($historise === '1') return $m->estHistorise(); else return $m->estNonHistorise(); });

+5 −1
Original line number Diff line number Diff line
@@ -6,14 +6,18 @@ use Metier\Form\Domaine\DomaineForm;
use Metier\Service\Domaine\DomaineService;
use Interop\Container\ContainerInterface;
use Metier\Service\FamilleProfessionnelle\FamilleProfessionnelleService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;

class DomaineControllerFactory {

    /**
     * @param ContainerInterface $container
     * @return DomaineController
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container)
    public function __invoke(ContainerInterface $container) : DomaineController
    {
        /**
         * @var DomaineService $domaineService
+26 −67
Original line number Diff line number Diff line
@@ -3,122 +3,81 @@
namespace Metier\Entity\Db;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\Db\HistoriqueAwareTrait;

class Domaine implements HistoriqueAwareInterface {
    use HistoriqueAwareTrait;

    /** @var integer */
    private $id;
    /** @var string */
    private $libelle;
    /** @var string */
    private $typeFonction;
    /** @var FamilleProfessionnelle */
    private $famille;
    /** @var ArrayCollection */
    private $metiers;
    private ?int $id = null;
    private ?string $libelle = null;
    private ?string $typeFonction = null;

    private Collection $familles;
    private Collection $metiers;

    public function __construct()
    {
        $this->metiers = new ArrayCollection();
        $this->familles = new ArrayCollection();
    }

    /**
     * @return int
     */
    public function getId()
    public function getId() : ?int
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getLibelle()
    public function getLibelle() : ?string
    {
        return $this->libelle;
    }

    /**
     * @param string $libelle
     * @return Domaine
     */
    public function setLibelle($libelle)
    public function setLibelle(?string $libelle) : void
    {
        $this->libelle = $libelle;
        return $this;
    }

    /**
     * @return string
     */
    public function getTypeFonction()
    public function getTypeFonction() : ?string
    {
        return $this->typeFonction;
    }

    /**
     * @param string $typeFonction
     * @return Domaine
     */
    public function setTypeFonction($typeFonction)
    public function setTypeFonction(?string $typeFonction) : void
    {
        $this->typeFonction = $typeFonction;
        return $this;
    }

    /**
     * @return FamilleProfessionnelle
     * @return FamilleProfessionnelle[]
     */
    public function getFamille()
    public function getFamilles() : array
    {
        return $this->famille;
        $familles =  $this->familles->toArray();
        usort($familles, function (FamilleProfessionnelle $a, FamilleProfessionnelle $b) { return $a->getLibelle() > $b->getLibelle();});
        return $familles;
    }

    /**
     * @param FamilleProfessionnelle $famille
     * @return Domaine
     */
    public function setFamille($famille)
    {
        $this->famille = $famille;
        return $this;
    }

    /**
     * @return Metier[]
     */
    public function getMetiers()
    public function clearFamilles() : void
    {
        return $this->metiers->toArray();
        $this->familles->clear();
    }

    /**
     * @param Metier $metier
     * @return Domaine
     */
    public function addMetier($metier)
    public function addFamille(FamilleProfessionnelle $famille) : void
    {
        $this->metiers->add($metier);
        return $this;
        $this->familles->add($famille);
    }

    /**
     * @param Metier $metier
     * @return Domaine
     * @return Metier[]
     */
    public function removeMetier($metier)
    public function getMetiers() : array
    {
        $this->metiers->removeElement($metier);
        return $this;
        return $this->metiers->toArray();
    }

    /**
     * @return string
     */
    public function __toString()
    public function __toString() : string
    {
        return $this->getLibelle();
    }
Loading