Commit e93cb4c0 authored by lecluse's avatar lecluse
Browse files

#2572 #2537

Saisie de la mise ne paiement par la DRH
parent ae3e499e
......@@ -17,24 +17,37 @@ return [
],
],
'child_routes' => [
'mise-en-paiement' => [
'etat-demande-paiement' => [
'type' => 'Literal',
'may_terminate' => false,
'may_terminate' => true,
'options' => [
'route' => '/mise-en-paiement',
'route' => '/etat-demande-paiement',
'defaults' => [
'action' => 'miseEnPaiement',
'action' => 'etatPaiement',
'etat' => Entity\Db\MiseEnPaiement::A_METTRE_EN_PAIEMENT,
],
],
],
'mise-en-paiement' => [
'type' => 'Segment',
'may_terminate' => true,
'options' => [
'route' => '/mise-en-paiement/:structure/:intervenants',
'constraints' => [
'structure' => '[0-9]*'
],
'defaults' => [
'action' => 'MiseEnPaiement',
],
],
],
'etat-paiement' => [
'type' => 'Literal',
'may_terminate' => false,
'may_terminate' => true,
'options' => [
'route' => '/etat-paiement',
'defaults' => [
'action' => 'miseEnPaiement',
'action' => 'etatPaiement',
'etat' => Entity\Db\MiseEnPaiement::MIS_EN_PAIEMENT,
],
],
......@@ -49,10 +62,10 @@ return [
'pages' => array(
'gestion' => array(
'pages' => array(
'mise-en-paiement' => array(
'etat-demande-paiement' => array(
'label' => "Mise en paiement",
'title' => "Mise en paiement",
'route' => 'paiement/mise-en-paiement',
'route' => 'paiement/etat-demande-paiement',
),
'etat-paiement' => array(
'label' => "État de paiement",
......@@ -70,9 +83,14 @@ return [
'BjyAuthorize\Guard\Controller' => [
[
'controller' => 'Application\Controller\Paiement',
'action' => ['index','demandeMiseEnPaiement','miseEnPaiement'],
'action' => ['index','demandeMiseEnPaiement','etatPaiement'],
'roles' => [R_COMPOSANTE, R_ADMINISTRATEUR, R_DRH],
],
[
'controller' => 'Application\Controller\Paiement',
'action' => ['miseEnPaiement'],
'roles' => [R_ADMINISTRATEUR, R_DRH],
],
],
],
'resource_providers' => [
......@@ -110,17 +128,18 @@ return [
],
'view_helpers' => [
'invokables' => [
'DemandeMiseEnPaiement' => 'Application\View\Helper\Paiement\DemandeMiseEnPaiementViewHelper',
'DemandeMiseEnPaiement' => 'Application\View\Helper\Paiement\DemandeMiseEnPaiementViewHelper',
],
],
'form_elements' => [
'invokables' => [
'PaiementMiseEnPaiementRechercheForm' => 'Application\Form\Paiement\MiseEnPaiementRechercheForm',
'PaiementMiseEnPaiementForm' => 'Application\Form\Paiement\MiseEnPaiementForm',
'PaiementMiseEnPaiementRechercheForm' => 'Application\Form\Paiement\MiseEnPaiementRechercheForm',
],
],
'controllers' => [
'invokables' => [
'Application\Controller\Paiement' => 'Application\Controller\PaiementController',
'Application\Controller\Paiement' => 'Application\Controller\PaiementController',
],
],
];
\ No newline at end of file
......@@ -49,7 +49,7 @@ class PaiementController extends AbstractActionController implements ContextProv
return compact('intervenant', 'servicesAPayer');
}
public function miseEnPaiementAction()
public function etatPaiementAction()
{
$this->initFilters();
......@@ -104,6 +104,44 @@ class PaiementController extends AbstractActionController implements ContextProv
return compact( 'rechercheForm', 'etatPaiement', 'etat' );
}
public function miseEnPaiementAction()
{
$title = 'Mise en paiement';
$structure = $this->context()->mandatory()->structureFromRoute();
$intervenants = $this->params('intervenants');
$form = $this->getFormMiseEnPaiement();
$errors = [];
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
$form->isValid();
$dateMiseEnPaiement = $form->get('date-mise-en-paiement')->getValue();
$periode = $form->get('periode')->getValue();
$dateMiseEnPaiement = \DateTime::createFromFormat('d/m/Y', $dateMiseEnPaiement);
$periode = $this->getServicePeriode()->get($periode);
$intervenants = $this->getServiceIntervenant()->get( explode(',',$intervenants) );
try{
$this->getServiceMiseEnPaiement()->mettreEnPaiement($structure, $intervenants, $periode, $dateMiseEnPaiement);
}catch(\Exception $e){
$errors[] = $e->getMessage();
}
}
return compact('form','title', 'errors');
}
/**
* @return \Application\Form\Paiement\MiseEnPaiementForm
*/
protected function getFormMiseEnPaiement()
{
return $this->getServiceLocator()->get('FormElementManager')->get('PaiementMiseEnPaiementForm');
}
/**
* @return \Application\Form\Paiement\MiseEnPaiementRechercheForm
*/
......
......@@ -19,6 +19,7 @@
<field name="libelleLong" type="string" column="LIBELLE_LONG" length="40" nullable="false"/>
<field name="ordre" type="integer" column="ORDRE" nullable="false"/>
<field name="paiement" type="boolean" column="PAIEMENT" nullable="true"/>
<field name="moisOriginePaiement" type="integer" column="MOIS_ORIGINE_PAIEMENT" nullable="true"/>
<many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur">
<join-columns>
<join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/>
......
......@@ -88,6 +88,14 @@ class Periode
protected $paiement;
/**
* moisOriginePaiement
*
* @var integer
*/
protected $moisOriginePaiement;
/**
* miseEnPaiementIntervenantStructure
*
* @var MiseEnPaiementIntervenantStructure
......@@ -370,6 +378,29 @@ class Periode
return $this->paiement;
}
/**
* Set moisOriginePaiement
*
* @param boolean $moisOriginePaiement
* @return Periode
*/
public function setMoisOriginePaiement($moisOriginePaiement)
{
$this->moisOriginePaiement = $moisOriginePaiement;
return $this;
}
/**
* Get moisOriginePaiement
*
* @return boolean
*/
public function getMoisOriginePaiement()
{
return $this->moisOriginePaiement;
}
/**
* Get miseEnPaiementIntervenantStructure
*
......
<?php
namespace Application\Form\Paiement;
use Zend\Form\Form;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
/**
* Description of MiseEnPaiementForm
*
* @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
*/
class MiseEnPaiementForm extends Form implements InputFilterProviderInterface, ServiceLocatorAwareInterface
{
use ServiceLocatorAwareTrait;
/**
*
* @var string
*/
private $id;
/**
* Retourne un identifiant unique de formulaire.
* Une fois ce dernier initialisé, il ne change plus pour l'instance en cours
*
* @return string
*/
public function getId()
{
if (null === $this->id) $this->id = uniqid();
return $this->id;
}
/**
*
*/
public function init()
{
$url = $this->getServiceLocator()->getServiceLocator()->get('viewhelpermanager')->get('url');
/* @var $url Zend\View\Helper\Url */
$this ->setAttribute('method', 'post')
->setAttribute('class', 'paiement-mise-en-paiement-form')
->setAttribute('id', $this->getId());
$periodes = $this->getServicePeriode()->getList( $this->getServicePeriode()->finderByPaiement(true) );
$defaultPeriode = $this->getServicePeriode()->getDatePeriodePaiement();
$this->add([
'type' => 'Select',
'name' => 'periode',
'options' => [
'label' => 'Période',
'value_options' => \UnicaenApp\Util::collectionAsOptions($periodes),
],
'attributes' => [
'value' => $defaultPeriode ? $defaultPeriode->getId() : null,
],
]);
$defaultDateMiseEnPaiement = new \DateTime;
$this->add([
'type' => 'UnicaenApp\Form\Element\Date',
'name' => 'date-mise-en-paiement',
'options' => [
'label' => 'Date de mise en paiement',
'format' => 'd/m/Y'
],
'attributes' => [
'step' => '1',
'value' => $defaultDateMiseEnPaiement->format('d/m/Y')
]
]);
$this->add([
'name' => 'submit',
'type' => 'Submit',
'attributes' => [
'value' => 'Effectuer la mise en paiement',
'class' => 'btn btn-primary',
],
]);
$this->setAttribute('action', $url(null, [], [], true));
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
'periode' => [
'required' => true
],
'date-mise-en-paiement' => [
'required' => true
],
];
}
/**
* @return \Application\Service\Periode
*/
protected function getServicePeriode()
{
return $this->getServiceLocator()->getServiceLocator()->get('applicationPeriode');
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ namespace Application\Service;
use Application\Entity\Db\MiseEnPaiement as MiseEnPaiementEntity;
use Application\Entity\Paiement\MiseEnPaiementRecherche;
use Application\Entity\Db\Structure as StructureEntity;
use Application\Entity\Db\Periode as PeriodeEntity;
use Doctrine\ORM\QueryBuilder;
/**
......@@ -246,6 +247,28 @@ class MiseEnPaiement extends AbstractEntityService
}
}
/**
*
* @param StructureEntity $structure
* @param \Application\Entity\Db\Intervenant[] $intervenants
* @param PeriodeEntity $periodePaiement
* @param \DateTime $dateMiseEnPaiement
*/
public function mettreEnPaiement( StructureEntity $structure, $intervenants, PeriodeEntity $periodePaiement, \DateTime $dateMiseEnPaiement )
{
list($qb,$alias) = $this->initQuery();
$this->finderByEtat( MiseEnPaiementEntity::A_METTRE_EN_PAIEMENT, $qb );
$this->finderByStructure($structure, $qb);
$this->finderByIntervenants($intervenants, $qb);
$mepList = $this->getList( $qb );
foreach( $mepList as $mep ){
/* @var $mep MiseEnPaiementEntity */
$mep->setPeriodePaiement( $periodePaiement );
$mep->setDateMiseEnPaiement($dateMiseEnPaiement);
$this->save( $mep );
}
}
private function hydrateFromChangements( MiseEnPaiementEntity $object, $data )
{
if (isset($data['heures'])){
......
......@@ -44,6 +44,19 @@ class Periode extends AbstractEntityService
return 'per';
}
/**
*
* @param \DateTime $date
* @return PeriodeEntity
*/
public function getDatePeriodePaiement( \DateTime $date=null )
{
if (empty($date)) $date = new \DateTime;
$mois = (int)$date->format('m');
if (0 == $mois) return null;
return $this->getRepo()->findOneBy(['moisOriginePaiement' => $mois]);
}
/**
* Retourne la liste des périodes d'enseignement
*
......
<?php
use Application\Entity\Db\MiseEnPaiement;
/* @var $rechercheForm \Application\Form\Paiement\MiseEnPaiementRechercheForm */
/* @var $etatPaiement array */
/* @var $etat string */
/* @var $miseEnPaiementForm Application\Form\Paiement\MiseEnPaiementForm */
$title = 'Paiement';
switch( $etat ){
case MiseEnPaiement::A_VALIDER:
$title = 'Demandes de mise en paiement à valider';
break;
case MiseEnPaiement::A_METTRE_EN_PAIEMENT:
$title = 'Mise en paiement';
break;
case MiseEnPaiement::MIS_EN_PAIEMENT:
$title = 'État de paiement';
break;
}
$this->headTitle()->append($title);
?>
<h1><?php echo $title ?></h1>
<div class="panel panel-default filter" data-etat="<?php echo $etat ?>">
<div class="panel-heading">Filtres</div>
<div class="panel-body">
<?php echo $this->form()->openTag($rechercheForm->prepare()); ?>
<?php
echo $this->formControlGroup($rechercheForm->get('structure'));
if ($rechercheForm->get('structure')->getValue()){
if (MiseEnPaiement::MIS_EN_PAIEMENT === $etat){
echo $this->formControlGroup($rechercheForm->get('periode'));
if ($rechercheForm->get('periode')->getValue()){
echo $this->formControlGroup($rechercheForm->get('intervenants'));
}
}else{
echo $this->formControlGroup($rechercheForm->get('intervenants'));
}
}
echo $this->formRow($rechercheForm->get('submit'));
echo $this->form()->closeTag();
echo $this->formErrors( $rechercheForm );
?>
</div>
<script type="text/javascript">
$(function() {
PaiementMiseEnPaiementRechercheForm.get("<?php echo $rechercheForm->getId(); ?>").init();
});
</script>
</div>
<?php
if (! empty($etatPaiement)){
echo $this->partial('application/paiement/etat-paiement-html', compact('etatPaiement'));
if( $etat === MiseEnPaiement::A_METTRE_EN_PAIEMENT && $this->isAllowed('controller/Application\Controller\Paiement:miseenpaiement')){
$url = $this->url('paiement/mise-en-paiement', [
'structure' => $rechercheForm->get('structure')->getValue(),
'intervenants'=> implode( ',', $rechercheForm->get('intervenants')->getValue() )
]);
?><a href="<?php echo $url ?>" data-event="mise-en-paiement-form-submit" data-url-redirect="<?php echo $this->url(null, [], [], true) ?>" class="btn btn-primary ajax-modal">Mise en paiement</a><?php
}
}
\ No newline at end of file
<?php
use Application\Entity\Db\MiseEnPaiement;
/* @var $form Application\Form\Paiement\MiseEnPaiementForm */
/* @var $errors string[] */
/* @var $rechercheForm \Application\Form\Paiement\MiseEnPaiementRechercheForm */
/* @var $etatPaiement array */
/* @var $etat string */
$title = 'Paiement';
switch( $etat ){
case MiseEnPaiement::A_VALIDER:
$title = 'Demandes de mise en paiement à valider';
break;
case MiseEnPaiement::A_METTRE_EN_PAIEMENT:
$title = 'Mise en paiement';
break;
case MiseEnPaiement::MIS_EN_PAIEMENT:
$title = 'État de paiement';
break;
}
echo $this->form()->openTag($form->prepare());
?>
<h1><?php echo $title ?></h1>
<div class="panel panel-default filter" data-etat="<?php echo $etat ?>">
echo $this->formControlGroup($form->get('periode'));
echo $this->formControlGroup($form->get('date-mise-en-paiement'));
<div class="panel-heading">Filtres</div>
<div class="panel-body">
<?php echo $this->form()->openTag($rechercheForm->prepare()); ?>
<?php
echo $this->formRow($form->get('submit'));
echo $this->formControlGroup($rechercheForm->get('structure'));
echo $this->form()->closeTag();
echo $this->formErrors( $form );
if ($rechercheForm->get('structure')->getValue()){
if (MiseEnPaiement::MIS_EN_PAIEMENT === $etat){
echo $this->formControlGroup($rechercheForm->get('periode'));
if ($rechercheForm->get('periode')->getValue()){
echo $this->formControlGroup($rechercheForm->get('intervenants'));
}
}else{
echo $this->formControlGroup($rechercheForm->get('intervenants'));
}
}
echo $this->formRow($rechercheForm->get('submit'));
echo $this->form()->closeTag();
echo $this->formErrors( $rechercheForm );
?>
</div>
<script type="text/javascript">
$(function() {
PaiementMiseEnPaiementRechercheForm.get("<?php echo $rechercheForm->getId(); ?>").init();
});
</script>
</div>
<?php
if (! empty($etatPaiement))
echo $this->partial('application/paiement/etat-paiement-html', compact('etatPaiement'));
if ($errors) echo $this->messenger()->setMessages(array(UnicaenApp\View\Helper\Messenger::ERROR => $errors));
\ No newline at end of file
......@@ -531,7 +531,7 @@ function PaiementMiseEnPaiementRechercheForm( id )
submitElement.show();
}
}else{
submitElement.attr( 'value', 'Sélectionner ou rechercher les intervenants correspondants');
submitElement.attr( 'value', 'Suite...');
submitElement.show();
}
}
......@@ -562,6 +562,13 @@ function PaiementMiseEnPaiementRechercheForm( id )
);
iediv.find(".select-all").click( function(){ that.intervenantsSelectAll() } );
iediv.find(".select-none").click( function(){ that.intervenantsSelectNone() } );
$("body").on("mise-en-paiement-form-submit", function(event, data) {
if ($("div .messenger, div .alert", event.div).length ? false : true){
document.location.href = event.a.data('url-redirect');
}
});
this.onIntervenantsChange();
}
......
Supports Markdown
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