From fbd0a4685e83c3e979ff68c1f3362dc7bf203f55 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Thu, 15 Jan 2026 18:40:51 +0100 Subject: [PATCH] fix jobs & fancy formatting; check paabgabetyp instead of bezeichnung to enable enduploads for users in english lmao --- .../controllers/jobs/AbgabetoolJob.php | 154 +++++++++++++----- .../Cis/Abgabetool/AbgabeStudentDetail.js | 2 +- 2 files changed, 111 insertions(+), 45 deletions(-) diff --git a/application/controllers/jobs/AbgabetoolJob.php b/application/controllers/jobs/AbgabetoolJob.php index a4c576093..420379f72 100644 --- a/application/controllers/jobs/AbgabetoolJob.php +++ b/application/controllers/jobs/AbgabetoolJob.php @@ -28,6 +28,7 @@ class AbgabetoolJob extends JOB_Controller } public function notifyBetreuerAboutChangedAbgaben() { + $this->_ci->logInfo('Start job FHC-Core->notifyBetreuerAboutChangedAbgaben'); $interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL'); @@ -40,6 +41,8 @@ class AbgabetoolJob extends JOB_Controller return; } + // TODO: student name in abgabenstring hinzufügen + // group changed/new abgaben for projektarbeiten $projektarbeiten = []; foreach($retval as $newOrChangedAbgabe) { @@ -79,8 +82,9 @@ class AbgabetoolJob extends JOB_Controller // $tupel = [$projektarbeit_id, $betreuerRow], each betreuer has 0..n [projektarbeit_id, changedAbgaben] tupel forEach($betreuerMap as $betreuer_person_id => $tupelArr) { - $abgabenString = '

'; - + // start the container + $abgabenString = '
'; + $result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($betreuer_person_id); $data = getData($result)[0]; @@ -94,10 +98,7 @@ class AbgabetoolJob extends JOB_Controller $changedAbgaben = $projektarbeiten[$projektarbeit_id]; - // filter for abgaben which where not inserted by the current betreuer iteration if there is no updateamum - // or not changed by the betreuer if there is updateamum $relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($betreuerRow) { - // new termin not created by that betreuer if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $betreuerRow->uid) { return $abgabetermin; } else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $betreuerRow->uid) { @@ -106,35 +107,59 @@ class AbgabetoolJob extends JOB_Controller })); if(count($relevantAbgaben) == 0) { - break; // skip that projektarbeit if only changes originate from the betreuer in question + continue; // Changed break to continue to allow checking other projects in the tuple } $projektarbeit_titel = $relevantAbgaben[0]->titel ?? 'Kein Titel vergeben'; - $abgabenString .= 'Projektarbeit: '.$projektarbeit_titel.' ('.$betreuerRow->betreuerart_kurzbz.') ID:'.$projektarbeit_id.'
'; - $abgabenString .= 'Stg: '.$relevantAbgaben[0]->stgtyp.$relevantAbgaben[0]->stgkz.' Semester: '.$relevantAbgaben[0]->studiensemester_kurzbz.'
'; + + // --- Start 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 .= ' + + + + + + + + + '; + foreach ($relevantAbgaben as $abgabe) { - $datetime = new DateTime($abgabe->datum); - $dateEmailFormatted = $datetime->format('d.m.Y'); + $dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y'); + $abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y'); - $datetimeAbgabe = new DateTime($abgabe->abgabedatum); - $abgabedatumFormatted = $datetimeAbgabe->format('d.m.Y'); + $kurzbzLine = !empty($abgabe->kurzbz) ? "
{$abgabe->kurzbz}" : ""; - $abgabenString .= ' Zieldatum: '.$dateEmailFormatted . ' ' . $abgabe->bezeichnung . '
'; - if($abgabe->kurzbz != '') { - $abgabenString .= $abgabe->kurzbz . '
'; - } + $abgabenString .= " + + + + + "; } - $abgabenString .= '

'; - - + $abgabenString .= '
ZieldatumBezeichnungAbgabe bis
{$dateEmailFormatted} + {$abgabe->bezeichnung}{$kurzbzLine} + {$abgabedatumFormatted}
'; } + $abgabenString .= '
'; // Close container + // done with building the change list, now send it $betreuerRow = $tupelArr[0][1]; $path = $this->_ci->config->item('URL_MITARBEITER'); - $url = APP_ROOT.$path; + $url = CIS_ROOT.$path; $body_fields = array( 'anrede' => $anrede, @@ -173,8 +198,6 @@ class AbgabetoolJob extends JOB_Controller $result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval); $retval = getData($result); - var_dump($retval); - // retval are paabgaben joined with projektarbeit and betreuer if(count($retval) == 0) { $this->logInfo("Keine Emails über neue Paabgaben an Betreuer versandt"); @@ -202,9 +225,6 @@ class AbgabetoolJob extends JOB_Controller $anredeFillString = $data->anrede == "Herr" ? "r" : ""; $fullFormattedNameString = $data->first; - $result = $this->_ci->ProjektarbeitModel->getProjektbetreuerEmail($paabgabe->projektarbeit_id); - $data = getData($result)[0]; - // https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op // php has spaceships 🚀🚀🚀🚀🚀 @@ -214,19 +234,41 @@ class AbgabetoolJob extends JOB_Controller }); $projektarbeit_titel = $abgaben[0]->titel; - $abgabenString = '

