Skip to content
Snippets Groups Projects
Commit 9945cbf2 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Merge Master in alc-dossier-form

parent 6e3704a5
Branches
Tags
1 merge request!55Ll bug report services
Showing
with 495 additions and 39 deletions
...@@ -35,24 +35,34 @@ Si vous êtes sur une version antérieurs à la 14, merci de migrer en V14.x **A ...@@ -35,24 +35,34 @@ Si vous êtes sur une version antérieurs à la 14, merci de migrer en V14.x **A
* La base de données ayant été remaniée, il vous faudra adapter vos connecteurs RH. En particulier ceux visant les tables INTERVERNANT et STRUCTURE. * La base de données ayant été remaniée, il vous faudra adapter vos connecteurs RH. En particulier ceux visant les tables INTERVERNANT et STRUCTURE.
Une nouvelle documentation sur les connecteurs est disponible ici : [Import de données via les connecteurs](doc/Connecteurs%20Import/Connecteurs%20IMPORT.md). Une nouvelle documentation sur les connecteurs est disponible ici : [Import de données via les connecteurs](doc/Connecteurs%20Import/Connecteurs%20IMPORT.md).
# OSE 14.10
## Corrections de bugs
* Lors de la modification du référentiel réalisé, l'horodatage (nom et date de modification) n'impacte plus le référentiel prévisionnel.
# OSE 14.9 # OSE 14.9
## Nouveautés ## Nouveautés
* Intégration (en cours) de la formule de calcul de Poitiers. * Intégration de la formule de calcul de Poitiers.
* Stockage de la date d'envoi par e-mail du contrat * Stockage de la date d'envoi par e-mail du contrat
* Nouvel indicateur 361 permettant de suivre les retours de contrats envoyés par email * Nouvel indicateur 361 permettant de suivre les retours de contrats envoyés par email
* Possibilité de tranférer une fiche de service vers la page de test des formules de calcul * Possibilité de tranférer une fiche de service vers la page de test des formules de calcul
* Possibilité d'exporter et d'importer sous forme de fichier un test de formule de calcul * Possibilité d'exporter et d'importer sous forme de fichier un test de formule de calcul
* Formule de calcul de l'Université de Poitiers
* Piece justificative : forcer la durée de vie à 1 si la case "Uniquement en cas de changement de RIB" est cochée par l'utilisateur pour éviter les mauvais paramétrages des pièces jointes * Piece justificative : forcer la durée de vie à 1 si la case "Uniquement en cas de changement de RIB" est cochée par l'utilisateur pour éviter les mauvais paramétrages des pièces jointes
## Corrections de bugs ## Corrections de bugs
* Dans l'écran contrat du vacataire, l'action "envoyer par mail", n'envoyait pas le contrat par mail si l'intervenant n'avait pas d'email établissement. * Dans l'écran contrat du vacataire, l'action "envoyer par mail", n'envoyait pas le contrat par mail si l'intervenant n'avait pas d'email établissement.
## Notes de mise à jour
* Lors de la mise à jour, vous rencontrerez deux erreurs :
* lors de la modification de l'indicateur 361
* lors de l'ajout d'une contrainte sur la table NOEUD
Il vous faudra éxécuter `./bin/ose update-bdd` juste après la MAJ pour corriger ces erreurs.
# OSE 14.8 # OSE 14.8
......
...@@ -96,10 +96,14 @@ foreach ($listFiles as $file) { ...@@ -96,10 +96,14 @@ foreach ($listFiles as $file) {
$data['NOM_COMMERCIAL'] = $nomCommercial; $data['NOM_COMMERCIAL'] = $nomCommercial;
$data['SOURCE_ID'] = $oseSource; $data['SOURCE_ID'] = $oseSource;
$data['IDENTIFIANT_ASSOCIATION'] = $identifiantAssociation; $data['IDENTIFIANT_ASSOCIATION'] = $identifiantAssociation;
$data['HISTO_DESTRUCTEUR_ID'] = null;
$data['HISTO_DESTRUCTION'] = null;
$data['IDENTIFIANT_ASSOCIATION'] = $identifiantAssociation;
$data['CRITERE_RECHERCHE'] = reduce($raisonSociale . ' ' . $nomCommercial . ' ' . $siren); $data['CRITERE_RECHERCHE'] = reduce($raisonSociale . ' ' . $nomCommercial . ' ' . $siren);
$datas[] = $data; $datas[] = $data;
$options['histo-user-id'] = $oseId; $options['histo-user-id'] = $oseId;
$options['where'] = 'SIREN LIKE \'' . $num . '%\''; $options['where'] = 'SIREN LIKE \'' . $num . '%\'';
$options['soft-delete'] = true;
} }
$i++; $i++;
......
...@@ -377,13 +377,14 @@ class Table ...@@ -377,13 +377,14 @@ class Table
public function merge(array $data, $key, array $options = []): array public function merge(array $data, $key, array $options = []): array
{ {
$result = ['insert' => 0, 'update' => 0, 'delete' => 0]; $result = ['insert' => 0, 'update' => 0, 'delete' => 0, 'soft-delete' => 0];
/* Initialisation */ /* Initialisation */
$defaultOptions = [ $defaultOptions = [
'where' => null, 'where' => null,
'key' => $key, 'key' => $key,
'delete' => true, 'delete' => true,
'soft-delete' => false,
'insert' => true, 'insert' => true,
'update' => true, 'update' => true,
'update-cols' => [], 'update-cols' => [],
...@@ -437,7 +438,14 @@ class Table ...@@ -437,7 +438,14 @@ class Table
$this->insert($new, $traitementOptions); $this->insert($new, $traitementOptions);
$result['insert']++; $result['insert']++;
} }
} elseif (empty($new)) { // DELETE } elseif (empty($new) && $options['soft-delete'] && !empty($options['histo-user-id'])) { // SOFT DELETE
//On ne delete pas mais on historise
$new = $old;
$new['HISTO_DESTRUCTEUR_ID'] = $traitementOptions['histo-user-id'];
$new['HISTO_DESTRUCTION'] = new \DateTime();
$this->update($new, $this->makeKeyArray($old, $key), $traitementOptions);
$result['soft-delete']++;
} elseif (empty($new) && !$options['soft-delete']) { // DELETE
if ($options['delete']) { if ($options['delete']) {
$this->delete($this->makeKeyArray($old, $key)); $this->delete($this->makeKeyArray($old, $key));
$result['delete']++; $result['delete']++;
......
...@@ -394,10 +394,13 @@ return [ ...@@ -394,10 +394,13 @@ return [
'tests' => 'Tests', 'tests' => 'Tests',
], ],
], ],
'employeur' => [ 'referentiel-commun' => [
'libelle' => 'Employeurs', 'libelle' => 'Référentiels communs',
'privileges' => [ 'privileges' => [
'gestion' => 'Gestion des employeurs', 'voirie-visualisation' => 'Visualisation voiries',
'voirie-edition' => 'Édition voiries',
'employeur-visualisation' => 'Visualisation employeurs',
'employeur-edition' => 'Édition employeurs',
], ],
], ],
......
...@@ -30,6 +30,17 @@ return [ ...@@ -30,6 +30,17 @@ return [
], ],
'may_terminate' => true, 'may_terminate' => true,
], ],
'administration-referentiel-commun' => [
'type' => 'Literal',
'options' => [
'route' => '/administration-referentiel-commun',
'defaults' => [
'controller' => 'Application\Controller\Administration',
'action' => 'administration-referentiel-commun',
],
],
'may_terminate' => true,
],
'administration-financiere' => [ 'administration-financiere' => [
'type' => 'Literal', 'type' => 'Literal',
'options' => [ 'options' => [
...@@ -65,6 +76,33 @@ return [ ...@@ -65,6 +76,33 @@ return [
'resource' => PrivilegeController::getResourceId('Application\Controller\Administration', 'index'), 'resource' => PrivilegeController::getResourceId('Application\Controller\Administration', 'index'),
'order' => 7, 'order' => 7,
'pages' => [ 'pages' => [
'gestion-referentiel-commun' => [
'label' => 'Gestion référentiels communs',
'icon' => 'glyphicon glyphicon - list-alt',
'route' => 'administration-referentiel-commun',
'resource' => PrivilegeController::getResourceId('Application\Controller\Administration', 'administration-referentiel-commun'),
'order' => 80,
'border - color' => '#111',
'pages' => [
'voirie' => [
'label' => 'Gestion des voiries',
'icon' => 'fa fa-graduation-cap',
'route' => 'voirie',
'resource' => PrivilegeController::getResourceId('Application\Controller\Voirie', 'index'),
'order' => 800,
'border-color' => '#BBCF55',
],
'Employeurs' => [
'border-color' => '#9F491F',
'icon' => 'glyphicon glyphicon-list-alt',
'label' => "Gestion des employeurs",
'title' => "Gestion des employeurs",
'route' => 'employeur',
'resource' => PrivilegeController::getResourceId('Application\Controller\Employeur', 'index'),
'order' => 70,
],
],
],
'gestion-intervenant' => [ 'gestion-intervenant' => [
'label' => 'Gestion intervenants (Statuts, PJ, etc...)', 'label' => 'Gestion intervenants (Statuts, PJ, etc...)',
'icon' => 'glyphicon glyphicon - list-alt', 'icon' => 'glyphicon glyphicon - list-alt',
...@@ -137,12 +175,13 @@ return [ ...@@ -137,12 +175,13 @@ return [
], ],
], ],
], ],
'bjyauthorize' => [ 'bjyauthorize' => [
'guards' => [ 'guards' => [
PrivilegeController::class => [ PrivilegeController::class => [
[ [
'controller' => 'Application\Controller\Administration', 'controller' => 'Application\Controller\Administration',
'action' => ['index', 'administration-types', 'administration-financiere', 'administration-intervenant'], 'action' => ['index', 'administration-types', 'administration-financiere', 'administration-intervenant', 'administration-referentiel-commun'],
'privileges' => [ 'privileges' => [
Privileges::IMPORT_ECARTS, Privileges::IMPORT_ECARTS,
Privileges::IMPORT_MAJ, Privileges::IMPORT_MAJ,
...@@ -157,6 +196,8 @@ return [ ...@@ -157,6 +196,8 @@ return [
Privileges::DROIT_AFFECTATION_VISUALISATION, Privileges::DROIT_AFFECTATION_VISUALISATION,
Privileges::PARAMETRES_GENERAL_VISUALISATION, Privileges::PARAMETRES_GENERAL_VISUALISATION,
Privileges::REFERENTIEL_ADMIN_VISUALISATION, Privileges::REFERENTIEL_ADMIN_VISUALISATION,
Privileges::REFERENTIEL_COMMUN_VOIRIE_VISUALISATION,
Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION,
Privileges::TYPE_INTERVENTION_VISUALISATION, Privileges::TYPE_INTERVENTION_VISUALISATION,
Privileges::TYPE_RESSOURCE_VISUALISATION, Privileges::TYPE_RESSOURCE_VISUALISATION,
Privileges::PIECE_JUSTIFICATIVE_GESTION_VISUALISATION, Privileges::PIECE_JUSTIFICATIVE_GESTION_VISUALISATION,
......
...@@ -46,27 +46,7 @@ return [ ...@@ -46,27 +46,7 @@ return [
], ],
], ],
'navigation' => [
'default' => [
'home' => [
'pages' => [
'administration' => [
'pages' => [
'Employeurs' => [
'border-color' => '#9F491F',
'icon' => 'glyphicon glyphicon-list-alt',
'label' => "Employeurs",
'title' => "Gestion des employeurs",
'route' => 'employeur',
'resource' => PrivilegeController::getResourceId('Application\Controller\Discipline', 'index'),//creer un priviege employeur
'order' => 70,
],
],
],
],
],
],
],
'console' => [ 'console' => [
'router' => [ 'router' => [
...@@ -99,7 +79,7 @@ return [ ...@@ -99,7 +79,7 @@ return [
[ [
'controller' => 'Application\Controller\Employeur', 'controller' => 'Application\Controller\Employeur',
'action' => ['index', 'recherche-json'], 'action' => ['index', 'recherche-json'],
'privileges' => Privileges::EMPLOYEUR_GESTION, 'privileges' => Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION,
], ],
], ],
'BjyAuthorize\Guard\Controller' => [ 'BjyAuthorize\Guard\Controller' => [
...@@ -118,7 +98,7 @@ return [ ...@@ -118,7 +98,7 @@ return [
'allow' => [ 'allow' => [
[ [
'privileges' => [ 'privileges' => [
Privileges::EMPLOYEUR_GESTION, Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION,
], ],
'resources' => 'Contrat', 'resources' => 'Contrat',
], ],
......
<?php
namespace Application;
use Application\Provider\Privilege\Privileges;
use UnicaenAuth\Guard\PrivilegeController;
return [
'router' => [
'routes' => [
'voirie' => [
'type' => 'Literal',
'options' => [
'route' => '/voirie',
'defaults' => [
'controller' => 'Application\Controller\Voirie',
'action' => 'index',
],
],
'may_terminate' => true,
'child_routes' => [
'saisie' => [
'type' => 'Segment',
'options' => [
'route' => '/saisie[/:voirie]',
'constraints' => [
'voirie' => '[0-9]*',
],
'defaults' => [
'action' => 'saisie',
],
],
'may_terminate' => true,
],
'delete' => [
'type' => 'Segment',
'options' => [
'route' => '/delete/:voirie',
'constraints' => [
'voirie' => '[0-9]*',
],
'defaults' => [
'action' => 'delete',
],
],
'may_terminate' => true,
],
],
],
],
],
'bjyauthorize' => [
'guards' => [
PrivilegeController::class => [
[
'controller' => 'Application\Controller\Voirie',
'action' => ['index'],
'privileges' => [Privileges::REFERENTIEL_COMMUN_VOIRIE_VISUALISATION],
],
[
'controller' => 'Application\Controller\Voirie',
'action' => ['saisie', 'delete'],
'privileges' => [Privileges::REFERENTIEL_COMMUN_VOIRIE_EDITION],
],
],
],
],
'controllers' => [
'invokables' => [
'Application\Controller\Voirie' => Controller\VoirieController::class,
],
],
'form_elements' => [
'invokables' => [
Form\Voirie\VoirieSaisieForm::class => Form\Voirie\VoirieSaisieForm::class,
],
],
];
...@@ -38,4 +38,11 @@ class AdministrationController extends AbstractController ...@@ -38,4 +38,11 @@ class AdministrationController extends AbstractController
return []; return [];
} }
public function administrationReferentielCommunAction()
{
return [];
}
} }
\ No newline at end of file
<?php
namespace Application\Controller;
use Application\Entity\Db\Voirie;
use Application\Form\Voirie\Traits\VoirieSaisieFormAwareTrait;
use Application\Service\Traits\VoirieServiceAwareTrait;
use UnicaenApp\View\Model\MessengerViewModel;
class VoirieController extends AbstractController
{
use VoirieServiceAwareTrait;
use VoirieSaisieFormAwareTrait;
public function indexAction()
{
$this->em()->getFilters()->enable('historique')->init([
Voirie::class,
]);
$voiries = $this->getServiceVoirie()->getList();
return compact('voiries');
}
public function saisieAction()
{
$voirie = $this->getEvent()->getParam('voirie');
$form = $this->getFormVoirieSaisie();
if (empty($voirie)) {
$title = "Création d'une nouvelle voirie";
$voirie = $this->getServiceVoirie()->newEntity();
} else {
$title = "Edition d'une voirie";
}
$form->bindRequestSave($voirie, $this->getRequest(), function (Voirie $v) {
try {
$this->getServiceVoirie()->save($v);
$this->flashMessenger()->addSuccessMessage('Enregistrement effectué');
} catch (Exception $e) {
$this->flashMessenger()->addErrorMessage($this->translate($e));
}
});
return compact('form', 'title');
}
public function deleteAction()
{
$voirie = $this->getEvent()->getParam('voirie');
try {
$this->getServiceVoirie()->delete($voirie);
$this->flashMessenger()->addSuccessMessage("Voirie supprimée avec succés");
} catch (\Exception $e) {
$this->flasheMessenger()->addErrorMessage($this->translate($e));
}
return new MessengerViewModel(compact('voirie'));
}
}
\ No newline at end of file
<?php
namespace Application\Form\Voirie\Traits;
use Application\Form\Voirie\VoirieSaisieForm;
/**
* Description of VoirieSaisieFormAwareTrait
*/
trait VoirieSaisieFormAwareTrait
{
/**
* @var VoirieSaisieForm
*/
private $formVoirieSaisie;
/**
* @param VoirieSaisieForm $formVoirieSaisie
*
* @return self
*/
public function setFormVoirieSaisie(VoirieSaisieForm $formVoirieSaisie)
{
$this->formVoirieSaisie = $formVoirieSaisie;
return $this;
}
public function getFormVoirieSaisie()
{
if (!empty($this->formVoirieSaisie)) {
return $this->formVoirieSaisie;
}
return \Application::$container->get('FormElementManager')->get(VoirieSaisieForm::class);
}
}
<?php
namespace Application\Form\Voirie;
use Application\Form\AbstractForm;
use Application\Hydrator\GenericHydrator;
use Application\Service\Traits\SourceServiceAwareTrait;
use UnicaenApp\Util;
use UnicaenImport\Entity\Db\Source;
use Zend\Form\Element\Csrf;
/**
* Description of VoirieForm
*/
class VoirieSaisieForm extends AbstractForm
{
use SourceServiceAwareTrait;
protected $hydratorElements = [
'id' => ['type' => 'int'],
'libelle' => ['type' => 'string'],
'code' => ['type' => 'string'],
'source' => ['type' => Source::class],
'sourceCode' => ['type' => 'string'],
];
public function init()
{
$hydrator = new GenericHydrator($this->getServiceSource()->getEntityManager(), $this->hydratorElements);
$this->setHydrator($hydrator);
$this->setAttribute('action', $this->getCurrentUrl());
$this->add([
'name' => 'libelle',
'options' => [
'label' => 'Libellé',
],
'attributes' => [
],
'type' => 'Text',
]);
$this->add([
'name' => 'code',
'options' => [
'label' => "Code",
],
'attributes' => [
'id' => uniqid('code'),
],
'type' => 'Text',
]);
$this->add([
'name' => 'source',
'type' => 'Select',
'options' => [
'label' => 'Source des données',
'value_options' => Util::collectionAsOptions($this->getServiceSource()->getList()),
],
]);
$this->add([
'name' => 'sourceCode',
'type' => 'Text',
'options' => [
'label' => 'Code source',
],
]);
$this->add(new Csrf('security'));
$this->add([
'name' => 'submit',
'type' => 'Submit',
'attributes' => [
'value' => "Enregistrer",
'class' => 'btn btn-primary',
],
]);
$this->add([
'name' => 'id',
'type' => 'Hidden',
]);
return $this;
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
'libelle' => [
'required' => false,
],
'code' => [
'required' => false,
],
];
}
}
...@@ -196,6 +196,10 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges ...@@ -196,6 +196,10 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges
const PLAFONDS_GESTION_VISUALISATION = 'plafonds-gestion-visualisation'; const PLAFONDS_GESTION_VISUALISATION = 'plafonds-gestion-visualisation';
const REFERENTIEL_ADMIN_EDITION = 'referentiel-admin-edition'; const REFERENTIEL_ADMIN_EDITION = 'referentiel-admin-edition';
const REFERENTIEL_ADMIN_VISUALISATION = 'referentiel-admin-visualisation'; const REFERENTIEL_ADMIN_VISUALISATION = 'referentiel-admin-visualisation';
const REFERENTIEL_COMMUN_VOIRIE_EDITION = 'referentiel-commun-voirie-edition';
const REFERENTIEL_COMMUN_VOIRIE_VISUALISATION = 'referentiel-commun-voirie-visualisation';
const REFERENTIEL_COMMUN_EMPLOYEUR_EDITION = 'referentiel-commun-employeur-edition';
const REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION = 'referentiel-commun-employeur-visualisation';
const REFERENTIEL_DEVALIDATION = 'referentiel-devalidation'; const REFERENTIEL_DEVALIDATION = 'referentiel-devalidation';
const REFERENTIEL_EDITION = 'referentiel-edition'; const REFERENTIEL_EDITION = 'referentiel-edition';
const REFERENTIEL_VALIDATION = 'referentiel-validation'; const REFERENTIEL_VALIDATION = 'referentiel-validation';
......
...@@ -74,6 +74,7 @@ class EmployeurService extends AbstractEntityService ...@@ -74,6 +74,7 @@ class EmployeurService extends AbstractEntityService
FROM FROM
EMPLOYEUR e EMPLOYEUR e
WHERE rownum <= $limit WHERE rownum <= $limit
AND HISTO_DESTRUCTION IS NULL
"; ";
if (!empty($criteria)) { if (!empty($criteria)) {
......
<?php
/**
* @var $this \Application\View\Renderer\PhpRenderer
*/
use Application\Provider\Privilege\Privileges;
$this->headTitle()->append("Gestion des voiries");
$canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::REFERENTIEL_COMMUN_VOIRIE_EDITION));
?>
<h1 class="page-header">Gestion des voiries</h1>
<table class="table table-bordered table-sort">
<thead>
<th>Code</th>
<th>Libelle</th>
<th>Source</th>
<?php if ($canEdit) echo '<th>Actions</th>' ?>
</thead>
<tbody>
<?php
/**
* @var \Application\Entity\Db\Voirie $voirie
*/
?>
<?php foreach ($voiries as $voirie): ?>
<tr>
<td><?= $voirie->getCode() ?></td>
<td data-order="<?= $voirie->getLibelle() ?>">
<?= $voirie->getLibelle() ?>
</td>
<td><?= $voirie->getSource()->getLibelle() ?></td>
<?php if ($canEdit): ?>
<td style="text-align:center;width:1px;white-space: nowrap">
<?php if (!$voirie->getSource()->getImportable()): ?>
<a class="disabled ajax-modal" data-event="voirie-saisie"
href="<?= $this->url('voirie/saisie', ['voirie' => $voirie->getId()]) ?>"
title="Modifier la voirie">
<span class="glyphicon glyphicon-edit"></span></a>
<a class="pop-ajax"
href="<?= $this->url('voirie/delete', ['voirie' => $voirie->getId()]) ?>"
title="Supprimer la voirie"
data-content="<p class='lead text-danger'><strong>Attention!</strong> Confirmez-vous cette suppression ?</p>"
data-confirm="true"
data-confirm-button="Oui"
data-cancel-button="Non"
data-submit-reload="true"
>
<span class="glyphicon glyphicon-remove"></span>
</a>
<?php else: ?>
Non modifiable
<?php endif; ?>
</td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if ($canEdit): ?>
<a class="btn btn-primary ajax-modal" data-event="voirie-saisie"
href="<?= $this->url('voirie/saisie') ?>"
title="Ajouter une voirie">
<span class="glyphicon glyphicon-edit"></span>
Ajouter une voirie</a>
<script type="text/javascript">
$(function () {
$("body").on("voirie-saisie", function (event, data) {
window.location.reload();
});
});
</script>
<?php endif ?>
<?php
/**
* @var $this \Application\View\Renderer\PhpRenderer
*/
echo $this->messenger()->addCurrentMessagesFromFlashMessenger();
echo $this->form($form);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment