Commit ba50807b authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Corrections refonte dossier intervenant

parent e2345c65
......@@ -177,8 +177,9 @@ class MigrationDossier extends AbstractMigration
$tableIntervenantDossier = $bdd->getTable('INTERVENANT_DOSSIER');
//On merge toutes les données
$tableIntervenantDossier->merge($datasIntervenantDossier, 'ID', $options);
$console->end("Fin de migration des dossiers intervenants");
$console->println("Nombre de dossiers migrés : " . $nbDossierMigration);
//Mise à jour sequence
$bdd->majSequences($this->manager->getRef());
//Reste à faire de recalculer la complétude des dossiers 2019 et 2020 au minimum
$console->println("Recalcul de la complétude des dossiers pour l'année 2019");
$annee = '2019';
......
......@@ -21,7 +21,7 @@ return [
'dossier' => [
'type' => 'Segment',
'options' => [
'route' => '/:intervenant/intervenant-dossier',
'route' => '/:intervenant/dossier',
'defaults' => [
'controller' => 'Application\Controller\IntervenantDossier',
'action' => 'index',
......@@ -29,7 +29,16 @@ return [
],
'may_terminate' => true,
'child_routes' => [
'valider' => [
'change-statut-dossier' => [
'type' => 'Literal',
'options' => [
'route' => '/change-statut-dossier',
'defaults' => [
'action' => 'change-statut-dossier',
],
],
],
'valider' => [
'type' => 'Literal',
'options' => [
'route' => '/valider',
......@@ -38,7 +47,7 @@ return [
],
],
],
'devalider' => [
'devalider' => [
'type' => 'Literal',
'options' => [
'route' => '/devalider',
......@@ -47,7 +56,7 @@ return [
],
],
],
'supprimer' => [
'supprimer' => [
'type' => 'Literal',
'options' => [
'route' => '/supprimer',
......@@ -56,7 +65,7 @@ return [
],
],
],
'differences' => [
'differences' => [
'type' => 'Literal',
'options' => [
'route' => '/differences',
......@@ -65,7 +74,7 @@ return [
],
],
],
'purger-differences' => [
'purger-differences' => [
'type' => 'Literal',
'options' => [
'route' => '/purger-differences',
......@@ -125,7 +134,7 @@ return [
/* Dossier */
[
'controller' => 'Application\Controller\IntervenantDossier',
'action' => ['index'],
'action' => ['index', 'change-statut-dossier'],
'privileges' => [Privileges::DOSSIER_VISUALISATION],
'assertion' => IntervenantDossierAssertion::class,
],
......
......@@ -14,6 +14,7 @@ use Application\Service\Traits\DossierAutreServiceAwareTrait;
use Application\Service\Traits\DossierServiceAwareTrait;
use Application\Service\Traits\IntervenantServiceAwareTrait;
use Application\Service\Traits\ServiceServiceAwareTrait;
use Application\Service\Traits\StatutIntervenantServiceAwareTrait;
use Application\Service\Traits\ValidationServiceAwareTrait;
use Application\Service\Traits\WorkflowServiceAwareTrait;
use UnicaenApp\Util;
......@@ -36,6 +37,7 @@ class IntervenantDossierController extends AbstractController
use DossierAutreServiceAwareTrait;
use IntervenantServiceAwareTrait;
use AnneeServiceAwareTrait;
use StatutIntervenantServiceAwareTrait;
protected function initFilters()
......@@ -70,6 +72,7 @@ class IntervenantDossierController extends AbstractController
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost();
$form->setData($data);
$valid = $form->isValid();
if ($form->isValid()) {
/* Traitement du formulaire */
$completude = $this->getServiceDossier()->isComplete($intervenantDossier);
......@@ -120,6 +123,7 @@ class IntervenantDossierController extends AbstractController
);
}
return compact(
'form',
'role',
......@@ -135,6 +139,33 @@ class IntervenantDossierController extends AbstractController
public function changeStatutDossierAction()
{
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost();
$role = $this->getServiceContext()->getSelectedIdentityRole();
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
if (!$intervenant) {
throw new \LogicException('Intervenant non précisé ou inexistant');
}
$intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
$completude = $this->getServiceDossier()->isComplete($intervenantDossier);
$intervenantDossier->setCompletude($completude);
$statutIntervenant = $this->getServiceStatutIntervenant()->get($data['DossierStatut']['statut']);
if ($statutIntervenant) {
$intervenantDossier->setStatut($statutIntervenant);
}
$intervenantDossier = $this->getServiceDossier()->save($intervenantDossier);
$this->flashMessenger()->addSuccessMessage('Enregistrement de vos données effectué');
return $this->redirect()->toUrl($this->url()->fromRoute('intervenant/dossier', [], [], true));
}
return $this->redirect()->toUrl($this->url()->fromRoute('intervenant/dossier', [], [], true));
}
public function validerAction()
{
$this->initFilters();
......
......@@ -882,6 +882,8 @@ class IntervenantDossier implements HistoriqueAwareInterface, ResourceInterface,
->setPaysNaissance($intervenant->getPaysNaissance())
->setDepartementNaissance($intervenant->getDepartementNaissance())
->setNumeroInsee($intervenant->getNumeroInsee())
->setNumeroInseeProvisoire($intervenant->getNumeroInseeProvisoire())
->setEmailPro($intervenant->getEmailPro())
->setEmailPerso($intervenant->getEmailPerso())
->setTelPerso($intervenant->getTelPerso())
->setTelPro($intervenant->getTelPro())
......
......@@ -51,7 +51,7 @@ class DossierAutresFieldset extends AbstractFieldset
if ($champ->getType()->getCode() == self::SELECT_SQL) {
if (!empty($champ->getSqlValue())) {
$datas = ['' => '- NON RENSEIGNÉ -'] + $this->getServiceDossierAutre()->getValueOptionsBySql($champ);
$datas = ['' => '(Sélectionnez ' . $champ->getLibelle() . ')'] + $this->getServiceDossierAutre()->getValueOptionsBySql($champ);
$this->get('champ-autre-' . $champ->getId())
->setValueOptions($datas);
}
......
......@@ -2,6 +2,7 @@
namespace Application\Form\Intervenant\Dossier;
use Application\Entity\Db\IntervenantDossier;
use Application\Entity\Db\StatutIntervenant;
use Application\Form\AbstractFieldset;
use Application\Service\Traits\ContextServiceAwareTrait;
......@@ -104,15 +105,19 @@ class DossierContactFieldset extends AbstractFieldset
]);
//Gestion des labels selon les règles du statut intervenant sur les données contact
$statutDossierIntervenant = $this->getOption('statutDossierIntervenant');
$dossierIntervenant = $this->getOption('dossierIntervenant');
$statutDossierIntervenant = $dossierIntervenant->getStatut();
/**
* @var $statutDossierIntervenant StatutIntervenant
* @var $dossierIntervenant IntervenantDossier
*/
if ($statutDossierIntervenant->getDossierTelPerso()) {
$this->get('telephonePersonnel')->setLabel('Téléphone personnel <span class="text-danger">*</span>');
$this->get('telephoneProfessionnel')->removeAttribute('info_icon');
}
if ($statutDossierIntervenant->getDossierEmailPerso()) {
if ($statutDossierIntervenant->getDossierEmailPerso() || empty($dossierIntervenant->getEmailPro())) {
$this->get('emailPersonnel')->setLabel('E-mail personnel <span class="text-danger">*</span>');
$this->get('emailEtablissement')->removeAttribute('info_icon');
}
......
......@@ -69,8 +69,8 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset
$this->get('paysNaissance')
->setValueOptions(['' => '- NON RENSEIGNÉ -'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList()));
->setValueOptions(['' => '(Sélectionnez un pays)'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList()));
/**
* Département de naissance
......@@ -92,7 +92,7 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset
$this->get('departementNaissance')
->setValueOptions(['' => '- NON RENSEIGNÉ -'] + \UnicaenApp\Util::collectionAsOptions($this->getServiceDepartement()->getList()));
->setValueOptions(['' => '(Sélectionnez un département)'] + \UnicaenApp\Util::collectionAsOptions($this->getServiceDepartement()->getList()));
/**
* Ville de naissance
......
......@@ -65,6 +65,14 @@ class DossierInseeFieldset extends AbstractFieldset
public function getInputFilterSpecification()
{
$dossierIdentiteComplementaireFieldset = $this->getOption('dossierIdentiteComplementaireFieldset');
$dossierIdentiteFieldset = $this->getOption('dossierIdentiteFieldset');
$departementDeNaissance = $dossierIdentiteComplementaireFieldset->get('departementNaissance')->getValue();
$paysDeNaissance = $dossierIdentiteComplementaireFieldset->get('paysNaissance')->getValue();
$dateDeNaissance = $dossierIdentiteComplementaireFieldset->get('dateNaissance')->getValue();
$civilite = $dossierIdentiteFieldset->get('civilite')->getValue();
$numeroInseeProvisoire = (bool)$this->get('numeroInseeEstProvisoire')->getValue();
$spec = [
......@@ -72,7 +80,11 @@ class DossierInseeFieldset extends AbstractFieldset
'required' => false,
'validators' => [
new NumeroINSEEValidator([
'provisoire' => $numeroInseeProvisoire,
'provisoire' => $numeroInseeProvisoire,
'departementDeNaissance' => $departementDeNaissance,
'paysDeNaissance' => $paysDeNaissance,
'dateDeNaissance' => $dateDeNaissance,
'civilite' => $civilite,
]),
],
],
......@@ -81,6 +93,7 @@ class DossierInseeFieldset extends AbstractFieldset
],
];
return $spec;
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@
namespace Application\Form\Intervenant\Dossier;
use Application\Entity\Db\StatutIntervenant;
use Application\Form\AbstractFieldset;
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\StatutIntervenantServiceAwareTrait;
......@@ -42,8 +43,17 @@ class DossierStatutFieldset extends AbstractFieldset
$statutIntervenant = $this->getOption('statutIntervenant');
$this->get('statut')
->setValueOptions(\UnicaenApp\Util::collectionAsOptions($this->getServiceStatutIntervenant()->getStatutSelectable($statutIntervenant)));
//Si statut intervenant n'est pas selectionnable dans la liste alors liste en lecture seule
/**
* @var StatutIntervenant $statutIntervenant
*/
if ($statutIntervenant->getPeutChoisirDansDossier() || $statutIntervenant->getCode() == 'AUTRES') {
$this->get('statut')
->setValueOptions(['' => '(Sélectionnez un statut)'] + \UnicaenApp\Util::collectionAsOptions($this->getServiceStatutIntervenant()->getStatutSelectable($statutIntervenant)));
} else {
$this->get('statut')
->setValueOptions(\UnicaenApp\Util::collectionAsOptions([$statutIntervenant]));
}
return $this;
......
......@@ -18,6 +18,7 @@ use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\DossierServiceAwareTrait;
use Application\Service\Traits\ServiceServiceAwareTrait;
use Application\Service\Traits\StatutIntervenantServiceAwareTrait;
use Application\Validator\NumeroINSEEValidator;
use Zend\Form\Element\Csrf;
/**
......@@ -81,10 +82,17 @@ class IntervenantDossierForm extends AbstractForm
$this->dossierAdresseFieldset = new AdresseFieldset('DossierAdresse');
$this->dossierAdresseFieldset->init();
$this->dossierContactFiedlset = new DossierContactFieldset('DossierContact', ['statutDossierIntervenant' => $dossierIntervenant->getStatut()]);
$options = [
'dossierIntervenant' => $dossierIntervenant,
];
$this->dossierContactFiedlset = new DossierContactFieldset('DossierContact', $options);
$this->dossierContactFiedlset->init();
$this->dossierInseeFiedlset = new DossierInseeFieldset('DossierInsee');
$options = [
'dossierIdentiteComplementaireFieldset' => $this->dossierIdentiteComplementaireFieldset,
'dossierIdentiteFieldset' => $this->dossierIdentiteFieldset,
];
$this->dossierInseeFiedlset = new DossierInseeFieldset('DossierInsee', $options);
$this->dossierInseeFiedlset->init();
$this->dossierBancaireFieldset = new DossierBancaireFieldset('DossierBancaire');
......
......@@ -223,6 +223,12 @@ class DossierService extends AbstractEntityService
$completudeDossierIban = true;
$completudeDossierEmployeur = true;
$completudeDossierAutre = true;
$completudeDossierStatut = true;
//Complétude du statut
if ($statutIntervenantDossier->getCode() == 'AUTRES') {
$completudeDossierStatut = false;
}
//Complétude de l'identite
$completudeDossierIdentite = ($intervenantDossier->getCivilite() &&
......@@ -305,7 +311,8 @@ class DossierService extends AbstractEntityService
$completudeDossierInsee &&
$completudeDossierIban &&
$completudeDossierEmployeur &&
$completudeDossierAutre) ? true : false;
$completudeDossierAutre &&
$completudeDossierStatut) ? true : false;
$completude = ['dossier' => $completudeDossier,
'dossierIdentite' => $completudeDossierIdentite,
......@@ -315,7 +322,9 @@ class DossierService extends AbstractEntityService
'dossierInsee' => $completudeDossierInsee,
'dossierIban' => $completudeDossierIban,
'dossierEmployeur' => $completudeDossierEmployeur,
'dossierAutres' => $completudeDossierAutre,];
'dossierAutres' => $completudeDossierAutre,
'dossierStatut' => $completudeDossier,
];
return $completude;
}
......
......@@ -72,20 +72,22 @@ class StatutIntervenantService extends AbstractEntityService
public function getStatutSelectable(StatutIntervenant $statutIntervenant, QueryBuilder $qb = null, $alias = null)
{
[$qb, $alias] = $this->initQuery($qb, $alias);
$var = '';
$qb->orWhere("$alias.peutChoisirDansDossier = 1");
if ($statutIntervenant instanceof StatutIntervenant) {
$qb->orWhere($alias . ' = :statutIntervenant');
}
$qb->addOrderBy("$alias.ordre");
$qb->setParameter('statutIntervenant', $statutIntervenant);
$qb->andWhere("$alias.peutChoisirDansDossier = 1");
$qb->addOrderBy("$alias.code");
$entities = $qb->getQuery()->execute();
$result = [];
$entityClass = $this->getEntityClass();
foreach ($entities as $entity) {
if ($entity instanceof $entityClass) {
$result[$entity->getId()] = $entity;
/**
* @var StatutIntervenant $entity
*/
//Je prends le statut si il n'est pas détruit ou si l'intervenant a ce statut
if (is_null($entity->getHistoDestruction()) ||
$statutIntervenant->getCode() == $entity->getCode()) {
$result[] = $entity;
}
}
}
......
......@@ -68,7 +68,7 @@ class NumeroINSEEValidator extends NumeroINSEE
{
$this->messageTemplates = array_merge($this->messageTemplates, [
self::MSG_CIVILITE => "Le numéro n'est pas cohérent avec la civilité saisie",
self::MSG_ANNEE => "Le numéro n'est pas cohérent avec l'année de naissance saisi",
self::MSG_ANNEE => "Le numéro n'est pas cohérent avec l'année de naissance saisie",
self::MSG_MOIS => "Le numéro n'est pas cohérent avec le mois de naissance saisi",
self::MSG_DEPT => "Le numéro n'est pas cohérent avec le pays et l'éventuel département de naissance saisi",
]);
......@@ -80,29 +80,33 @@ class NumeroINSEEValidator extends NumeroINSEE
public function isValid($value, $context = null)
{
if (!parent::isValid($value)) {
return false;
}
/* if (!parent::isValid($value)) {
return false;
}*/
$this->value = $value;
$this->value = $value;
$departementDeNaissance = $this->getOption('departementDeNaissance');
$dateDeNaissance = $this->getOption('dateDeNaissance');
$paysDeNaissance = $this->getOption('paysDeNaissance');
$civilite = $this->getOption('civilite');
$this->provisoire = $this->getProvisoire();
$this->civilite = (!empty($context['civilite'])) ?
$this->getServiceCivilite()->get((int)$context['civilite']) : null;
$this->civilite = (!empty($civilite)) ?
$this->getServiceCivilite()->get((int)$civilite) : null;
if ($this->civilite && !$this->isValidCivilite()) return false;
$this->dateNaissance = (!empty($context['dateNaissance'])) ?
\DateTime::createFromFormat(Constants::DATE_FORMAT, $context['dateNaissance']) : null;
$this->dateNaissance = (!empty($dateDeNaissance)) ?
\DateTime::createFromFormat(Constants::DATE_FORMAT, $dateDeNaissance) : null;
if ($this->dateNaissance && !$this->isValidDateNaissance()) return false;
$this->pays = (!empty($context['paysNaissance'])) ?
$this->getServicePays()->get((int)$context['paysNaissance']) : null;
$this->pays = (!empty($paysDeNaissance)) ?
$this->getServicePays()->get((int)$paysDeNaissance) : null;
$this->departement = (!empty($context['departementNaissance'])) ?
$this->getServiceDepartement()->get((int)$context['departementNaissance']) : null;
$this->departement = (!empty($departementDeNaissance)) ?
$this->getServiceDepartement()->get((int)$departementDeNaissance) : null;
if ($this->departement && !$this->isValidLieuNaissance()) return false;
......
......@@ -39,6 +39,22 @@ $fieldsets = $form->getFieldsets();
display: flex;
flex-direction: column;
}
div.rib-part {
display: inline-block;
vertical-align: top;
}
div.rib-part input {
width: auto;
}
div.readonly {
display: block;
background-color: #eee;
padding: 5px;
height: 30px;
}
</style>
<?php $this->intervenant($intervenant)->renderTitle('Données personnelles'); ?>
......@@ -90,7 +106,7 @@ $fieldsets = $form->getFieldsets();
<div class="row">
<?php
if ($canEdit) {
echo $this->partial('application/intervenant-dossier/partial/formStatut', compact('form', 'intervenant', 'intervenantDossier', 'intervenantDossierCompletude'));
echo $this->partial('application/intervenant-dossier/partial/formStatut', compact('form', 'intervenant', 'intervenantDossier', 'intervenantDossierCompletude',));
} else {
echo $this->partial('application/intervenant-dossier/partial/formStatutView', compact('form', 'intervenant', 'intervenantDossier', 'intervenantDossierCompletude'));
}
......@@ -254,11 +270,12 @@ $fieldsets = $form->getFieldsets();
selectDept.removeProp('disabled')
selectDept.siblings('button').removeClass('disabled')
} else {
selectDept.prop('disabled', 'disabled')
selectDept.siblings('button').addClass('disabled')
emptyDept.html("- NON RENSEIGNÉ -").prop('selected', 'selected')
emptyDept.html("(Sélectionnez un département)").prop('selected', 'selected')
}
});
......@@ -266,6 +283,8 @@ $fieldsets = $form->getFieldsets();
}
$("select[name='DossierStatut[statut]']").change(function () {
var action = $("form[id='dossier']").attr('action');
$("form[id='dossier']").attr('action', action + '/change-statut-dossier');
$("form[id='dossier']").submit();
});
......
......@@ -11,17 +11,6 @@ $form->prepare();
$dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Form\Intervenant\DossierFieldset */
?>
<style>
div.rib-part {
display: inline-block;
vertical-align: top;
}
div.rib-part input {
width: auto;
}
</style>
<!-- Fiedlset Adresse -->
<div class="col-md-6">
<div class="panel panel-default">
......@@ -37,24 +26,20 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo
<div class="form-group">
<?= $this->formLabel($dossierAdresse->get('precisions')); ?>
<div class="input-group cold-md-6" style="display:block;background-color:#eee;padding:5px;">
<div class="input-group cold-md-6 readonly">
<?php
if (!empty($intervenantDossier->getAdressePrecisions())) {
echo ($viewAdresse) ? $intervenantDossier->getAdressePrecisions() : '*******************';
} else {
echo '- NON RENSEIGNÉ -';
}
?>
</div>
</div>
<div class="form-group">
<?= $this->formLabel($dossierAdresse->get('lieuDit')); ?>
<div class="input-group cold-md-6" style="display:block;background-color:#eee;padding:5px;">
<div class="input-group cold-md-6 readonly">
<?php
if (!empty($intervenantDossier->getAdresseLieuDit())) {
echo ($viewAdresse) ? $intervenantDossier->getAdresseLieuDit() : '*******************';
} else {
echo '- NON RENSEIGNÉ -';
}
?>
</div>
......@@ -65,12 +50,10 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo
<div class="col-md-2">
<?= $this->formLabel($dossierAdresse->get('numero')); ?>
<div style="display:block;background-color:#eee;padding:5px;">
<div class="readonly">
<?php
if (!empty($intervenantDossier->getAdresseNumero())) {
echo ($viewAdresse) ? $intervenantDossier->getAdresseNumero() : '***';
} else {
echo 'NR';
}
?>
</div>
......@@ -79,12 +62,10 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo
<div class="col-md-2">
<?= $this->formLabel($dossierAdresse->get('numeroComplement')); ?>
<div style="display:block;background-color:#eee;padding:5px;">
<div class="readonly">
<?php
if (!empty($intervenantDossier->getAdresseNumeroCompl())) {
echo ($viewAdresse) ? $intervenantDossier->getAdresseNumeroCompl()->getLibelle() : '***';
} else {
echo 'NR';
}
?>
</div>
......@@ -92,12 +73,10 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo
<div class="col-md-4">
<?= $this->formLabel($dossierAdresse->get('voirie')); ?>
<div style="display:block;background-color:#eee;padding:5px;">
<div class="readonly">
<?php
if (!empty($intervenantDossier->getAdresseVoirie())) {
echo ($viewAdresse) ? $intervenantDossier->getAdresseVoirie()->getLibelle() : '***';
} else {
echo 'NR';
}
?>
</div>
......@@ -105,12 +84,10 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo
<div class="col-md-4">
<?= $this->formLabel(