Skip to content
Snippets Groups Projects
Commit 2ef16e17 authored by Alexandre Zvenigorosky's avatar Alexandre Zvenigorosky
Browse files

Merge branch 'b8.1' of https://git.unicaen.fr/open-source/OSE into MotifModificationService

parents a5b8a0b9 b6173d9d
No related branches found
No related tags found
3 merge requests!35B8.1,!30Motif modification service,!26Motif modification service
Showing
with 1770 additions and 308 deletions
...@@ -5,9 +5,16 @@ author: Laurent Lécluse - DSI - Unicaen ...@@ -5,9 +5,16 @@ author: Laurent Lécluse - DSI - Unicaen
#OSE 8.1 #OSE 8.1
## Corrections de bugs
* Les avenants comportaient par défaut un champ "modifieComplete" qui n'était pas fourni par la vue.
## Nouveautés ## Nouveautés
* Il est désormais possible de customiser et/ou de traduire de petites parties de l'application. Attention toutefois : le travail de mise en place du dispositif n'en est qu'au tout début. * Il est désormais possible de customiser et/ou de traduire de petites parties de l'application. Attention toutefois : le travail de mise en place du dispositif n'en est qu'au tout début.
* Possibilité de choisir sa formule dans les paramétrages généraux via une liste déroulante
* Formule de calcul de l'université de Montpellier
* Interface de test de la formule de calcul directmement intégrée dans OSE
#OSE 8.0.3 #OSE 8.0.3
......
...@@ -7,8 +7,47 @@ ...@@ -7,8 +7,47 @@
* @var $sl \Zend\ServiceManager\ServiceLocatorInterface * @var $sl \Zend\ServiceManager\ServiceLocatorInterface
*/ */
$d = "2015-04-30 15:11:48"; $max = 10;
$r = \DateTime::createFromFormat('Y-m-d H:i:s', $d); $ress = [];
var_dump( $r); for( $i = 1;$i<$max;$i++){
\ No newline at end of file for( $j = 1;$j<$max;$j++){
$res = round($i / $j,6);
if (!in_array($res, $ress)) {
if ($res != round($res, 5)) {
echo "$res: '$i/$j',<br />";
}
$ress[] = $res;
}
}
}
$t = [
'1/3' => 0.333333,
'1/6' => 0.166667,
'1/7' => 0.142857,
'1/9' => 0.111111,
'2/3' => 0.666667,
'2/7' => 0.285714,
'2/9' => 0.222222,
'3/7' => 0.428571,
'4/3' => 1.333333,
'4/7' => 0.571429,
'4/9' => 0.444444,
'5/3' => 1.666667,
'5/6' => 0.833333,
'5/7' => 0.714286,
'5/9' => 0.555556,
'6/7' => 0.857143,
'7/3' => 2.333333,
'7/6' => 1.166667,
'7/9' => 0.777778,
'8/3' => 2.666667,
'8/7' => 1.142857,
'8/9' => 0.888889,
'9/7' => 1.285714,
];
\ No newline at end of file
...@@ -90,3 +90,106 @@ FROM ( ...@@ -90,3 +90,106 @@ FROM (
UNION ALL SELECT 'formule' c, 'tests' p, 'Tests' l FROM dual UNION ALL SELECT 'formule' c, 'tests' p, 'Tests' l FROM dual
) t1; ) t1;
CREATE OR REPLACE FORCE VIEW "V_CONTRAT_MAIN" AS
WITH hs AS (
SELECT contrat_id, sum(heures) "serviceTotal" FROM V_CONTRAT_SERVICES GROUP BY contrat_id
)
SELECT
ct.id contrat_id,
ct."annee",
ct."nom",
ct."prenom",
ct."civilite",
ct."e",
ct."dateNaissance",
ct."adresse",
ct."numInsee",
ct."statut",
ct."totalHETD",
ct."tauxHoraireValeur",
ct."tauxHoraireDate",
ct."dateSignature",
ct."modifieComplete",
CASE WHEN ct.est_contrat=1 THEN 1 ELSE null END "contrat1",
CASE WHEN ct.est_contrat=1 THEN null ELSE 1 END "avenant1",
CASE WHEN ct.est_contrat=1 THEN '3' ELSE '2' END "n",
to_char(SYSDATE, 'dd/mm/YYYY - hh24:mi:ss') "horodatage",
'Exemplaire à conserver' "exemplaire1",
'Exemplaire à retourner' || ct."exemplaire2" "exemplaire2",
ct."serviceTotal",
CASE ct.est_contrat
WHEN 1 THEN -- contrat
'Contrat de travail '
ELSE
'Avenant au contrat de travail initial modifiant le volume horaire initial'
|| ' de recrutement en qualité '
END "titre",
CASE WHEN ct.est_atv = 1 THEN
'd''agent temporaire vacataire'
ELSE
'de chargé' || ct."e" || ' d''enseignement vacataire'
END "qualite",
CASE
WHEN ct.est_projet = 1 AND ct.est_contrat = 1 THEN 'Projet de contrat'
WHEN ct.est_projet = 0 AND ct.est_contrat = 1 THEN 'Contrat n°' || ct.id
WHEN ct.est_projet = 1 AND ct.est_contrat = 0 THEN 'Projet d''avenant'
WHEN ct.est_projet = 0 AND ct.est_contrat = 0 THEN 'Avenant n°' || ct.contrat_id || '.' || ct.numero_avenant
END "titreCourt"
FROM
(
SELECT
c.*,
a.libelle "annee",
COALESCE(d.nom_usuel,i.nom_usuel) "nom",
COALESCE(d.prenom,i.prenom) "prenom",
civ.libelle_court "civilite",
CASE WHEN civ.sexe = 'F' THEN 'e' ELSE '' END "e",
to_char(COALESCE(d.date_naissance,i.date_naissance), 'dd/mm/YYYY') "dateNaissance",
COALESCE(d.adresse,ose_divers.formatted_adresse(
ai.NO_VOIE, ai.NOM_VOIE, ai.BATIMENT, ai.MENTION_COMPLEMENTAIRE, ai.LOCALITE,
ai.CODE_POSTAL, ai.VILLE, ai.PAYS_LIBELLE)) "adresse",
COALESCE(d.numero_insee,i.numero_insee || ' ' || COALESCE(LPAD(i.numero_insee_cle,2,'0'),'')) "numInsee",
si.libelle "statut",
replace(ltrim(to_char(COALESCE(fr.total,0), '999999.00')),'.',',') "totalHETD",
replace(ltrim(to_char(COALESCE(th.valeur,0), '999999.00')),'.',',') "tauxHoraireValeur",
COALESCE(to_char(th.histo_creation, 'dd/mm/YYYY'), 'TAUX INTROUVABLE') "tauxHoraireDate",
to_char(COALESCE(v.histo_creation, c.histo_creation), 'dd/mm/YYYY') "dateSignature",
CASE WHEN c.structure_id <> COALESCE(cp.structure_id,0) THEN 'modifié' ELSE 'complété' END "modifieComplete",
CASE WHEN s.aff_adresse_contrat = 1 THEN
' signé à l''adresse suivante :' || CHR(13) || CHR(10) ||
s.libelle_court || ' - ' || REPLACE(ose_divers.formatted_adresse(
astr.NO_VOIE, astr.NOM_VOIE, null, null, astr.LOCALITE,
astr.CODE_POSTAL, astr.VILLE, null), CHR(13), ' - ')
ELSE '' END "exemplaire2",
replace(ltrim(to_char(COALESCE(hs."serviceTotal",0), '999999.00')),'.',',') "serviceTotal",
CASE WHEN c.contrat_id IS NULL THEN 1 ELSE 0 END est_contrat,
CASE WHEN v.id IS NULL THEN 1 ELSE 0 END est_projet,
si.tem_atv est_atv
FROM
contrat c
JOIN type_contrat tc ON tc.id = c.type_contrat_id
JOIN intervenant i ON i.id = c.intervenant_id
JOIN annee a ON a.id = i.annee_id
JOIN statut_intervenant si ON si.id = i.statut_id
JOIN structure s ON s.id = c.structure_id
LEFT JOIN adresse_structure astr ON astr.structure_id = s.id AND astr.principale = 1 AND astr.histo_destruction IS NULL
LEFT JOIN dossier d ON d.intervenant_id = i.id AND d.histo_destruction IS NULL
JOIN civilite civ ON civ.id = COALESCE(d.civilite_id,i.civilite_id)
LEFT JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL
LEFT JOIN adresse_intervenant ai ON ai.intervenant_id = i.id AND ai.histo_destruction IS NULL
JOIN type_volume_horaire tvh ON tvh.code = 'PREVU'
JOIN etat_volume_horaire evh ON evh.code = 'valide'
LEFT JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.type_volume_horaire_id = tvh.id AND fr.etat_volume_horaire_id = evh.id
LEFT JOIN taux_horaire_hetd th ON c.histo_creation BETWEEN th.histo_creation AND COALESCE(th.histo_destruction,SYSDATE)
LEFT JOIN hs ON hs.contrat_id = c.id
LEFT JOIN contrat cp ON cp.id = c.contrat_id
WHERE
c.histo_destruction IS NULL
) ct;
...@@ -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
{ {
...@@ -88,6 +89,11 @@ class FormuleTestIntervenant ...@@ -88,6 +89,11 @@ class FormuleTestIntervenant
*/ */
protected $volumeHoraireTest; protected $volumeHoraireTest;
/**
* @var string
*/
private $debugInfo;
/** /**
...@@ -113,9 +119,11 @@ class FormuleTestIntervenant ...@@ -113,9 +119,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 +141,11 @@ class FormuleTestIntervenant ...@@ -133,9 +141,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 +163,11 @@ class FormuleTestIntervenant ...@@ -153,9 +163,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 +185,11 @@ class FormuleTestIntervenant ...@@ -173,9 +185,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 +197,7 @@ class FormuleTestIntervenant ...@@ -183,7 +197,7 @@ class FormuleTestIntervenant
/** /**
* @return bool * @return bool
*/ */
public function isDepassementServiceDuSansHC(): bool public function getDepassementServiceDuSansHC(): bool
{ {
return $this->depassementServiceDuSansHC; return $this->depassementServiceDuSansHC;
} }
...@@ -193,9 +207,11 @@ class FormuleTestIntervenant ...@@ -193,9 +207,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 +229,11 @@ class FormuleTestIntervenant ...@@ -213,9 +229,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 +251,11 @@ class FormuleTestIntervenant ...@@ -233,9 +251,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 +273,11 @@ class FormuleTestIntervenant ...@@ -253,9 +273,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 +295,11 @@ class FormuleTestIntervenant ...@@ -273,9 +295,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 +317,11 @@ class FormuleTestIntervenant ...@@ -293,9 +317,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 +339,11 @@ class FormuleTestIntervenant ...@@ -313,9 +339,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 +361,11 @@ class FormuleTestIntervenant ...@@ -333,9 +361,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 +387,7 @@ class FormuleTestIntervenant ...@@ -357,7 +387,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 +401,23 @@ class FormuleTestIntervenant ...@@ -371,9 +401,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 +434,381 @@ class FormuleTestIntervenant ...@@ -390,6 +434,381 @@ 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;
}
/**
* @return string
*/
public function getDebugInfo()
{
$data = ['lines' => [], 'cols' => [], 'cells' => [], 'inds' => []];
$calcs = [];
$a = explode('[',$this->debugInfo);
foreach( $a as $d ){
$d = explode( '|', $d);
switch($d[0]){
case 'cell':
$c = $d[1];
$l = (int)$d[2];
$val = (float)$d[3];
if ($l > 0){
$data['cells'][$c][$l] = $val;
$data['lines'][$l] = $l;
$data['cols'][$c] = $c;
}else{
$data['inds'][$c] = $val;
}
break;
case 'calc':
$fnc = $d[1];
$c = $d[2];
$res = $d[3];
$data['cells'][$c][$fnc] = $res;
$calcs[$fnc] = $fnc;
$data['cols'][$c] = $c;
break;
}
}
sort($data['lines']);
sort($calcs);
$data['lines'] = array_merge($data['lines'], $calcs);
usort($data['cols'], function($a, $b){
$diffLen = strlen($a ) - strlen($b);
if ($diffLen) return $diffLen;
return $a > $b;
});
return $data;
}
/** /**
* 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
...@@ -180,6 +180,11 @@ class FormuleTestVolumeHoraire ...@@ -180,6 +180,11 @@ class FormuleTestVolumeHoraire
*/ */
private $cHeuresComplReferentiel; private $cHeuresComplReferentiel;
/**
* @var string
*/
private $debugInfo;
/** /**
...@@ -195,7 +200,7 @@ class FormuleTestVolumeHoraire ...@@ -195,7 +200,7 @@ class FormuleTestVolumeHoraire
/** /**
* @return bool * @return bool
*/ */
public function isReferentiel(): bool public function getReferentiel(): bool
{ {
return $this->referentiel; return $this->referentiel;
} }
...@@ -219,7 +224,7 @@ class FormuleTestVolumeHoraire ...@@ -219,7 +224,7 @@ class FormuleTestVolumeHoraire
/** /**
* @return bool * @return bool
*/ */
public function isServiceStatutaire(): bool public function getServiceStatutaire(): bool
{ {
return $this->serviceStatutaire; return $this->serviceStatutaire;
} }
...@@ -982,4 +987,30 @@ class FormuleTestVolumeHoraire ...@@ -982,4 +987,30 @@ class FormuleTestVolumeHoraire
return $this; return $this;
} }
/**
* @return string
*/
public function getDebugInfo()
{
return $this->debugInfo;
}
/**
* @param string $debugInfo
*
* @return FormuleTestVolumeHoraire
*/
public function setDebugInfo($debugInfo): FormuleTestVolumeHoraire
{
$this->debugInfo = $debugInfo;
return $this;
}
} }
...@@ -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,16 @@ ...@@ -42,6 +44,16 @@
<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"/> <field name="debugInfo" type="string" column="DEBUG_INFO" nullable="true"/>
<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>
...@@ -53,5 +53,7 @@ ...@@ -53,5 +53,7 @@
<field name="cHeuresComplFc" type="float" column="C_HEURES_COMPL_FC" precision="126" scale="0" nullable="true"/> <field name="cHeuresComplFc" type="float" column="C_HEURES_COMPL_FC" precision="126" scale="0" nullable="true"/>
<field name="cHeuresComplFcMajorees" type="float" column="C_HEURES_COMPL_FC_MAJOREES" precision="126" scale="0" nullable="true"/> <field name="cHeuresComplFcMajorees" type="float" column="C_HEURES_COMPL_FC_MAJOREES" precision="126" scale="0" nullable="true"/>
<field name="cHeuresComplReferentiel" type="float" column="C_HEURES_COMPL_REFERENTIEL" precision="126" scale="0" nullable="true"/> <field name="cHeuresComplReferentiel" type="float" column="C_HEURES_COMPL_REFERENTIEL" precision="126" scale="0" nullable="true"/>
<field name="debugInfo" type="string" column="DEBUG_INFO" nullable="true"/>
</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,66 @@ Util = { ...@@ -223,5 +223,66 @@ Util = {
} }
} }
return false; return false;
},
fractions: {
0.333333: '1/3',
0.166667: '1/6',
0.142857: '1/7',
0.111111: '1/9',
0.666667: '2/3',
0.285714: '2/7',
0.222222: '2/9',
0.428571: '3/7',
1.333333: '4/3',
0.571429: '4/7',
0.444444: '4/9',
1.666667: '5/3',
0.833333: '5/6',
0.714286: '5/7',
0.555556: '5/9',
0.857143: '6/7',
2.333333: '7/3',
1.166667: '7/6',
0.777778: '7/9',
2.666667: '8/3',
1.142857: '8/7',
0.888889: '8/9',
1.285714: '9/7',
},
/**
*
* @param float value
*
* @return string
*/
floatToString: function(value)
{
var test = Math.round(value*1000000)/1000000;
console.log(this.fractions[test]);
if (undefined !== this.fractions[test]){
return this.fractions[test];
} }
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;
if (value.indexOf('/') !== -1){
value = value.split('/');
value = Util.stringToFloat(value[0]) / Util.stringToFloat(value[1]);
}else{
value = parseFloat(value.replace(',','.'));
}
return 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