diff --git a/module/Indicateur/src/Controller/IndicateurController.php b/module/Indicateur/src/Controller/IndicateurController.php index b79e6f1b9d489c32a8d26a26b63f4221790a9403..08d28282cc9716bb006d9b5f8820dcf00496b4eb 100755 --- a/module/Indicateur/src/Controller/IndicateurController.php +++ b/module/Indicateur/src/Controller/IndicateurController.php @@ -64,6 +64,7 @@ class IndicateurController extends AbstractController private $cliConfig; + /** * PHP 5 allows developers to declare constructor methods for classes. * Classes which have a constructor method call this method on each newly-created object, @@ -80,11 +81,12 @@ class IndicateurController extends AbstractController public function __construct(TreeRouteStack $httpRouter, PhpRenderer $renderer, array $cliConfig) { $this->httpRouter = $httpRouter; - $this->renderer = $renderer; - $this->cliConfig = $cliConfig; + $this->renderer = $renderer; + $this->cliConfig = $cliConfig; } + /** * Liste des indicateurs. * @@ -105,7 +107,7 @@ class IndicateurController extends AbstractController ti.ordre, i.ordre "; - $params = [ + $params = [ 'affectation' => $this->getServiceContext()->getAffectation(), ]; $indicateurs = $this->em()->createQuery($dql)->execute($params); @@ -114,6 +116,7 @@ class IndicateurController extends AbstractController } + public function calculAction() { /** @var TypeIndicateur $typeindicateur */ @@ -123,7 +126,7 @@ class IndicateurController extends AbstractController /** @var Indicateur[] $indicateurs */ $indicateurs = $this->em()->createQuery($dql)->execute(['type' => $typeindicateur]); - $data = []; + $data = []; foreach ($indicateurs as $indicateur) { $count = $this->getServiceIndicateur()->getCount($indicateur); @@ -137,21 +140,23 @@ class IndicateurController extends AbstractController } + public function resultAction() { /* @var $indicateur Indicateur */ $indicateur = $this->getEvent()->getParam('indicateur'); - $result = $this->getServiceIndicateur()->getResult($indicateur); + $result = $this->getServiceIndicateur()->getResult($indicateur); return compact('indicateur', 'result'); } + public function exportCsvAction() { /* @var $indicateur Indicateur */ $indicateur = $this->getEvent()->getParam('indicateur'); - $result = $this->getServiceIndicateur()->getCsv($indicateur); + $result = $this->getServiceIndicateur()->getCsv($indicateur); $csvModel = new CsvModel(); if (!empty($result)) { @@ -182,6 +187,7 @@ class IndicateurController extends AbstractController } + /** * Réponse aux requêtes AJAX d'abonnement de l'utilisateur connecté aux notifications concernant un indicateur. * @@ -195,22 +201,22 @@ class IndicateurController extends AbstractController /** @var Indicateur $indicateur */ $indicateur = $this->getEvent()->getParam('indicateur'); - $frequence = $this->params()->fromPost('notification'); - $inHome = $this->params()->fromPost('in-home') == '1'; + $frequence = $this->params()->fromPost('notification'); + $inHome = $this->params()->fromPost('in-home') == '1'; $serviceNotif = $this->getServiceNotificationIndicateur(); try { $notificationIndicateur = $serviceNotif->abonner($indicateur, $frequence, $inHome); - $status = 'success'; - $message = 'Demande prise en compte'; + $status = 'success'; + $message = 'Demande prise en compte'; if (!$notificationIndicateur) { $message .= ' (Abonnement supprimé)'; } } catch (Exception $e) { $notificationIndicateur = null; - $status = 'error'; - $message = "Abonnement impossible: {$e->getMessage()}"; + $status = 'error'; + $message = "Abonnement impossible: {$e->getMessage()}"; } return new JsonModel([ @@ -221,6 +227,7 @@ class IndicateurController extends AbstractController } + /** * Indicateurs auxquels est abonné l'utilisateur (un Personnel) spécifié dans la requête. * @@ -243,11 +250,11 @@ class IndicateurController extends AbstractController ti.ordre, i.ordre "; - $params = [ + $params = [ 'affectation' => $this->getServiceContext()->getAffectation(), ]; $indicateurs = $this->em()->createQuery($dql)->execute($params); - $counts = []; + $counts = []; foreach ($indicateurs as $indicateur) { $counts[$indicateur->getId()] = $this->getServiceIndicateur()->getCount($indicateur); } @@ -256,6 +263,7 @@ class IndicateurController extends AbstractController } + public function envoiMailIntervenantsAction() { $indicateur = $this->getEvent()->getParam('indicateur'); @@ -270,17 +278,14 @@ class IndicateurController extends AbstractController $result = $this->getServiceIndicateur()->getResult($indicateur); - $emails = []; - $emailsPro = []; + $emails = []; + $emailsPro = []; $intervenantsWithNoEmail = []; foreach ($result as $intervenantId => $indicRes) { if (!in_array($intervenantId, $intervenantsIds)) { continue; } - $emailPerso = $indicRes['dossier-email-perso'] ?: $indicRes['intervenant-email-perso']; - $emailPro = $indicRes['intervenant-email-pro']; - - $email = $emailPerso ?: $emailPro; + $email = $indicRes['intervenant-email-perso'] ?: $indicRes['intervenant-email-pro']; if ($email) { $emails[$email] = $indicRes['intervenant-nom'] . ' ' . $indicRes['intervenant-prenom']; if ($email != $emailPro) { @@ -290,10 +295,10 @@ class IndicateurController extends AbstractController $intervenantsWithNoEmail[$intervenantId] = $indicRes; } } - $mailer = new IndicateurIntervenantsMailer($this, $indicateur, $this->renderer); - $from = $mailer->getFrom(); + $mailer = new IndicateurIntervenantsMailer($this, $indicateur, $this->renderer); + $from = $mailer->getFrom(); $subject = $mailer->getDefaultSubject(); - $body = $mailer->getDefaultBody(); + $body = $mailer->getDefaultBody(); $form = new Form(); $form->setAttribute('action', $this->url()->fromRoute(null, [], [], true)); @@ -326,20 +331,20 @@ class IndicateurController extends AbstractController } } if ($post['copy']) { - //envoi une copie du mail à l'utilisateur si il l'a demandé - $utilisateur = $this->getServiceContext()->getUtilisateur(); + //envoi une copie du mail à l'utilisateur s'il l'a demandé + $utilisateur = $this->getServiceContext()->getUtilisateur(); $emailUtilisateur[$utilisateur->getEmail()] = $utilisateur->getDisplayName(); $mailer->sendCopyEmail($emailUtilisateur, $emailsList, $post); } if ($post['cci'] && !empty($post['cci'])) { $emailsCci = explode(';', $post['cci']); foreach ($emailsCci as $emailCci) { - $listEmailsCci = []; + $listEmailsCci = []; $listEmailsCci[$emailCci] = $emailCci; $mailer->sendCopyEmail($listEmailsCci, $emailsList, $post); } } - $count = count($emailsList); + $count = count($emailsList); $pluriel = $count > 1 ? 's' : ''; $this->flashMessenger()->addSuccessMessage("Le mail a été envoyé à $count intervenant$pluriel"); $this->redirect()->toRoute('indicateur/result', ['indicateur' => $indicateur->getId()]); @@ -355,6 +360,7 @@ class IndicateurController extends AbstractController } + /** * Notifications par mail des personnes abonnées à des indicateurs. * @@ -368,7 +374,7 @@ class IndicateurController extends AbstractController // S'il s'agit d'une requête de type Console (CLI), le plugin de contrôleur Url utilisé par les indicateurs // n'est pas en mesure de construire des URL (car le ConsoleRouter ne sait pas ce qu'est une URL!). // On injecte donc provisoirement un HttpRouter dans le circuit. - $event = $this->getEvent(); + $event = $this->getEvent(); $router = $event->getRouter(); $event->setRouter($this->httpRouter); @@ -396,15 +402,16 @@ class IndicateurController extends AbstractController } + public function depassementChargesAction() { /** @var Intervenant $intervenant */ - $intervenant = $this->getEvent()->getParam('intervenant'); + $intervenant = $this->getEvent()->getParam('intervenant'); $typeVolumeHoraireCode = $this->params()->fromRoute('type-volume-horaire-code'); - $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getByCode($typeVolumeHoraireCode); + $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getByCode($typeVolumeHoraireCode); $periodeCode = $this->params()->fromRoute('periode-code'); - $periode = $this->getServicePeriode()->getByCode($periodeCode); + $periode = $this->getServicePeriode()->getByCode($periodeCode); if (!$intervenant) { throw new \Exception('Un intervenant doit être spécifié'); @@ -413,7 +420,7 @@ class IndicateurController extends AbstractController $params = compact('typeVolumeHoraire', 'periode', 'intervenant'); if ($structure = $this->getServiceContext()->getStructure()) { $params['structure'] = $structure->getId(); - $sFilter = ' AND idc.structure = :structure'; + $sFilter = ' AND idc.structure = :structure'; } else { $sFilter = ''; } @@ -436,7 +443,7 @@ class IndicateurController extends AbstractController "; - $idcs = $this->em()->createQuery($dql)->setParameters($params)->getResult(); + $idcs = $this->em()->createQuery($dql)->setParameters($params)->getResult(); $title = 'Dépassement d\'heures (' . $typeVolumeHoraire . ') par rapport aux charges <small>' . $intervenant . '</small>'; return compact('title', 'intervenant', 'idcs', 'typeVolumeHoraireCode'); @@ -444,6 +451,9 @@ class IndicateurController extends AbstractController } + + + /** * Classe dédiée à l'envoi des mails aux intervenants retournés par un indicateur. */ @@ -468,14 +478,16 @@ class IndicateurIntervenantsMailer private $renderer; + public function __construct(IndicateurController $controller, Indicateur $indicateur, PhpRenderer $renderer) { $this->controller = $controller; $this->indicateur = $indicateur; - $this->renderer = $renderer; + $this->renderer = $renderer; } + public function send($emails, $data) { foreach ($emails as $email => $name) { @@ -487,6 +499,7 @@ class IndicateurIntervenantsMailer } + private function createMessage($data) { // corps au format HTML @@ -499,12 +512,12 @@ class IndicateurIntervenantsMailer $htmlLog .= $name . " / " . $email . "<br/>"; } $htmlLog .= "</p>"; - $html .= $htmlLog; + $html .= $htmlLog; } - $part = new MimePart($html); - $part->type = Mime::TYPE_HTML; + $part = new MimePart($html); + $part->type = Mime::TYPE_HTML; $part->charset = 'UTF-8'; - $body = new MimeMessage(); + $body = new MimeMessage(); $body->addPart($part); return (new MailMessage()) @@ -515,10 +528,11 @@ class IndicateurIntervenantsMailer } + public function getFrom() { /** @var ContextService $context */ - $context = $this->controller->getServiceContext(); + $context = $this->controller->getServiceContext(); $parametre = $this->getServiceParametres(); $from = trim($parametre->get('indicateur_email_expediteur')); @@ -532,6 +546,7 @@ class IndicateurIntervenantsMailer } + public function getDefaultSubject() { /** @var ContextService $context */ @@ -547,6 +562,7 @@ class IndicateurIntervenantsMailer } + public function getDefaultBody() { /** @var ContextService $context */ @@ -563,10 +579,11 @@ class IndicateurIntervenantsMailer } + public function sendCopyEmail($emailsUtilisateur, $emailsIntervenant, $data, $logs = null) { $data['emailsIntervenant'] = $emailsIntervenant; - $message = $this->createMessage($data); + $message = $this->createMessage($data); $message->setSubject('COPIE | ' . $data['subject']); foreach ($emailsUtilisateur as $email => $name) { $message->setTo($email, $name); diff --git a/module/Indicateur/src/Service/IndicateurService.php b/module/Indicateur/src/Service/IndicateurService.php index a4392436163128c90e5c230fbc8ce18b21e8ceee..a50d96aa7f3677628dbcd1d70e6a753a14acb1f9 100755 --- a/module/Indicateur/src/Service/IndicateurService.php +++ b/module/Indicateur/src/Service/IndicateurService.php @@ -30,19 +30,20 @@ class IndicateurService extends AbstractService protected function getViewDef(int $numero, Annee $annee): string { - $view = 'V_INDICATEUR_' . $numero; - $sql = "SELECT text FROM user_views WHERE view_name = :view"; + $view = 'V_INDICATEUR_' . $numero; + $sql = "SELECT text FROM user_views WHERE view_name = :view"; $viewDef = $this->getEntityManager()->getConnection()->fetchAssociative($sql, compact('view'))['TEXT']; return $viewDef; } + protected function fetchData(Indicateur $indicateur, ?Structure $structure = null, bool $onlyCount = true): array { - $numero = $indicateur->getNumero(); + $numero = $indicateur->getNumero(); $structure = $structure ?: $this->getServiceContext()->getStructure(); - $annee = $this->getServiceContext()->getAnnee(); + $annee = $this->getServiceContext()->getAnnee(); if ($indicateur->getTypeIndicateur()->isPlafond()) { $viewDef = $this->getServiceIndicateur()->makeQuery($indicateur); @@ -54,10 +55,10 @@ class IndicateurService extends AbstractService 'annee' => $annee->getId(), ]; if ($onlyCount) { - $select = "COUNT(DISTINCT i.id) NB"; + $select = "COUNT(DISTINCT i.id) NB"; $orderBy = ""; } else { - $select = " + $select = " i.annee_id \"annee-id\", si.libelle \"statut-libelle\", si.prioritaire_indicateurs \"prioritaire\", @@ -65,9 +66,8 @@ class IndicateurService extends AbstractService i.code \"intervenant-code\", i.prenom \"intervenant-prenom\", i.nom_usuel \"intervenant-nom\", - i.email_perso \"intervenant-email-perso\", + COALESCE(d.email_perso,i.email_perso) \"intervenant-email-perso\", i.email_pro \"intervenant-email-pro\", - d.email_perso \"dossier-email-perso\", s.libelle_court \"structure-libelle\", indic.*"; $orderBy = " ORDER BY si.prioritaire_indicateurs DESC, s.libelle_court, i.nom_usuel, i.prenom"; @@ -89,7 +89,7 @@ class IndicateurService extends AbstractService } if ($structure) { $params['structure'] = $structure->getId(); - $sql .= ' AND (indic.structure_id = :structure OR indic.structure_id IS NULL)'; + $sql .= ' AND (indic.structure_id = :structure OR indic.structure_id IS NULL)'; } $sql .= $orderBy; @@ -97,6 +97,7 @@ class IndicateurService extends AbstractService } + /** * @param integer|Indicateur $indicateur Indicateur concerné */ @@ -108,6 +109,7 @@ class IndicateurService extends AbstractService } + /** * @param Indicateur $indicateur Indicateur concerné * @@ -116,12 +118,12 @@ class IndicateurService extends AbstractService public function getResult(NotificationIndicateur|Indicateur $indicateur): array { if ($indicateur instanceof NotificationIndicateur) { - $structure = $indicateur->getAffectation()->getStructure(); + $structure = $indicateur->getAffectation()->getStructure(); $indicateur = $indicateur->getIndicateur(); } else { $structure = null; } - $data = $this->fetchData($indicateur, $structure, false); + $data = $this->fetchData($indicateur, $structure, false); $result = []; foreach ($data as $d) { @@ -174,18 +176,19 @@ class IndicateurService extends AbstractService } + public function getCsv(Indicateur $indicateur): array { - $data = $this->fetchData($indicateur, null, false); + $data = $this->fetchData($indicateur, null, false); $result = []; foreach ($data as $d) { unset($d['INTERVENANT_ID']); unset($d['STRUCTURE_ID']); - $d['annee-id'] = $d['annee-id'] . '/' . ((int)$d['annee-id'] + 1); + $d['annee-id'] = $d['annee-id'] . '/' . ((int)$d['annee-id'] + 1); $d['prioritaire'] = $d['prioritaire'] ? 'Oui' : 'Non'; - $count = -1; - $datePresentes = []; + $count = -1; + $datePresentes = []; //Regarde si les colonnes sont dans le format date pour l'afficher, si elles le sont ajoute le nom de la colonne dans l'array @@ -194,7 +197,7 @@ class IndicateurService extends AbstractService if (!is_array($dateTest)) { $dt = DateTime::createFromFormat('Y-m-d H:i:s', $dateTest); if ($dt && $dt->format('Y-m-d H:i:s') === $dateTest) { - $keys = array_keys($d); + $keys = array_keys($d); $datePresentes[] = $keys[$count]; } } @@ -202,7 +205,7 @@ class IndicateurService extends AbstractService //Formate les date trouvé lors du parcours précedent au format voulu foreach ($datePresentes as $datePresente) { - $dt = DateTime::createFromFormat('Y-m-d H:i:s', $d[$datePresente]); + $dt = DateTime::createFromFormat('Y-m-d H:i:s', $d[$datePresente]); $d[$datePresente] = $dt->format(\Application\Constants::DATE_FORMAT); } $result[] = $d;