Skip to content
Snippets Groups Projects
Commit 1c8ebed5 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Finalisation de l'interface de test de la formule de calcul

parent 81b8518c
No related branches found
No related tags found
2 merge requests!35B8.1,!26Motif modification service
Showing
with 1370 additions and 305 deletions
...@@ -49,6 +49,19 @@ return [ ...@@ -49,6 +49,19 @@ return [
], ],
'may_terminate' => true, 'may_terminate' => true,
], ],
'enregistrement' => [
'type' => 'Segment',
'options' => [
'route' => '/enregistrement[/:formuleTestIntervenant]',
'constraints' => [
'formuleTestIntervenant' => '[0-9]*',
],
'defaults' => [
'action' => 'test-enregistrement',
],
],
'may_terminate' => true,
],
'supprimer' => [ 'supprimer' => [
'type' => 'Segment', 'type' => 'Segment',
'options' => [ 'options' => [
...@@ -111,7 +124,7 @@ return [ ...@@ -111,7 +124,7 @@ return [
PrivilegeController::class => [ PrivilegeController::class => [
[ [
'controller' => 'Application\Controller\Formule', 'controller' => 'Application\Controller\Formule',
'action' => ['test', 'test-saisir', 'test-supprimer'], 'action' => ['test', 'test-saisir', 'test-enregistrement', 'test-supprimer'],
'privileges' => [Privileges::FORMULE_TESTS], 'privileges' => [Privileges::FORMULE_TESTS],
], ],
], ],
...@@ -132,9 +145,4 @@ return [ ...@@ -132,9 +145,4 @@ return [
], ],
], ],
'form_elements' => [
'factories' => [
Form\FormuleTest\IntervenantForm::class => Form\FormuleTest\Factory\IntervenantFormFactory::class,
],
],
]; ];
\ No newline at end of file
...@@ -3,9 +3,18 @@ ...@@ -3,9 +3,18 @@
namespace Application\Controller; namespace Application\Controller;
use Application\Entity\Db\Annee;
use Application\Entity\Db\EtatVolumeHoraire;
use Application\Entity\Db\Formule;
use Application\Entity\Db\FormuleTestIntervenant; use Application\Entity\Db\FormuleTestIntervenant;
use Application\Form\FormuleTest\Traits\IntervenantFormAwareTrait; use Application\Entity\Db\FormuleTestStructure;
use Application\Entity\Db\TypeIntervenant;
use Application\Entity\Db\TypeVolumeHoraire;
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\FormuleTestIntervenantServiceAwareTrait; use Application\Service\Traits\FormuleTestIntervenantServiceAwareTrait;
use Application\Service\Traits\ParametresServiceAwareTrait;
use UnicaenApp\View\Model\MessengerViewModel;
use Zend\View\Model\JsonModel;
/** /**
* Description of FormuleController * Description of FormuleController
...@@ -15,7 +24,8 @@ use Application\Service\Traits\FormuleTestIntervenantServiceAwareTrait; ...@@ -15,7 +24,8 @@ use Application\Service\Traits\FormuleTestIntervenantServiceAwareTrait;
class FormuleController extends AbstractController class FormuleController extends AbstractController
{ {
use FormuleTestIntervenantServiceAwareTrait; use FormuleTestIntervenantServiceAwareTrait;
use IntervenantFormAwareTrait; use ContextServiceAwareTrait;
use ParametresServiceAwareTrait;
public function testAction() public function testAction()
{ {
...@@ -31,26 +41,28 @@ class FormuleController extends AbstractController ...@@ -31,26 +41,28 @@ class FormuleController extends AbstractController
/* @var $formuleTestIntervenant FormuleTestIntervenant */ /* @var $formuleTestIntervenant FormuleTestIntervenant */
$formuleTestIntervenant = $this->getEvent()->getParam('formuleTestIntervenant'); $formuleTestIntervenant = $this->getEvent()->getParam('formuleTestIntervenant');
$form = $this->getFormFormuleTestIntervenant(); $structures = $this->em()->createQuery("SELECT s FROM ".FormuleTestStructure::class." s ORDER BY s.libelle")->execute();
$formules = $this->em()->createQuery("SELECT f FROM ".Formule::class." f ORDER BY f.id")->execute();
$annees = $this->em()->createQuery("SELECT a FROM ".Annee::class." a WHERE a.id BETWEEN 2013 AND 2030 ORDER BY a.id")->execute();
$typesIntervenants = $this->em()->createQuery("SELECT ti FROM ".TypeIntervenant::class." ti ORDER BY ti.id")->execute();
$typesVh = $this->em()->createQuery("SELECT t FROM ".TypeVolumeHoraire::class." t ORDER BY t.id")->execute();
$etatsVh = $this->em()->createQuery("SELECT t FROM ".EtatVolumeHoraire::class." t ORDER BY t.id")->execute();
$annee = $this->getServiceContext()->getAnnee();
$formuleId = $this->getServiceParametres()->get('formule');
if (!$formuleTestIntervenant) { if (!$formuleTestIntervenant) {
$title = 'Ajout d\'un test de formule'; $title = 'Ajout d\'un test de formule';
$formuleTestIntervenant = new FormuleTestIntervenant(); $formuleTestIntervenant = new FormuleTestIntervenant();
} else { } else {
$title = 'Modification d\'un test de formule'; $title = 'Modification d\'un test de formule';
}
$form->bindRequestSave($formuleTestIntervenant, $this->getRequest(), function (FormuleTestIntervenant $fti) {
try { try {
$this->getServiceFormuleTestIntervenant()->save($fti); $this->getServiceFormuleTestIntervenant()->calculer($formuleTestIntervenant);
$this->flashMessenger()->addSuccessMessage('Test de formule bien enregistré');
return $this->redirect()->toRoute('formule-calcul/test');
}catch(\Exception $e){ }catch(\Exception $e){
$this->flashMessenger()->addErrorMessage($this->translate($e)); $this->flashMessenger()->addErrorMessage($this->translate($e));
} }
}); }
return compact('form', 'formuleTestIntervenant', 'title'); return compact('formuleTestIntervenant', 'title', 'annee', 'formuleId', 'structures', 'formules', 'annees', 'typesIntervenants', 'typesVh', 'etatsVh');
} }
...@@ -58,7 +70,7 @@ class FormuleController extends AbstractController ...@@ -58,7 +70,7 @@ class FormuleController extends AbstractController
public function testSupprimerAction() public function testSupprimerAction()
{ {
/* @var $formuleTestIntervenant FormuleTestIntervenant */ /* @var $formuleTestIntervenant FormuleTestIntervenant */
$formuleTestIntervenant = $this->getEvent()->getParam('FormuleTestIntervenant'); $formuleTestIntervenant = $this->getEvent()->getParam('formuleTestIntervenant');
try { try {
$this->getServiceFormuleTestIntervenant()->delete($formuleTestIntervenant); $this->getServiceFormuleTestIntervenant()->delete($formuleTestIntervenant);
...@@ -72,6 +84,62 @@ class FormuleController extends AbstractController ...@@ -72,6 +84,62 @@ class FormuleController extends AbstractController
public function testEnregistrementAction()
{
/* @var $formuleTestIntervenant FormuleTestIntervenant */
$formuleTestIntervenant = $this->getEvent()->getParam('formuleTestIntervenant');
if (!$formuleTestIntervenant){
$formuleTestIntervenant = new FormuleTestIntervenant();
}
$result = ['errors' => '', 'data' => []];
$data = json_decode($this->params()->fromPost('data'), true);
$formuleTestIntervenant->fromArray($data);
$passed = true;
if (!$formuleTestIntervenant->getLibelle()){
$result['errors'][] = 'Libellé manquant';
$passed = false;
}
if (!$formuleTestIntervenant->getFormule()){
$result['errors'][] = 'La formule à utiliser n\'est pas précisée';
$passed = false;
}
if (!$formuleTestIntervenant->getAnnee()){
$result['errors'][] = 'L\'année doit être renseignée';
$passed = false;
}
if (!$formuleTestIntervenant->getTypeIntervenant()){
$result['errors'][] = 'Le type d\'intervenant (permanent, vacataire) doit être renseigné';
$passed = false;
}
if (!$formuleTestIntervenant->getStructureTest()){
$result['errors'][] = 'La structure doit être renseignée';
$passed = false;
}
if (!$formuleTestIntervenant->getTypeVolumeHoraire()){
$result['errors'][] = 'Le type de volume horaire (prévu ou réalisé) doit être renseigné';
$passed = false;
}
if (!$formuleTestIntervenant->getEtatVolumeHoraire()){
$result['errors'][] = 'L\'état de volume horaire (saisi, validé, etc) doit être renseigné';
$passed = false;
}
if ($passed) {
$this->getServiceFormuleTestIntervenant()->save($formuleTestIntervenant);
try {
$this->getServiceFormuleTestIntervenant()->calculer($formuleTestIntervenant);
} catch (\Exception $e) {
$result['errors'] = $this->translate($e);
}
}
$result['data'] = $formuleTestIntervenant->toArray();
return new JsonModel($result);
}
public function calculerToutAction() public function calculerToutAction()
{ {
$this->em()->getConnection()->exec('BEGIN OSE_FORMULE.CALCULER_TOUT; END;'); $this->em()->getConnection()->exec('BEGIN OSE_FORMULE.CALCULER_TOUT; END;');
......
...@@ -8,6 +8,7 @@ use Application\Entity\Db\Traits\FormuleAwareTrait; ...@@ -8,6 +8,7 @@ use Application\Entity\Db\Traits\FormuleAwareTrait;
use Application\Entity\Db\Traits\FormuleTestStructureAwareTrait; use Application\Entity\Db\Traits\FormuleTestStructureAwareTrait;
use Application\Entity\Db\Traits\TypeIntervenantAwareTrait; use Application\Entity\Db\Traits\TypeIntervenantAwareTrait;
use Application\Entity\Db\Traits\TypeVolumeHoraireAwareTrait; use Application\Entity\Db\Traits\TypeVolumeHoraireAwareTrait;
use Application\Hydrator\FormuleTestIntervenantHydrator;
class FormuleTestIntervenant class FormuleTestIntervenant
{ {
...@@ -113,9 +114,11 @@ class FormuleTestIntervenant ...@@ -113,9 +114,11 @@ class FormuleTestIntervenant
/** /**
* @param string $libelle * @param string $libelle
*/ */
public function setLibelle(string $libelle) public function setLibelle(string $libelle): FormuleTestIntervenant
{ {
$this->libelle = $libelle; $this->libelle = $libelle;
return $this;
} }
...@@ -133,9 +136,11 @@ class FormuleTestIntervenant ...@@ -133,9 +136,11 @@ class FormuleTestIntervenant
/** /**
* @param float $heuresDecharge * @param float $heuresDecharge
*/ */
public function setHeuresDecharge(float $heuresDecharge) public function setHeuresDecharge(float $heuresDecharge): FormuleTestIntervenant
{ {
$this->heuresDecharge = $heuresDecharge; $this->heuresDecharge = $heuresDecharge;
return $this;
} }
...@@ -153,9 +158,11 @@ class FormuleTestIntervenant ...@@ -153,9 +158,11 @@ class FormuleTestIntervenant
/** /**
* @param float $heuresServiceStatutaire * @param float $heuresServiceStatutaire
*/ */
public function setHeuresServiceStatutaire(float $heuresServiceStatutaire) public function setHeuresServiceStatutaire(float $heuresServiceStatutaire): FormuleTestIntervenant
{ {
$this->heuresServiceStatutaire = $heuresServiceStatutaire; $this->heuresServiceStatutaire = $heuresServiceStatutaire;
return $this;
} }
...@@ -173,9 +180,11 @@ class FormuleTestIntervenant ...@@ -173,9 +180,11 @@ class FormuleTestIntervenant
/** /**
* @param float $heuresServiceModifie * @param float $heuresServiceModifie
*/ */
public function setHeuresServiceModifie(float $heuresServiceModifie) public function setHeuresServiceModifie(float $heuresServiceModifie): FormuleTestIntervenant
{ {
$this->heuresServiceModifie = $heuresServiceModifie; $this->heuresServiceModifie = $heuresServiceModifie;
return $this;
} }
...@@ -183,7 +192,7 @@ class FormuleTestIntervenant ...@@ -183,7 +192,7 @@ class FormuleTestIntervenant
/** /**
* @return bool * @return bool
*/ */
public function isDepassementServiceDuSansHC(): bool public function getDepassementServiceDuSansHC(): bool
{ {
return $this->depassementServiceDuSansHC; return $this->depassementServiceDuSansHC;
} }
...@@ -193,9 +202,11 @@ class FormuleTestIntervenant ...@@ -193,9 +202,11 @@ class FormuleTestIntervenant
/** /**
* @param bool $depassementServiceDuSansHC * @param bool $depassementServiceDuSansHC
*/ */
public function setDepassementServiceDuSansHC(bool $depassementServiceDuSansHC) public function setDepassementServiceDuSansHC(bool $depassementServiceDuSansHC): FormuleTestIntervenant
{ {
$this->depassementServiceDuSansHC = $depassementServiceDuSansHC; $this->depassementServiceDuSansHC = $depassementServiceDuSansHC;
return $this;
} }
...@@ -213,9 +224,11 @@ class FormuleTestIntervenant ...@@ -213,9 +224,11 @@ class FormuleTestIntervenant
/** /**
* @param string $param1 * @param string $param1
*/ */
public function setParam1(string $param1) public function setParam1(string $param1): FormuleTestIntervenant
{ {
$this->param1 = $param1; $this->param1 = $param1;
return $this;
} }
...@@ -233,9 +246,11 @@ class FormuleTestIntervenant ...@@ -233,9 +246,11 @@ class FormuleTestIntervenant
/** /**
* @param string $param2 * @param string $param2
*/ */
public function setParam2(string $param2) public function setParam2(string $param2): FormuleTestIntervenant
{ {
$this->param2 = $param2; $this->param2 = $param2;
return $this;
} }
...@@ -253,9 +268,11 @@ class FormuleTestIntervenant ...@@ -253,9 +268,11 @@ class FormuleTestIntervenant
/** /**
* @param string $param3 * @param string $param3
*/ */
public function setParam3(string $param3) public function setParam3(string $param3): FormuleTestIntervenant
{ {
$this->param3 = $param3; $this->param3 = $param3;
return $this;
} }
...@@ -273,9 +290,11 @@ class FormuleTestIntervenant ...@@ -273,9 +290,11 @@ class FormuleTestIntervenant
/** /**
* @param string $param4 * @param string $param4
*/ */
public function setParam4(string $param4) public function setParam4(string $param4): FormuleTestIntervenant
{ {
$this->param4 = $param4; $this->param4 = $param4;
return $this;
} }
...@@ -293,9 +312,11 @@ class FormuleTestIntervenant ...@@ -293,9 +312,11 @@ class FormuleTestIntervenant
/** /**
* @param string $param5 * @param string $param5
*/ */
public function setParam5(string $param5) public function setParam5(string $param5): FormuleTestIntervenant
{ {
$this->param5 = $param5; $this->param5 = $param5;
return $this;
} }
...@@ -313,9 +334,11 @@ class FormuleTestIntervenant ...@@ -313,9 +334,11 @@ class FormuleTestIntervenant
/** /**
* @param float $aServiceDu * @param float $aServiceDu
*/ */
public function setAServiceDu(float $aServiceDu) public function setAServiceDu(float $aServiceDu): FormuleTestIntervenant
{ {
$this->aServiceDu = $aServiceDu; $this->aServiceDu = $aServiceDu;
return $this;
} }
...@@ -333,9 +356,11 @@ class FormuleTestIntervenant ...@@ -333,9 +356,11 @@ class FormuleTestIntervenant
/** /**
* @param float $cServiceDu * @param float $cServiceDu
*/ */
public function setCServiceDu(float $cServiceDu) public function setCServiceDu(float $cServiceDu): FormuleTestIntervenant
{ {
$this->cServiceDu = $cServiceDu; $this->cServiceDu = $cServiceDu;
return $this;
} }
...@@ -357,7 +382,7 @@ class FormuleTestIntervenant ...@@ -357,7 +382,7 @@ class FormuleTestIntervenant
* *
* @return Service * @return Service
*/ */
public function addVolumeHoraireTest(FormuleTestVolumeHoraire $volumeHoraireTest) public function addVolumeHoraireTest(FormuleTestVolumeHoraire $volumeHoraireTest): FormuleTestIntervenant
{ {
$this->volumeHoraireTest[] = $volumeHoraireTest; $this->volumeHoraireTest[] = $volumeHoraireTest;
...@@ -371,9 +396,23 @@ class FormuleTestIntervenant ...@@ -371,9 +396,23 @@ class FormuleTestIntervenant
* *
* @param FormuleTestVolumeHoraire $volumeHoraireTest * @param FormuleTestVolumeHoraire $volumeHoraireTest
*/ */
public function removeVolumeHoraireTest(FormuleTestVolumeHoraire $volumeHoraireTest) public function removeVolumeHoraireTest(FormuleTestVolumeHoraire $volumeHoraireTest): FormuleTestIntervenant
{ {
$this->volumeHoraireTest->removeElement($volumeHoraireTest); $this->volumeHoraireTest->removeElement($volumeHoraireTest);
return $this;
}
/**
* @return FormuleTestIntervenant
*/
public function clearVolumeHoraireTest(): FormuleTestIntervenant
{
$this->volumeHoraireTest->clear();
return $this;
} }
...@@ -390,6 +429,330 @@ class FormuleTestIntervenant ...@@ -390,6 +429,330 @@ class FormuleTestIntervenant
/**
* @return float
*/
public function getAServiceFi()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAServiceFi();
}
return $sum;
}
/**
* @return float
*/
public function getAServiceFa()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAServiceFa();
}
return $sum;
}
/**
* @return float
*/
public function getAServiceFc()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAServiceFc();
}
return $sum;
}
/**
* @return float
*/
public function getAServiceReferentiel()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAServiceReferentiel();
}
return $sum;
}
/**
* @return float
*/
public function getAHeuresComplFi()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAHeuresComplFi();
}
return $sum;
}
/**
* @return float
*/
public function getAHeuresComplFa()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAHeuresComplFa();
}
return $sum;
}
/**
* @return float
*/
public function getAHeuresComplFc()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAHeuresComplFc();
}
return $sum;
}
/**
* @return float
*/
public function getAHeuresComplFcMajorees()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAHeuresComplFcMajorees();
}
return $sum;
}
/**
* @return float
*/
public function getAHeuresComplReferentiel()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getAHeuresComplReferentiel();
}
return $sum;
}
/**
* @return float
*/
public function getCServiceFi()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCServiceFi();
}
return $sum;
}
/**
* @return float
*/
public function getCServiceFa()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCServiceFa();
}
return $sum;
}
/**
* @return float
*/
public function getCServiceFc()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCServiceFc();
}
return $sum;
}
/**
* @return float
*/
public function getCServiceReferentiel()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCServiceReferentiel();
}
return $sum;
}
/**
* @return float
*/
public function getCHeuresComplFi()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCHeuresComplFi();
}
return $sum;
}
/**
* @return float
*/
public function getCHeuresComplFa()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCHeuresComplFa();
}
return $sum;
}
/**
* @return float
*/
public function getCHeuresComplFc()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCHeuresComplFc();
}
return $sum;
}
/**
* @return float
*/
public function getCHeuresComplFcMajorees()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCHeuresComplFcMajorees();
}
return $sum;
}
/**
* @return float
*/
public function getCHeuresComplReferentiel()
{
$sum = 0;
foreach ($this->getVolumeHoraireTest() as $vht) {
$sum += $vht->getCHeuresComplReferentiel();
}
return $sum;
}
/**
* @return float
*/
public function getCServiceAssure()
{
return $this->getCServiceFi()
+ $this->getCServiceFa()
+ $this->getCServiceFc()
+ $this->getCServiceReferentiel();
}
/**
* @return float
*/
public function getCHeuresComplAPayer()
{
return $this->getCHeuresComplFi()
+ $this->getCHeuresComplFa()
+ $this->getCHeuresComplFc()
+ $this->getCHeuresComplFcMajorees()
+ $this->getCHeuresComplReferentiel();
}
/**
* @return array
*/
public function toArray(): array
{
$hydrator = new FormuleTestIntervenantHydrator();
return $hydrator->extract($this);
}
/**
* @param array $data
*
* @return FormuleTestIntervenant
*/
public function fromArray(array $data): FormuleTestIntervenant
{
$hydrator = new FormuleTestIntervenantHydrator();
$hydrator->hydrate($data, $this);
return $this;
}
/** /**
* Retourne la représentation littérale de cet objet. * Retourne la représentation littérale de cet objet.
* *
......
...@@ -88,7 +88,7 @@ class FormuleTestVolumeHoraire ...@@ -88,7 +88,7 @@ class FormuleTestVolumeHoraire
/** /**
* @var float * @var float
*/ */
private $heures; private $heures = 0;
/** /**
* @var float * @var float
...@@ -195,7 +195,7 @@ class FormuleTestVolumeHoraire ...@@ -195,7 +195,7 @@ class FormuleTestVolumeHoraire
/** /**
* @return bool * @return bool
*/ */
public function isReferentiel(): bool public function getReferentiel(): bool
{ {
return $this->referentiel; return $this->referentiel;
} }
...@@ -219,7 +219,7 @@ class FormuleTestVolumeHoraire ...@@ -219,7 +219,7 @@ class FormuleTestVolumeHoraire
/** /**
* @return bool * @return bool
*/ */
public function isServiceStatutaire(): bool public function getServiceStatutaire(): bool
{ {
return $this->serviceStatutaire; return $this->serviceStatutaire;
} }
......
...@@ -29,8 +29,10 @@ ...@@ -29,8 +29,10 @@
</many-to-one> </many-to-one>
<field name="heuresDecharge" type="float" column="HEURES_DECHARGE" precision="126" scale="0" nullable="false"/> <field name="heuresDecharge" type="float" column="HEURES_DECHARGE" precision="126" scale="0" nullable="false"/>
<field name="heuresServiceStatutaire" type="float" column="HEURES_SERVICE_STATUTAIRE" precision="126" scale="0" nullable="false"/> <field name="heuresServiceStatutaire" type="float" column="HEURES_SERVICE_STATUTAIRE" precision="126" scale="0"
<field name="heuresServiceModifie" type="float" column="HEURES_SERVICE_MODIFIE" precision="126" scale="0" nullable="false"/> nullable="false"/>
<field name="heuresServiceModifie" type="float" column="HEURES_SERVICE_MODIFIE" precision="126" scale="0"
nullable="false"/>
<field name="depassementServiceDuSansHC" type="boolean" column="DEPASSEMENT_SERVICE_DU_SANS_HC" nullable="false"/> <field name="depassementServiceDuSansHC" type="boolean" column="DEPASSEMENT_SERVICE_DU_SANS_HC" nullable="false"/>
<field name="param1" type="string" column="PARAM_1" length="50" nullable="true"/> <field name="param1" type="string" column="PARAM_1" length="50" nullable="true"/>
...@@ -42,6 +44,14 @@ ...@@ -42,6 +44,14 @@
<field name="aServiceDu" type="float" column="A_SERVICE_DU" precision="126" scale="0" nullable="true"/> <field name="aServiceDu" type="float" column="A_SERVICE_DU" precision="126" scale="0" nullable="true"/>
<field name="cServiceDu" type="float" column="C_SERVICE_DU" precision="126" scale="0" nullable="true"/> <field name="cServiceDu" type="float" column="C_SERVICE_DU" precision="126" scale="0" nullable="true"/>
<one-to-many field="volumeHoraireTest" target-entity="Application\Entity\Db\FormuleTestVolumeHoraire" mapped-by="intervenantTest"/> <one-to-many field="volumeHoraireTest" target-entity="Application\Entity\Db\FormuleTestVolumeHoraire"
mapped-by="intervenantTest">
<cascade>
<cascade-all/>
</cascade>
<order-by>
<order-by-field name="id" direction="ASC" />
</order-by>
</one-to-many>
</entity> </entity>
</doctrine-mapping> </doctrine-mapping>
<?php
namespace Application\Form\FormuleTest\Factory;
use Zend\Form\FormElementManager as ContainerInterface;
use Application\Form\FormuleTest\IntervenantForm;
/**
* Description of IntervenantFormFactory
*
* @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
*/
class IntervenantFormFactory
{
/**
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
*
* @return IntervenantForm
*/
public function __invoke(ContainerInterface $container, $requestedName, $options = null)
{
/* On quitte le FormElementManager */
$container = $container->getServiceLocator();
$form = new IntervenantForm;
/* Injectez vos dépendances ICI */
return $form;
}
}
\ No newline at end of file
<?php
namespace Application\Form\FormuleTest;
use Application\Entity\Db\FormuleTestIntervenant;
use Application\Filter\FloatFromString;
use Application\Filter\StringFromFloat;
use Application\Form\AbstractForm;
use Zend\Stdlib\Hydrator\HydratorInterface;
/**
* Description of IntervenantForm
*
* @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
*/
class IntervenantForm extends AbstractForm
{
public function init()
{
$hydrator = new IntervenantFormHydrator;
$this->setHydrator($hydrator);
$this->setAttribute('action', $this->getCurrentUrl());
$this->add([
'name' => 'libelle',
'options' => [
'label' => "Libelle",
],
'type' => 'Text',
]);
$this->add([
'name' => 'heuresDecharge',
'options' => [
'label' => 'Heures de décharge',
],
'type' => 'Text',
]);
$this->add([
'name' => 'heuresServiceStatutaire',
'options' => [
'label' => 'Heures de service statutaire',
],
'type' => 'Text',
]);
$this->add([
'name' => 'heuresServiceModifie',
'options' => [
'label' => 'Heures de modification de service',
],
'type' => 'Text',
]);
$this->add([
'name' => 'depassementServiceDuSansHC',
'options' => [
'label' => 'Le dépassement de service dû ne doit pas donner lieu à des heures complémentaires',
'value_options' => [
'false' => 'Non',
'true' => 'Oui',
],
],
'type' => 'Select',
]);
for( $i = 1;$i<=5;$i++) {
$this->add([
'name' => 'param'.$i,
'options' => [
'label' => 'Paramètre '.$i,
],
'type' => 'Text',
]);
}
$this->add([
'name' => 'submit',
'type' => 'Submit',
'attributes' => [
'value' => 'Enregistrer',
'class' => 'btn btn-primary',
],
]);
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
/* Filtres et validateurs */
];
}
}
class IntervenantFormHydrator implements HydratorInterface
{
/**
* @param array $data
* @param FormuleTestIntervenant $object
*
* @return object
*/
public function hydrate(array $data, $object)
{
$object->setLibelle($data['libelle']);
$object->setHeuresDecharge(FloatFromString::run($data['heuresDecharge']));
$object->setHeuresServiceStatutaire(FloatFromString::run($data['heuresServiceStatutaire']));
$object->setHeuresServiceModifie(FloatFromString::run($data['heuresServiceModifie']));
$object->setDepassementServiceDuSansHC($data['depassementServiceDuSansHC'] == 'true');
for( $i = 1;$i<=5;$i++) {
$object->{'setParam'.$i}($data['param'.$i]);
}
return $object;
}
/**
* @param FormuleTestIntervenant $object
*
* @return array
*/
public function extract($object)
{
$data = [
'libelle' => $object->getLibelle(),
'heuresDecharge' => StringFromFloat::run($object->getHeuresDecharge()),
'heuresServiceStatutaire' => StringFromFloat::run($object->getHeuresServiceStatutaire()),
'heuresServiceModifie' => StringFromFloat::run($object->getHeuresServiceModifie()),
'depassementServiceDuSansHC' => $object->isDepassementServiceDuSansHC() ? 'true' : 'false',
];
for( $i = 1;$i<=5;$i++) {
$data['param'.$i] = $object->{'getParam'.$i}();
}
return $data;
}
}
\ No newline at end of file
<?php
namespace Application\Form\FormuleTest\Traits;
use Application\Form\FormuleTest\IntervenantForm;
/**
* Description of IntervenantFormAwareTrait
*
* @author UnicaenCode
*/
trait IntervenantFormAwareTrait
{
/**
* @var IntervenantForm
*/
protected $formFormuleTestIntervenant;
/**
* @param IntervenantForm $formFormuleTestIntervenant
*
* @return self
*/
public function setFormFormuleTestIntervenant( IntervenantForm $formFormuleTestIntervenant )
{
$this->formFormuleTestIntervenant = $formFormuleTestIntervenant;
return $this;
}
/**
* Retourne un nouveau formulaire ou fieldset systématiquement, sauf si ce dernier a été fourni manuellement.
*
* @return IntervenantForm
* @throws RuntimeException
*/
public function getFormFormuleTestIntervenant() : IntervenantForm
{
if ($this->formFormuleTestIntervenant){
return $this->formFormuleTestIntervenant;
}else{
return \Application::$container->get('FormElementManager')->get(IntervenantForm::class);
}
}
}
\ No newline at end of file
<?php
namespace Application\Hydrator;
use Application\Constants;
use Application\Entity\Db\Annee;
use Application\Entity\Db\EtatVolumeHoraire;
use Application\Entity\Db\Formule;
use Application\Entity\Db\FormuleTestStructure;
use Application\Entity\Db\FormuleTestVolumeHoraire;
use Application\Entity\Db\TypeIntervenant;
use Application\Entity\Db\TypeVolumeHoraire;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Application\Entity\Db\FormuleTestIntervenant;
/**
*
*
* @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
*/
class FormuleTestIntervenantHydrator implements HydratorInterface
{
private function findEntity( $class, $id)
{
$em = \Application::$container->get(Constants::BDD);
return $em->getRepository($class)->find($id);
}
/**
* Hydrate $object with the provided $data.
*
* @param array $data
* @param FormuleTestIntervenant $object
*
* @return object
*/
public function hydrate(array $data, $object)
{
$methods = get_class_methods($object);
foreach ($methods as $method) {
if (0 === strpos($method, 'set')) {
$property = lcfirst(substr($method, 3));
if (isset($data[$property])) {
switch ($property) {
case 'volumeHoraireTest':
break;
case 'formule':
$object->$method($this->findEntity(Formule::class,$data[$property]));
break;
case 'annee':
$object->$method($this->findEntity(Annee::class,$data[$property]));
break;
case 'typeIntervenant':
$object->$method($this->findEntity(TypeIntervenant::class,$data[$property]));
break;
case 'structureTest':
$object->$method($this->findEntity(FormuleTestStructure::class,$data[$property]));
break;
case 'typeVolumeHoraire':
$object->$method($this->findEntity(TypeVolumeHoraire::class,$data[$property]));
break;
case 'etatVolumeHoraire':
$object->$method($this->findEntity(EtatVolumeHoraire::class,$data[$property]));
break;
default:
$object->$method($data[$property]);
}
}
}
}
if (isset($data['volumeHoraireTest'])) {
$vhs = $object->getVolumeHoraireTest()->toArray();
foreach ($data['volumeHoraireTest'] as $index => $vhta) {
$exists = isset($vhs[$index]);
$toDelete = $vhta['structureTest'] == null;
if ($exists && $toDelete){
$object->removeVolumeHoraireTest($vhs[$index]);
}elseif(!$exists && !$toDelete){
$vhs[$index] = new FormuleTestVolumeHoraire();
$vhs[$index]->setIntervenantTest($object);
$object->addVolumeHoraireTest($vhs[$index]);
}
if (!$toDelete) {
$this->hydrateVolumeHoraire($vhta, $vhs[$index]);
}
}
}
return $object;
}
/**
* Extract values from an object
*
* @param FormuleTestIntervenant $object
*
* @return array
*/
public function extract($object)
{
$data = [
];
$methods = get_class_methods($object);
foreach ($methods as $method) {
if (0 === strpos($method, 'get')) {
$property = lcfirst(substr($method, 3));
switch ($property) {
case 'volumeHoraireTest':
break;
case 'formule':
case 'annee':
case 'typeIntervenant':
case 'structureTest':
case 'typeVolumeHoraire':
case 'etatVolumeHoraire':
$dep = $object->$method();
$data[$property] = $dep ? $dep->getId() : null;
break;
default:
$data[$property] = $object->$method();
}
}
}
$vhts = [];
foreach ($object->getVolumeHoraireTest() as $key => $vht) {
$vhts[$key] = $this->extractVolumeHoraire($vht);
}
$data['volumeHoraireTest'] = $vhts;
return $data;
}
/**
* Hydrate $object with the provided $data.
*
* @param array $data
* @param FormuleTestVolumeHoraire $object
*
* @return object
*/
public function hydrateVolumeHoraire(array $data, $object)
{
$methods = get_class_methods($object);
foreach ($methods as $method) {
if (0 === strpos($method, 'set')) {
$property = lcfirst(substr($method, 3));
if (isset($data[$property])) {
switch ($property) {
case 'heures':
$object->setHeures($data[$property] == null ? 0 : $data[$property]);
break;
case 'structureTest':
$object->$method($this->findEntity(FormuleTestStructure::class,$data[$property]));
break;
default:
$object->$method($data[$property]);
}
}
}
}
return $object;
}
/**
* Extract values from an object
*
* @param FormuleTestVolumeHoraire $object
*
* @return array
*/
private function extractVolumeHoraire($object)
{
$data = [];
$methods = get_class_methods($object);
foreach ($methods as $method) {
if (0 === strpos($method, 'get')) {
$property = lcfirst(substr($method, 3));
switch ($property) {
case 'intervenantTest':
break;
case 'structureTest':
$dep = $object->$method();
$data[$property] = $dep ? $dep->getId() : null;
break;
default:
$data[$property] = $object->$method();
}
}
}
return $data;
}
}
...@@ -35,8 +35,66 @@ class FormuleTestIntervenantService extends AbstractEntityService ...@@ -35,8 +35,66 @@ class FormuleTestIntervenantService extends AbstractEntityService
* *
* @return string * @return string
*/ */
public function getAlias(){ public function getAlias()
{
return 'fti'; return 'fti';
} }
/**
* @param FormuleTestIntervenant $formuleTestIntervenant
*
* @return FormuleTestIntervenantService
* @throws \Doctrine\DBAL\DBALException
*/
public function calculer(FormuleTestIntervenant $formuleTestIntervenant): FormuleTestIntervenantService
{
$sql = "BEGIN ose_formule.test(" . ((int)$formuleTestIntervenant->getId()) . "); END;";
$this->getEntityManager()->getConnection()->exec($sql);
$this->getEntityManager()->refresh($formuleTestIntervenant);
foreach( $formuleTestIntervenant->getVolumeHoraireTest() as $vhe ){
$this->getEntityManager()->refresh($vhe);
}
return $this;
}
/**
* @return FormuleTestIntervenantService
* @throws \Doctrine\DBAL\DBALException
*/
public function calculerTout(): FormuleTestIntervenantService
{
$sql = "BEGIN ose_formule.test_tout; END;";
$this->getEntityManager()->getConnection()->exec($sql);
return $this;
}
/**
* Sauvegarde une entité
*
* @param FormuleTestIntervenant $entity
*
* @throws \RuntimeException
* @return mixed
*/
public function save($entity)
{
parent::save($entity);
foreach ($entity->getVolumeHoraireTest() as $vhe) {
$this->getEntityManager()->persist($vhe);
$this->getEntityManager()->flush($vhe);
}
return $entity;
}
} }
\ No newline at end of file
...@@ -11,9 +11,6 @@ $title = "Page de tests de formule de calcul des HETD"; ...@@ -11,9 +11,6 @@ $title = "Page de tests de formule de calcul des HETD";
?> ?>
<h1 class="page-header"><?php echo $title ?></h1> <h1 class="page-header"><?php echo $title ?></h1>
<?= $this->messenger()->addCurrentMessagesFromFlashMessenger(); ?>
<table class="table table-bordered table-condensed table-sort"> <table class="table table-bordered table-condensed table-sort">
<thead> <thead>
<tr> <tr>
...@@ -32,9 +29,21 @@ $title = "Page de tests de formule de calcul des HETD"; ...@@ -32,9 +29,21 @@ $title = "Page de tests de formule de calcul des HETD";
<td><?= $formuleTestIntervenant->getFormule() ?></td> <td><?= $formuleTestIntervenant->getFormule() ?></td>
<td><?= $formuleTestIntervenant->getAnnee() ?></td> <td><?= $formuleTestIntervenant->getAnnee() ?></td>
<td> <td>
<a href="<?= $this->url('formule-calcul/test/saisir', ['formuleTestIntervenant' => $formuleTestIntervenant->getId()]) ?>"><span
class="glyphicon glyphicon-pencil"></span></span></a>
<a class="pop-ajax"
href="<?= $this->url('formule-calcul/test/supprimer', ['formuleTestIntervenant' => $formuleTestIntervenant->getId()]) ?>"
title="Supprimer le test de formule"
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-trash"></span></span></a>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody> </tbody>
</table> </table>
<a class="btn btn-primary" href="<?= $this->url('formule-calcul/test/saisir') ?>">Nouveau test de formule</a>
...@@ -223,5 +223,41 @@ Util = { ...@@ -223,5 +223,41 @@ Util = {
} }
} }
return false; return false;
},
/**
*
* @param float value
*
* @return string
*/
floatToString: function(value)
{
var locale = 'fr';
var options = {minimumFractionDigits: 0, maximumFractionDigits: 2, useGrouping: false};
var formatter = new Intl.NumberFormat(locale, options);
return formatter.format(value);
},
stringToFloat: function(value)
{
if (null === value || '' === value || undefined === value) return null;
value = parseFloat(value.replace(',','.'));
return value;
},
/*
function stringToFloat($value)
{
if (null === $value || '' === $value) return null;
$value = str_replace([',', ' '], ['.', ''], $value);
return (float)$value;
} }
*/
}; };
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment