Commit 37125dfe authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Fiabilisation de la constatation des services prévus vers réalisés : les...

Fiabilisation de la constatation des services prévus vers réalisés : les blocages de plafonds ne fonctionnaient plus suite à la refonte des TBLs
parent b966ad97
......@@ -386,31 +386,48 @@ class ServiceController extends AbstractController
public function constatationAction()
{
$this->initFilters();
$errors = [];
$realise = $this->getServiceTypeVolumeHoraire()->getRealise();
$services = $this->params()->fromQuery('services');
if ($services) {
$services = explode(',', $services);
foreach ($services as $sid) {
$service = $this->getServiceService()->get($sid);
$this->getProcessusPlafond()->beginTransaction();
$intervenants[$service->getIntervenant()->getId()] = $service->getIntervenant();
$service->setTypeVolumeHoraire($this->getServiceTypeVolumeHoraire()->getRealise());
if ($this->isAllowed($service, Privileges::ENSEIGNEMENT_EDITION)) {
try {
$this->getServiceService()->setRealisesFromPrevus($service);
} catch (\Exception $e) {
$errors[] = $e->getMessage();
}
}
$this->getProcessusPlafond()->endTransaction($service->getIntervenant(), $this->getServiceTypeVolumeHoraire()->getRealise());
foreach ($services as $n => $sid) {
$services[$n] = $this->getServiceService()->get($sid);
$intervenant = $services[$n]->getIntervenant();
$intervenants[$intervenant->getId()] = $intervenant;
}
}
foreach ($intervenants as $id => $intervenant) {
$this->updateTableauxBord($intervenant);
if (empty($services)) {
$this->flashMessenger()->addErrorMessage('Aucun service précisé : constatation impossible');
return [];
}
return compact('errors');
if (count($intervenants) > 1) {
$this->flashMessenger()->addErrorMessage('On ne peut constater les services que d\'un seul intervenant à la fois');
return [];
}
$this->getProcessusPlafond()->beginTransaction();
foreach ($services as $service) {
$service->setTypeVolumeHoraire($realise);
if ($this->isAllowed($service, Privileges::ENSEIGNEMENT_EDITION)) {
$this->getServiceService()->setRealisesFromPrevus($service);
}
}
$this->updateTableauxBord($intervenant);
if (!$this->getProcessusPlafond()->endTransaction($intervenant, $realise)) {
$this->flashMessenger()->addErrorMessage('La constatation des services réalisés n\'a donc pas pu se faire.');
} else {
$this->flashMessenger()->addSuccessMessage('Les services prévisionnels ont été reportés comme réalisés.');
}
return [];
}
......
......@@ -58,16 +58,20 @@ class PlafondProcessus implements EntityManagerAwareInterface
public function endTransaction(Intervenant $intervenant, TypeVolumeHoraire $typeVolumeHoraire, bool $isDiminution = false): bool
{
$this->getEntityManager()->flush();
$hasBloquant = $this->controle($intervenant, $typeVolumeHoraire, !$isDiminution);
if ($hasBloquant && !$isDiminution) {
$this->getEntityManager()->rollback();
return false;
if ($isDiminution) {
$passed = true; // ça passe à tous les coups si on diminue le volume d'heures
} else {
$this->getEntityManager()->commit();
$passed = $this->controle($intervenant, $typeVolumeHoraire);
}
return true;
if ($passed) {
$this->getEntityManager()->commit();
} else {
$this->getEntityManager()->rollback();
}
return $passed;
}
......@@ -75,26 +79,25 @@ class PlafondProcessus implements EntityManagerAwareInterface
/**
* @param Intervenant $intervenant
* @param TypeVolumeHoraire $typeVolumeHoraire
* @param bool $sendToMessenger
*
* @return bool
*/
public function controle(Intervenant $intervenant, TypeVolumeHoraire $typeVolumeHoraire, $sendToMessenger = true): bool
public function controle(Intervenant $intervenant, TypeVolumeHoraire $typeVolumeHoraire): bool
{
$result = false;
$blocage = false;
$reponse = $this->getServicePlafond()->controle($intervenant, $typeVolumeHoraire);
if (!empty($reponse)) {
foreach ($reponse as $plafondDepassement) {
if ($plafondDepassement->isBloquant()) {
$result = true;
if ($sendToMessenger) $this->flashMessenger->addErrorMessage((string)$plafondDepassement);
$blocage = true;
$this->flashMessenger->addErrorMessage((string)$plafondDepassement);
} else {
if ($sendToMessenger) $this->flashMessenger->addWarningMessage((string)$plafondDepassement);
$this->flashMessenger->addWarningMessage((string)$plafondDepassement);
}
}
}
return $result;
return !$blocage;
}
}
\ No newline at end of file
<?php
/* @var $errors array */
if (! empty($errors)){
echo $this->messenger()->setMessages([\UnicaenApp\View\Helper\Messenger::ERROR => $errors]);
}else{
echo 'OK';
}
\ No newline at end of file
echo 'OK';
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