From 114edb2fc45dbecfb71411a1ea8c515df9d91abc Mon Sep 17 00:00:00 2001
From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr>
Date: Thu, 9 May 2019 16:30:04 +0200
Subject: [PATCH] =?UTF-8?q?derni=C3=A8re=20modification=20avant=20changeme?=
=?UTF-8?q?nt=20import?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../config/merged/agent.config.php | 3 +
.../Application/config/merged/menu.config.php | 2 +-
.../Controller/Agent/AgentController.php | 11 ++++
.../Controller/IndexController.php | 2 +
.../src/Application/Entity/Db/Agent.php | 46 +++++++++++++++
.../src/Application/Entity/Db/AgentStatut.php | 29 ++++++++--
.../Application.Entity.Db.Agent.dcm.xml | 3 +
.../Application.Entity.Db.AgentStatut.dcm.xml | 58 +++++++++----------
.../View/Helper/AgentStatutViewHelper.php | 52 +++++++++++++++++
.../View/Helper/AgentViewHelper.php | 4 ++
.../View/Helper/FicheTypeViewHelper.php | 1 -
11 files changed, 171 insertions(+), 40 deletions(-)
create mode 100644 module/Application/src/Application/View/Helper/AgentStatutViewHelper.php
diff --git a/module/Application/config/merged/agent.config.php b/module/Application/config/merged/agent.config.php
index d72461752..76525d7f3 100644
--- a/module/Application/config/merged/agent.config.php
+++ b/module/Application/config/merged/agent.config.php
@@ -7,6 +7,7 @@ use Application\Controller\Agent\AgentControllerFactory;
use Application\Controller\AgentFichier\AgentFichierController;
use Application\Controller\AgentFichier\AgentFichierControllerFactory;
use Application\Controller\EntretienProfessionnel\EntretienProfessionnelController;
+use Application\Entity\Db\AgentStatut;
use Application\Form\Agent\AgentForm;
use Application\Form\Agent\AgentFormFactory;
use Application\Form\Agent\AgentHydrator;
@@ -16,6 +17,7 @@ use Application\Form\Agent\AgentImportFormFactory;
use Application\Provider\Privilege\AgentPrivileges;
use Application\Service\Agent\AgentService;
use Application\Service\Agent\AgentServiceFactory;
+use Application\View\Helper\AgentStatutViewHelper;
use Application\View\Helper\AgentViewHelper;
use UnicaenAuth\Guard\PrivilegeController;
use Zend\Mvc\Router\Http\Literal;
@@ -222,6 +224,7 @@ return [
'view_helpers' => [
'invokables' => [
'agent' => AgentViewHelper::class,
+ 'agentStatut' => AgentStatutViewHelper::class,
],
],
diff --git a/module/Application/config/merged/menu.config.php b/module/Application/config/merged/menu.config.php
index ef20f69eb..77a1d7d35 100644
--- a/module/Application/config/merged/menu.config.php
+++ b/module/Application/config/merged/menu.config.php
@@ -199,7 +199,7 @@ return [
'route' => 'activite',
'privileges' => ActivitePrivileges::AFFICHER,
'dropdown-header' => true,
- 'icon' => 'fas fa-angle-right'
+ 'icon' => 'fas fa-angle-right',
],
[
'label' => 'Les agents',
diff --git a/module/Application/src/Application/Controller/Agent/AgentController.php b/module/Application/src/Application/Controller/Agent/AgentController.php
index ccf818b35..b36ba1ec5 100644
--- a/module/Application/src/Application/Controller/Agent/AgentController.php
+++ b/module/Application/src/Application/Controller/Agent/AgentController.php
@@ -106,6 +106,17 @@ class AgentController extends AbstractActionController
return $this->redirect()->toRoute('agent', [], [], true);
}
+ public function afficherStatutsAction()
+ {
+ $agent = $this->getAgentService()->getRequestedAgent($this, 'agent');
+ $statuts = $agent->getStatuts();
+
+ return new ViewModel([
+ 'title' => 'Statuts de l\'agent '.$agent->getDenomination(),
+ 'status' => $statuts,
+ ]);
+ }
+
public function importerAction()
{
$form = $this->getAgentImportForm();
diff --git a/module/Application/src/Application/Controller/IndexController.php b/module/Application/src/Application/Controller/IndexController.php
index 95e82e535..1a3869c78 100755
--- a/module/Application/src/Application/Controller/IndexController.php
+++ b/module/Application/src/Application/Controller/IndexController.php
@@ -41,6 +41,8 @@ class IndexController extends AbstractActionController
}
$identity = $this->getUserService()->getConnectedUser();
+ if ($identity) {
+ }
// !TODO bouger cela pour faire plus propre ...
$agent = $this->getAgentService()->getAgentByUser($identity);
diff --git a/module/Application/src/Application/Entity/Db/Agent.php b/module/Application/src/Application/Entity/Db/Agent.php
index b81f63846..3cce04995 100644
--- a/module/Application/src/Application/Entity/Db/Agent.php
+++ b/module/Application/src/Application/Entity/Db/Agent.php
@@ -29,6 +29,8 @@ class Agent {
private $quotite;
/** @var AgentStatus */
private $status;
+ /** @var ArrayCollection (AgentStatut)*/
+ private $statuts;
/** @var Correspondance */
private $correspondance;
/** @var Corps */
@@ -47,6 +49,7 @@ class Agent {
public function __construct()
{
+ $this->statuts = new ArrayCollection();
$this->fichiers = new ArrayCollection();
}
/**
@@ -170,6 +173,34 @@ class Agent {
return $this;
}
+ /**
+ * @return AgentStatut[]
+ */
+ public function getStatuts()
+ {
+ return $this->statuts->toArray();
+ }
+
+ /**
+ * @param AgentStatut $statut
+ * @return Agent
+ */
+ public function addStatut($statut)
+ {
+ $this->statuts->add($statut);
+ return $this;
+ }
+
+ /**
+ * @param AgentStatut $statut
+ * @return Agent
+ */
+ public function removeStatut($statut)
+ {
+ $this->statuts->removeElement($statut);
+ return $this;
+ }
+
/**
* @return Correspondance
*/
@@ -336,4 +367,19 @@ class Agent {
}
return $result;
}
+
+ /**
+ * @return AgentStatut[]
+ */
+ public function getStatutsActifs()
+ {
+ $statutsActifs = [];
+ foreach ($this->statuts as $statut) {
+ if ($statut->isActif()) {
+ $statutsActifs[] = $statut;
+ }
+ }
+
+ return $statutsActifs;
+ }
}
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/Db/AgentStatut.php b/module/Application/src/Application/Entity/Db/AgentStatut.php
index 7aeb723be..0462b31cd 100644
--- a/module/Application/src/Application/Entity/Db/AgentStatut.php
+++ b/module/Application/src/Application/Entity/Db/AgentStatut.php
@@ -3,6 +3,8 @@
namespace Application\Entity\Db;
use DateTime;
+use Exception;
+use UnicaenApp\Exception\RuntimeException;
class AgentStatut {
/** @var integer */
@@ -45,8 +47,8 @@ class AgentStatut {
/** @var boolean */
private $detacheIn;
/** @var boolean */
- private $detacheOut
- /** @var boolean */;
+ private $detacheOut;
+ /** @var boolean */
private $dispo;
/** @var boolean */
private $heberge;
@@ -416,15 +418,15 @@ class AgentStatut {
}
/**
- * @return mixed
+ * @return boolean
*/
- public function getDispo()
+ public function isDispo()
{
return $this->dispo;
}
/**
- * @param mixed $dispo
+ * @param boolean $dispo
* @return AgentStatut
*/
public function setDispo($dispo)
@@ -487,5 +489,20 @@ class AgentStatut {
return $this;
}
-
+ /**
+ * @return bool
+ */
+ public function isActif()
+ {
+ if ($this->fin === null) return true;
+
+ try {
+ $today = new DateTime();
+ } catch (Exception $e) {
+ throw new RuntimeException('Problème de récupération de la date');
+
+ }
+ return $today < $this->fin;
+ }
+
}
\ No newline at end of file
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Agent.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Agent.dcm.xml
index ad1c91049..c1113ad50 100644
--- a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Agent.dcm.xml
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.Agent.dcm.xml
@@ -17,6 +17,9 @@
<many-to-one target-entity="Application\Entity\Db\AgentStatus" field="status">
<join-column name="status" referenced-column-name="id" />
</many-to-one>
+
+ <one-to-many target-entity="Application\Entity\Db\AgentStatut" mapped-by="agent" field="statuts"/>
+
<many-to-one target-entity="Application\Entity\Db\Correspondance" field="correspondance">
<join-column name="correspondance" referenced-column-name="id" />
</many-to-one>
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AgentStatut.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AgentStatut.dcm.xml
index ad1c91049..312ed26aa 100644
--- a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AgentStatut.dcm.xml
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.AgentStatut.dcm.xml
@@ -1,46 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
- <entity name="Application\Entity\Db\Agent" table="agent">
+ <entity name="Application\Entity\Db\AgentStatut" table="agent_statut">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
- <field name="nom" type="string" length="256" column="nom_usuel" nullable="false"/>
- <field name="prenom" type="string" length="256" column="prenom" nullable="false"/>
- <field name="dateDebut" type="datetime" column="date_debut" nullable="true"/>
- <field name="dateFin" type="datetime" column="date_fin" nullable="true"/>
- <field name="quotite" type="integer" column="quotite" nullable="true"/>
- <field name="numeroPoste" type="string" length="256" column="numero_poste" nullable="true"/>
- <field name="missionsComplementaires" type="string" length="2048" column="missions_complementaires" nullable="true"/>
+ <field name="sourceName" type="string" length="64" column="source_name" nullable="true"/>
+ <field name="sourceId" type="integer" column="source_id" nullable="true"/>
- <many-to-one target-entity="Application\Entity\Db\AgentStatus" field="status">
- <join-column name="status" referenced-column-name="id" />
+ <field name="idOrigine" type="string" length="256" column="id_origine" nullable="true"/>
+ <many-to-one target-entity="Application\Entity\Db\Agent" field="agent">
+ <join-column name="agent_id" referenced-column-name="id"/>
</many-to-one>
- <many-to-one target-entity="Application\Entity\Db\Correspondance" field="correspondance">
- <join-column name="correspondance" referenced-column-name="id" />
- </many-to-one>
- <many-to-one target-entity="Application\Entity\Db\Corps" field="corps">
- <join-column name="corps" referenced-column-name="id" />
- </many-to-one>
- <many-to-one target-entity="Application\Entity\Db\Grade" field="grade">
- <join-column name="grade" referenced-column-name="id" />
+ <many-to-one target-entity="Application\Entity\Db\Structure" field="structure">
+ <join-column name="structure_id" referenced-column-name="id"/>
</many-to-one>
+ <field name="debut" type="datetime" column="debut" nullable="false"/>
+ <field name="fin" type="datetime" column="fin" nullable="true"/>
- <many-to-many field="fichiers" target-entity="Fichier\Entity\Db\Fichier" inversed-by="fichier" fetch="LAZY">
- <join-table name="agent_fichier">
- <join-columns>
- <join-column name="agent" referenced-column-name="id"/>
- </join-columns>
- <inverse-join-columns>
- <join-column name="fichier" referenced-column-name="id"/>
- </inverse-join-columns>
- </join-table>
- </many-to-many>
-
- <many-to-one target-entity="Utilisateur\Entity\Db\User" field="utilisateur">
- <join-column name="utilisateur" referenced-column-name="id" />
- </many-to-one>
+ <field name="titulaire" type="boolean" column="titulaire" nullable="true"/>
+ <field name="cdi" type="boolean" column="cdi" nullable="true"/>
+ <field name="cdd" type="boolean" column="cdd" nullable="true"/>
+ <field name="vacataire" type="boolean" column="vacataire" nullable="true"/>
+ <field name="enseignant" type="boolean" column="enseignant" nullable="true"/>
+ <field name="administratif" type="boolean" column="administratif" nullable="true"/>
+ <field name="chercheur" type="boolean" column="chercheur" nullable="true"/>
+ <field name="etudiant" type="boolean" column="etudiant" nullable="true"/>
+ <field name="auditeurLibre" type="boolean" column="auditeur_libre" nullable="true"/>
+ <field name="doctorant" type="boolean" column="doctorant" nullable="true"/>
+ <field name="detacheIn" type="boolean" column="detache_in" nullable="true"/>
+ <field name="detacheOut" type="boolean" column="detache_out" nullable="true"/>
+ <field name="dispo" type="boolean" column="dispo" nullable="true"/>
+ <field name="heberge" type="boolean" column="heberge" nullable="true"/>
+ <field name="emerite" type="boolean" column="emerite" nullable="true"/>
+ <field name="retraite" type="boolean" column="retraite" nullable="true"/>
</entity>
</doctrine-mapping>
diff --git a/module/Application/src/Application/View/Helper/AgentStatutViewHelper.php b/module/Application/src/Application/View/Helper/AgentStatutViewHelper.php
new file mode 100644
index 000000000..92cd89907
--- /dev/null
+++ b/module/Application/src/Application/View/Helper/AgentStatutViewHelper.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Application\View\Helper;
+
+use Application\Entity\Db\AgentStatut;
+use Zend\View\Helper\AbstractHelper;
+
+class AgentStatutViewHelper extends AbstractHelper
+{
+
+ /**
+ * @param AgentStatut $statut
+ * @return string
+ */
+ public function render($statut, $args = [])
+ {
+ $texte = '';
+
+ $texte .= '<div style="border: solid grey 1px; margin: 2px; padding: 2px; border-radius: 5px;">';
+
+ if (!isset($args['show_id']) || $args['show_id'] !== false) $texte .= '<span class="badge">'. $statut->getIdOrigine(). '</span> ';
+ if (!isset($args['show_agent']) || $args['show_agent'] !== false) $texte .= '<span class="badge">'. $statut->getAgent()->getDenomination(). '</span> ';
+ if (!isset($args['show_structure']) || $args['show_structure'] == true) $texte .= '<span class="badge">'. $statut->getStructure()->getLibelleLong(). '</span> ';
+ $texte .= ($statut->getDebut())?$statut->getDebut()->format('d/m/Y'):'---';
+ $texte .= '→';
+ $texte .= ($statut->getFin())?$statut->getFin()->format('d/m/Y'):'---';
+
+ $texte .= '<ul>';
+ if ($statut->isTitulaire()) $texte .='<li>Titulaire</li>';
+ if ($statut->isCdi()) $texte .='<li>C.D.I.</li>';
+ if ($statut->isCdd()) $texte .='<li>C.D.D.</li>';
+ if ($statut->isVacataire()) $texte .='<li>Vacataire</li>';
+ if ($statut->isEnseignant()) $texte .='<li>Enseignant</li>';
+ if ($statut->isAdministratif()) $texte .='<li>Administratif</li>';
+ if ($statut->isChercheur()) $texte .='<li>Chercheur</li>';
+ if ($statut->isEtudiant()) $texte .='<li>Etudiant</li>';
+ if ($statut->isAuditeurLibre()) $texte .='<li>Auditeur libre</li>';
+ if ($statut->isDoctorant()) $texte .='<li>Doctorant</li>';
+ if ($statut->isDetacheIn()) $texte .='<li>Détaché (in)</li>';
+ if ($statut->isDetacheOut()) $texte .='<li>Détaché (out)</li>';
+ if ($statut->isDispo()) $texte .='<li>Disponibilité</li>';
+ if ($statut->isHeberge()) $texte .='<li>Hébergé</li>';
+ if ($statut->isEmerite()) $texte .='<li>Émerite</li>';
+ if ($statut->isRetraite()) $texte .='<li>Retraité</li>';
+ $texte .= '</ul>';
+
+ $texte .= '</div>';
+
+ return $texte;
+
+ }
+}
\ No newline at end of file
diff --git a/module/Application/src/Application/View/Helper/AgentViewHelper.php b/module/Application/src/Application/View/Helper/AgentViewHelper.php
index 719087412..edaf50e3d 100644
--- a/module/Application/src/Application/View/Helper/AgentViewHelper.php
+++ b/module/Application/src/Application/View/Helper/AgentViewHelper.php
@@ -49,6 +49,10 @@ class AgentViewHelper extends AbstractHelper
$texte .= '<dd>'. $agent->getQuotite().'% </dd>';
$texte .= '<dt> Status </dt>';
$texte .= '<dd> '. $agent->getStatus() .'</dd>';
+ $texte .= '<dt> Statuts </dt> <br/>';
+ foreach ($agent->getStatutsActifs() as $statut) {
+ $texte .= '<dd> '. $this->getView()->agentStatut()->render($statut, ['show_agent' => false]) .'</dd>';
+ }
$texte .= '<dt> Correspondance </dt>';
$texte .= '<dd> '. $agent->getCorrespondance() .'</dd>';
$texte .= '<dt> Corps </dt>';
diff --git a/module/Application/src/Application/View/Helper/FicheTypeViewHelper.php b/module/Application/src/Application/View/Helper/FicheTypeViewHelper.php
index 05f104fdd..4d42f63bb 100644
--- a/module/Application/src/Application/View/Helper/FicheTypeViewHelper.php
+++ b/module/Application/src/Application/View/Helper/FicheTypeViewHelper.php
@@ -2,7 +2,6 @@
namespace Application\View\Helper;
-use Application\Entity\Db\Application;
use Application\Entity\Db\FicheMetierType;
use Application\Entity\Db\FicheMetierTypeActivite;
use Zend\View\Helper\AbstractHelper;
--
GitLab