From c3f7f7223af1478b2ddb2526eef642fbb49089a7 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Fri, 16 Jan 2026 11:59:46 +0100 Subject: [PATCH] add student name info to betreuer sammelemail jobs table; WIP adapting same logic for assistenz; --- .../controllers/jobs/AbgabetoolJob.php | 123 ++++++++++-------- .../models/education/Paabgabe_model.php | 18 ++- 2 files changed, 83 insertions(+), 58 deletions(-) diff --git a/application/controllers/jobs/AbgabetoolJob.php b/application/controllers/jobs/AbgabetoolJob.php index 420379f72..0a46cbd81 100644 --- a/application/controllers/jobs/AbgabetoolJob.php +++ b/application/controllers/jobs/AbgabetoolJob.php @@ -40,8 +40,6 @@ class AbgabetoolJob extends JOB_Controller $this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt"); return; } - - // TODO: student name in abgabenstring hinzufügen // group changed/new abgaben for projektarbeiten $projektarbeiten = []; @@ -107,53 +105,65 @@ class AbgabetoolJob extends JOB_Controller })); if(count($relevantAbgaben) == 0) { - continue; // Changed break to continue to allow checking other projects in the tuple + continue; } - $projektarbeit_titel = $relevantAbgaben[0]->titel ?? 'Kein Titel vergeben'; + // format the Student Name + $s = $relevantAbgaben[0]; + $nameParts = []; + if (!empty($s->titelpre)) $nameParts[] = $s->titelpre; + $nameParts[] = $s->vorname; + $nameParts[] = $s->nachname; + if (!empty($s->titelpost)) $nameParts[] = $s->titelpost; + $studentFullName = implode(' ', $nameParts); - // --- Start Project Header Section --- + $projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben'; + + // project header section $abgabenString .= " -
- Projekt: {$projektarbeit_titel}
- - ID: {$projektarbeit_id} | Rolle: {$betreuerRow->betreuerart_kurzbz} | - Studiengang: {$relevantAbgaben[0]->stgtyp}{$relevantAbgaben[0]->stgkz} ({$relevantAbgaben[0]->studiensemester_kurzbz}) - -
"; - - // --- Start Table --- - $abgabenString .= ' - - - - - - - - - '; +
+ Projekt: {$projektarbeit_titel}
+
+ Studierende/r: {$studentFullName} +
+ + ID: {$projektarbeit_id} | Rolle: {$betreuerRow->betreuerart_kurzbz} | + Stg: {$s->stgtyp}{$s->stgkz} ({$s->studiensemester_kurzbz}) + +
"; + + // start table + $abgabenString .= ' +
ZieldatumBezeichnungAbgabe bis
+ + + + + + + + '; foreach ($relevantAbgaben as $abgabe) { $dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y'); $abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y'); - - $kurzbzLine = !empty($abgabe->kurzbz) ? "
{$abgabe->kurzbz}" : ""; + $kurzbzLine = !empty($abgabe->kurzbz) ? "
{$abgabe->kurzbz}" : ""; $abgabenString .= " - - - - - "; + + + + + "; } $abgabenString .= '
ZieldatumBezeichnungAbgabe bis
{$dateEmailFormatted} - {$abgabe->bezeichnung}{$kurzbzLine} - {$abgabedatumFormatted}
{$dateEmailFormatted} + {$abgabe->bezeichnung}{$kurzbzLine} + {$abgabedatumFormatted}
'; } - - $abgabenString .= ''; // Close container + + // close container + $abgabenString .= ''; // done with building the change list, now send it $betreuerRow = $tupelArr[0][1]; @@ -197,7 +207,7 @@ class AbgabetoolJob extends JOB_Controller $result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval); $retval = getData($result); - + // retval are paabgaben joined with projektarbeit and betreuer if(count($retval) == 0) { $this->logInfo("Keine Emails über neue Paabgaben an Betreuer versandt"); @@ -213,21 +223,18 @@ class AbgabetoolJob extends JOB_Controller $betreuer_uids[$paabgabe->person_id][] = $paabgabe; } - + $count = 0; forEach ($betreuer_uids as $person_id => $abgaben) { // $person_id is from betreuer $result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($person_id); $data = getData($result)[0]; - + $anrede = $data->anrede; $anredeFillString = $data->anrede == "Herr" ? "r" : ""; $fullFormattedNameString = $data->first; - // https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op - // php has spaceships 🚀🚀🚀🚀🚀 - // sorting $abgaben array by datum usort($abgaben, function ($a, $b) { return strtotime($a->datum) <=> strtotime($b->datum); @@ -240,15 +247,26 @@ class AbgabetoolJob extends JOB_Controller - + + - + '; + var_dump($abgaben); + foreach ($abgaben as $abgabe) { - // format dates inline for cleaner code + // format the student name + $nameParts = []; + if (!empty($abgabe->titelpre)) $nameParts[] = $abgabe->titelpre; + $nameParts[] = $abgabe->vorname; + $nameParts[] = $abgabe->nachname; + if (!empty($abgabe->titelpost)) $nameParts[] = $abgabe->titelpost; + $studentFullName = implode(' ', $nameParts); + + // format dates inline $dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y'); $abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y'); @@ -257,19 +275,20 @@ class AbgabetoolJob extends JOB_Controller $abgabenString .= " - + + - + "; } $abgabenString .= '
ZieldatumZieldatumStudierende/r BezeichnungAbgabe bisAbgabe bis
{$dateEmailFormatted}{$dateEmailFormatted}{$studentFullName} {$abgabe->bezeichnung}{$kurzbzLine} {$abgabedatumFormatted}{$abgabedatumFormatted}
'; - + $path = $this->_ci->config->item('URL_MITARBEITER'); $url = CIS_ROOT.$path; - + $body_fields = array( 'anrede' => $anrede, 'anredeFillString' => $anredeFillString, @@ -279,9 +298,9 @@ class AbgabetoolJob extends JOB_Controller 'linkAbgabetool' => $url ); - $result = $this->_ci->ProjektbetreuerModel->getBetreuerOfProjektarbeit($paabgabe->projektarbeit_id, $paabgabe->betreuerart_kurzbz); + $result = $this->_ci->ProjektbetreuerModel->getBetreuerOfProjektarbeit($abgaben[0]->projektarbeit_id, $abgaben[0]->betreuerart_kurzbz); $data = getData($result)[0]; - + $email = $data->uid ? $data->uid."@".DOMAIN : $data->private_email; // send email with bundled info @@ -291,10 +310,10 @@ class AbgabetoolJob extends JOB_Controller $email, $this->p->t('abgabetool', 'changedAbgabeterminev2') ); - + $count++; } - + $this->_ci->logInfo($count . " Emails erfolgreich versandt"); $this->_ci->logInfo('End job FHC-Core->notifyBetreuerMail'); } diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php index cc4c06924..7661663f7 100644 --- a/application/models/education/Paabgabe_model.php +++ b/application/models/education/Paabgabe_model.php @@ -66,15 +66,17 @@ class Paabgabe_model extends DB_Model $query = "SELECT projektarbeit_id, paabgabe_id, paabgabetyp_kurzbz, fixtermin, datum, campus.tbl_paabgabe.kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum, campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum, - campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, - UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, tbl_lehreinheit.studiensemester_kurzbz + campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, + UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, tbl_lehreinheit.studiensemester_kurzbz, + public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz) JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) JOIN lehre.tbl_lehreinheit using(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id) JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz=public.tbl_studiengang.studiengang_kz) - + JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid) + JOIN public.tbl_person USING (person_id) WHERE campus.tbl_paabgabe.insertamum >= NOW() - INTERVAL ? OR campus.tbl_paabgabe.updateamum >= NOW() - INTERVAL ?"; @@ -85,13 +87,17 @@ class Paabgabe_model extends DB_Model public function findAbgabenNewOrUpdatedSinceByAbgabedatum($interval) { $query = "SELECT projektarbeit_id, paabgabe_id, paabgabetyp_kurzbz, fixtermin, datum, kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum, - campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum, - campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, - lehre.tbl_projektbetreuer.betreuerart_kurzbz, lehre.tbl_projektbetreuer.person_id + campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum, + campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, + lehre.tbl_projektbetreuer.betreuerart_kurzbz, lehre.tbl_projektbetreuer.person_id, + public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost + FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz) JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) + JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid) + JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id) WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL AND campus.tbl_paabgabe.abgabedatum >= NOW() - INTERVAL ?