Commit 0654421c authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Gestion des différents cas : PEC, REN, ou synchronisation et affinage de l'UX

parent 01bd2b28
......@@ -189,9 +189,12 @@ class IntervenantController extends AbstractController
$this->getProcessusPlafond()->controle($intervenant, $typeVolumeHoraire);
$campagneSaisie = $this->getServiceCampagneSaisie()->getBy($intervenant->getStatut()->getTypeIntervenant(), $typeVolumeHoraire);
if (!$campagneSaisie->estOuverte()) {
die;
$role = $this->getServiceContext()->getSelectedIdentityRole();
if ($role->getIntervenant()) {
$this->flashMessenger()->addErrorMessage($campagneSaisie->getMessage($role));
} else {
$this->flashMessenger()->addWarningMessage($campagneSaisie->getMessage($role));
......
......@@ -204,4 +204,5 @@ class IntervenantViewHelper extends AbstractHtmlElement
return $statuts;
}
}
\ No newline at end of file
......@@ -56,6 +56,17 @@ return [
],
],
],
'sync' => [
'type' => 'Segment',
'may_terminate' => false,
'options' => [
'route' => '/:intervenant/sync',
'defaults' => [
'controller' => Controller\ExportRhController::class,
'action' => 'synchroniser',
],
],
],
'administration' => [
'type' => 'Literal',
'may_terminate' => true,
......@@ -131,7 +142,7 @@ return [
],
[
'controller' => Controller\ExportRhController::class,
'action' => ['exporter', 'prise-en-charge', 'renouvellement'],
'action' => ['exporter', 'prise-en-charge', 'renouvellement', 'synchroniser'],
'privileges' => [Privileges::EXPORT_RH_SYNC],
'assertion' => ExportRhAssertion::class,
......
......@@ -13,7 +13,15 @@ interface ConnecteurRhInterface
public function trouverIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh;
public function recupererIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh;
public function recupererDonneesAdministrativesIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array;
public function recupererAffectationEnCoursIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array;
......@@ -21,6 +29,34 @@ interface ConnecteurRhInterface
public function renouvellerIntervenantRh(\Application\Entity\Db\Intervenant $intervenant, array $postData): ?string;
public function synchroniserDonneesPersonnelles(\Application\Entity\Db\Intervenant $intervenant, $datas): bool;
public function recupererListeUO(): ?array;
public function recupererListePositions(): ?array;
public function recupererListeEmplois(): ?array;
public function recupererListeStatuts(): ?array;
public function recupererListeModalites(): ?array;
public function getConnecteurName(): string;
......
......@@ -11,6 +11,7 @@ use ExportRh\Form\Fieldset\SihamFieldset;
use UnicaenSiham\Exception\SihamException;
use UnicaenSiham\Service\Siham;
use Zend\Form\Fieldset;
use Zend\Validator\Date;
class SihamConnecteur implements ConnecteurRhInterface
......@@ -38,8 +39,7 @@ class SihamConnecteur implements ConnecteurRhInterface
];
$listIntervenantRh = [];
//$result = $this->siham->rechercherAgent($params);
$result = $this->siham->recupererListeAgents($params);
$result = $this->siham->recupererListeAgents($params);
if (!empty($result)) {
foreach ($result as $v) {
......@@ -60,12 +60,12 @@ class SihamConnecteur implements ConnecteurRhInterface
public function trouverIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh
public function recupererIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh
{
if (!empty($intervenant->getCodeRh())) {
$codeRh = $intervenant->getCodeRh();
//Si code RH ne contient pas UCN alors on le reformate
//Si code RH ne contient pas UCN alors on le reformate par rapport au masque matricule de SIHAM
if (!strstr($codeRh, 'UCN')) {
$codeRh = $this->siham->getCodeAdministration() . str_pad($codeRh, 9, '0', STR_PAD_LEFT);
}
......@@ -81,10 +81,17 @@ class SihamConnecteur implements ConnecteurRhInterface
$intervenantRh = new IntervenantRH();
$intervenantRh->setNomUsuel($agent->getNomUsuel());
$intervenantRh->setPrenom($agent->getPrenom());
$intervenantRh->setDateNaissance(new \DateTime($agent->getDateNaissance()));
$intervenantRh->setTelPerso($agent->getTelephonePerso());
$intervenantRh->setTelPersoDateDebut($agent->getTelephonePersoDateDebut());
$intervenantRh->setTelPro($agent->getTelephonePro());
$intervenantRh->setNumeroInsee($agent->getNumeroInseeDefinitif());
$intervenantRh->setTelProDateDebut($agent->getTelephoneProDateDebut());
$intervenantRh->setEmailPro($agent->getEmailPro());
$intervenantRh->setEmailProDateDebut($agent->getEmailProDateDebut());
$intervenantRh->setEmailPerso($agent->getEmailPerso());
$intervenantRh->setEmailPersoDateDebut($agent->getEmailPersoDateDebut());
$intervenantRh->setIBAN($agent->getIban());
$intervenantRh->setBIC($agent->getBic());
$intervenantRh->setCodeRh($agent->getMatricule());
return $intervenantRh;
}
......@@ -95,7 +102,7 @@ class SihamConnecteur implements ConnecteurRhInterface
public function recupererDonneesAdministrativesIntervenantRh(\Application\Entity\Db\Intervenant $intervenant)
public function recupererDonneesAdministrativesIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array
{
try {
if (!empty($intervenant->getCodeRh())) {
......@@ -109,14 +116,15 @@ class SihamConnecteur implements ConnecteurRhInterface
$dateObservation = $intervenant->getAnnee()->getDateDebut();
$params =
[
'listeMatricules' => [$codeRh],
'dateObservation' => $intervenant->getAnnee()->getDateDebut()->format('Y-m-d'),
'listeMatricules' => [$codeRh],
'dateObservation' => $intervenant->getAnnee()->getDateDebut()->format('Y-m-d'),
'dateFinObservation' => $intervenant->getAnnee()->getDateFin()->format('Y-m-d'),
];
$donneesAdministratives = $this->siham->recupererDonneesAdministrativeAgent($params);
return $donneesAdministratives;
return (array)$donneesAdministratives;
}
return null;
......@@ -127,16 +135,85 @@ class SihamConnecteur implements ConnecteurRhInterface
public function recupererAffectationEnCours($intervenant)
public function recupererAffectationEnCoursIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array
{
$affectation = [];
$affectations = [];
$donneesAdministratives = $this->recupererDonneesAdministrativesIntervenantRh($intervenant);
if (!empty($donneesAdministratives->listeAffectations)) {
$affectation = $donneesAdministratives->listeAffectations;
if (!empty($donneesAdministratives['listeAffectations']) || !empty($donneesAdministratives->listeAffectations)) {
$listeAffectations = (isset($donneesAdministratives['listeAffectations'])) ? $donneesAdministratives['listeAffectations'] : $donneesAdministratives->listeAffectations;
foreach ($listeAffectations as $affectation) {
//On prend uniquement les affectations fonctionnelles
if ($affectation->codeTypeRattachement == 'FUN') {
$affectations[] = $affectation;
}
};
}
return $affectation;
return $affectations;
}
public function synchroniserDonneesPersonnelles(\Application\Entity\Db\Intervenant $intervenant, $datas): bool
{
try {
$intervenantRh = $this->recupererIntervenantRh($intervenant);
$dossierIntervenant = $this->getServiceDossier()->getByIntervenant($intervenant);
//Synchronisation Tel pro
if ($datas['generiqueFieldset']['telPro']) {
$params = [
'matricule' => $intervenantRh->getCodeRh(),
'numero' => $dossierIntervenant->getTelPro(),
'dateDebut' => $intervenantRh->getTelProDateDebut(),
];
$this->siham->modifierCoordonneesAgent($params, Siham::SIHAM_CODE_TYPOLOGIE_FIXE_PRO);
}
//Synchronisation Tel perso
if ($datas['generiqueFieldset']['telPerso']) {
$params = [
'matricule' => $intervenantRh->getCodeRh(),
'numero' => $dossierIntervenant->getTelPerso(),
'dateDebut' => $intervenantRh->getTelPersoDateDebut(),
];
$this->siham->modifierCoordonneesAgent($params, Siham::SIHAM_CODE_TYPOLOGIE_PORTABLE_PERSO);
}
//Synchronisation email pro
if ($datas['generiqueFieldset']['emailPro']) {
$params = [
'matricule' => $intervenantRh->getCodeRh(),
'numero' => $dossierIntervenant->getEmailPro(),
'dateDebut' => $intervenantRh->getEmailProDateDebut(),
];
$this->siham->modifierCoordonneesAgent($params, Siham::SIHAM_CODE_TYPOLOGIE_EMAIL_PRO);
}
//Synchronisation email perso
if ($datas['generiqueFieldset']['emailPerso']) {
$params = [
'matricule' => $intervenantRh->getCodeRh(),
'numero' => $dossierIntervenant->getEmailPerso(),
'dateDebut' => $intervenantRh->getEmailPersoDateDebut(),
];
$this->siham->modifierCoordonneesAgent($params, Siham::SIHAM_CODE_TYPOLOGIE_EMAIL_PERSO);
}
//TODO : Synchroniser l'adresse
return true;
} catch (SihamException $e) {
throw new \Exception($e->getMessage());
}
}
......@@ -150,6 +227,7 @@ class SihamConnecteur implements ConnecteurRhInterface
/* Récupération du dossier de l'intervenant */
$dossierIntervenant = $this->getServiceDossier()->getByIntervenant($intervenant);
/*POSITION ADMINISTRATIVE*/
$position[] =
['dateEffetPosition' => $datas['connecteurForm']['anneeUniversitaire'],
......@@ -182,6 +260,7 @@ class SihamConnecteur implements ConnecteurRhInterface
'debutAdresse' => $datas['connecteurForm']['anneeUniversitaire'],
];
//TODO : travailler les coordonnées bancaires pour la prise en charge
/*COORDONNEES BANCAIRES
$coordonnees = $this->siham->formatCoordoonneesBancairesForSiham($dossierIntervenant->getIBAN(), $dossierIntervenant->getBIC());
$coordonnees['dateDebBanque'] = $this->getRequest()->getPost('anneeUniversitaire');
......@@ -274,33 +353,49 @@ class SihamConnecteur implements ConnecteurRhInterface
/* Récupération du dossier de l'intervenant */
$dossierIntervenant = $this->getServiceDossier()->getByIntervenant($intervenant);
$currentDate = new \DateTime();
$currentMonth = $currentDate->format('m');
if ($currentMonth < 9) {
$dateEffet = $datas['connecteurForm']['anneeUniversitaire'] + 1 . $currentDate->format('-m-d');
} else {
$dateEffet = $datas['connecteurForm']['anneeUniversitaire'] . $currentDate->format('-m-d');
}
/*Formatage du matricule*/
$matricule = $intervenant->getCodeRh();
//Si code RH ne contient pas UCN alors on le reformate
if (!strstr($matricule, 'UCN')) {
$matricule = $this->siham->getCodeAdministration() . str_pad($matricule, 9, '0', STR_PAD_LEFT);
}
/*POSITION ADMINISTRATIVE*/
$position[] =
['dateEffetPosition' => $datas['connecteurForm']['anneeUniversitaire'],
['dateEffetPosition' => $dateEffet,
'position' => $datas['connecteurForm']['position']];
/*STATUT*/
$statut[] =
['dateEffetStatut' => $datas['connecteurForm']['anneeUniversitaire'],
['dateEffetStatut' => $dateEffet,
'statut' => $datas['connecteurForm']['statut']];
/*MODALITE SERVICE*/
$service[] =
['dateEffetModalite' => $datas['connecteurForm']['anneeUniversitaire'],
['dateEffetModalite' => $dateEffet,
'modalite' => $datas['connecteurForm']['modaliteService']];
$params = [
'categorieEntree' => 'ACTIVE',
'dateRenouvellement' => $datas['connecteurForm']['anneeUniversitaire'],
'dateRenouvellement' => $dateEffet,
'emploi' => $datas['connecteurForm']['emploi'],
'listeModalitesServices' => $service,
'listeStatuts' => $statut,
'listePositions' => $position,
'motifEntree' => 'REN',
'matricule' => $intervenant->getCodeRh(),
'matricule' => $matricule,
'temoinValidite' => '1',
'UO' => $datas['connecteurForm']['affectation'],
];
......@@ -340,21 +435,21 @@ class SihamConnecteur implements ConnecteurRhInterface
public function recupererListeEmplois(): array
public function recupererListeEmplois(): ?array
{
return $this->siham->recupererListeEmplois();
}
public function recupererListeStatuts(): array
public function recupererListeStatuts(): ?array
{
return $this->siham->recupererListeStatuts();
}
public function recupererListeModalites(): array
public function recupererListeModalites(): ?array
{
return $this->siham->recupererListeModalites();
}
......
......@@ -101,19 +101,14 @@ class ExportRhController extends AbstractController
*/
try {
$intervenantRh = $this->exportRhService->getIntervenantRh($intervenant);
//On a trouvé un intervenant dans le SI RH
if (!empty($intervenantRh)) {
//On a trouvé un intervenant dans le SI RH
$affectationEnCours = $this->exportRhService->getAffectationEnCours($intervenant);
//On regarde si il a une affectation en cours pour l'année courante si oui alors on propose uniquement une synchronisation des données personnelles
$affectationEnCours = current($this->exportRhService->getAffectationEnCoursIntervenantRh($intervenant));
$renouvellement = true;
if (!empty($affectationEnCours)) {
foreach ($affectationEnCours as $affectation) //Si non on propose un renouvellement de l'intervenant SI RH
{
if ($affectation->codeTypeRattachement == 'FUN') {
$affectationFonctionnelle = $affectation;
$renouvellement = false;
}
}
$renouvellement = false;
}
} else {
$priseEnCharge = true;
......@@ -121,11 +116,11 @@ class ExportRhController extends AbstractController
$nameConnecteur = $this->exportRhService->getConnecteurName();
$form = $this->getExportRhForm();
} catch (SihamException $e) {
$form = $this->getExportRhForm($intervenant);
} catch (\Exception $e) {
$this->flashMessenger()->addErrorMessage($e->getMessage());
}
return compact('typeIntervenant',
'intervenant',
......@@ -136,7 +131,7 @@ class ExportRhController extends AbstractController
'renouvellement',
'priseEnCharge',
'nameConnecteur',
'affectationFonctionnelle');
'affectationEnCours');
}
......@@ -182,9 +177,9 @@ class ExportRhController extends AbstractController
$posts = $this->getRequest()->getPost();
$result = $this->exportRhService->renouvellementIntervenantRh($intervenant, $posts);
if ($result !== false) {
$this->flashMessenger()->addSuccessMessage('succes du renouvellement matricule : ' . $result);
$this->flashMessenger()->addSuccessMessage('Le renouvellement s\'est déroulé avec succés');
} else {
$this->flashMessenger()->addErrorMessage('Probleme de renouvellement');
$this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la tentative de renouvellement de l\'intervenant');
}
}
} catch (\Exception $e) {
......@@ -194,4 +189,30 @@ class ExportRhController extends AbstractController
return $this->redirect()->toRoute('intervenant/exporter', [], [], true);
}
public function synchroniserAction()
{
try {
if ($this->getRequest()->isPost()) {
$intervenant = $this->getEvent()->getParam('intervenant');
if (!$intervenant) {
throw new \LogicException('Intervenant non précisé ou inexistant');
}
$posts = $this->getRequest()->getPost();
$result = $this->exportRhService->synchroniserDonneesPersonnelles($intervenant, $posts);
if ($result !== false) {
$this->flashMessenger()->addSuccessMessage('Les données personnelles ont bien été synchronisé');
} else {
$this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la synchronisation des données personnelles');
}
}
} catch (\Exception $e) {
$this->flashMessenger()->addErrorMessage($e->getMessage());
}
return $this->redirect()->toRoute('intervenant/exporter', [], [], true);
}
}
......@@ -49,12 +49,20 @@ class IntervenantRh
public ?string $telPro;
public ?string $telProDateDebut;
public ?string $telPerso;
public ?string $telPersoDateDebut;
public ?string $emailPro;
public ?string $emailProDateDebut;
public ?string $emailPerso;
public ?string $emailPersoDateDebut;
public ?string $adressePrecisions;
public ?string $adresseNumero;
......@@ -547,6 +555,30 @@ class IntervenantRh
/**
* @return string|null
*/
public function getTelProDateDebut(): ?string
{
return $this->telProDateDebut;
}
/**
* @param string|null $telProDateDebut
*
* @return IntervenantRH
*/
public function setTelProDateDebut(?string $telProDateDebut): IntervenantRH
{
$this->telProDateDebut = $telProDateDebut;
return $this;
}
/**
* @return string|null
*/
......@@ -571,6 +603,30 @@ class IntervenantRh
/**
* @return string|null
*/
public function getTelPersoDateDebut(): ?string
{
return $this->telPersoDateDebut;
}
/**
* @param string|null $telPersoDateDebut
*
* @return IntervenantRH
*/
public function setTelPersoDateDebut(?string $telPersoDateDebut): IntervenantRH
{
$this->telPersoDateDebut = $telPersoDateDebut;
return $this;
}
/**
* @return string|null
*/
......@@ -595,6 +651,30 @@ class IntervenantRh
/**
* @return string|null
*/
public function getEmailProDateDebut(): ?string
{
return $this->emailProDateDebut;
}
/**
* @param string|null $emailProDateDebut
*
* @return IntervenantRH
*/
public function setEmailProDateDebut(?string $emailProDateDebut): IntervenantRH
{
$this->emailProDateDebut = $emailProDateDebut;
return $this;
}
/**
* @return string|null
*/
......@@ -619,6 +699,30 @@ class IntervenantRh
/**
* @return string|null
*/
public function getEmailPersoDateDebut(): ?string
{
return $this->emailPersoDateDebut;
}
/**
* @param string|null $emailPersoDateDebut
*
* @return IntervenantRH
*/
public function setEmailPersoDateDebut(?string $emailPersoDateDebut): IntervenantRH
{
$this->emailPersoDateDebut = $emailPersoDateDebut;
return $this;
}
/**
* @return string|null
*/
......
......@@ -9,7 +9,7 @@ use Zend\Form\Fieldset;
class ExportRhForm extends AbstractForm