diff --git a/module/Application/config/merged/agent.config.php b/module/Application/config/merged/agent.config.php index d7246175259f5b1cdb4f489f5b7dbc726c7ef352..76525d7f37f038881925d2ce90a5cc751ba20fa3 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 ef20f69ebc23bad689ce6da01f1bf91822451857..77a1d7d35b6240fea2a7112028bb094408a9e5d6 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 ccf818b35c901bf74b816426e0805db0c8c8d7d3..b36ba1ec51878d30c3b32b643f98e702338d0759 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 95e82e535528d24a8568fcd24e5ab723f4463118..1a3869c78e04da3a894d0fc479628fbcc2f0dce1 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 b81f638462f4016787ff9d3259b2b3581fc3255f..3cce0499507c782884ff7b86fb9f7c77a2d60463 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 7aeb723be433be08e066e0674e181366fb76014d..0462b31cd73cc1ba5d3b3bbd62144f6df43cc4c0 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 ad1c9104982d3d5f2ee9d072019518840ef4ba00..c1113ad50e77a265b595f1061652ab4d4c4d09cc 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 ad1c9104982d3d5f2ee9d072019518840ef4ba00..312ed26aa2e518ee0fcb622c947edd339c148cf2 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 0000000000000000000000000000000000000000..92cd89907b7bf8c08153341ab9f4d787cedb449f --- /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 7190874122ee52f659dc7d492a4dd589430fa082..edaf50e3d8e64114bbeaa73330f5d19963f5bebf 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 05f104fdd90f5acb5347e5d442d9b5a0c1d77595..4d42f63bb490d010cad0c547ffe39287e656a661 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;