'; + + // initialize the table and headers + $abgabenString = ' + + + + + + + + + '; + foreach ($abgaben as $abgabe) { - $datetime = new DateTime($abgabe->datum); - $dateEmailFormatted = $datetime->format('d.m.Y'); + // format dates inline for cleaner code + $dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y'); + $abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y'); - $datetimeAbgabe = new DateTime($abgabe->abgabedatum); - $abgabedatumFormatted = $datetimeAbgabe->format('d.m.Y'); + // handle the optional Kurzbezeichnung + $kurzbzLine = !empty($abgabe->kurzbz) ? "
{$abgabe->kurzbz}" : ""; - $abgabenString .= 'Abgabedatum: '.$abgabedatumFormatted.' Zieldatum: '.$dateEmailFormatted . ' ' . $abgabe->bezeichnung . '
' . $abgabe->kurzbz . '
'; + $abgabenString .= " + + + + + "; } + + $abgabenString .= '
ZieldatumBezeichnungAbgabe bis
{$dateEmailFormatted} + {$abgabe->bezeichnung}{$kurzbzLine} + {$abgabedatumFormatted}
'; $path = $this->_ci->config->item('URL_MITARBEITER'); - $url = APP_ROOT.$path; + $url = CIS_ROOT.$path; $body_fields = array( 'anrede' => $anrede, @@ -237,13 +279,14 @@ class AbgabetoolJob extends JOB_Controller 'linkAbgabetool' => $url ); - // TODO: get this guys uid safely -// $email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email; - + $result = $this->_ci->ProjektbetreuerModel->getBetreuerOfProjektarbeit($paabgabe->projektarbeit_id, $paabgabe->betreuerart_kurzbz); + $data = getData($result)[0]; + + $email = $data->uid ? $data->uid."@".DOMAIN : $data->private_email; // send email with bundled info sendSanchoMail( - 'PaabgabeUpdatesBetSM', + 'paabgabeUpdatesBetSM', $body_fields, $email, $this->p->t('abgabetool', 'changedAbgabeterminev2') @@ -262,7 +305,7 @@ class AbgabetoolJob extends JOB_Controller $this->_ci->logInfo('Start job FHC-Core->notifyStudentMail'); - $interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL'); + $interval = '10 days';//$this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL'); $result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval); $retval = getData($result); @@ -299,16 +342,39 @@ class AbgabetoolJob extends JOB_Controller }); $projektarbeit_titel = $abgaben[0]->titel; - $abgabenString = '

'; - forEach($abgaben as $abgabe) { - $datetime = new DateTime($abgabe->datum); - $dateEmailFormatted = $datetime->format('d.m.Y'); + + // initialize the table and headers + $abgabenString = ' + + + + + + + + '; - $abgabenString .= $dateEmailFormatted.' '.$abgabe->bezeichnung.' '.$abgabe->kurzbz.'
'; + foreach ($abgaben as $abgabe) { + $dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y'); + + // handle the optional Kurzbezeichnung + $kurzbzLine = !empty($abgabe->kurzbz) ? "
{$abgabe->kurzbz}" : ""; + + $abgabenString .= " + + + + "; } + + $abgabenString .= '
DatumBezeichnung / Hinweis
+ {$dateEmailFormatted} + + {$abgabe->bezeichnung}{$kurzbzLine} +
'; $route = $this->_ci->config->item('URL_STUDENTS'); - $url = APP_ROOT.$route; + $url = CIS_ROOT.$route; $body_fields = array( 'anrede' => $data->anrede, @@ -321,7 +387,7 @@ class AbgabetoolJob extends JOB_Controller // send email with bundled info sendSanchoMail( - 'PaabgabeUpdatesSammelmail', + 'paabgabeUpdatesSammelmail', $body_fields, $uid.'@'.DOMAIN, $this->p->t('abgabetool', 'changedAbgabeterminev2') diff --git a/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js index 8f9b77312..8deb689c6 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js @@ -140,7 +140,7 @@ export const AbgabeStudentDetail = { return false; } - if(termin.bezeichnung === 'Endupload') { + if(termin.bezeichnung?.paabgabetyp_kurzbz === 'end') { // open endupload form modal for further inputs this.enduploadTermin = termin this.$refs.modalContainerEnduploadZusatzdaten.show()