Mailversand und Logeinträge

This commit is contained in:
ma0068
2023-10-11 16:21:09 +02:00
parent 66af9531b7
commit 4a56d45a07
3 changed files with 130 additions and 140 deletions
+9
View File
@@ -0,0 +1,9 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* before this date projektarbeiten failed do upload in time will be ignored
* @var string string formated as Date
*/
$config['projektarbeitjob_start'] = '2022-09-01';
+101 -113
View File
@@ -10,7 +10,7 @@
* @since Version 3.2
* @filesource
*
* Cronjob to be run for missed Abgabe Bachelor and Master Arbeiten
* Cronjob to be run for Bachelor and Master Arbeiten failed to be uploaded in time
*
* Actions:
* (1) missed endupload projektarbeit: grade projektarbeit with grade 7 (Nicht beurteilt)
@@ -27,52 +27,45 @@ class ProjektarbeitJob extends JOB_Controller
{
parent::__construct();
// Config
$this->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;
}
}
@@ -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'
]);
}
}