Skip to content
Snippets Groups Projects
Commit dccdf3f0 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Merge branch 'master' into module-unicaen-siham

parents 79f52a98 6aaa6d2b
Branches
Tags
No related merge requests found
Showing
with 96 additions and 27 deletions
......@@ -21,14 +21,21 @@ Objectif : Connecteur Export OSE => Logiciel RH
## Corrections de bugs
* Au niveau du connecteur Actul+, les formations fermées étaient ignorées, elles sont également synchronisées
* La suppression d'un statut intervenant n'était plus possible (#39548)
* Il était impossible de modifier les règles de validation des services via le formulaire de l'administration (#39194)
## Nouveautés
* Module export intervenant de OSE vers SIHAM
* Nouvelle vue V_IMPORT_DEPUIS_DOSSIERS pouvant servir pour peupler les données des intervenants à partir des données personnelles
* Possibilité pour un gestionnire de saisir des heures d'enseignement ou de référentiel qui n'auront pas besoin d'être validées par la suite (nouveau privilège d'autovalidation associé)
* Ajout d'une colonne dans l'export CSV des charges précisant si un élément est mutualisé ou non
* Ajout de la composante hiérarchique de l'intervenant dans l'export csv des agréments (#40053)
* Ajout de la structure d'affectation d'un intervenant vacataire dans l'extraction de mise en paiement (#40180)
* Ajout d'un nouveau paramètre pour pouvoir spécifier un email expéditeur générique dans le cadre d'envoi d'email via les indicateurs (#40106)
* Affichage de l'horodatage du dossier de l'intervenant dans les données personnelles (#39014)
* Affichage du grade et de la discipline au niveau de la fiche intervenant (#39603)
* Synchronisation de l'email pro de la fiche intervenant avec le dossier de l'intervenant en cas de mise à jour (#39346)
# OSE 16 (14/09/2021)
Objectif : Connecteur import Actul+ & système différentiel pour comparer des charges d'enseignement
......
......@@ -294,7 +294,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_REUNION AS
-- AM=SI(ET($D20="Oui";$H20<>"TP");$M20*$AD20*$K20;0)
WHEN c = 'AM' AND v >= 1 THEN
IF vh.service_statutaire AND vh.type_intervention_code <> 'TP' THEN
IF vh.service_statutaire AND COALESCE(vh.type_intervention_code,' ') <> 'TP' THEN
RETURN vh.heures * cell('AD',l) * vh.ponderation_service_du;
ELSE
RETURN 0;
......
CREATE OR REPLACE TRIGGER INTERVENANT_EMAIL
AFTER UPDATE OF EMAIL_PRO
ON INTERVENANT
REFERENCING FOR EACH ROW
BEGIN
UPDATE intervenant_dossier SET email_pro = :NEW.email_pro WHERE intervenant_id = :NEW.id;
END;
\ No newline at end of file
......@@ -203,4 +203,10 @@ Cordialement,
"VALEUR" => "Vous n'êtes pas autorisé(e) à vous connecter à OSE avec ce compte. Nous vous prions de vous rapprocher de votre composante pour en obtenir un valide.",
"DESCRIPTION" => "Message informatif si l'utilisateur n'est pas intervenant et n'a aucune affectation",
],
/* Indicateur */
"indicateur_email_expediteur" => [
"DESCRIPTION" => "Adresse email d'expéditeur des mails via les indicateur, si vide alors l'email de l'utilisateur sera utilisé",
],
];
\ No newline at end of file
CREATE
MATERIALIZED VIEW MV_INTERVENANT AS
WITH i AS (
SELECT DISTINCT code,
......@@ -18,7 +19,7 @@ MATERIALIZED VIEW MV_INTERVENANT AS
WHEN icto.code_ose IS NOT NULL THEN icto.code_ose
ELSE 'AUTRES' END z_statut_id,
CASE
WHEN icto.code_ose IS NOT NULL AND icto.code_ose NOT IN ('BIATSS','NON_AUTORISE') THEN 'permanent'
WHEN icto.code_ose IS NOT NULL AND icto.code_ose NOT IN ('NON_AUTORISE') THEN 'permanent'
ELSE 'vacataire' END z_type,
icto.id_orig source_code,
COALESCE(icto.d_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut,
......@@ -30,7 +31,7 @@ MATERIALIZED VIEW MV_INTERVENANT AS
JOIN octo.individu_unique@octoprod uni ON icto.individu_id = uni.c_individu_chaine
JOIN octo.v_individu_statut@octoprod vinds ON vinds.individu_id = uni.c_individu_chaine
WHERE (icto.d_debut - 184 <= SYSDATE OR icto.d_fin >= SYSDATE) AND icto.code_ose IS NOT NULL
WHERE (COALESCE(icto.d_debut, to_date('01/01/1900', 'dd/mm/YYYY')) - 184 <= SYSDATE OR COALESCE(icto.d_fin, to_date('01/01/9999', 'dd/mm/YYYY')) >= SYSDATE) AND icto.code_ose IS NOT NULL
UNION ALL
......@@ -52,7 +53,7 @@ MATERIALIZED VIEW MV_INTERVENANT AS
FROM octo.individu_unique@octoprod uni
JOIN octo.individu_statut@octoprod inds ON inds.individu_id = uni.c_individu_chaine
LEFT JOIN octo.v_individu_statut@octoprod vinds ON vinds.individu_id = uni.c_individu_chaine
LEFT JOIN octo.v_individu_contrat_type_ose@octoprod icto ON uni.c_individu_chaine = icto.individu_id AND (icto.d_debut - 184 <= SYSDATE OR icto.d_fin >= SYSDATE) AND icto.code_ose IS NOT NULL AND icto.code_ose != 'NON_AUTORISE'
LEFT JOIN octo.v_individu_contrat_type_ose@octoprod icto ON uni.c_individu_chaine = icto.individu_id AND COALESCE(icto.d_debut, to_date('01/01/1900', 'dd/mm/YYYY')) - 184 <= SYSDATE AND COALESCE(inds.d_fin, to_date('01/01/9999', 'dd/mm/YYYY')) >= SYSDATE AND icto.code_ose IS NOT NULL AND icto.code_ose NOT IN('NON_AUTORISE')
WHERE inds.d_debut - 184 <= SYSDATE
--On ne remonte pas de statut autre pour ceux qui ont déjà un certain type de contrat
--AND icto.individu_id IS NULL
......@@ -65,6 +66,8 @@ MATERIALIZED VIEW MV_INTERVENANT AS
--AND (vinds.t_doctorant='N' OR vinds.individu_id IS NULL)
AND inds.c_source IN ('HARP', 'OCTO', 'SIHAM')
) t
),
--Trouver le tel pro principal de l'intervenant
......@@ -282,3 +285,7 @@ FROM i
--On récupére la discipline adaptée directement dans Octopus
LEFT JOIN cnua cnua ON cnua.individu_id = induni.c_individu_chaine
WHERE i.validite_fin >= (SYSDATE - (365 * 2))
......@@ -15,6 +15,7 @@ use Application\Service\Traits\IndicateurServiceAwareTrait;
use Application\Service\Traits\IntervenantServiceAwareTrait;
use Application\Service\Traits\NotificationIndicateurServiceAwareTrait;
use Application\Filter\IntervenantEmailFormatter;
use Application\Service\Traits\ParametresServiceAwareTrait;
use Application\Service\Traits\PeriodeServiceAwareTrait;
use Application\Service\Traits\TypeVolumeHoraireServiceAwareTrait;
use Zend\Form\Element\Checkbox;
......@@ -240,8 +241,7 @@ class IndicateurController extends AbstractController
$post = $this->getRequest()->getPost();
if ($form->setData($post)->isValid()) {
$mailer->send($emails, $post);
if($post['copy'])
{
if ($post['copy']) {
//envoi une copie du mail à l'utilisateur si il l'a demandé
$utilisateur = $this->getServiceContext()->getUtilisateur();
$emailUtilisateur[$utilisateur->getEmail()] = $utilisateur->getDisplayName();
......@@ -364,6 +364,7 @@ class IndicateurController extends AbstractController
class IndicateurIntervenantsMailer
{
use ContextServiceAwareTrait;
use ParametresServiceAwareTrait;
/**
* @var AbstractController
......@@ -407,13 +408,11 @@ class IndicateurIntervenantsMailer
{
// corps au format HTML
$html = $data['body'];
if(!empty($data['emailsIntervenant']))
{
if (!empty($data['emailsIntervenant'])) {
$htmlLog = "<br/><br/>------------------------------------------------ <br/><br/>";
$htmlLog = "<p>Email envoyé au(x) destinataire(s) suivant(s) : <br/>";
foreach($data['emailsIntervenant'] as $email => $name)
{
foreach ($data['emailsIntervenant'] as $email => $name) {
$htmlLog .= $name . " / " . $email . "<br/>";
}
$htmlLog .= "</p>";
......@@ -438,6 +437,12 @@ class IndicateurIntervenantsMailer
{
/** @var ContextService $context */
$context = $this->controller->getServiceContext();
$parametre = $this->getServiceParametres();
$from = trim($parametre->get('indicateur_email_expediteur'));
if (!empty($from)) {
return $from;
}
$from = $context->getUtilisateur()->getEmail();
......@@ -477,13 +482,14 @@ class IndicateurIntervenantsMailer
return $html;
}
public function sendCopyEmail($emailsUtilisateur, $emailsIntervenant, $data, $logs = null)
{
$data['emailsIntervenant'] = $emailsIntervenant;
$message = $this->createMessage($data);
$message->setSubject('COPIE | ' . $data['subject']);
foreach($emailsUtilisateur as $email => $name)
{
foreach ($emailsUtilisateur as $email => $name) {
$message->setTo($email, $name);
}
$this->controller->mail()->send($message);
......
......@@ -113,9 +113,7 @@ class StatutIntervenantController extends AbstractController
$statutIntervenant = $this->getEvent()->getParam('statutIntervenant');
$canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STATUT_EDITION));
if ($statutIntervenant->getSource()->getImportable()) {
$canEdit = false; // Si la source est synchronisable alors pas d'édition possible
}
if (!$canEdit) {
$this->flashMessenger()->addErrorMessage('Statut non modifiable : droit non accordé, car vous n\'avez pas le privilège pour cela ou bien le statut est synchronisé depuis un autre logiciel');
......
......@@ -116,7 +116,16 @@ class RegleStructureValidationForm extends AbstractForm
*/
public function getInputFilterSpecification()
{
return [];
$spec = [
'type-intervenant' => [
'required' => false,
],
'type-volume-horaire' => [
'required' => false,
],
];
return $spec;
}
}
\ No newline at end of file
......@@ -420,6 +420,14 @@ class ParametresForm extends AbstractForm
],
]);
$this->add([
'name' => 'indicateur_email_expediteur',
'type' => 'Text',
'options' => [
'label' => 'Email expéditeur',
],
]);
$this->add([
'type' => 'Select',
'name' => 'contrat_regle_franchissement',
......
......@@ -75,6 +75,8 @@ class IntervenantViewHelper extends AbstractHtmlElement
"N° {$entity->getSource()}" => $entity->getCode(),
"N° RH" => ($entity->getCodeRh()) ? $entity->getCodeRh() : '<span class="inconnu">(Inconnue)</span>',
"Affectation principale" => $entity->getStructure() ?: '<span class="inconnu">(Inconnue)</span>',
"Grade" => $entity->getGrade() ?: '<span class="inconnu">(Inconnue)</span>',
"Discipline" => (!empty($entity->getDiscipline()) && $entity->getDiscipline() != '00 Non renseignée') ? $entity->getDiscipline() : '<span class="inconnu">(Inconnue)</span>',
"Modifié le" => $entity->getHistoModification()->format(Constants::DATE_FORMAT),
],
'divers' => [
......
......@@ -110,7 +110,8 @@ $fieldsets = $form->getFieldsets();
<?php endif; ?>
<?php endif; ?>
<!--Affichage de l'horodatage pour le dossier de l'intervenant-->
<?= $this->historique($intervenantDossier) ?>
<?= $this->form()->openTag($form); ?>
<!-- legend champs obligatoire -->
......
......@@ -91,6 +91,24 @@
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Indicateur</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<?= $this->formControlGroup($form->get('indicateur_email_expediteur')); ?>
<div class="help-block">
Si l'email expéditeur est vide alors l'email de l'utilisateur en cours sera utilisé.
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Gestion des contrats de travail</h3>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment