Commit 8dd4d588 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

WIP intégration module export RH

parent 3dfa43ad
<?php
return [
'export-rh' => [
'connecteur' => 'siham',
'actif' => AppConfig::get('export-rh', 'actif') ? AppConfig::get('export-rh', 'actif') : false,
'connecteur' => AppConfig::get('export-rh', 'connecteur') ? AppConfig::get('export-rh', 'connecteur') : '',
],
];
\ No newline at end of file
......@@ -417,5 +417,13 @@ return [
'grade-edition' => 'Édition grades',
],
],
'export-rh' => [
'libelle' => 'Export RH',
'privileges' => [
'prise-en-charge' => 'Prise en charge d\'un intervenant',
'renouvellement' => 'Renouvellement d\'un intervenant',
'synchronisation' => 'Synchronisation d\'un intervenant',
],
],
];
\ No newline at end of file
......@@ -105,15 +105,6 @@ return [
],
],
],
'export' => [
'type' => 'Segment',
'options' => [
'route' => '/:intervenant/export',
'defaults' => [
'action' => 'exporter',
],
],
],
'supprimer' => [
'type' => 'Segment',
'options' => [
......@@ -514,13 +505,6 @@ return [
Privileges::INTERVENANT_SUPPRESSION,
],
],
[
'controller' => 'Application\Controller\Intervenant',
'action' => ['exporter'],
'privileges' => [
Privileges::INTERVENANT_EXPORTER,
],
],
[
'controller' => 'Application\Controller\ModificationServiceDu',
'action' => ['saisir'],
......
......@@ -68,7 +68,6 @@ class IntervenantController extends AbstractController
use DossierServiceAwareTrait;
use ImportProcessusAwareTrait;
use DifferentielServiceAwareTrait;
use SihamConnecteurAwareTrait;
public function indexAction()
......@@ -505,32 +504,6 @@ class IntervenantController extends AbstractController
public function exporterAction()
{
/* Initialisation */
$role = $this->getServiceContext()->getSelectedIdentityRole();
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
if (!$intervenant) {
throw new \LogicException('Intervenant non précisé ou inexistant');
}
/* Récupération du dossier de l'intervenant */
$intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
/* Récupération de la validation du dossier si elle existe */
$intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant);
$typeIntervenant = $intervenant->getStatut()->getTypeIntervenant()->getCode();
$sihamConnecteur = $this->getSihamConnecteur();
$intervenantRh = $sihamConnecteur->trouverIntervenantRh($intervenant);
if (!$intervenant) {
$this->flashMessenger()->addErrorMessage("Aucun intervenant n'a été trouvé dans le SIRH");
}
return compact('typeIntervenant', 'intervenant', 'intervenantRh', 'intervenantDossier', 'intervenantDossierValidation');
}
public function historiserAction()
{
/* @var $intervenant \Application\Entity\Db\Intervenant */
......
......@@ -224,5 +224,8 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges
const UNICAEN_TBL_UPDATE_ACTUPROC = 'unicaen-tbl-update-actuproc';
const WORKFLOW_DEPENDANCES_EDITION = 'workflow-dependances-edition';
const WORKFLOW_DEPENDANCES_VISUALISATION = 'workflow-dependances-visualisation';
const EXPORT_RH_PEC = 'export-rh-prise-en-charge';
const EXPORT_RH_REN = 'export-rh-renouvellement';
const EXPORT_RH_SYNC = 'export-rh-synchronisation';
}
\ No newline at end of file
<?php
/**
* @var \Application\Entity\Db\Intervenant $intervenant
* @var \ExportRh\Entity\IntervenantRh $intervenantRh
*/
$intervenant->getNomUsuel()
?>
<br/>
<div class="messenger alert alert-warning">
<?php if ($typeIntervenant == 'P'): ?>
L'export des données intervenants vers le SIRH n'est disponible que pour les vacataires.
<?php elseif (empty($intervenantDossierValidation)): ?>
Vous devez d'abord valider les données personnelles de <?= $intervenant; ?> pour pouvoir les synchroniser avec le SIRH
<?php elseif (empty($intervenantRh)): ?>
<?php endif; ?>
</div>
<?php if (!empty($intervenantRh)): ?>
<table class="table">
<thead>
<tr>
<th>Champs</th>
<th>Intervenant OSE</th>
<th>Intervenant SI RH</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Nom usuel :</td>
<td><?= $intervenant->getNomUsuel() ?></td>
<td><?= $intervenantRh->getNomUsuel() ?></td>
</tr>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Prénom :</td>
<td><?= $intervenant->getPrenom() ?></td>
<td><?= $intervenantRh->getPrenom() ?></td>
</tr>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Date de naissance :</td>
<td><?= $intervenant->getDateNaissance()->format('d/m/Y') ?></td>
<td><?= $intervenantRh->getDateNaissance()->format('d/m/Y') ?></td>
</tr>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Numéro INSEE</td>
<td><?= $intervenant->getNumeroInsee() ?></td>
<td><?= $intervenantRh->getNumeroInsee() ?></td>
</tr>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Tel pro :</td>
<td><?= $intervenant->getTelPro() ?></td>
<td><?= $intervenantRh->getTelPro() ?></td>
</tr>
<tr>
<td><input type="checkbox" checked="checked" name="nomUsuel"/> Tel perso :</td>
<td><?= $intervenant->getTelPerso() ?></td>
<td><?= $intervenantRh->getTelPerso() ?></td>
</tr>
</tbody>
</table>
<?php else: ?>
Vous devez faire une prise en charge SIHAM, car l'intervenant est inconnu du SI RH
<?php endif; ?>
......@@ -7,6 +7,7 @@ use Application\Provider\Privilege\Privileges;
$this->intervenant($intervenant)->renderTitle('Fiche');
$tabs = [
[
'id' => 'fiche',
......@@ -34,11 +35,11 @@ if ($this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_EDITION))
];
}
if ($this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_EXPORTER))) {
if ($this->isAllowed($intervenant, Privileges::EXPORT_RH_SYNC)) {
$tabs[] = [
'id' => 'export-rh',
'label' => '<span class="glyphicon glyphicon-export"></span> PEC / REN',
'url' => $this->url('intervenant/export', ['intervenant' => $intervenant->getId()]),
'label' => '<span class="glyphicon glyphicon-export"></span> Export RH',
'url' => $this->url('intervenant/exporter', ['intervenant' => $intervenant->getId()]),
'force-refresh' => true,
];
}
......
......@@ -3,21 +3,35 @@
namespace ExportRh;
use Application\Provider\Privilege\Privileges;
use ExportRh\Assertion\ExportRhAssertion;
use ExportRh\Connecteur\Siham\SihamConnecteur;
use ExportRh\Connecteur\Siham\SihamConnecteurFactory;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;
return [
'router' => [
'routes' => [
'export-rh' => [
'intervenant' => [
'type' => 'Segment',
'may_terminate' => false,
'may_terminate' => true,
'options' => [
'route' => '/export-rh',
'route' => '/intervenant',
'action' => 'index',
],
'child_routes' => [
'exporter' => [
'type' => 'Segment',
'may_terminate' => false,
'options' => [
'route' => '/:intervenant/exporter',
'defaults' => [
'controller' => Controller\ExportRhController::class,
'action' => 'exporter',
],
],
],
'administration' => [
'type' => 'Literal',
'may_terminate' => true,
......@@ -31,7 +45,7 @@ return [
'child_routes' => [
'chercher-intervenant-rh' => [
'type' => 'Literal',
'may_terminate' => true,
'may_terminate' => false,
'options' => [
'route' => '/chercher-intervenant-rh',
'defaults' => [
......@@ -49,7 +63,7 @@ return [
],
],
'navigation' => [
'navigation' => [
'default' => [
'home' => [
'pages' => [
......@@ -58,7 +72,7 @@ return [
'export-rh' => [
'label' => 'Export vers le SI RH',
'icon' => 'glyphicon glyphicon-list-alt',
'route' => 'export-rh/administration',
'route' => 'intervenant/administration',
'resource' => PrivilegeController::getResourceId(Controller\AdministrationController::class, 'index'),
'order' => 82,
'border - color' => '#111',
......@@ -66,7 +80,7 @@ return [
'chercher-intervenant-rh' => [
'label' => 'Rechercher un intervenant dans le SI RH',
'icon' => 'fa fa-graduation-cap',
'route' => 'export-rh/administration/chercher-intervenant-rh',
'route' => 'intervenant/administration/chercher-intervenant-rh',
'resource' => PrivilegeController::getResourceId(Controller\AdministrationController::class, 'chercher-intervenant-rh'),
'order' => 800,
'border-color' => '#BBCF55',
......@@ -74,27 +88,50 @@ return [
],
],
],
],
],
],
],
],
'bjyauthorize' => [
'guards' => [
'guards' => [
PrivilegeController::class => [
[
'controller' => Controller\AdministrationController::class,
'action' => ['index', 'chercher-intervenant-rh'],
'privileges' => [Privileges::INTERVENANT_STATUT_VISUALISATION],
'privileges' => [Privileges::EXPORT_RH_SYNC],
//'assertion' => Assertion\AgrementAssertion::class,
],
[
'controller' => Controller\ExportRhController::class,
'action' => ['exporter'],
'privileges' => [Privileges::EXPORT_RH_SYNC],
'assertion' => ExportRhAssertion::class,
],
],
],
'rule_providers' => [
PrivilegeRuleProvider::class => [
'allow' => [
[
'privileges' => Privileges::EXPORT_RH_SYNC,
'resources' => 'Intervenant',
'assertion' => ExportRhAssertion::class,
],
],
],
],
],
'service_manager' => [
'factories' => [
Service\ExportRhService::class => Service\ExportRhServiceFactory::class,
ExportRhAssertion::class => \UnicaenAuth\Assertion\AssertionFactory::class,
SihamConnecteur::class => SihamConnecteurFactory::class,
],
],
......@@ -105,6 +142,7 @@ return [
'controllers' => [
'factories' => [
Controller\AdministrationController::class => Controller\AdministrationControllerFactory::class,
Controller\ExportRhController::class => Controller\ExportRhControllerFactory::class,
],
],
'view_manager' => [
......
<?php
namespace ExportRh\Assertion;
use Application\Acl\Role;
use Application\Entity\Db\Intervenant;
use Application\Entity\Db\Validation;
use Application\Provider\Privilege\Privileges;
use UnicaenAuth\Assertion\AbstractAssertion;
use Zend\Permissions\Acl\Resource\ResourceInterface;
/**
* Description of ExportRhAssertion
*
* @author Antony Le Courtes <antony.lecourtes at unicaen.fr>
*/
class ExportRhAssertion extends AbstractAssertion
{
/* ---- Routage général ---- */
public function __invoke(array $page) // gestion des visibilités de menus
{
return $this->assertPage($page);
}
protected function assertEntity(ResourceInterface $entity, $privilege = null)
{
$role = $this->getRole();
// Si le rôle n'est pas renseigné alors on s'en va...
if (!$role instanceof Role) return false;
// pareil si le rôle ne possède pas le privilège adéquat
if ($privilege && !$role->hasPrivilege($privilege)) return false;
$config = $this->getMvcEvent()->getApplication()->getServiceManager()->get('Config');
$exportRhActif = $config['export-rh']['actif'];
//Si le module export rh n'est pas activé alors on renvoie toujours false
if (!$exportRhActif) {
return false;
}
return true;
}
protected function assertController($controller, $action = null, $privilege = null)
{
$role = $this->getRole();
$config = $this->getMvcEvent()->getApplication()->getServiceManager()->get('Config');
$exportRhActif = $config['export-rh']['actif'];
//Si le module export rh n'est pas activé alors on renvoie toujours false
if (!$exportRhActif) {
return false;
}
switch ($action) {
case 'exporter':
return $this->asserts([
$this->assertPrivilege(Privileges::EXPORT_RH_SYNC),
]);
break;
}
return true;
}
}
\ No newline at end of file
......@@ -24,4 +24,12 @@ interface ConnecteurRhInterface
public function prendreEnChargeIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh;
public function recupererListeUO(): ?array;
public function recupererListePositions(): ?array;
}
\ No newline at end of file
......@@ -59,21 +59,33 @@ class SihamConnecteur implements ConnecteurRhInterface
$intervenantRh = null;
if (!empty($intervenant->getCodeRh())) {
$params =
$codeRh = $intervenant->getCodeRh();
//Si code RH
if (!strstr($codeRh, 'UCN')) {
$codeRh = $this->siham->getCodeAdministration() . str_pad($codeRh, 9, '0', STR_PAD_LEFT);
}
$params =
[
'listeMatricules' => [$intervenant->getCodeRh()],
'listeMatricules' => [$codeRh],
];
$agent = $this->siham->recupererDonneesPersonnellesAgent($params);
$intervenantRh = new IntervenantRH();
$intervenantRh->setNomUsuel($agent->getNomUsuel());
$intervenantRh->setPrenom($agent->getPrenom());
$intervenantRh->setDateNaissance(new \DateTime($agent->getDateNaissance()));
$intervenantRh->setTelPerso($agent->getTelephonePerso());
$intervenantRh->setTelPro($agent->getTelephonePro());
$intervenantRh->setNumeroInsee($agent->getNumeroInseeDefinitif());
$agent = $this->siham->recupererDonneesPersonnellesAgent($params);
if (!empty($agent)) {
$intervenantRh = new IntervenantRH();
$intervenantRh->setNomUsuel($agent->getNomUsuel());
$intervenantRh->setPrenom($agent->getPrenom());
$intervenantRh->setDateNaissance(new \DateTime($agent->getDateNaissance()));
$intervenantRh->setTelPerso($agent->getTelephonePerso());
$intervenantRh->setTelPro($agent->getTelephonePro());
$intervenantRh->setNumeroInsee($agent->getNumeroInseeDefinitif());
return $intervenantRh;
}
}
return $intervenantRh;
return null;
}
......@@ -83,4 +95,35 @@ class SihamConnecteur implements ConnecteurRhInterface
}
public function recupererListeUO(): ?array
{
/*On récupére les UO de type composante*/
$params = [
'codeAdministration' => '',
'listeUO' => [[
'typeUO' => 'COP',
]],
];
$uo = $this->siham->recupererListeUO($params);
return $uo;
}
public function recupererListePositions(): ?array
{
return $this->siham->recupererListePositions();
}
public function recupererListeEmplois(): array
{
return $this->siham->recupererListeEmplois();
}
}
\ No newline at end of file
<?php
namespace ExportRh\Controller;
use Application\Controller\AbstractController;
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\DossierServiceAwareTrait;
use ExportRh\Service\ExportRhService;
use ExportRh\Service\ExportRhServiceAwareTrait;
class ExportRhController extends AbstractController
{
use ExportRhServiceAwareTrait;
use ContextServiceAwareTrait;
use DossierServiceAwareTrait;
/**
* @var ExportRhService $exportRhService
*/
protected $exportRhService;
public function __construct(ExportRhService $exportRhService)
{
$this->exportRhService = $exportRhService;
}
public function indexAction()
{
return [];
}
public function chercherIntervenantRhAction(): array
{
$connecteurRh = $this->getExportRhService();
$params = [
'nomUsuel' => '',
'prenom' => '',
];
$listIntervenantRh = [];
try {
if ($this->getRequest()->isPost()) {
$nomUsuel = $this->getRequest()->getPost('nomUsuel');
$prenom = $this->getRequest()->getPost('prenom');
$insee = $this->getRequest()->getPost('insee');
$listIntervenantRh = $connecteurRh->getListIntervenantRh($nomUsuel, $prenom, $insee);
}
} catch (SihamException $e) {
$this->flashMessenger()->addErrorMessage($e->getMessage());
}
return compact('listIntervenantRh');
}
public function exporterAction()
{
/* Initialisation */
$role = $this->getServiceContext()->getSelectedIdentityRole();
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
if (!$intervenant) {
throw new \LogicException('Intervenant non précisé ou inexistant');
}
/* Récupération du dossier de l'intervenant */
$intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
/* Récupération de la validation du dossier si elle existe */
$intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant);
$typeIntervenant = $intervenant->getStatut()->getTypeIntervenant()->getCode();
$intervenantRh = $this->exportRhService->getIntervenantRh($intervenant);
if (!$intervenantRh) {
$this->flashMessenger()->addErrorMessage("Aucun intervenant n'a été trouvé dans le SIRH");
}
//Récupération des unités organisationnelles SIHAM dans le cadre d'une prise en charge
$uo = $this->exportRhService->getListeUO();
$positions = $this->exportRhService->getListePositions();
$emplois = $this->exportRhService->getListeEmplois();