diff --git a/application/controllers/jobs/LVPlanJob.php b/application/controllers/jobs/LVPlanJob.php
index 2688e5cc9..19359573a 100644
--- a/application/controllers/jobs/LVPlanJob.php
+++ b/application/controllers/jobs/LVPlanJob.php
@@ -19,7 +19,7 @@
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
-class LVPlanJob extends CLI_Controller
+class LVPlanJob extends JOB_Controller
{
/**
* Initialize LVPlanJob Class
@@ -149,4 +149,351 @@ class LVPlanJob extends CLI_Controller
echo "Failed ".$fail."\n";
}
}
+
+ /**
+ * Send Mail to STGL, Kompetenzfeld and LV Planung about todays updated Zeitwuensche.
+ * STGL gets list only of lectors who updated future assigend courses concerning their STG.
+ * Kompetenzleitung gets list only of lectors who updated future assigend courses concerning their KF.
+ * LVPlanung gets list of lectors who updated future assigend courses.
+ */
+ public function mailUpdatedZeitwuensche()
+ {
+ // Load models
+ $this->load->model('ressource/Stundenplandev_model', 'StundenplandevModel');
+ $this->load->model('organisation/Studiensemester_model', 'StundiensemesterModel');
+ $this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
+ $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
+ $this->load->model('person/Person_model', 'PersonModel');
+
+ // Load libs
+ $this->load->library('MailLib');
+
+ // Load helpers
+ $this->load->helper('hlp_sancho_helper');
+
+ // Start Log Message
+ $this->logInfo('Mail updated Zeitwuensche started.');
+
+ // Get all lectors, who updated their Zeitwunsch today
+ $db = new DB_Model();
+ $result = $db->execReadOnlyQuery('
+ SELECT mitarbeiter_uid, von, bis
+ FROM campus.tbl_zeitwunsch_gueltigkeit
+ WHERE updateamum::date = NOW()::date
+ -- dont get updated, if they were also inserted today
+ AND insertamum::date != NOW()::date
+ ');
+
+ if (!hasData($result))
+ {
+ return; // No updated Zeitwuensche today
+ }
+
+ $uidByStg_arr = array(); // Mail data for Studiengang
+ $uidByOe_arr = array(); // Mail data for Kompetenzfeld
+
+ // Loop through lectors, who updated their Zeitwunsch today
+ $zwg_arr = getData($result);
+ foreach ($zwg_arr as $zwg)
+ {
+ $next = $this->StudiensemesterModel->getNext();
+
+ // Get Studiensemester concerend by Zeitwunschgueltigkeit
+ // If Zeitwunschgueltigkeit Ende is null, get only till next Studiensemester, as LVs will be only
+ // assigned for actual or next Studiensemester
+ $result = $this->StudiensemesterModel->getByDate(
+ $zwg->von,
+ is_null($zwg->bis) ? $next->retval[0]->ende : $zwg->bis
+ );
+ $studiensemester_arr = getData($result);
+
+ // Get Stundenplan entries of lector of Studiensemester concerned by Zeitwunschgueltigkeit
+ $result = $this->StundenplandevModel
+ ->getStundenplanData(
+ null,
+ implode(array_column($studiensemester_arr, 'studiensemester_kurzbz'), ', '),
+ null,
+ $zwg->mitarbeiter_uid,
+ null,
+ true //...but only from now on
+ );
+
+ if (!hasData($result))
+ {
+ continue; // Continue if lector has no Stundenplan entries
+ }
+
+ // Loop through Stundenplan entries
+ $stundenplanData_arr = getData($result);
+ foreach ($stundenplanData_arr as $stundenplanData)
+ {
+ // Get LE of Stundenplan entry
+ $result = $this->LehreinheitModel->load($stundenplanData->lehreinheit_id);
+
+ if (!hasData($result))
+ {
+ // Return log error msg if no LE found and continue
+ $this->logError('
+ LVPlanJob / mailUpdatedZeitwuensche did not find Lehreinheit for '. $zwg->mitarbeiter_uid
+ );
+ continue;
+ }
+
+ $le = getData($result)[0];
+
+ // GET LV by LE of Stundenplan entry
+ $result = $this->LehrveranstaltungModel->load($le->lehrveranstaltung_id);
+
+ if (!hasData($result))
+ {
+ // Return log error msg if no LV found and continue
+ $this->logError('
+ LVPlanJob / mailUpdatedZeitwuensche did not find Lehrveranstaltung for '. $zwg->mitarbeiter_uid
+ );
+ continue;
+ }
+
+ $lv = getData($result)[0];
+
+ // Build unique Studiengang array
+ if (!array_key_exists($lv->studiengang_kz, $uidByStg_arr))
+ {
+ $uidByStg_arr[$lv->studiengang_kz] = array($zwg->mitarbeiter_uid);
+
+ }
+ else
+ {
+ // Add unique lector array to Studiengang array
+ if (!in_array($zwg->mitarbeiter_uid, $uidByStg_arr[$lv->studiengang_kz]))
+ {
+ $uidByStg_arr[$lv->studiengang_kz][]= $zwg->mitarbeiter_uid;
+ }
+ }
+
+ // Build unique Kompetenzfeld array
+ if (!array_key_exists($lv->oe_kurzbz, $uidByOe_arr))
+ {
+ $uidByOe_arr[$lv->oe_kurzbz] = array($zwg->mitarbeiter_uid);
+
+ }
+ else
+ {
+ // Add unique lector array to Kompetenzfeld array
+ if (!in_array($zwg->mitarbeiter_uid, $uidByOe_arr[$lv->oe_kurzbz]))
+ {
+ $uidByOe_arr[$lv->oe_kurzbz][]= $zwg->mitarbeiter_uid;
+ }
+ }
+ }
+ }
+
+ // Send mail to STG Assistenz
+ $result = $this->_sendMailToStg($uidByStg_arr);
+ if (isError($result))
+ {
+ $this->logError(getError($result));
+ }
+
+ // Send mail to Kompetenzfeld Leitung
+ $result = $this->_sendMailToKF($uidByOe_arr);
+ if (isError($result))
+ {
+ $this->logError(getError($result));
+ }
+
+ // Send mail to LV Planung
+ $result = $this->_sendMailToLvPlanung($zwg_arr);
+ if (isError($result))
+ {
+ $this->logError(getError($result));
+ }
+
+ // End Log Message
+ $this->logInfo('Mail updated Zeitwuensche ended.');
+ }
+
+ /**
+ * Send Mail to STGL Assistance about lectors, who teach LV assigend to the STG, and who updated Zeitwuensche.
+ *
+ * @param $data_arr
+ * @param $stg_bezeichnung
+ */
+ private function _sendMailToStg($data_arr)
+ {
+ foreach ($data_arr as $stg_kurzbz => $uid_arr)
+ {
+ // Get STG eMail
+ $this->load->model('organisation/Studiengang_model', 'StudiengangModel');
+ $result = $this->StudiengangModel->load($stg_kurzbz);
+ $stgMail = $result->retval[0]->email;
+
+ $lektorenTabelle = '
+
+
+ | Name |
+ UID |
+
+
+ ';
+
+ foreach($uid_arr as $uid)
+ {
+ $person = $this->PersonModel->getByUid($uid);
+ $lektorenTabelle.= '
+
+ | '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. ' |
+ ['. $uid. '] |
+
+ ';
+ }
+
+ $lektorenTabelle.= '
';
+
+ $contentData_arr = array(
+ 'datentabelle' => $lektorenTabelle
+ );
+
+ // Send mail
+ if (!sendSanchoMail(
+ 'ZeitwunschUpdateMail',
+ $contentData_arr,
+ $stgMail,
+ 'Änderung von Zeitwünschen',
+ 'sancho_header_min_bw.jpg',
+ 'sancho_footer_min_bw.jpg'
+ ))
+ {
+ $errorReceiverUid_arr[]= $stgMail;
+ }
+ }
+
+ if (isset($errorReceiverUid_arr))
+ {
+ return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ','));
+ }
+
+ return success();
+ }
+
+ /**
+ * Send Mail to Kompetenzfeld about lectors, who teach LV assigend to the Kompetenzfeld, and who updated Zeitwuensche.
+ *
+ * @param $data_arr
+ * @param $stg_bezeichnung
+ */
+ private function _sendMailToKF($data_arr)
+ {
+ // Send mail to Komepetenzfeld Leitung
+ foreach ($data_arr as $oe_kurzbz => $uid_arr)
+ {
+ // Get KF Leitung eMail
+ $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
+ $result = $this->BenutzerfunktionModel->loadWhere(array(
+ 'funktion_kurzbz' => 'Leitung',
+ 'oe_kurzbz' => $oe_kurzbz
+ ));
+ $kfMail = $result->retval[0]->uid. '@'. DOMAIN;
+
+ $lektorenTabelle = '
+
+
+ | Name |
+ UID |
+
+
+ ';
+
+ foreach($uid_arr as $uid)
+ {
+ $person = $this->PersonModel->getByUid($uid);
+ $lektorenTabelle.= '
+
+ | '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. ' |
+ ['. $uid. '] |
+
+ ';
+ }
+
+ $lektorenTabelle.= '
';
+
+ $contentData_arr = array(
+ 'datentabelle' => $lektorenTabelle
+ );
+
+ // Send mail
+ if (!sendSanchoMail(
+ 'ZeitwunschUpdateMail',
+ $contentData_arr,
+ $kfMail,
+ 'Änderung von Zeitwünschen',
+ 'sancho_header_min_bw.jpg',
+ 'sancho_footer_min_bw.jpg'
+ ))
+ {
+ $errorReceiverUid_arr[]= $kfMail;
+ }
+ }
+
+ if (isset($errorReceiverUid_arr))
+ {
+ return error('Mail updated Zeitwuensche could not be sent to :'. implode($errorReceiverUid_arr, ','));
+ }
+
+ return success();
+ }
+
+ /**
+ * Send Mail to LV Planung about all lectors who updated Zeitwuensche.
+ *
+ * @param $data_arr
+ * @param $stg_bezeichnung
+ */
+ private function _sendMailToLvPlanung($data_arr)
+ {
+ $lektorenTabelle = '
+
+
+ | Name |
+ UID |
+
+
+ ';
+
+ foreach($data_arr as $lector)
+ {
+ $person = $this->PersonModel->getByUid($lector->mitarbeiter_uid);
+ $lektorenTabelle.= '
+
+ | '. getData($person)[0]->vorname. ' '. getData($person)[0]->nachname. ' |
+ ['. $lector->mitarbeiter_uid. '] |
+
+ ';
+ }
+
+ $lektorenTabelle.= '
';
+
+ $contentData_arr = array(
+ 'datentabelle' => $lektorenTabelle
+ );
+
+ // Send mail
+ if (!sendSanchoMail(
+ 'ZeitwunschUpdateMail',
+ $contentData_arr,
+ MAIL_LVPLAN,
+ 'Änderung von Zeitwünschen',
+ 'sancho_header_min_bw.jpg',
+ 'sancho_footer_min_bw.jpg'
+ ))
+ {
+ $errorReceiver = MAIL_LVPLAN;
+ }
+
+ if (isset($errorReceiver))
+ {
+ return error('Mail updated Zeitwuensche could not be sent to :'. $errorReceiver);
+ }
+
+ return success();
+ }
}