Commit 902772c5 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Tâche #25977

Pouvoir préciser le statut lors de la création d'un nouvel utilisateur
parent a9089e7a
......@@ -9,6 +9,7 @@ author: Laurent Lécluse - DSI - Unicaen
* Possibilité d'utiliser un service Unoconv présent sur un serveur dédié autre que celui de OSE
* L'export des services au format CSV est maintenant personnalisable
* En ligne de commande, il est désormais possible d'indiquer dans quelle année universitaire et sous quel statut un intervenant sera créé, de même qu'un code intervenant
## Correction de bugs
......
......@@ -12,6 +12,36 @@ $params = $c->getInputs([
]);
$params['date-naissance'] = $params['date-naissance']->format('d/m/Y');
$params = base64_encode(json_encode($params));
$params['params'] = ['creer-intervenant' => $params['creer-intervenant']];
unset($params['creer-intervenant']);
if ($params['params']['creer-intervenant']) {
if ($c->hasOption('code')) {
$params['params']['code'] = $c->getOption('code');
}
$bdd = $oa->getBdd();
$annee = $bdd->select("SELECT libelle FROM annee WHERE id = (SELECT valeur FROM parametre WHERE nom = 'annee')", [], $bdd::FETCH_ONE)['LIBELLE'];
$params['params']['annee'] = $c->getInput('annee', 'Année universitaire (' . $annee . ' par défaut, sinon entrez 2020 pour 2020/2021, etc.)');
if (!$c->hasOption('statut')) {
$statuts = $bdd->select("SELECT source_code CODE, libelle FROM statut_intervenant WHERE histo_destruction IS NULL AND source_code <> 'AUTRES' ORDER BY ordre");
$c->println('Statut de \'intervenant ("AUTRES" par défaut, sinon entrez le code parmi les propositions suivantes) :');
$maxCodeLength = 0;
foreach ($statuts as $statut) {
$sLen = strlen($statut['CODE']);
if ($sLen > $maxCodeLength) $maxCodeLength = $sLen;
}
foreach ($statuts as $statut) {
$c->print(' * ');
$c->print(str_pad($statut['CODE'], $maxCodeLength, ' '), $c::COLOR_CYAN);
$c->println(' ' . $statut['LIBELLE']);
}
}
$params['params']['statut'] = $c->getInput('statut');
}
$params = base64_encode(json_encode($params));
$oa->exec("creer-utilisateur --data=$params");
\ No newline at end of file
......@@ -51,6 +51,10 @@ Paramètres possibles :
* ```login``` : Login
* ```mot-de-passe``` : Mot de passe (6 caractères minimum)
* ```creer-intervenant``` : Voulez-vous créer un intervenant pour cet utilisateur ?
* ```code``` : Code éventuel de l'intervenant
* ```annee``` : Année universitaire pour laquelle l'intervenant sera créé (ex : 2020 pour 2020/2021)
* ```statut``` : Code du statut de l'intervenant
Exemple de commande lancée avec des paramètres :
```bash
......
......@@ -10,7 +10,6 @@ use Application\Service\Traits\StructureServiceAwareTrait;
use UnicaenAuth\Service\Traits\UserServiceAwareTrait;
class UtilisateurController extends BaseController
{
use ContextServiceAwareTrait;
......@@ -19,6 +18,7 @@ class UtilisateurController extends BaseController
use UserServiceAwareTrait;
/**
* Traite les requêtes AJAX POST de sélection d'un profil utilisateur.
* La sélection est mémorisé en session par le service AuthUserContext.
......@@ -27,9 +27,9 @@ class UtilisateurController extends BaseController
{
parent::selectionnerProfilAction($addFlashMessage = false);
$role = $this->getAuthUserContextService()->getSelectedIdentityRole();
$role = $this->getAuthUserContextService()->getSelectedIdentityRole();
/* @var $role Role */
$structureId = $this->getRequest()->getPost('structure-'.$role->getRoleId());
$structureId = $this->getRequest()->getPost('structure-' . $role->getRoleId());
if ($role->getPerimetre() && $role->getPerimetre()->isEtablissement()) {
$structure = null;
......@@ -39,12 +39,11 @@ class UtilisateurController extends BaseController
$this->getServiceContext()->setStructure($structure);
$message = sprintf("Vous endossez à présent le profil utilisateur <strong>%s</strong>%s.",
$role->getRoleName(),
$structure ? " pour la structure <strong>$structure</strong>" : null);
}
else {
$role->getRoleName(),
$structure ? " pour la structure <strong>$structure</strong>" : null);
} else {
$message = sprintf("Vous endossez à présent le profil utilisateur <strong>%s</strong>.", $role);
if ($s = $role->getStructure()){
if ($s = $role->getStructure()) {
$this->getServiceContext()->setStructure($s);
}
}
......@@ -74,8 +73,8 @@ class UtilisateurController extends BaseController
public function creationAction()
{
$data = $this->getRequest()->getParam('data');
$data = json_decode(base64_decode($data));
$data = $this->getRequest()->getParam('data');
$data = json_decode(base64_decode($data));
$data->{'date-naissance'} = \DateTime::createFromFormat('d/m/Y', $data->{'date-naissance'});
$this->getServiceUtilisateur()->creerUtilisateur(
......@@ -84,7 +83,7 @@ class UtilisateurController extends BaseController
$data->{'date-naissance'},
$data->login,
$data->{'mot-de-passe'},
$data->{'creer-intervenant'}
(array)$data->params
);
}
}
\ No newline at end of file
......@@ -3,10 +3,12 @@
namespace Application\Service;
use Application\Entity\Db\Intervenant;
use Application\Entity\Db\StatutIntervenant;
use Application\Entity\Db\Structure;
use Application\Entity\Db\Periode;
use Application\Entity\Db\Annee;
use Application\Entity\Db\TypeIntervenant;
use Application\Service\Traits\AnneeServiceAwareTrait;
use Application\Service\Traits\MiseEnPaiementServiceAwareTrait;
use Application\Service\Traits\MiseEnPaiementIntervenantStructureServiceAwareTrait;
use Application\Service\Traits\SourceServiceAwareTrait;
......@@ -34,6 +36,7 @@ class IntervenantService extends AbstractEntityService
use MiseEnPaiementIntervenantStructureServiceAwareTrait;
use WorkflowServiceAwareTrait;
use SourceServiceAwareTrait;
use AnneeServiceAwareTrait;
......@@ -322,34 +325,47 @@ class IntervenantService extends AbstractEntityService
/**
* @param string $nom
* @param string $prenom
* @param \DateTime $dateNaissance
* @param string|null $statut
* @param string $nom
* @param string $prenom
* @param \DateTime $dateNaissance
* @param array $params
*
* Params :
* code : null | string => généré si non fourni
* annee : null | int | Annee => Année en cours si non fournie
* statut : null | string | StatutIntervenant => AUTRES si non fourni, si string alors c'est le code du statut
*
* @return Intervenant
*/
public function creerIntervenant(string $nom, string $prenom, \DateTime $dateNaissance, string $statut = null): Intervenant
public function creerIntervenant(string $nom, string $prenom, \DateTime $dateNaissance, array $params = []): Intervenant
{
$code = uniqid('OSE');
if (!isset($params['code']) || empty($params['code'])) {
$params['code'] = uniqid('OSE');
}
if ($statut) {
$statutEntity = $this->getServiceStatutIntervenant()->getByCode($statut);
} else {
$statutEntity = $this->getServiceStatutIntervenant()->getAutres();
if (!isset($params['annee']) || empty($params['annee'])) {
$params['annee'] = $this->getServiceContext()->getAnnee();
} elseif (!$params['annee'] instanceof Annee) {
$params['annee'] = $this->getServiceAnnee()->get($params['annee']);
}
if (!isset($params['statut']) || empty($params['statut'])) {
$params['statut'] = $this->getServiceStatutIntervenant()->getAutres();
} elseif (!$params['statut'] instanceof StatutIntervenant) {
$params['statut'] = $this->getServiceStatutIntervenant()->getByCode($params['statut']);
}
$intervenant = new Intervenant;
$intervenant->setAnnee($this->getServiceContext()->getAnnee());
$intervenant->setCode($code);
$intervenant->setCode($params['code']);
$intervenant->setSource($this->getServiceSource()->getOse());
$intervenant->setSourceCode($code);
$intervenant->setSourceCode($params['code']);
$intervenant->setNomUsuel($nom);
$intervenant->setPrenom($prenom);
$intervenant->setDateNaissance($dateNaissance);
$intervenant->setStatut($statutEntity);
$intervenant->setAnnee($params['annee']);
$intervenant->setStatut($params['statut']);
$this->save($intervenant);
......
......@@ -85,10 +85,10 @@ class UtilisateurService extends AbstractEntityService
$ldapUsers = @$this->getConnecteurLdap()->rechercheUtilisateurs($critere);
$locaUsers = $this->rechercheUtilisateursLocaux($critere);
$result = array_merge($locaUsers, $ldapUsers );
$result = array_merge($locaUsers, $ldapUsers);
uasort($result, function($a,$b){
return $a['label'] > $b['label'];
uasort($result, function ($a, $b) {
return $a['label'] > $b['label'];
});
return $result;
......@@ -105,9 +105,9 @@ class UtilisateurService extends AbstractEntityService
$res = $this->getEntityManager()->getConnection()->fetchAll($sql);
$ul = [];
foreach( $res as $r ){
foreach ($res as $r) {
$ul[$r['USERNAME']] = [
'id' => $r['USERNAME'],
'id' => $r['USERNAME'],
'label' => $r['DISPLAY_NAME'],
];
}
......@@ -117,17 +117,34 @@ class UtilisateurService extends AbstractEntityService
public function creerUtilisateur( string $nom, string $prenom, \DateTime $dateNaissance, string $login, string $motDePasse, bool $creerFicheIntervenant = true): Utilisateur
/**
* @param string $nom
* @param string $prenom
* @param \DateTime $dateNaissance
* @param string $login
* @param string $motDePasse
* @param array $params
*
* Params :
* creer-intervenant : bool
* code : null | string => généré si non fourni
* annee : null | int | Annee => Année en cours si non fournie
* statut : null | string | StatutIntervenant => AUTRES si non fourni, si string alors c'est le code du statut
*
* @return Utilisateur
*/
public function creerUtilisateur(string $nom, string $prenom, \DateTime $dateNaissance, string $login, string $motDePasse, array $params = []): Utilisateur
{
if ($creerFicheIntervenant){
$intervenant = $this->getServiceIntervenant()->creerIntervenant($nom, $prenom, $dateNaissance);
if (!isset($params['creer-intervenant']) || empty($params['creer-intervenant'])) {
$params['creer-intervenant'] = false;
}
$utilisateur = new Utilisateur();
$utilisateur->setUsername($login);
$utilisateur->setDisplayName($prenom.' '.$nom);
$utilisateur->setDisplayName($prenom . ' ' . $nom);
$utilisateur->setState(1);
if ($creerFicheIntervenant){
if ($params['creer-intervenant']) {
$intervenant = $this->getServiceIntervenant()->creerIntervenant($nom, $prenom, $dateNaissance, $params);
$utilisateur->setCode($intervenant->getCode());
$intervenant->setUtilisateurCode($intervenant->getCode());
$this->getServiceIntervenant()->save($intervenant);
......@@ -141,13 +158,13 @@ class UtilisateurService extends AbstractEntityService
public function changerMotDePasse( Utilisateur $utilisateur, string $motDePasse)
public function changerMotDePasse(Utilisateur $utilisateur, string $motDePasse)
{
if (strlen($motDePasse) < 6){
if (strlen($motDePasse) < 6) {
throw new \Exception("Mot de passe trop court : il doit faire au moint 6 caractères");
}
$this->userService->updateUserPassword( $utilisateur, $motDePasse);
$this->userService->updateUserPassword($utilisateur, $motDePasse);
}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment