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

Correction suite recette N°1 sur la refonte dossier intervenant

parent 6ed6fd75
......@@ -33,18 +33,6 @@ return [
'position' => 2,
'commentaire' => NULL,
],
'DISABLE' => [
'name' => 'DISABLE',
'type' => 'bool',
'bdd-type' => 'NUMBER',
'length' => 0,
'scale' => '0',
'precision' => 1,
'nullable' => FALSE,
'default' => '0',
'position' => 3,
'commentaire' => NULL,
],
'DOSSIER_CHAMP_AUTRE_TYPE_ID' => [
'name' => 'DOSSIER_CHAMP_AUTRE_TYPE_ID',
'type' => 'int',
......
......@@ -153,8 +153,8 @@ return [
'position' => 12,
'commentaire' => NULL,
],
'DOSSIER_IDENTITE' => [
'name' => 'DOSSIER_IDENTITE',
'DOSSIER_IDENTITE_COMP' => [
'name' => 'DOSSIER_IDENTITE_COMP',
'type' => 'bool',
'bdd-type' => 'NUMBER',
'length' => 0,
......
......@@ -68,35 +68,35 @@ return [
'dossier' => [
'libelle' => 'Données personnelles',
'privileges' => [
'visualisation' => 'Visualisation',
'edition' => 'Édition',
'validation' => 'Validation',
'suppression' => 'Suppression',
'devalidation' => 'Dévalidation',
'differences' => 'Différences avec Harpège',
'purger-differences' => 'Purger les différences',
'identite-suite-visualisation' => 'Identité (suite) - Visualisation',
'identite-suite-edition' => 'Identité (suite) - Édition',
'adresse-visualisation' => 'Adresse - Visualisation',
'adresse-edition' => 'Adresse - Édition',
'contact-visualisation' => 'Contact - Visualisation',
'contact-edition' => 'Contact - Édition',
'insee-visualisation' => 'N° Insée - Visualisation',
'insee-edition' => 'N° Insée - Édition',
'banque-visualisation' => 'Coord. Banque - Visualisation',
'banque-edition' => 'Coord. Banque - Édition',
'employeur-visualisation' => 'Employeur - Visualisation',
'employeur-edition' => 'Employeur - Édition',
'champ-autre-1-visualisation' => 'Champ autre 1 - Visualisation',
'champ-autre-1-edition' => 'Champ autre 1 - Édition',
'champ-autre-2-visualisation' => 'Champ autre 2 - Visualisation',
'champ-autre-2-edition' => 'Champ autre 2 - Édition',
'champ-autre-3-visualisation' => 'Champ autre 3 - Visualisation',
'champ-autre-3-edition' => 'Champ autre 3 - Édition',
'champ-autre-4-visualisation' => 'Champ autre 4 - Visualisation',
'champ-autre-4-edition' => 'Champ autre 4 - Édition',
'champ-autre-5-visualisation' => 'Champ autre 5 - Visualisation',
'champ-autre-5-edition' => 'Champ autre 5 - Édition',
'visualisation' => 'Visualisation',
'edition' => 'Édition',
'validation' => 'Validation',
'suppression' => 'Suppression',
'devalidation' => 'Dévalidation',
'differences' => 'Différences avec Harpège',
'purger-differences' => 'Purger les différences',
'identite-visualisation' => 'Identité - Visualisation',
'identite-edition' => 'Identité - Édition',
'adresse-visualisation' => 'Adresse - Visualisation',
'adresse-edition' => 'Adresse - Édition',
'contact-visualisation' => 'Contact - Visualisation',
'contact-edition' => 'Contact - Édition',
'insee-visualisation' => 'N° Insée - Visualisation',
'insee-edition' => 'N° Insée - Édition',
'banque-visualisation' => 'Coord. Banque - Visualisation',
'banque-edition' => 'Coord. Banque - Édition',
'employeur-visualisation' => 'Employeur - Visualisation',
'employeur-edition' => 'Employeur - Édition',
'champ-autre-1-visualisation' => 'Champ autre 1 - Visualisation',
'champ-autre-1-edition' => 'Champ autre 1 - Édition',
'champ-autre-2-visualisation' => 'Champ autre 2 - Visualisation',
'champ-autre-2-edition' => 'Champ autre 2 - Édition',
'champ-autre-3-visualisation' => 'Champ autre 3 - Visualisation',
'champ-autre-3-edition' => 'Champ autre 3 - Édition',
'champ-autre-4-visualisation' => 'Champ autre 4 - Visualisation',
'champ-autre-4-edition' => 'Champ autre 4 - Édition',
'champ-autre-5-visualisation' => 'Champ autre 5 - Visualisation',
'champ-autre-5-edition' => 'Champ autre 5 - Édition',
],
],
......
......@@ -2,7 +2,6 @@
namespace Application;
use Application\Entity\Db\Service;
use Application\Provider\Privilege\Privileges;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;
......@@ -315,7 +314,7 @@ return [
[//Créer un droit archivage
'controller' => 'Application\Controller\IntervenantDossier',
'action' => ['index'],
'privileges' => [Privileges::DOSSIER_VISUALISATION, Privileges::DOSSIER_IDENTITE_SUITE_EDITION],
'privileges' => [Privileges::DOSSIER_VISUALISATION, Privileges::DOSSIER_IDENTITE_EDITION],
'assertion' => Assertion\DossierPiecesAssertion::class,
],
......
......@@ -5,7 +5,9 @@ namespace Application\Assertion;
use Application\Acl\Role;
use Application\Entity\Db\Intervenant;
use Application\Entity\Db\WfEtape;
use Application\Provider\Privilege\Privileges; // sous réserve que vous utilisiez les privilèges d'UnicaenAuth et que vous ayez généré votre fournisseur
use Application\Provider\Privilege\Privileges;
// sous réserve que vous utilisiez les privilèges d'UnicaenAuth et que vous ayez généré votre fournisseur
use Application\Service\Traits\WorkflowServiceAwareTrait;
use UnicaenAuth\Assertion\AbstractAssertion;
use Zend\Permissions\Acl\Resource\ResourceInterface;
......@@ -21,7 +23,6 @@ class DossierPiecesAssertion extends AbstractAssertion
use WorkflowServiceAwareTrait;
/**
* @param string $controller
* @param string $action
......@@ -50,7 +51,6 @@ class DossierPiecesAssertion extends AbstractAssertion
return $this->assertDossierEdition($intervenant);
break;
}
break;
case 'Application\Controller\PieceJointe':
......@@ -78,7 +78,7 @@ class DossierPiecesAssertion extends AbstractAssertion
break;
}
break;
}
}
return true;
}
......@@ -96,6 +96,8 @@ class DossierPiecesAssertion extends AbstractAssertion
return true;
}
/*assertion refonte dossier*/
protected function assertPrivilege($privilege, $subPrivilege = null)
......@@ -103,12 +105,14 @@ class DossierPiecesAssertion extends AbstractAssertion
$intervenant = $this->getMvcEvent()->getParam('intervenant');
switch ($privilege) {
case Privileges::DOSSIER_IDENTITE_SUITE_EDITION:
case Privileges::DOSSIER_IDENTITE_EDITION:
return $this->assertEditionDossierContact($intervenant);
break;
}
}
protected function assertEditionDossierContact(Intervenant $intervenant)
{
return true;
......@@ -125,6 +129,8 @@ class DossierPiecesAssertion extends AbstractAssertion
return true;
}
protected function assertDossierIdentiteEdition(Intervenant $intervenant = null)
{
......@@ -161,6 +167,7 @@ class DossierPiecesAssertion extends AbstractAssertion
{
$role = $this->getRole();
if (!$role instanceof Role) return false;
return $role->hasPrivilege($privilege);
}
}
\ No newline at end of file
......@@ -159,8 +159,8 @@ class IntervenantDossierAssertion extends AbstractAssertion
return $this->asserts([
!$this->getServiceDossier()->getValidation($intervenant),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_EDITION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_SUITE_VISUALISATION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_SUITE_EDITION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_VISUALISATION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_EDITION),
]);
}
......@@ -170,7 +170,7 @@ class IntervenantDossierAssertion extends AbstractAssertion
{
return $this->asserts([
$this->getRole()->hasPrivilege(Privileges::DOSSIER_VISUALISATION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_SUITE_VISUALISATION),
$this->getRole()->hasPrivilege(Privileges::DOSSIER_IDENTITE_VISUALISATION),
]);
}
......@@ -403,7 +403,7 @@ class IntervenantDossierAssertion extends AbstractAssertion
{
$intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
$completudeDossier = $this->getServiceDossier()->isComplete($intervenantDossier);
$completudeDossier = $this->getServiceDossier()->getCompletude($intervenantDossier);
$isValidate = $this->getServiceDossier()->getValidation($intervenant);
return $this->asserts([
......
......@@ -34,14 +34,6 @@ class IntervenantDossierController extends AbstractController
use DossierAutreServiceAwareTrait;
/**
* Initialisation des filtres Doctrine pour les historique.
* Objectif : laisser passer les enregistrements passés en historique pour mettre en évidence ensuite les erreurs
* éventuelles
* (services sur des enseignements fermés, etc.)
*
* @see \Application\ORM\Filter\HistoriqueFilter
*/
protected function initFilters()
{
$this->em()->getFilters()->enable('historique')->init([
......@@ -55,7 +47,6 @@ class IntervenantDossierController extends AbstractController
public function indexAction()
{
$this->initFilters();
/* Initialisation */
......@@ -69,36 +60,39 @@ class IntervenantDossierController extends AbstractController
$intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
$intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant);
$intervenantDossierStatut = $intervenantDossier->getStatut();
$intervenantDossierCompletude = $this->getServiceDossier()->isComplete($intervenantDossier);
$intervenantDossierCompletude = $this->getServiceDossier()->getCompletude($intervenantDossier);
$champsAutres = $intervenantDossier->getStatut()->getChampsAutres();
/* Règles pour afficher ou non les fieldsets */
$fieldsetRules = [
'fieldset-identite' => $intervenantDossier->getStatut()->getDossierIdentite(),
'fieldset-adresse' => $intervenantDossier->getStatut()->getDossierAdresse(),
'fieldset-contact' => $intervenantDossier->getStatut()->getDossierContact(),
'fieldset-iban' => $intervenantDossier->getStatut()->getDossierIban(),
'fieldset-insee' => $intervenantDossier->getStatut()->getDossierInsee(),
'fieldset-employeur' => $intervenantDossier->getStatut()->getDossierEmployeur(),
'fieldset-autres' => (!empty($champsAutres)) ? 1 : 0,//Si le statut intervenant a au moins 1 champs autre
'fieldset-identite-complementaire' => $intervenantDossier->getStatut()->getDossierIdentiteComplementaire(),
'fieldset-adresse' => $intervenantDossier->getStatut()->getDossierAdresse(),
'fieldset-contact' => $intervenantDossier->getStatut()->getDossierContact(),
'fieldset-iban' => $intervenantDossier->getStatut()->getDossierIban(),
'fieldset-insee' => $intervenantDossier->getStatut()->getDossierInsee(),
'fieldset-employeur' => $intervenantDossier->getStatut()->getDossierEmployeur(),
'fieldset-autres' => (!empty($champsAutres)) ? 1 : 0,//Si le statut intervenant a au moins 1 champs autre
];
/* Initialisation du formulaire */
$form = $this->getIntervenantDossierForm($intervenant);
/* Traitement du formulaire */
$form->bindRequestSave($intervenantDossier, $this->getRequest(), function (IntervenantDossier $intervenantDossier) {
try {
/* Sauvegarde du dossier de l'intervenant */
$completude = $this->getServiceDossier()->getTauxCompletude($intervenantDossier);
$form->bind($intervenantDossier);
//si on vient de post
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost();
$form->setData($data);
if ($form->isValid()) {
/* Traitement du formulaire */
$completude = $this->getServiceDossier()->isComplete($intervenantDossier);
$intervenantDossier->setCompletude($completude);
$this->getServiceDossier()->save($intervenantDossier);
$intervenantDossier = $this->getServiceDossier()->save($intervenantDossier);
/* Recalcul des tableaux de bord nécessaires */
$this->updateTableauxBord($intervenantDossier->getIntervenant());
$this->flashMessenger()->addSuccessMessage('Enregistrement de vos données effectué');
} catch (\Exception $e) {
$this->flashMessenger()->addErrorMessage($this->translate($e));
} else {
$this->flashMessenger()->addErrorMessage("Vos données n'ont pas été enregistré, veuillez vérifier les erreurs.");
}
});
}
$iPrec = $this->getServiceDossier()->intervenantVacataireAnneesPrecedentes($intervenant, 1);
$lastHETD = $iPrec ? $this->getServiceService()->getTotalHetdIntervenant($iPrec) : 0;
......@@ -114,10 +108,6 @@ class IntervenantDossierController extends AbstractController
: sprintf("L'intervenant a effectué %s HETD en %s.", $hetd, $iPrec->getAnnee())
);
}
//Si on vient de poster le form alors on redirige pour rafraichir le form après le bindRequestSave
if ($this->getRequest()->isPost()) {
return $this->redirect()->toUrl($this->url()->fromRoute('intervenant/dossier', [], [], true));
}
return compact(
['form',
......@@ -158,7 +148,8 @@ class IntervenantDossierController extends AbstractController
public function devaliderAction()
public
function devaliderAction()
{
$this->initFilters();
......@@ -178,7 +169,8 @@ class IntervenantDossierController extends AbstractController
public function supprimerAction()
public
function supprimerAction()
{
$this->initFilters();
......@@ -252,12 +244,12 @@ class IntervenantDossierController extends AbstractController
}*/
private function updateTableauxBord(Intervenant $intervenant, $validation = false)
private
function updateTableauxBord(Intervenant $intervenant, $validation = false)
{
$this->getServiceWorkflow()->calculerTableauxBord([
'dossier',
'piece_jointe_demande',
], $intervenant);
}
}
\ No newline at end of file
......@@ -33,12 +33,6 @@ class DossierAutre
*/
protected $obligatoire;
/**
* @var integer
*/
protected $disable;
/**
* @var DossierAutreType
*/
......@@ -156,31 +150,7 @@ class DossierAutre
return $this;
}
/**
* @return boolean
*/
public function isDisable(): bool
{
return $this->disable;
}
/**
* @param int $disable
*
* @return DossierAutre $this
*/
public function setDisable(int $disable): DossierAutre
{
$this->disable = $disable;
return $this;
}
/**
......
......@@ -39,7 +39,7 @@
<field name="temAtv" type="boolean" column="TEM_ATV" nullable="false"/>
<field name="temBiatss" type="boolean" column="TEM_BIATSS" nullable="false"/>
<field name="depassementSDSHC" type="boolean" column="DEPASSEMENT_SERVICE_DU_SANS_HC" nullable="false"/>
<field name="dossierIdentite" type="boolean" column="DOSSIER_IDENTITE" nullable="false"/>
<field name="dossierIdentiteComplementaire" type="boolean" column="DOSSIER_IDENTITE_COMP" nullable="false"/>
<field name="dossierAdresse" type="boolean" column="DOSSIER_ADRESSE" nullable="false"/>
<field name="dossierContact" type="boolean" column="DOSSIER_CONTACT" nullable="false"/>
<field name="dossierInsee" type="boolean" column="DOSSIER_INSEE" nullable="false"/>
......
......@@ -183,7 +183,7 @@ class StatutIntervenant implements HistoriqueAwareInterface, RoleInterface
/**
* @var boolean
*/
protected $dossierIdentite;
protected $dossierIdentiteComplementaire;
/**
* @var boolean
......@@ -1126,21 +1126,21 @@ class StatutIntervenant implements HistoriqueAwareInterface, RoleInterface
/**
* @return boolean
*/
public function getDossierIdentite()
public function getDossierIdentiteComplementaire()
{
return $this->dossierIdentite;
return $this->dossierIdentiteComplementaire;
}
/**
* @param integer $dossierIdentite
* @param integer $dossierIdentiteComplementaire
*
* @return StatutIntervenant
*/
public function setDossierIdentite(int $dossierIdentite): StatutIntervenant
public function setDossierIdentiteComplementaire(int $dossierIdentiteComplementaire): StatutIntervenant
{
$this->dossierIdentite = $dossierIdentite;
$this->dossierIdentiteComplementaire = $dossierIdentiteComplementaire;
return $this;
}
......
......@@ -90,34 +90,37 @@ class AdresseFieldset extends AbstractFieldset
* complement
*/
$this->add([
'name' => 'numeroComplement',
'options' => [
'name' => 'numeroComplement',
'options' => [
'label' => 'Compl.',
'empty_option' => "Compl.",
'value_options' => ['Bis', 'Ter'],
'empty_option' => ' ',
'value_options' => \UnicaenApp\Util::collectionAsOptions($this->getServiceAdresseNumeroCompl()->getList()),
],
'attributes' => [
'class' => 'selectpicker',
'data-live-search' => 'true',
],
'type' => 'Select',
'type' => 'Select',
]);
$this->get('numeroComplement')
->setValueOptions(['' => 'Compl.'] + \UnicaenApp\Util::collectionAsOptions($this->getServiceAdresseNumeroCompl()->getList()));
/**
* voirie
*/
$this->add([
'name' => 'voirie',
'options' => [
'label' => 'Voirie',
'empty_option' => "type de voirie",
'name' => 'voirie',
'options' => [
'label' => 'Voirie',
'empty_option' => ' ',
'value_options' => \UnicaenApp\Util::collectionAsOptions($this->getServiceVoirie()->getList()),
],
'attributes' => [
'class' => 'selectpicker',
'data-live-search' => 'true',
],
'type' => 'Select',
'type' => 'Select',
]);
$this->get('voirie')
->setValueOptions(['' => 'Type de voirie'] + \UnicaenApp\Util::collectionAsOptions($this->getServiceVoirie()->getList()));
/**
* voie
*/
......@@ -176,12 +179,15 @@ class AdresseFieldset extends AbstractFieldset
'disable_html_escape' => true,
],],
'attributes' => [
'class' => 'selectpicker',
'data-live-search' => 'true',
],
'type' => 'Select',
]);
$this->get('pays')
->setValueOptions(['' => '- NON RENSEIGNÉ -'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList()));
->setValueOptions(\UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList()));
return $this;
}
......
<?php
namespace Application\Form\Intervenant\Dossier;
use Application\Form\AbstractFieldset;
use Application\Form\CustomElements\PaysSelect;
use Application\Form\Intervenant\Dossier;
use Application\Form\Intervenant\IntervenantDossier;
use Application\Service\Traits\CiviliteServiceAwareTrait;
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\DepartementServiceAwareTrait;
use Application\Service\Traits\PaysServiceAwareTrait;
use Application\Service\Traits\StatutIntervenantServiceAwareTrait;
use Application\Validator\DepartementNaissanceValidator;
use Application\Validator\PaysNaissanceValidator;
use Application\Constants;
use DoctrineORMModule\Form\Element\EntitySelect;
use Zend\Validator\Date as DateValidator;
/**
* Description of DossierIdentiteComplementaireFieldset
*
*/
class DossierIdentiteComplementaireFieldset extends AbstractFieldset
{
use ContextServiceAwareTrait;
use StatutIntervenantServiceAwareTrait;
use PaysServiceAwareTrait;
use DepartementServiceAwareTrait;
use CiviliteServiceAwareTrait;
static private $franceId;
public function init()
{
/**
* Date de naissance
*/
$this->add([
'name' => 'dateNaissance',
'options' => [
'label' => 'Date de naissance <span class="text-danger">*</span>',
'label_options' => [
'disable_html_escape' => true,
],
],
'attributes' => [
'placeholder' => "jj/mm/aaaa",
],
'type' => 'UnicaenApp\Form\Element\Date',
]);
/**
* Pays de naissance
*/
$this->add([
'name' => 'paysNaissance',
'options' => [
'label' => 'Pays de naissance <span class="text-danger">*</span>',
'label_options' => [
'disable_html_escape' => true,
],],
'attributes' => [
'class' => 'selectpicker',
'data-live-search' => 'true',
],
'type' => 'Select',
]);
$this->get('paysNaissance')
->setValueOptions(['' => '- NON RENSEIGNÉ -'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList()));