From 8e5e1c1e56d222c33a6c720730dbde89a43aa14c Mon Sep 17 00:00:00 2001 From: trinko Date: Tue, 28 Jan 2025 19:41:31 +0100 Subject: [PATCH] Aggiunta: gestione categorie ATA in avvisi --- src/Entity/Avviso.php | 2 +- src/Form/AvvisoType.php | 3 +- src/Repository/AtaRepository.php | 33 ++++++++++++++++++- src/Util/BachecaUtil.php | 8 +++-- src/Util/RegistroUtil.php | 4 +++ templates/bacheca/avvisi.html.twig | 8 ++++- templates/bacheca/avvisi_ata.html.twig | 8 ++++- templates/bacheca/avvisi_genitori.html.twig | 8 ++++- templates/bacheca/scheda_avviso.html.twig | 8 ++++- templates/ruolo_staff/avvisi.html.twig | 8 ++++- .../ruolo_staff/avvisi_archivio.html.twig | 8 ++++- templates/ruolo_staff/avvisi_edit.html.twig | 15 +++++++++ templates/ruolo_staff/scheda_avviso.html.twig | 8 ++++- translations/messages+intl-icu.it.yml | 3 ++ 14 files changed, 112 insertions(+), 12 deletions(-) diff --git a/src/Entity/Avviso.php b/src/Entity/Avviso.php index 15145680..73b422e3 100644 --- a/src/Entity/Avviso.php +++ b/src/Entity/Avviso.php @@ -138,7 +138,7 @@ class Avviso implements Stringable { private ?array $allegati = []; /** - * @var array|null $destinatariAta Indica il personale ATA destinatario dell'avviso [D=DSGA, A=personale ATA] + * @var array|null $destinatariAta Indica il personale ATA destinatario dell'avviso [D=DSGA, A=tutto il personale ATA, M=amministrativi, T=tecnici, C=collaboratori scolastici] */ #[ORM\Column(name: 'destinatari_ata', type: Types::SIMPLE_ARRAY, nullable: true)] private ?array $destinatariAta = []; diff --git a/src/Form/AvvisoType.php b/src/Form/AvvisoType.php index 65173930..434d901f 100644 --- a/src/Form/AvvisoType.php +++ b/src/Form/AvvisoType.php @@ -68,7 +68,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void { 'label_attr' => ['class' => 'gs-checkbox-inline gs-mr-5 gs-pr-5'], 'required' => true]) ->add('destinatariAta', ChoiceType::class, ['label' => 'label.destinatari_ATA', - 'choices' => ['label.dsga' => 'D', 'label.ata' => 'A'], + 'choices' => ['label.dsga' => 'D', 'label.ata' => 'A', 'label.ata_amministrativi' => 'M', + 'label.ata_tecnici' => 'T', 'label.ata_collaboratori' => 'C'], 'placeholder' => false, 'expanded' => true, 'multiple' => true, diff --git a/src/Repository/AtaRepository.php b/src/Repository/AtaRepository.php index beed586e..922c8902 100644 --- a/src/Repository/AtaRepository.php +++ b/src/Repository/AtaRepository.php @@ -66,7 +66,7 @@ public function getIdDsga() { * * @return array Lista di ID degli utenti ATA */ - public function getIdAta($sedi) { + public function getIdAta($sedi): array { $ata = $this->createQueryBuilder('a') ->select('a.id') ->where('a.abilitato=:abilitato') @@ -80,6 +80,37 @@ public function getIdAta($sedi) { return array_column($ata, 'id'); } + /** + * Restituisce gli utenti ATA per le sedi indicate, in base alle categorie scelte + * + * @param array $categorie Categorie personale ATA + * @param array $sedi Sedi di servizio (lista ID di Sede) + * + * @return array Lista di ID degli utenti ATA + */ + public function getIdCategorieAta($categorie, $sedi): array { + // imposta categorie ammesse + $cat = []; + foreach ($categorie as $c) { + if ($c == 'M') { + // codifica differente + $cat[] = 'A'; + } elseif ($c == 'T' || $c == 'C') { + $cat[] = $c; + } + } + // legge utenti + $ata = $this->createQueryBuilder('a') + ->select('a.id') + ->where('a.abilitato=1 AND a.tipo IN (:categorie) AND (a.sede IS NULL OR a.sede IN (:sedi))') + ->setParameter('categorie', $cat) + ->setParameter('sedi', $sedi) + ->getQuery() + ->getArrayResult(); + // restituisce la lista degli ID + return array_column($ata, 'id'); + } + /** * Restituisce la lista dei rappresentanti del personale ATA secondo i criteri indicati * diff --git a/src/Util/BachecaUtil.php b/src/Util/BachecaUtil.php index cd451194..148074de 100644 --- a/src/Util/BachecaUtil.php +++ b/src/Util/BachecaUtil.php @@ -148,7 +148,7 @@ public function azioneAvviso($azione, DateTime $data, Docente $docente, Avviso $ } elseif ($azione == 'delete') { // azione di cancellazione if ($avviso) { - // esiste annotazione + // esiste avviso if ($docente->getId() == $avviso->getDocente()->getId()) { // stesso docente: ok return true; @@ -554,8 +554,12 @@ public function destinatariAvviso(Avviso $avviso) { } // ata if (in_array('A', $avviso->getDestinatariAta())) { - // aggiunge ATA + // aggiunge tutto il personale ATA $utenti = array_merge($utenti, $this->em->getRepository(Ata::class)->getIdAta($sedi)); + } else if (in_array('M', $avviso->getDestinatariAta()) || in_array('T', $avviso->getDestinatariAta()) || + in_array('C', $avviso->getDestinatariAta())) { + // aggiunge categorie ATA + $utenti = array_merge($utenti, $this->em->getRepository(Ata::class)->getIdCategorieAta($avviso->getDestinatariAta(), $sedi)); } // RSPP if (in_array('S', $avviso->getDestinatariSpeciali())) { diff --git a/src/Util/RegistroUtil.php b/src/Util/RegistroUtil.php index 39ff4bed..921179c7 100644 --- a/src/Util/RegistroUtil.php +++ b/src/Util/RegistroUtil.php @@ -287,6 +287,10 @@ public function azioneAnnotazione(string $azione, DateTime $data, Docente $docen // stesso docente: ok return true; } + if (in_array('ROLE_STAFF', $annotazione->getDocente()->getRoles()) && in_array('ROLE_STAFF', $docente->getRoles())) { + // docente è dello staff come anche chi ha scritto avviso: ok + return true; + } } } // non consentito diff --git a/templates/bacheca/avvisi.html.twig b/templates/bacheca/avvisi.html.twig index 4e82c1b8..63ac52eb 100644 --- a/templates/bacheca/avvisi.html.twig +++ b/templates/bacheca/avvisi.html.twig @@ -53,7 +53,13 @@ {% if 'S' in a.avviso.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in a.avviso.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in a.avviso.destinatariAta %}DSGA{% endif %} - {% if 'A' in a.avviso.destinatariAta %}ATA{% endif %} + {% if 'A' in a.avviso.destinatariAta %} + ATA + {% else %} + {% if 'M' in a.avviso.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in a.avviso.destinatariAta %}Tecnici{% endif %} + {% if 'C' in a.avviso.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in a.avviso.destinatariSpeciali %}RSPP{% endif %} diff --git a/templates/bacheca/avvisi_ata.html.twig b/templates/bacheca/avvisi_ata.html.twig index 3a160f4a..7ba1fd63 100644 --- a/templates/bacheca/avvisi_ata.html.twig +++ b/templates/bacheca/avvisi_ata.html.twig @@ -57,7 +57,13 @@ {% if 'S' in a.avviso.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in a.avviso.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in a.avviso.destinatariAta %}DSGA{% endif %} - {% if 'A' in a.avviso.destinatariAta %}ATA{% endif %} + {% if 'A' in a.avviso.destinatariAta %} + ATA + {% else %} + {% if 'M' in a.avviso.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in a.avviso.destinatariAta %}Tecnici{% endif %} + {% if 'C' in a.avviso.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in a.avviso.destinatariSpeciali %}RSPP{% endif %} diff --git a/templates/bacheca/avvisi_genitori.html.twig b/templates/bacheca/avvisi_genitori.html.twig index 7acb9cac..86537784 100644 --- a/templates/bacheca/avvisi_genitori.html.twig +++ b/templates/bacheca/avvisi_genitori.html.twig @@ -53,7 +53,13 @@ {% if 'S' in a.avviso.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in a.avviso.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in a.avviso.destinatariAta %}DSGA{% endif %} - {% if 'A' in a.avviso.destinatariAta %}ATA{% endif %} + {% if 'A' in a.avviso.destinatariAta %} + ATA + {% else %} + {% if 'M' in a.avviso.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in a.avviso.destinatariAta %}Tecnici{% endif %} + {% if 'C' in a.avviso.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in a.avviso.destinatariSpeciali %}RSPP{% endif %} diff --git a/templates/bacheca/scheda_avviso.html.twig b/templates/bacheca/scheda_avviso.html.twig index 7b3709de..db010130 100644 --- a/templates/bacheca/scheda_avviso.html.twig +++ b/templates/bacheca/scheda_avviso.html.twig @@ -31,7 +31,13 @@ {% if 'S' in dati.avviso.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in dati.avviso.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in dati.avviso.destinatariAta %}DSGA{% endif %} - {% if 'A' in dati.avviso.destinatariAta %}ATA{% endif %} + {% if 'A' in dati.avviso.destinatariAta %} + ATA + {% else %} + {% if 'M' in dati.avviso.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in dati.avviso.destinatariAta %}Tecnici{% endif %} + {% if 'C' in dati.avviso.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in dati.avviso.destinatariSpeciali %}RSPP{% endif %} {% if dati.classi|length > 0 %} diff --git a/templates/ruolo_staff/avvisi.html.twig b/templates/ruolo_staff/avvisi.html.twig index 66bb5a4e..891541fe 100644 --- a/templates/ruolo_staff/avvisi.html.twig +++ b/templates/ruolo_staff/avvisi.html.twig @@ -42,7 +42,13 @@ {% if 'S' in a.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in a.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in a.destinatariAta %}DSGA{% endif %} - {% if 'A' in a.destinatariAta %}ATA{% endif %} + {% if 'A' in a.destinatariAta %} + ATA + {% else %} + {% if 'M' in a.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in a.destinatariAta %}Tecnici{% endif %} + {% if 'C' in a.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in a.destinatariSpeciali %}RSPP{% endif %} diff --git a/templates/ruolo_staff/avvisi_archivio.html.twig b/templates/ruolo_staff/avvisi_archivio.html.twig index 58034fe9..e3530499 100644 --- a/templates/ruolo_staff/avvisi_archivio.html.twig +++ b/templates/ruolo_staff/avvisi_archivio.html.twig @@ -38,7 +38,13 @@ {% if 'S' in a.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in a.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in a.destinatariAta %}DSGA{% endif %} - {% if 'A' in a.destinatariAta %}ATA{% endif %} + {% if 'A' in a.destinatariAta %} + ATA + {% else %} + {% if 'M' in a.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in a.destinatariAta %}Tecnici{% endif %} + {% if 'C' in a.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in a.destinatariSpeciali %}RSPP{% endif %} diff --git a/templates/ruolo_staff/avvisi_edit.html.twig b/templates/ruolo_staff/avvisi_edit.html.twig index ca207b42..ec4e0325 100644 --- a/templates/ruolo_staff/avvisi_edit.html.twig +++ b/templates/ruolo_staff/avvisi_edit.html.twig @@ -389,6 +389,21 @@ $(document).ready(function() { $("#avviso_filtroTipo").val(old); $("#gs-modal-alunni").modal('hide'); }); + $("input[name='avviso[destinatariAta][]']").change(function() { + if ($(this).val() == 'A') { + if ($(this).is(":checked")) { + $("input[name='avviso[destinatariAta][]'][value='M']").prop("checked", true).parent().addClass('active'); + $("input[name='avviso[destinatariAta][]'][value='T']").prop("checked", true).parent().addClass('active'); + $("input[name='avviso[destinatariAta][]'][value='C']").prop("checked", true).parent().addClass('active'); + } else { + $("input[name='avviso[destinatariAta][]'][value='M']").prop("checked", false).parent().removeClass('active'); + $("input[name='avviso[destinatariAta][]'][value='T']").prop("checked", false).parent().removeClass('active'); + $("input[name='avviso[destinatariAta][]'][value='C']").prop("checked", false).parent().removeClass('active'); + } + } else if ($(this).val() != 'D') { + $("input[name='avviso[destinatariAta][]'][value='A']").prop("checked", false).parent().removeClass('active'); + } + }); $(document).on('keypress','.modal', function(e){ return event.keyCode != 13; }); diff --git a/templates/ruolo_staff/scheda_avviso.html.twig b/templates/ruolo_staff/scheda_avviso.html.twig index 6ab7a625..145a12b1 100644 --- a/templates/ruolo_staff/scheda_avviso.html.twig +++ b/templates/ruolo_staff/scheda_avviso.html.twig @@ -31,7 +31,13 @@ {% if 'S' in dati.avviso.destinatari %}{{ 'label.rappresentanti_S'|trans }}{% endif %} {% if 'P' in dati.avviso.destinatari %}{{ 'label.rappresentanti_P'|trans }}{% endif %} {% if 'D' in dati.avviso.destinatariAta %}DSGA{% endif %} - {% if 'A' in dati.avviso.destinatariAta %}ATA{% endif %} + {% if 'A' in dati.avviso.destinatariAta %} + ATA + {% else %} + {% if 'M' in dati.avviso.destinatariAta %}Amministrativi{% endif %} + {% if 'T' in dati.avviso.destinatariAta %}Tecnici{% endif %} + {% if 'C' in dati.avviso.destinatariAta %}Coll.scolast.{% endif %} + {% endif %} {% if 'S' in dati.avviso.destinatariSpeciali %}RSPP{% endif %} {% if dati.classi|length > 0 %} diff --git a/translations/messages+intl-icu.it.yml b/translations/messages+intl-icu.it.yml index e3362586..4882a9fa 100644 --- a/translations/messages+intl-icu.it.yml +++ b/translations/messages+intl-icu.it.yml @@ -30,6 +30,9 @@ label.ata_tipo_T: Tecnico label.ata_tipo_U: Autista label.ata_tipo: Mansioni label.ata: ATA +label.ata_amministrativi: Amministrativi +label.ata_tecnici: Tecnici +label.ata_collaboratori: Collaboratori scolastici label.attivita_sostegno: Attività del sostegno label.attivita: Attività label.autore: Autore