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

Gestion multisource des modifs de volume horaire

parent 0ad9bbeb
No related branches found
No related tags found
No related merge requests found
......@@ -9,9 +9,11 @@ select
TVH.LIBELLE type_volume_horaire,
p.libelle_long periode,
TI.CODE type_intervention,
vh.horaire,
vh.heures,
vh.motif_non_paiement_id,
vh.contrat_id,
src.code vh_source,
vvh.validation_id,
vh.histo_destruction vh_histo,
s.histo_destruction s_histo,
......@@ -24,6 +26,7 @@ from
JOIN type_volume_horaire tvh on tvh.id = vh.TYPE_VOLUME_HORAIRE_ID
JOIN periode p on p.id = vh.periode_id
JOIN type_intervention ti on ti.id = vh.type_intervention_id
JOIN source src ON src.id = vh.source_id
LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id
LEFT JOIN structure str ON str.id = ep.structure_id
LEFT JOIN VALIDATION_VOL_HORAIRE vvh on VVH.VOLUME_HORAIRE_ID = vh.id
......@@ -31,7 +34,7 @@ from
LEFT JOIN periode epp on epp.id = ep.periode_id
where
1=1
AND i.id=16783
AND i.id=35691
--AND s.id = 84722
--AND vh.histo_destruction IS NULL
AND tvh.code = 'PREVU'
......@@ -48,17 +51,17 @@ order by
INSERT INTO VALIDATION_VOL_HORAIRE (VALIDATION_ID,VOLUME_HORAIRE_ID) VALUES ( 101723, 239374 );
DELETE FROM VALIDATION_VOL_HORAIRE WHERE VOLUME_HORAIRE_ID in (239374,244921,244923);
update volume_horaire set source_id = 181 WHERE ID IN (30216);
SELECT COUNT(*) FROM VALIDATION_VOL_HORAIRE WHERE VOLUME_HORAIRE_ID = 187;
DELETE FROM volume_horaire WHERE id IN (239374,244921,244923);
DELETE FROM volume_horaire WHERE id IN (30218);
update volume_horaire set heures = -6 where id=244923;
update volume_horaire set histo_destruction = sysdate, histo_destructeur_id = 4 where id in (
219902,
233875
);
select * from source;
update volume_horaire set auto_validation = 1 where id = 30202;
select
i.id i_id,
......
......@@ -11,6 +11,7 @@ use Application\Entity\Db\TypeIntervention;
use Application\Entity\Db\MotifNonPaiement;
use Application\Entity\Db\Contrat;
use Application\Entity\Db\Validation;
use Application\Service\Traits\SourceServiceAwareTrait;
use RuntimeException;
use LogicException;
......@@ -21,6 +22,8 @@ use LogicException;
*/
class VolumeHoraireListe
{
use SourceServiceAwareTrait;
/**
* @var Service|boolean
*/
......@@ -67,6 +70,11 @@ class VolumeHoraireListe
*/
protected $horaire = false;
/**
* @var Source|boolean
*/
protected $source = false;
/**
* @var bool
*/
......@@ -74,9 +82,6 @@ class VolumeHoraireListe
/**
*
* @param \Application\Entity\Db\Service $service
......@@ -86,6 +91,8 @@ class VolumeHoraireListe
$this->setService($service);
}
/**
*
* @return Service
......@@ -95,17 +102,23 @@ class VolumeHoraireListe
return $this->service;
}
/**
*
* @param Service $service
*
* @return self
*/
public function setService(Service $service)
{
$this->service = $service;
return $this;
}
/**
*
* @return TypeVolumeHoraire|boolean
......@@ -115,9 +128,12 @@ class VolumeHoraireListe
return $this->typeVolumeHoraire;
}
/**
*
* @param TypeVolumeHoraire|boolean $typeVolumeHoraire
*
* @return self
*/
public function setTypeVolumeHoraire($typeVolumeHoraire)
......@@ -126,9 +142,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->typeVolumeHoraire = $typeVolumeHoraire;
return $this;
}
/**
*
* @return EtatVolumeHoraire|boolean
......@@ -138,9 +157,12 @@ class VolumeHoraireListe
return $this->etatVolumeHoraire;
}
/**
*
* @param EtatVolumeHoraire|boolean $etatVolumeHoraire
*
* @return self
*/
public function setEtatVolumeHoraire($etatVolumeHoraire)
......@@ -149,9 +171,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->etatVolumeHoraire = $etatVolumeHoraire;
return $this;
}
/**
*
* @return Periode|boolean
......@@ -161,9 +186,12 @@ class VolumeHoraireListe
return $this->periode;
}
/**
*
* @param Periode|boolean $periode
*
* @return self
*/
public function setPeriode($periode)
......@@ -172,9 +200,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->periode = $periode;
return $this;
}
/**
*
* @return TypeIntervention|boolean
......@@ -184,6 +215,8 @@ class VolumeHoraireListe
return $this->typeIntervention;
}
/**
* Retourne la liste des types d'intervention concernés par le service
*/
......@@ -196,12 +229,16 @@ class VolumeHoraireListe
$typesIntervention[$vh->getTypeIntervention()->getId()] = $vh->getTypeIntervention();
}
}
return $typesIntervention;
}
/**
*
* @param TypeIntervention|boolean $typeIntervention
*
* @return self
*/
public function setTypeIntervention($typeIntervention)
......@@ -210,9 +247,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->typeIntervention = $typeIntervention;
return $this;
}
/**
*
* @return MotifNonPaiement|boolean
......@@ -222,9 +262,12 @@ class VolumeHoraireListe
return $this->motifNonPaiement;
}
/**
*
* @param MotifNonPaiement|boolean $motifNonPaiement
*
* @return self
*/
public function setMotifNonPaiement($motifNonPaiement)
......@@ -233,9 +276,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->motifNonPaiement = $motifNonPaiement;
return $this;
}
/**
*
* @return Contrat|boolean
......@@ -245,9 +291,12 @@ class VolumeHoraireListe
return $this->contrat;
}
/**
*
* @param Contrat|boolean $contrat
*
* @return self
*/
public function setContrat($contrat)
......@@ -256,9 +305,12 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->contrat = $contrat;
return $this;
}
/**
*
* @return Validation|boolean
......@@ -268,9 +320,12 @@ class VolumeHoraireListe
return $this->validation;
}
/**
*
* @param Validation|boolean $validation
*
* @return self
*/
public function setValidation($validation)
......@@ -279,6 +334,7 @@ class VolumeHoraireListe
throw new RuntimeException('Valeur non autorisée');
}
$this->validation = $validation;
return $this;
}
......@@ -308,6 +364,30 @@ class VolumeHoraireListe
/**
* @return Source|bool
*/
public function getSource()
{
return $this->source;
}
/**
* @param Source|bool $source
*
* @return VolumeHoraireListe
*/
public function setSource($source)
{
$this->source = $source;
return $this;
}
/**
* @return boolean
*/
......@@ -332,6 +412,7 @@ class VolumeHoraireListe
* Détermine si un volume horaire répond aux critères de la liste ou non
*
* @param VolumeHoraire $volumeHoraire
*
* @return boolean
*/
public function match(VolumeHoraire $volumeHoraire)
......@@ -408,6 +489,15 @@ class VolumeHoraireListe
if ($horaire != $this->timestamp($this->horaire)) return false;
}
}
if (false !== $this->source) {
$source = $volumeHoraire->getSource();
if (true === $this->source) {
if (null === $source) return false;
} else {
if ($source !== $this->source) return false;
}
}
return true;
}
......@@ -428,6 +518,7 @@ class VolumeHoraireListe
}
/**
* Retourne la liste des volumes horaires du service (sans les motifs de non paiement)
* Les clés sont les codes des types d'intervention des volumes horaires
......@@ -444,9 +535,12 @@ class VolumeHoraireListe
$data[$volumeHoraire->getId()] = $volumeHoraire;
}
}
return $data;
}
/**
* Retourne le nombre de volumes horaires concernés par la liste
*
......@@ -457,6 +551,8 @@ class VolumeHoraireListe
return count($this->get());
}
/**
* Détermine si la liste est vide ou non
*
......@@ -467,6 +563,8 @@ class VolumeHoraireListe
return 0 === $this->count();
}
/**
*
* @return Periode[]
......@@ -480,9 +578,12 @@ class VolumeHoraireListe
uasort($periodes, function ($a, $b) {
return ($a ? $a->getOrdre() : '') > ($b ? $b->getOrdre() : '');
});
return $periodes;
}
/**
* Détermine si, dans la liste des heures, des périodes non autorisées sont présentes
*
......@@ -497,9 +598,12 @@ class VolumeHoraireListe
foreach ($periodes as $p) {
if ($p !== $periode) return true;
}
return false;
}
/**
*
* @return MotifNonPaiement[]
......@@ -524,9 +628,12 @@ class VolumeHoraireListe
uasort($mnps, function ($a, $b) {
return ($a ? $a->getLibelleLong() : '') > ($b ? $b->getLibelleLong() : '');
});
return $mnps;
}
/**
* retourne une liste fille de volumes horaires
*
......@@ -542,9 +649,14 @@ class VolumeHoraireListe
$volumeHoraireListe->setMotifNonPaiement($this->motifNonPaiement);
$volumeHoraireListe->setContrat($this->contrat);
$volumeHoraireListe->setValidation($this->validation);
$volumeHoraireListe->setHoraire($this->horaire);
$volumeHoraireListe->setSource($this->source);
return $volumeHoraireListe;
}
/**
*
* @return type
......@@ -556,15 +668,19 @@ class VolumeHoraireListe
foreach ($volumesHoraires as $volumeHoraire) {
$heures += $volumeHoraire->getHeures();
}
return $heures;
}
/**
* Affecte un certain nombre d'heures à la liste
*
* @param float $heures
* @param MotifNonPaiement|null|false $motifNonPaiement
* @param MotifNonPaiement|null|false $ancienMotifNonPaiement
*
* @return self
* @throws LogicException
*/
......@@ -612,6 +728,7 @@ class VolumeHoraireListe
$newHeures = $vhl->getHeures() - $heures;
if ($newHeures < 0) $newHeures = 0;
$vhl->setHeures($newHeures, $ancienMotifNonPaiement);
return $this;
}
......@@ -619,9 +736,9 @@ class VolumeHoraireListe
$lastHeures = $vhl->getHeures();
$newHeures = $heures - $lastHeures;
$vhl->setValidation(null); // On travaille sur les non validés
$vhl->setSource($this->getServiceSource()->getOse()); // On ne modifie que la source OSE!!
if ($vhl->isEmpty()) {
if (0 == $newHeures) return $this; // Pas de modifications à prévoir
$saisieHeures = $newHeures;
$volumeHoraire = new VolumeHoraire();
$volumeHoraire->setService($vhl->getService());
$volumeHoraire->setTypeVolumeHoraire($vhl->getTypeVolumeHoraire());
......@@ -633,7 +750,8 @@ class VolumeHoraireListe
$this->getService()->addVolumeHoraire($volumeHoraire);
} else {
$soldeHeures = $newHeures;
foreach( $vhl->get() as $volumeHoraire ){
$vhs = $vhl->get();
foreach ($vhs as $volumeHoraire) {
$saisieHeures = $soldeHeures + $volumeHoraire->getHeures();
if (0 == $saisieHeures) { // nouvelle valeur à zéro donc on supprime le VH
$volumeHoraire->setRemove(true);
......@@ -644,7 +762,7 @@ class VolumeHoraireListe
} else { // sinon on retire des heures sur tous les motifs jusqu'à ce que le compte soit bon
$motifVhl = $vhl->getChild()->setValidation(false)->setMotifNonPaiement($volumeHoraire->getMotifNonPaiement());
$motifHeures = $motifVhl->getHeures(); // on récupère le nbr d'heures du motif de non paiement
if ($motifHeures + $soldeHeures <= 0){
if ($motifHeures + $soldeHeures <= 0 && !$volumeHoraire->getMotifNonPaiement()){
$soldeHeures += $volumeHoraire->getHeures();
$volumeHoraire->setRemove(true); // on l'enlève
} else {
......@@ -664,13 +782,17 @@ class VolumeHoraireListe
if ($oldSaisieHeures < 0) $oldSaisieHeures = 0;
$this->setHeures($oldSaisieHeures, $ancienMotifNonPaiement);
}
return $this;
}
/**
* Vérifie l'éligibilité d'un volume horaire à la liste
*
* @param VolumeHoraire $volumeHoraire
*
* @return true
* @throws LogicException
*/
......@@ -700,9 +822,12 @@ class VolumeHoraireListe
if ($this->getValidation() instanceof Validation && !$volumeHoraire->getValidation()->contains($this->getValidation())) {
throw new LogicException('La validation du volume horaire ne correspond pas à celle de la liste');
}
return true;
}
/**
* @return array
*/
......@@ -730,6 +855,7 @@ class VolumeHoraireListe
if ($this->getValidation() instanceof Validation) {
$result['validation'] = $this->getValidation()->getId();
}
return $result;
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ use Application\Entity\Db\TypeVolumeHoraire;
use Application\Entity\Db\ServiceReferentiel;
use Application\Entity\Db\Validation;
use Application\Entity\Db\EtatVolumeHoraire;
use Application\Service\Traits\SourceServiceAwareTrait;
use RuntimeException;
use LogicException;
......@@ -17,6 +18,8 @@ use LogicException;
*/
class VolumeHoraireReferentielListe
{
use SourceServiceAwareTrait;
/**
* @var ServiceReferentiel|boolean
*/
......@@ -43,6 +46,11 @@ class VolumeHoraireReferentielListe
*/
protected $horaire = false;
/**
* @var Source|boolean
*/
protected $source = false;
/**
* @var bool
*/
......@@ -198,6 +206,30 @@ class VolumeHoraireReferentielListe
/**
* @return Source|bool
*/
public function getSource()
{
return $this->source;
}
/**
* @param Source|bool $source
*
* @return VolumeHoraireReferentielListe
*/
public function setSource($source)
{
$this->source = $source;
return $this;
}
/**
* @return boolean
*/
......@@ -236,13 +268,9 @@ class VolumeHoraireReferentielListe
if (false !== $this->typeVolumeHoraire) {
$typeVolumeHoraire = $volumeHoraire->getTypeVolumeHoraire();
if (true === $this->typeVolumeHoraire) {
if (null === $typeVolumeHoraire) {
return false;
}
if (null === $typeVolumeHoraire) return false;
} else {
if ($typeVolumeHoraire !== $this->typeVolumeHoraire) {
return false;
}
if ($typeVolumeHoraire !== $this->typeVolumeHoraire) return false;
}
}
if (false !== $this->etatVolumeHoraire) {
......@@ -277,6 +305,14 @@ class VolumeHoraireReferentielListe
if ($horaire != $this->timestamp($this->horaire)) return false;
}
}
if (false !== $this->source) {
$source = $volumeHoraire->getSource();
if (true === $this->source) {
if (null === $source) return false;
} else {
if ($source !== $this->source) return false;
}
}
return true;
}
......@@ -353,6 +389,8 @@ class VolumeHoraireReferentielListe
$volumeHoraireListe->setTypeVolumeHoraire($this->typeVolumeHoraire);
$volumeHoraireListe->setEtatVolumeHoraire($this->etatVolumeHoraire);
$volumeHoraireListe->setValidation($this->validation);
$volumeHoraireListe->setHoraire($this->horaire);
$volumeHoraireListe->setSource($this->source);
return $volumeHoraireListe;
}
......@@ -406,6 +444,7 @@ class VolumeHoraireReferentielListe
$lastHeures = $vhl->getHeures();
$newHeures = $heures - $lastHeures;
$vhl->setValidation(null); // On travaille sur les non validés
$vhl->setSource($this->getServiceSource()->getOse()); // On ne modifie que la source OSE!!
if ($vhl->isEmpty()) {
if (0 == $newHeures) {
return $this;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment