Commit 1f20cdc1 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Ajout du plafond par composante

parent a1846b40
......@@ -43,6 +43,7 @@ Attention toutefois : le travail de mise en place du dispositif n'en est qu'au t
* Dans les paramètres généraux, il n'est plus nécessaire de renseigner qui est le DRH de l'établissement
* La recherche d'intervenants saisis directement dans OSE fonctionne maintenant même sans avoir de vue source Intervenant
* Les fonctions référentielles peuvent être regroupées par types, avec des plafonds et indicateurs associés
* Un plafond par composante a été ajouté pour le référentiel.
## Notes de mise à jour
......
......@@ -119,7 +119,13 @@ CREATE TABLE "FORMULE_TEST_INTERVENANT"
"PARAM_5" VARCHAR2(100 CHAR),
"A_SERVICE_DU" FLOAT(126) DEFAULT 0 NOT NULL ENABLE,
"C_SERVICE_DU" FLOAT(126),
"DEBUG_INFO" CLOB
"DEBUG_INFO" CLOB,
"TAUX_TP_SERVICE_DU" FLOAT(126) DEFAULT 1 NOT NULL ENABLE,
"TAUX_AUTRE_SERVICE_DU" FLOAT(126) DEFAULT 1 NOT NULL ENABLE,
"TAUX_AUTRE_SERVICE_COMPL" FLOAT(126) DEFAULT 1 NOT NULL ENABLE,
"TAUX_CM_SERVICE_DU" FLOAT(126) DEFAULT 1.5 NOT NULL ENABLE,
"TAUX_CM_SERVICE_COMPL" FLOAT(126) DEFAULT 1.5 NOT NULL ENABLE,
"TAUX_TP_SERVICE_COMPL" FLOAT(126) DEFAULT 2/3 NOT NULL ENABLE
);
/
......@@ -5514,6 +5520,66 @@ GROUP BY
i.structure_id;
/
CREATE OR REPLACE FORCE VIEW V_INDICATEUR_1230 AS
SELECT
i.id id,
i.annee_id annee_id,
i.id intervenant_id,
t.structure_id structure_id,
t.plafond plafond,
t.heures heures
FROM
(
SELECT DISTINCT
sr.intervenant_id intervenant_id,
s.plafond_referentiel plafond,
s.id structure_id,
s.libelle_court structure_libelle,
SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id) heures
FROM
service_referentiel sr
JOIN structure s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
JOIN type_volume_horaire tvh ON tvh.id = vhr.type_volume_horaire_id AND tvh.code = 'PREVU'
WHERE
sr.histo_destruction IS NULL
) t
JOIN intervenant i ON i.id = t.intervenant_id
WHERE
t.heures > t.plafond;
/
CREATE OR REPLACE FORCE VIEW V_INDICATEUR_1240 AS
SELECT
i.id id,
i.annee_id annee_id,
i.id intervenant_id,
t.structure_id structure_id,
t.plafond plafond,
t.heures heures
FROM
(
SELECT DISTINCT
sr.intervenant_id intervenant_id,
s.plafond_referentiel plafond,
s.id structure_id,
s.libelle_court structure_libelle,
SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id) heures
FROM
service_referentiel sr
JOIN structure s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
JOIN type_volume_horaire tvh ON tvh.id = vhr.type_volume_horaire_id AND tvh.code = 'REALISE'
WHERE
sr.histo_destruction IS NULL
) t
JOIN intervenant i ON i.id = t.intervenant_id
WHERE
t.heures > t.plafond;
/
--------------------------------------------------
-- Modification des triggers
--------------------------------------------------
......@@ -6011,6 +6077,57 @@ INSERT INTO indicateur (
NULL
);
INSERT INTO indicateur (
ID,
TYPE,
ORDRE,
ENABLED,
NUMERO,
LIBELLE_SINGULIER,
LIBELLE_PLURIEL,
ROUTE,
TEM_DISTINCT,
TEM_NOT_STRUCTURE,
MESSAGE
) VALUES (
indicateur_id_seq.nextval,
'Enseignements et référentiel <em>Permanents</em>',
1230,
1,
1230,
'%s intervenant a des heures de référentiel <i>prévisionnel</i> dépassant le plafond autorisé pour la composante correspondante',
'%s intervenants ont des heures de référentiel <i>prévisionnel</i> dépassant le plafond autorisé pour la composante correspondante',
'intervenant/services',
1,
0,
NULL
);
INSERT INTO indicateur (
ID,
TYPE,
ORDRE,
ENABLED,
NUMERO,
LIBELLE_SINGULIER,
LIBELLE_PLURIEL,
ROUTE,
TEM_DISTINCT,
TEM_NOT_STRUCTURE,
MESSAGE
) VALUES (
indicateur_id_seq.nextval,
'Enseignements et référentiel <em>Permanents</em>',
1240,
1,
1240,
'%s intervenant a des heures de référentiel <i>réalisé</i> dépassant le plafond autorisé pour la composante correspondante',
'%s intervenants ont des heures de référentiel <i>réalisé</i> dépassant le plafond autorisé pour la composante correspondante','intervenant/services',
1,
0,
NULL
);
ALTER TABLE structure ADD (
plafond_referentiel FLOAT
);
......
SELECT
p.id plafond_id,
p.libelle plafond_libelle,
CASE WHEN b.plafond_libelle IS NOT NULL THEN b.plafond_libelle ELSE p.libelle END plafond_libelle,
b.type_volume_horaire_id,
tvh.libelle type_volume_horaire_libelle,
b.annee_id,
......@@ -13,6 +13,7 @@ FROM
-- Montant maximal par intervenant de la prime D714-60 du code de l'éducation
SELECT
'remu-d714-60' plafond_code,
null plafond_libelle,
fr.type_volume_horaire_id type_volume_horaire_id,
i.annee_id annee_id,
i.id intervenant_id,
......@@ -32,6 +33,7 @@ UNION
-- Heures max. de référentiel par intervenant selon son statut
SELECT
'ref-par-statut' plafond_code,
null plafond_libelle,
fr.type_volume_horaire_id type_volume_horaire_id,
i.annee_id annee_id,
i.id intervenant_id,
......@@ -49,12 +51,13 @@ UNION
-- Heures max. de référentiel par intervenant et par fonction référentielle
SELECT
'ref-par-fonction' plafond_code,
'ref-par-fonction' plafond_code,
null plafond_libelle,
t.type_volume_horaire_id,
i.annee_id,
t.intervenant_id,
AVG(t.plafond) plafond,
AVG(t.heures) heures
AVG(t.plafond) plafond,
AVG(t.heures) heures
FROM
(
SELECT
......@@ -88,12 +91,13 @@ UNION
-- Heures max. de référentiel par intervenant et par fonction référentielle mère
SELECT
'ref-par-fonction-mere' plafond_code,
'ref-par-fonction-mere' plafond_code,
null plafond_libelle,
t.type_volume_horaire_id,
i.annee_id,
t.intervenant_id,
AVG(t.plafond) plafond,
AVG(t.heures) heures
AVG(t.plafond) plafond,
AVG(t.heures) heures
FROM
(
SELECT
......@@ -126,9 +130,42 @@ GROUP BY
UNION
-- Heures max. de référentiel par structure
SELECT
'ref-par-structure' plafond_code,
'Heures max. de référentiel pour la composante ' || t.structure_libelle plafond_libelle,
t.type_volume_horaire_id,
i.annee_id,
t.intervenant_id,
t.plafond plafond,
t.heures heures
FROM
(
SELECT DISTINCT
vhr.type_volume_horaire_id type_volume_horaire_id,
sr.intervenant_id intervenant_id,
s.plafond_referentiel plafond,
s.id structure_id,
s.libelle_court structure_libelle,
SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id) heures
FROM
service_referentiel sr
JOIN structure s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
WHERE
sr.histo_destruction IS NULL
) t
JOIN intervenant i ON i.id = t.intervenant_id
WHERE
t.heures > t.plafond
/*i.id*/
UNION
-- Nombre maximum d'heures équivalent TD par intervenant selon son statut
SELECT
'hetd' plafond_code,
null plafond_libelle,
fr.type_volume_horaire_id type_volume_horaire_id,
i.annee_id annee_id,
i.id intervenant_id,
......@@ -148,6 +185,7 @@ UNION
-- Nombre d'heures complémentaires maximum (hors rémunération au titre de l'article d714-60 du code de l'éducation)
SELECT
'hc-hors-d71460' plafond_code,
null plafond_libelle,
fr.type_volume_horaire_id type_volume_horaire_id,
i.annee_id annee_id,
fr.intervenant_id intervenant_id,
......
<?php
namespace Application\Entity\Db\Indicateur;
use UnicaenApp\Util;
class Indicateur1230 extends AbstractIndicateur
{
/**
* @var float
*/
private $plafond;
/**
* @var float
*/
private $heures;
/**
* @return float
*/
public function getPlafond()
{
return $this->plafond;
}
/**
* @param float $plafond
*
* @return self
*/
public function setPlafond($plafond)
{
$this->plafond = $plafond;
return $this;
}
/**
* @return float
*/
public function getHeures()
{
return $this->heures;
}
/**
* @param float $heures
*
* @return self
*/
public function setHeures($heures)
{
$this->heures = $heures;
return $this;
}
/**
* Retourne les détails concernant l'indicateur
*
* @return string|null
*/
public function getDetails()
{
if ($this->getPlafond() == 0){
return sprintf(
'heures = %s',
Util::formattedNumber($this->getHeures())
);
}else{
return sprintf(
'heures = %s (plafond = %s)',
Util::formattedNumber($this->getHeures()),
Util::formattedNumber($this->getPlafond())
);
}
}
}
<?php
namespace Application\Entity\Db\Indicateur;
use UnicaenApp\Util;
class Indicateur1240 extends AbstractIndicateur
{
/**
* @var float
*/
private $plafond;
/**
* @var float
*/
private $heures;
/**
* @return float
*/
public function getPlafond()
{
return $this->plafond;
}
/**
* @param float $plafond
*
* @return self
*/
public function setPlafond($plafond)
{
$this->plafond = $plafond;
return $this;
}
/**
* @return float
*/
public function getHeures()
{
return $this->heures;
}
/**
* @param float $heures
*
* @return self
*/
public function setHeures($heures)
{
$this->heures = $heures;
return $this;
}
/**
* Retourne les détails concernant l'indicateur
*
* @return string|null
*/
public function getDetails()
{
if ($this->getPlafond() == 0){
return sprintf(
'heures = %s',
Util::formattedNumber($this->getHeures())
);
}else{
return sprintf(
'heures = %s (plafond = %s)',
Util::formattedNumber($this->getHeures()),
Util::formattedNumber($this->getPlafond())
);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Application\Entity\Db\Indicateur\Indicateur1230" table="V_INDICATEUR_1230" read-only="true">
<id name="id" type="integer" column="ID"/>
<field name="heures" type="float" column="HEURES" precision="126" scale="0" nullable="false"/>
<field name="plafond" type="float" column="PLAFOND" precision="126" scale="0" nullable="false"/>
<many-to-one field="annee" target-entity="Application\Entity\Db\Annee">
<join-column name="ANNEE_ID" referenced-column-name="ID"/>
</many-to-one>
<many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant">
<join-column name="INTERVENANT_ID" referenced-column-name="ID"/>
</many-to-one>
<many-to-one field="structure" target-entity="Application\Entity\Db\Structure">
<join-column name="STRUCTURE_ID" referenced-column-name="ID"/>
</many-to-one>
</entity>
</doctrine-mapping>
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Application\Entity\Db\Indicateur\Indicateur1240" table="V_INDICATEUR_1240" read-only="true">
<id name="id" type="integer" column="ID"/>
<field name="heures" type="float" column="HEURES" precision="126" scale="0" nullable="false"/>
<field name="plafond" type="float" column="PLAFOND" precision="126" scale="0" nullable="false"/>
<many-to-one field="annee" target-entity="Application\Entity\Db\Annee">
<join-column name="ANNEE_ID" referenced-column-name="ID"/>
</many-to-one>
<many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant">
<join-column name="INTERVENANT_ID" referenced-column-name="ID"/>
</many-to-one>
<many-to-one field="structure" target-entity="Application\Entity\Db\Structure">
<join-column name="STRUCTURE_ID" referenced-column-name="ID"/>
</many-to-one>
</entity>
</doctrine-mapping>
Markdown is supported
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