diff --git a/application/config/projektarbeit.php b/application/config/projektarbeit.php new file mode 100644 index 000000000..1ca776cf8 --- /dev/null +++ b/application/config/projektarbeit.php @@ -0,0 +1,9 @@ +load->config('projektarbeit'); + // Load SanchoHelper $this->load->helper('hlp_sancho_helper'); //Load Models - //$this->load->model('education/Betreuerart_model', 'BetreuerartModel'); - $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); $this->load->model('education/Paabgabe_model', 'PaabgabeModel'); + $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); $this->load->model('education/Projektbetreuer_model', 'ProjektbetreuerModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - - //Load Library - $this->load->library('VorlageLib'); } - public function handleMissedAbgaben() + public function handleProjektarbeitenNotUploadedInTime() { + $startDate = $this->config->item('projektarbeitjob_start'); + if ($startDate) + $startDate = new DateTime($startDate); + $mailArray = array(); $countMissedAbgaben = 0; $countTotal = 0; $countMails = 0; $nl = "\n"; - echo "----------------- Test Cronjob cis/cronjobs/handleMissedAbgabenBachelorMaster.php ------------------"; - echo $nl; - //get all missed Projektarbeiten - $result = $this->ProjektarbeitModel->getMissedProjektarbeiten(); - /* if(isError($result)) - return $this->logError(getError($result)); + $this->logInfo('Start Job Projektarbeit'); - if(!hasData($result)) - return $this->logInfo('End Job Projektarbeit Update: 0 Mails sent'); - */ + //get all Projektarbeiten not Uploaded in Time + $result = $this->ProjektarbeitModel->getAllProjektarbeitenNotUploadedInTime($startDate->format('c')); if (isError($result)) - echo $nl . $result; - - if (!hasData($result)) { - echo $nl . 'End Job Projektarbeit Update: 0 Mails sent'; - return; - } + return $this->logError(getError($result)); + if (!hasData($result)) + return $this->logInfo('End Job Projektarbeit Update: 0 Mails sent'); $projektarbeiten = getData($result); - //var_dump($projektarbeiten); - - //note auf 7 setzen - foreach ($projektarbeiten as $projekt) { + // (1) note auf 7 setzen + foreach ($projektarbeiten as $projekt) + { $this->db->where('projektarbeit_id', $projekt->projektarbeit_id); $result = $this->ProjektarbeitModel->update([ @@ -82,48 +75,47 @@ class ProjektarbeitJob extends JOB_Controller ]); if (isError($result)) - echo "error: " . getError($result); - else - echo $nl . "------" . $nl . " erfolgreiches update von projektarbeit_id " . $projekt->projektarbeit_id . " :" . $projekt->titel; + $this->logError(getError($result)); - //copy Projektarbeit + // (2) copy Projektarbeit $result = $this->ProjektarbeitModel->load($projekt->projektarbeit_id); if (isError($result)) { - echo "error: " . getError($result); + $this->logError(getError($result)); continue; } if (!hasData($result)) { - echo $nl . 'Keine Projektarbeit für projektarbeit_id ' . $projekt->projektarbeit_id . 'gefunden'; + $this->logInfo('Keine Projektarbeit für projektarbeit_id ' . $projekt->projektarbeit_id . 'gefunden'); continue; } - $projektarbeit = getData($result)[0]; - //var_dump($projektarbeit); + $projektarbeit = current(getData($result)); - $result = $this->ProjektarbeitModel->insert([ + $now = new Datetime(); + + $this->ProjektarbeitModel->insert([ 'projekttyp_kurzbz' => $projektarbeit->projekttyp_kurzbz, 'titel' => $projektarbeit->titel, - 'insertvon' => 'Projektjob', - 'note' => NULL, + 'note' => null, 'lehreinheit_id' => $projektarbeit->lehreinheit_id, 'student_uid' => $projektarbeit->student_uid, 'firma_id' => $projektarbeit->firma_id, - 'punkte' => $projektarbeit->punkte, //TODO(manu) ebenfalls null? - 'beginn' => NULL, - 'ende' => NULL, + 'punkte' => null, //TODO(manu) oder $projektarbeit->punkte + 'beginn' => null, + 'ende' => null, 'faktor' => $projektarbeit->faktor, - 'freigegeben' => $projektarbeit->freigegeben, + 'freigegeben' => $projektarbeit->freigegeben, //TODO(manu) besser FALSE? 'gesperrtbis' => $projektarbeit->gesperrtbis, 'stundensatz' => $projektarbeit->stundensatz, 'themenbereich' => $projektarbeit->themenbereich, 'anmerkung' => $projektarbeit->anmerkung, - 'updateamum' => NULL, - 'updatevon' => NULL, - 'insertamum' => $projektarbeit->insertamum, //TODO(manu) besser aktueller timestamp? + 'updateamum' => null, + 'updatevon' => null, + 'insertamum' => $now->format('c'), + 'insertvon' => 'Projektjob', 'ext_id' => $projektarbeit->ext_id, - 'gesamtstunden' => NULL, //TODO(manu) oder übernehmen? + 'gesamtstunden' => null, //TODO(manu) oder $projektarbeit->gesamtstunden? 'titel_english' => $projektarbeit->titel_english, - 'sprache' => $projektarbeit->seitenanzahl, - 'abgabedatum' => $projektarbeit->abgabedatum, + 'sprache' => $projektarbeit->sprache, + 'abgabedatum' => null, //TODO(manu) oder $projektarbeit->abgabedatum 'kontrollschlagwoerter' => $projektarbeit->kontrollschlagwoerter, 'schlagwoerter' => $projektarbeit->schlagwoerter, 'schlagwoerter_en' => $projektarbeit->schlagwoerter_en, @@ -131,121 +123,117 @@ class ProjektarbeitJob extends JOB_Controller 'abstract_en' => $projektarbeit->abstract_en, 'final' => $projektarbeit->final, ]); - if (isError($result)) - echo "error: " . getError($result); + $this->db->order_by("projektarbeit_id", "desc"); //TODO(manu) Cronjob soll weiterlaufen, continue? $result = $this->ProjektarbeitModel->loadWhere([ 'student_uid' => $projektarbeit->student_uid, 'insertvon' => 'Projektjob', - 'note' => NULL + 'note' => null ]); if (isError($result)) - //$this->logError(getError($result)); - echo "error: " . getError($result); - elseif (!hasData($result)) { - echo $nl . 'Keine neu angelegte projektarbeit_id für StudentId' . $projektarbeit->student_uid . 'gefunden'; + { + $this->logError(getError($result)); + continue; + } + elseif (!hasData($result)) + { + $this->logInfo('Keine neu angelegte projektarbeit_id für StudentId' . $projektarbeit->student_uid . 'gefunden'); + continue; } else { - $projektarbeit_copy = getData($result)[0]; - //var_dump($projektarbeit_copy); + $projektarbeit_copy = current(getData($result)); $projekt_id_copy = $projektarbeit_copy->projektarbeit_id; - echo $nl . "Projektarbeit alt " . $projekt->projektarbeit_id . " Projektarbeit neu: " . $projekt_id_copy; - echo $nl . "Studiengang_kz" . $projekt->studiengang_kz; - //Mail array - if (!isset ($mailArray[$projekt->studiengang_kz])) { + //Start Mailarray + if (!isset($mailArray[$projekt->studiengang_kz])) + { $mailArray[$projekt->studiengang_kz] = $countMissedAbgaben; } $mailArray[$projekt->studiengang_kz] = $mailArray[$projekt->studiengang_kz] + 1; - - } - //Betreuungen kopieren - //get bestehende Betreuungen + // (3)Betreuungen kopieren $result = $this->ProjektbetreuerModel->loadWhere([ - 'projektarbeit_id' => $projekt->projektarbeit_id, - //'betreuerart_kurzbz' => $projekt->betreuerart_kurzbz + 'projektarbeit_id' => $projekt->projektarbeit_id ]); if (isError($result)) - //$this->logError(getError($result)); - echo "error: " . getError($result); - elseif (!hasData($result)) { - echo $nl . 'Keine Betreuung für' . $projekt->projektarbeit_id . 'gefunden'; - } else { + $this->logError(getError($result)); + + elseif (!hasData($result)) + { + $this->logInfo('Keine Betreuung für' . $projekt->projektarbeit_id . 'gefunden'); + } + else + { $betreuung = getData($result); - //var_dump($betreuung); foreach ($betreuung as $bet) { - echo $nl . $bet->person_id . " P_ID ALT: " . $nl . $bet->projektarbeit_id . "P_ID NEU" . $projekt_id_copy . $nl . " Art: " . $bet->betreuerart_kurzbz; + $now = new Datetime(); $result = $this->ProjektbetreuerModel->insert([ 'person_id' => $bet->person_id, 'projektarbeit_id' => $projekt_id_copy, - 'note' => NULL, + 'note' => null, 'faktor' => $bet->faktor, 'name' => $bet->name, 'punkte' => $bet->punkte, 'stundensatz' => $bet->stundensatz, - 'updateamum' => $bet->updateamum, - //TODO insertamum, updateam, updatevon ? Projektjob und aktueller Timestamp - 'updatevon' => $bet->updatevon, - 'insertamum' => $bet->insertamum, + 'updateamum' => null, + 'updatevon' => null, + 'insertamum' => $now->format('c'), 'insertvon' => 'Projektjob', 'ext_id' => $bet->ext_id, 'betreuerart_kurzbz' => $bet->betreuerart_kurzbz, - 'stunden' => NULL, - 'vertrag_id' => NULL, //TODO oder besser vertrag_id - 'zugangstoken' => $bet->zugangstoken, - 'zugangstoken_gueltigbis' => $bet->zugangstoken_gueltigbis + 'stunden' => null, + 'vertrag_id' => null, + 'zugangstoken' => null, //TODO(manu) sonst insertfehler DB: 1 datensatz 34195 + 'zugangstoken_gueltigbis' => null //TODO analog zu token ]); if (isError($result)) - echo "error: " . getError($result); - else - echo $nl . "neue Betreuung für person_id " . $bet->person_id . ' und projektarbeit_id ' . $projekt_id_copy . ' angelegt'; - + { + $this->logError(getError($result)); + } + // else + // echo $nl . "neue Betreuung für person_id " . $bet->person_id . ' und projektarbeit_id ' . $projekt_id_copy . ' angelegt'; } - - //var_dump($projektarbeit_copy); - //$projekt_id_copy = $projektarbeit_copy->projektarbeit_id; - //echo "Projektarbeit alt " . $projekt->projektarbeit_id . " Projektarbeit neu: " . $projekt_id_copy; } - } - //Sancho Mail - var_dump($mailArray); - - - echo $nl . "Arraytest: " . $nl; - foreach ($mailArray as $key => $item){ - + //(4)Sancho Mail + foreach ($mailArray as $stg_kz => $anzahlMissedAbgaben) + { $result = $this->StudiengangModel->loadWhere([ - 'studiengang_kz' => $key + 'studiengang_kz' => $stg_kz ]); if (isError($result)) - //$this->logError(getError($result)); - echo "error: " . getError($result); - elseif (!hasData($result)) { - echo $nl . 'Kein Studiengang für' . $key . 'gefunden'; + $this->logError(getError($result)); + elseif (!hasData($result)) + { + $this->logInfo('Kein Studiengang für' . $stg_kz . 'gefunden'); } else { $studiengang = current(getData($result)); - //var_dump($studiengang); $email = $studiengang->email; - $countTotal = $countTotal + $item; + $betreff = 'Versäumte Abgabe(n) Projektarbeiten / Project Work(s) not uploaded in time'; - echo $nl . "Mail an Studiengang " . $key . " , Anzahl missed PAs: " . $item . " email: " . $studiengang->email. $nl; + //TODO(manu) link basisurl? + $data = [ + 'anzahlMissedAbgaben' => $anzahlMissedAbgaben, + 'link' => 'https://vilesci.technikum-wien.at/vilesci/lehre/abgabe_assistenz_frameset.php?stg_kz=' . $stg_kz + ]; - $countMails++; + $countTotal = $countTotal + $anzahlMissedAbgaben; + + //send mail + if (sendSanchoMail('Sancho_Mail_Stgl_MissedAbgaben', $data, $email, $betreff)) { + //echo $nl . "Mail an Studiengang " . $stg_kz . " , Anzahl missed PAs: " . $anzahlMissedAbgaben . " email: " . $studiengang->email . $nl; + $countMails++; + } } } - - - echo $nl . 'End Job Projektarbeit: ' . $countTotal . ' Missed Abgaben Total, ' . $countMails . ' verschickte Mails: ' . $nl; + $this->logInfo($countTotal . ' projektarbeiten not uploaded in time, ' . $countMails . ' sent mails.'); + $this->logInfo('End Job Projektarbeit'); + echo $nl . 'End Job Projektarbeit: ' . $countTotal . ' projektarbeiten not uploaded in time, ' . $countMails . ' sent mails. ' . $nl; } - - - } diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index aeb9e553e..b9a10ab55 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -72,53 +72,46 @@ class Projektarbeit_model extends DB_Model return $this->execQuery($qry, $params); } - public function getMissedProjektarbeiten() + /** + * Gets all Projektarbeiten not uploaded in Time + * @param String $startDate project works before this date will be ignored (in Dateformat: 'YYYY'-'mm'-'dd') + * @return object + */ + public function getAllProjektarbeitenNotUploadedInTime($startDate = null) { - //TODO(MANU) check values - $allowedProjekttypes = array(); - $allowedProjekttypes[] = 'Bachelor'; - $allowedProjekttypes[] = 'Diplom'; - - $selectedStg = [331, 328]; - + $allowedProjekttypes = ['Bachelor', 'Diplom']; $now = new DateTime(); + $this->db->distinct(); $this->addSelect($this->dbTable.'.projektarbeit_id'); $this->addSelect($this->dbTable.'.titel'); $this->addSelect($this->dbTable.'.student_uid'); $this->addSelect($this->dbTable.'.note'); - $this->addSelect($this->dbTable.'.seitenanzahl'); $this->addSelect('p' . '.person_id'); $this->addSelect('le' . '.lehreinheit_id'); $this->addSelect('sg' . '.studiengang_kz'); - $this->addJoin('campus.tbl_paabgabe pa','projektarbeit_id'); - $this->addJoin('public.tbl_benutzer ben','ben.uid = tbl_projektarbeit.student_uid'); - $this->addJoin('public.tbl_person p', 'person_id', 'LEFT'); + $this->addJoin('campus.tbl_paabgabe pa', 'projektarbeit_id'); + $this->addJoin('lehre.tbl_projektbetreuer pb', 'projektarbeit_id'); + $this->addJoin('public.tbl_benutzer ben', 'ben.uid = tbl_projektarbeit.student_uid'); + $this->addJoin('public.tbl_person p', 'p.person_id = ben.person_id', 'LEFT'); $this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id', 'LEFT'); $this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id', 'LEFT'); $this->addJoin('public.tbl_studiengang sg', 'studiengang_kz', 'LEFT'); - $this->db->where('pa.paabgabetyp_kurzbz', 'end'); $this->db->where_in($this->dbTable. '.projekttyp_kurzbz', $allowedProjekttypes); - //TODO(MANU) Config date - $this->db->where('pa.datum >', '2022-09-01'); - $this->db->where('pa.abgabedatum', NULL); + if($startDate) + $this->db->where('pa.datum >', $startDate); - //TODO(MANU) get date with NOW - $this->db->where('pa.datum < ', '2023-10-10'); - - //TODO(MANU) check if note null: ausreichend? - $this->db->where($this->dbTable. '.note', NULL); - - $this->db->where_in('sg.studiengang_kz', $selectedStg); - - //$this->addLimit(3); //for testing + $this->db->where($this->dbTable. '.note', null); //TODO(MANU) check if note null: ausreichend? return $this->loadWhere([ - 'pa.fixtermin' => 'TRUE' + 'pa.fixtermin' => 'true', + 'pa.paabgabetyp_kurzbz' => 'end', + 'pa.abgabedatum' => null, + 'pa.datum < ' => $now->format('c'), + 'pb.betreuerart_kurzbz' => 'Erstbegutachter' ]); - } }