mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
Merge branch 'master' into feature-18571/EntwicklungsteamBisMeldung
This commit is contained in:
@@ -283,10 +283,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
||||
'fehlerzustaendigkeiten' => array(
|
||||
'link' => site_url('system/issues/IssuesZustaendigkeiten'),
|
||||
'description' => 'Fehler Zuständigkeiten',
|
||||
'icon' => 'cogs',
|
||||
'icon' => 'users',
|
||||
'sort' => 100,
|
||||
'target' => '_blank',
|
||||
'requiredPermissions' => array('admin:rw')
|
||||
)
|
||||
),
|
||||
'fehlerkonfiguration' => array(
|
||||
'link' => site_url('system/issues/IssuesKonfiguration'),
|
||||
'description' => 'Fehler Konfiguration',
|
||||
'icon' => 'cogs',
|
||||
'sort' => 200,
|
||||
'target' => '_blank',
|
||||
'requiredPermissions' => array('admin:rw')
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@ class SearchBar extends FHC_Controller
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Loads the AuthLib and starts the authentication
|
||||
$this->load->library('AuthLib');
|
||||
|
||||
// Load the library SearchBarLib
|
||||
$this->load->library('SearchBarLib');
|
||||
}
|
||||
|
||||
@@ -37,6 +37,9 @@ class AnrechnungJob extends JOB_Controller
|
||||
$this->load->helper('hlp_sancho_helper');
|
||||
|
||||
$this->load->library('AnrechnungLib');
|
||||
|
||||
// Load configs
|
||||
$this->load->config('anrechnung');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -213,7 +216,7 @@ class AnrechnungJob extends JOB_Controller
|
||||
'datentabelle' => $anrechnungen_table,
|
||||
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
|
||||
);
|
||||
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'AnrechnungAntragStellen',
|
||||
@@ -227,6 +230,82 @@ class AnrechnungJob extends JOB_Controller
|
||||
$this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.');
|
||||
}
|
||||
|
||||
// Send Sancho mail to LV-Leitung (fallback Lectors) that were requested for recommendation yesterday.
|
||||
public function sendMailRecommendationRequests(){
|
||||
|
||||
$this->logInfo('Start AnrechnungJob sendMailRecommendationRequests to inform lecturers about yesterdays requests for recommendation.');
|
||||
|
||||
// Get Anrechnungen, für die gestern eine Empfehlung angefragt worden ist
|
||||
$this->AnrechnungModel->addSelect('astat.anrechnung_id, astat.datum, astat.insertamum');
|
||||
$this->AnrechnungModel->addDistinct('astat.anrechnung_id');
|
||||
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus astat', 'anrechnung_id');
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere('
|
||||
studiensemester_kurzbz = (SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
|
||||
AND genehmigt_von IS NULL
|
||||
AND empfehlung_anrechnung IS NULL
|
||||
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
|
||||
AND NOW()::date = (astat.datum + interval \'1 day\') -- nur gestrige Empfehlungsanfrage
|
||||
ORDER BY astat.anrechnung_id, astat.datum DESC, astat.insertamum DESC -- nur letzten status dabei prüfen
|
||||
');
|
||||
|
||||
// Exit, wenn es gestern keine Empfehlungsanfragen gab
|
||||
if (!hasData($result))
|
||||
{
|
||||
$this->logInfo('End AnrechnungJob sendMailRecommendationRequests, because no recommendations were requested yesterday.');
|
||||
exit;
|
||||
}
|
||||
|
||||
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
|
||||
|
||||
$arr_lvLector_arr = array();
|
||||
foreach ($anrechnung_id_arr as $anrechnung_id)
|
||||
{
|
||||
// Get full name of Fachbereichsleitung or LV Leitung.
|
||||
if($this->config->item('fbl') === TRUE)
|
||||
{
|
||||
$arr_lvLector_arr[] = $this->anrechnunglib->getLeitungOfLvOe($anrechnung_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$arr_lvLector_arr[] = $this->anrechnunglib->getLectors($anrechnung_id); // Returns LV Leitung. If not present, then all lectors of LV.
|
||||
}
|
||||
}
|
||||
|
||||
// Unique lector array to send only one mail per lector
|
||||
$arr_lvLector_arr = array_unique($arr_lvLector_arr, SORT_REGULAR);
|
||||
|
||||
// Link to 'Anrechnungen prüfen' dashboard
|
||||
$url =
|
||||
CIS_ROOT. 'cis/index.php?menu='.
|
||||
CIS_ROOT. 'cis/menu.php?content_id=&content='.
|
||||
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
|
||||
|
||||
foreach ($arr_lvLector_arr as $lvLector_arr)
|
||||
{
|
||||
foreach ($lvLector_arr as $lector)
|
||||
{
|
||||
// Prepare mail content
|
||||
$fields = array(
|
||||
'vorname' => $lector->vorname,
|
||||
'stgl_name' => 'Die Studiengangsleitung',
|
||||
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
|
||||
);
|
||||
|
||||
// Send mail
|
||||
sendSanchoMail(
|
||||
'AnrechnungEmpfehlungAnfordern',
|
||||
$fields,
|
||||
$lector->uid. '@'. DOMAIN,
|
||||
'Deine Empfehlung wird benötigt zur Anerkennung nachgewiesener Kenntnisse'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo('SUCCEDED AnrechnungJob sendMailRecommendationRequests');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Send Sancho mail to students, whose Anrechnungen were approved 24 hours ago.
|
||||
*/
|
||||
@@ -308,7 +387,7 @@ class AnrechnungJob extends JOB_Controller
|
||||
|
||||
$db = new DB_Model();
|
||||
$result = $db->execReadOnlyQuery($qry);
|
||||
|
||||
|
||||
// Exit if there are no rejected Anrechnungen
|
||||
if (!hasData($result))
|
||||
{
|
||||
@@ -361,9 +440,9 @@ html;
|
||||
|
||||
$result = $this->AnrechnungModel->loadWhere('
|
||||
studiensemester_kurzbz = (
|
||||
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
|
||||
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende
|
||||
)
|
||||
AND genehmigt_von IS NULL
|
||||
AND genehmigt_von IS NULL
|
||||
AND empfehlung_anrechnung IS NULL
|
||||
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
|
||||
AND NOW()::date = (astat.datum + interval \'1 week\') -- eine Woche nach Empfehlungsanfrage
|
||||
@@ -376,7 +455,7 @@ html;
|
||||
$this->logInfo('End AnrechnungJob sendMailRemindRecommendation, because no recommendations to be done.');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
|
||||
|
||||
$arr_lvLector_arr = array();
|
||||
@@ -435,7 +514,7 @@ html;
|
||||
'vorname' => $stgl->vorname
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return $stglMailAdress_arr;
|
||||
}
|
||||
// If not available, get assistance mail address
|
||||
|
||||
@@ -1,16 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Job for producing Plausicheck issues
|
||||
* Job for producing core Plausicheck issues
|
||||
*/
|
||||
class PlausiIssueProducer extends JOB_Controller
|
||||
class PlausiIssueProducer extends PlausiIssueProducer_Controller
|
||||
{
|
||||
private $_currentStudiensemester;
|
||||
protected $_app = 'core';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->load->library('issues/PlausicheckProducerLib');
|
||||
$this->load->library('IssuesLib');
|
||||
$this->load->library('issues/PlausicheckDefinitionLib');
|
||||
|
||||
// load models
|
||||
$this->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// get current Studiensemester
|
||||
$studiensemesterRes = $this->StudiensemesterModel->getAkt();
|
||||
if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
|
||||
// set fehler which can be produced by the job
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
$this->_fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,43 +33,10 @@ class PlausiIssueProducer extends JOB_Controller
|
||||
*/
|
||||
public function run($studiensemester_kurzbz = null, $studiengang_kz = null)
|
||||
{
|
||||
$fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
// get Studiensemester
|
||||
if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job started");
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($fehlerKurzbz as $fehler_kurzbz)
|
||||
{
|
||||
// execute the check
|
||||
$this->logInfo("Checking " . $fehler_kurzbz . "...");
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
|
||||
|
||||
if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
|
||||
|
||||
if (hasData($plausicheckRes))
|
||||
{
|
||||
$plausicheckData = getData($plausicheckRes);
|
||||
|
||||
foreach ($plausicheckData as $plausiData)
|
||||
{
|
||||
// get the data needed for issue production
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// write the issue
|
||||
$addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isError($addIssueRes))
|
||||
$this->logError(getError($addIssueRes));
|
||||
elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
|
||||
$this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job stopped");
|
||||
// producing issues for semester and optionally Studiengang
|
||||
$this->producePlausicheckIssues(array('studiensemester_kurzbz' => $studiensemester_kurzbz, 'studiengang_kz' => $studiengang_kz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class ReihungstestJob extends JOB_Controller
|
||||
{
|
||||
|
||||
const LAST_DAYS_PRESTUDENTSTATUS = 5;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -826,7 +829,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
AND tbl_studiengang.typ IN ('b', 'm')
|
||||
)
|
||||
SELECT * FROM prst
|
||||
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - 1)
|
||||
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - ". self::LAST_DAYS_PRESTUDENTSTATUS .")
|
||||
AND (studiengang_typ = 'b' OR (studiengang_typ = 'm' AND EXISTS (SELECT 1 /* Master Studiengänge berücksichtigen wenn auch Bachelor im gleichen Semester */
|
||||
FROM prst prstb
|
||||
WHERE studiengang_typ = 'b'
|
||||
@@ -868,7 +871,8 @@ class ReihungstestJob extends JOB_Controller
|
||||
tbl_person.nachname,
|
||||
tbl_person.vorname,
|
||||
tbl_prestudent.*,
|
||||
tbl_studiengang.typ AS studiengang_typ
|
||||
tbl_studiengang.typ AS studiengang_typ,
|
||||
tbl_prestudentstatus.datum
|
||||
FROM PUBLIC.tbl_person
|
||||
JOIN PUBLIC.tbl_prestudent USING (person_id)
|
||||
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
|
||||
@@ -901,7 +905,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
elseif ($rowNiedrPrios->laststatus == 'Bewerber')
|
||||
elseif ($rowNiedrPrios->laststatus == 'Bewerber' && $row_ps->prestudenstatus_datum > $rowNiedrPrios->datum)
|
||||
{
|
||||
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
|
||||
$lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id);
|
||||
@@ -927,7 +931,7 @@ class ReihungstestJob extends JOB_Controller
|
||||
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
|
||||
}
|
||||
}
|
||||
elseif ($rowNiedrPrios->laststatus == 'Wartender')
|
||||
elseif ($rowNiedrPrios->laststatus == 'Wartender' && $row_ps->prestudenstatus_datum > $rowNiedrPrios->datum)
|
||||
{
|
||||
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
|
||||
// Mail zur Info an Assistenz schicken
|
||||
|
||||
@@ -242,7 +242,7 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
$empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
|
||||
|
||||
// Request Recommendation
|
||||
if($this->anrechnunglib->requestRecommendation($anrechnung_id))
|
||||
if ($this->anrechnunglib->requestRecommendation($anrechnung_id))
|
||||
{
|
||||
$retval[]= array(
|
||||
'anrechnung_id' => $anrechnung_id,
|
||||
@@ -254,31 +254,23 @@ class approveAnrechnungDetail extends Auth_Controller
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send mails to lectors
|
||||
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
|
||||
* even if they are required for more recommendations
|
||||
* */
|
||||
if (!isEmptyArray($retval))
|
||||
{
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
$this->_sendSanchoMailToLectors($anrechnung_id);
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
return $this->outputJsonSuccess($retval);
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
if ($empfehlungsanfrage_an == '')
|
||||
{
|
||||
$this->terminateWithJsonError(
|
||||
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
|
||||
);
|
||||
}
|
||||
|
||||
if (isEmptyArray($retval))
|
||||
{
|
||||
$this->terminateWithJsonError(
|
||||
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
|
||||
);
|
||||
$this->terminateWithJsonError("Empfehlung wurde nicht angefordert");
|
||||
}
|
||||
|
||||
$this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
|
||||
else
|
||||
{
|
||||
// Output json to ajax
|
||||
return $this->outputJsonSuccess($retval);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -249,19 +249,6 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send mails
|
||||
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
|
||||
* even if they are required for more recommendations
|
||||
* */
|
||||
if (!isEmptyArray($retval))
|
||||
{
|
||||
if ($this->config->item('send_mail') === TRUE)
|
||||
{
|
||||
$this->_sendSanchoMail($retval);
|
||||
}
|
||||
}
|
||||
|
||||
// Output json to ajax
|
||||
if (isEmptyArray($retval))
|
||||
{
|
||||
@@ -273,7 +260,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
|
||||
$this->terminateWithJsonError('Es wurden keine Empfehlungen angefordert');
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($retval);
|
||||
$this->outputJsonSuccess($retval);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -111,6 +111,8 @@ class requestAnrechnung extends Auth_Controller
|
||||
$lehrveranstaltung_id = $this->input->post('lv_id');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester');
|
||||
$bestaetigung = $this->input->post('bestaetigung');
|
||||
$begruendung_ects = $this->input->post('begruendung_ects');
|
||||
$begruendung_lvinhalt = $this->input->post('begruendung_lvinhalt');
|
||||
|
||||
// Validate data
|
||||
if (empty($_FILES['uploadfile']['name']))
|
||||
@@ -121,7 +123,9 @@ class requestAnrechnung extends Auth_Controller
|
||||
if (isEmptyString($begruendung_id) ||
|
||||
isEmptyString($anmerkung) ||
|
||||
isEmptyString($lehrveranstaltung_id) ||
|
||||
isEmptyString($studiensemester_kurzbz))
|
||||
isEmptyString($studiensemester_kurzbz) ||
|
||||
isEmptyString($begruendung_ects) ||
|
||||
isEmptyString($begruendung_lvinhalt))
|
||||
{
|
||||
return $this->outputJsonError($this->p->t('ui', 'errorFelderFehlen'));
|
||||
}
|
||||
@@ -172,7 +176,9 @@ class requestAnrechnung extends Auth_Controller
|
||||
$lehrveranstaltung_id,
|
||||
$begruendung_id,
|
||||
$lastInsert_dms_id,
|
||||
$anmerkung
|
||||
$anmerkung,
|
||||
$begruendung_ects,
|
||||
$begruendung_lvinhalt
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
|
||||
@@ -21,6 +21,7 @@ class InfoCenter extends Auth_Controller
|
||||
const FREIGEGEBEN_PAGE = 'freigegeben';
|
||||
const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert';
|
||||
const ABGEWIESEN_PAGE = 'abgewiesen';
|
||||
const AUFGENOMMEN_PAGE = 'aufgenommen';
|
||||
const SHOW_DETAILS_PAGE = 'showDetails';
|
||||
const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails';
|
||||
const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung';
|
||||
@@ -115,6 +116,7 @@ class InfoCenter extends Auth_Controller
|
||||
'index' => 'infocenter:r',
|
||||
'freigegeben' => 'infocenter:r',
|
||||
'abgewiesen' => 'infocenter:r',
|
||||
'aufgenommen' => 'infocenter:r',
|
||||
'reihungstestAbsolviert' => 'infocenter:r',
|
||||
'showDetails' => 'infocenter:r',
|
||||
'showZGVDetails' => 'lehre/zgvpruefung:r',
|
||||
@@ -228,6 +230,16 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
$this->load->view('system/infocenter/infocenterAbgewiesen.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgenommene page of the InfoCenter tool
|
||||
*/
|
||||
public function aufgenommen()
|
||||
{
|
||||
$this->_setNavigationMenu(self::AUFGENOMMEN_PAGE); // define the navigation menu for this page
|
||||
|
||||
$this->load->view('system/infocenter/infocenterAufgenommen.php');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -314,7 +326,7 @@ class InfoCenter extends Auth_Controller
|
||||
show_error('Person does not exist!');
|
||||
|
||||
$origin_page = $this->input->get(self::ORIGIN_PAGE);
|
||||
if ($origin_page == self::INDEX_PAGE)
|
||||
if (in_array($origin_page, array(self::INDEX_PAGE, self::ABGEWIESEN_PAGE)))
|
||||
{
|
||||
// mark person as locked for editing
|
||||
$result = $this->PersonLockModel->lockPerson($person_id, $this->_uid, self::APP);
|
||||
@@ -359,7 +371,14 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
if (isError($result)) show_error(getError($result));
|
||||
|
||||
$redirectLink = '/'.self::INFOCENTER_URI.'?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId();
|
||||
$origin_page = $this->input->get(self::ORIGIN_PAGE);
|
||||
|
||||
if ($origin_page === self::ABGEWIESEN_PAGE)
|
||||
$redirectLink = self::INFOCENTER_URI. '/' .self::ABGEWIESEN_PAGE;
|
||||
else
|
||||
$redirectLink = '/'.self::INFOCENTER_URI;
|
||||
|
||||
$redirectLink .= '?'.self::FHC_CONTROLLER_ID.'='.$this->getControllerId();
|
||||
|
||||
// Force reload of Dataset after Unlock
|
||||
$redirectLink .= '&'.self::KEEP_TABLESORTER_FILTER.'=true';
|
||||
@@ -1526,6 +1545,7 @@ class InfoCenter extends Auth_Controller
|
||||
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
|
||||
$reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
|
||||
$abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
$aufgenommenLink = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
|
||||
$currentFilterId = $this->input->get(self::FILTER_ID);
|
||||
if (isset($currentFilterId))
|
||||
@@ -1533,6 +1553,7 @@ class InfoCenter extends Auth_Controller
|
||||
$freigegebenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$abgewiesenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$aufgenommenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
}
|
||||
|
||||
$this->navigationlib->setSessionMenu(
|
||||
@@ -1583,7 +1604,19 @@ class InfoCenter extends Auth_Controller
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
30 // sort
|
||||
)
|
||||
),
|
||||
'aufgenommen' => $this->navigationlib->oneLevel(
|
||||
'Aufgenommene', // description
|
||||
$aufgenommenLink, // link
|
||||
null, // children
|
||||
'check', // icon
|
||||
null, // subscriptDescription
|
||||
false, // expand
|
||||
null, // subscriptLinkClass
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
40 // sort
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -1611,6 +1644,9 @@ class InfoCenter extends Auth_Controller
|
||||
if ($origin_page === self::ABGEWIESEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
|
||||
if ($origin_page === self::AUFGENOMMEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
|
||||
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
|
||||
if (isset($prevFilterId))
|
||||
{
|
||||
|
||||
@@ -26,6 +26,7 @@ class Issues extends Auth_Controller
|
||||
// Load models
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('system/Sprache_model', 'SpracheModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
@@ -45,10 +46,11 @@ class Issues extends Auth_Controller
|
||||
public function index()
|
||||
{
|
||||
$oes_for_issues = $this->_getOesForIssues();
|
||||
$language_index = $this->_getLanguageIndex();
|
||||
|
||||
$this->load->view(
|
||||
'system/issues/issues',
|
||||
$oes_for_issues
|
||||
array_merge($oes_for_issues, array('language_index' => $language_index))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -166,4 +168,28 @@ class Issues extends Auth_Controller
|
||||
'all_oe_kurzbz_berechtigt' => $all_oe_kurzbz_berechtigt
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets language index of currently logged in user.
|
||||
* @return object int (the index, start at 1)
|
||||
*/
|
||||
private function _getLanguageIndex()
|
||||
{
|
||||
$idx = 1;
|
||||
$this->SpracheModel->addSelect('sprache, index');
|
||||
$langRes = $this->SpracheModel->load();
|
||||
|
||||
if (hasData($langRes))
|
||||
{
|
||||
$userLang = getUserLanguage();
|
||||
$lang = getData($langRes);
|
||||
|
||||
foreach ($lang as $l)
|
||||
{
|
||||
if ($l->sprache == $userLang) $idx = $l->index;
|
||||
}
|
||||
}
|
||||
|
||||
return $idx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,305 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class IssuesKonfiguration extends Auth_Controller
|
||||
{
|
||||
private $_uid;
|
||||
|
||||
const STRING_DATA_TYPE = 'string';
|
||||
const INTEGER_DATA_TYPE = 'integer';
|
||||
const FLOAT_DATA_TYPE = 'float';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'admin:r',
|
||||
'getApps' => 'admin:r',
|
||||
'getFehlerKonfigurationByApp' => 'admin:r',
|
||||
'saveFehlerKonfiguration' => 'admin:rw',
|
||||
'deleteKonfiguration' => 'admin:rw',
|
||||
'deleteKonfigurationsWerte' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('IssuesLib');
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load models
|
||||
$this->load->model('system/Fehlerkonfigurationstyp_model', 'FehlerkonfigurationstypModel');
|
||||
$this->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'global',
|
||||
'ui',
|
||||
'filter',
|
||||
'fehlermonitoring'
|
||||
)
|
||||
);
|
||||
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
$this->setControllerId(); // sets the controller id
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
/**
|
||||
* Load initial view.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->load->view("system/issues/issuesKonfiguration.php");
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Apps to which Fehler exist.
|
||||
*/
|
||||
public function getApps()
|
||||
{
|
||||
$this->FehlerModel->addDistinct();
|
||||
$this->FehlerModel->addSelect('app');
|
||||
$this->FehlerModel->addJoin('system.tbl_fehler_konfigurationstyp', 'app');
|
||||
$this->FehlerModel->addOrder('app');
|
||||
|
||||
$appRes = $this->FehlerModel->load();
|
||||
|
||||
$this->outputJson($appRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehlercodes, optionally by app.
|
||||
*/
|
||||
public function getFehlerKonfigurationByApp()
|
||||
{
|
||||
$app = $this->input->get('app');
|
||||
|
||||
// get all Konfiguration types, optionally filtered by app
|
||||
$this->FehlerkonfigurationstypModel->addSelect('konfigurationstyp_kurzbz, konfigurationsdatentyp, beschreibung');
|
||||
$this->FehlerkonfigurationstypModel->addOrder('konfigurationstyp_kurzbz');
|
||||
$konfRes = isEmptyString($app)
|
||||
? $this->FehlerkonfigurationstypModel->load()
|
||||
: $this->FehlerkonfigurationstypModel->loadWhere(array('app' => $app));
|
||||
|
||||
if (isError($konfRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// get all Fehler, optionally filtered by app
|
||||
$params = array('fehlercode_extern' => null);
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertyp_kurzbz, fehlertext');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
if (!isEmptyString($app)) $params['app'] = $app;
|
||||
$fehlerRes = $this->FehlerModel->loadWhere($params);
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerLaden'));
|
||||
|
||||
// return object with retrieved data
|
||||
$konfObj = new StdClass();
|
||||
$konfObj->konfigurationstypen = array();
|
||||
$konfObj->fehler = array();
|
||||
|
||||
if (hasData($konfRes)) $konfObj->konfigurationstypen = getData($konfRes);
|
||||
if (hasData($fehlerRes)) $konfObj->fehler = getData($fehlerRes);
|
||||
|
||||
$this->outputJsonSuccess($konfObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a Fehler configuration, inserts new configuration or updates existing.
|
||||
* Checks if datatype of passed configuration is correct.
|
||||
*/
|
||||
public function saveFehlerKonfiguration()
|
||||
{
|
||||
$result = null;
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
$konfigurationsWert = $this->input->post('konfigurationsWert');
|
||||
|
||||
// check if all params passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
// separate by semicolon if multiple values passed
|
||||
$konfigurationsWert = explode(';', $konfigurationsWert);
|
||||
|
||||
// check konfigurationswert
|
||||
|
||||
// get the expected data type
|
||||
$dataType = self::STRING_DATA_TYPE;
|
||||
$this->FehlerkonfigurationstypModel->addSelect('konfigurationsdatentyp');
|
||||
$konfigtypRes = $this->FehlerkonfigurationstypModel->loadWhere(array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz));
|
||||
|
||||
if (hasData($konfigtypRes))
|
||||
{
|
||||
$konfigurationsdatentyp = getData($konfigtypRes)[0]->konfigurationsdatentyp;
|
||||
foreach ($konfigurationsWert as $idx => $konfWert)
|
||||
{
|
||||
// check if data type correct
|
||||
$valid = false;
|
||||
switch ($konfigurationsdatentyp)
|
||||
{
|
||||
case self::INTEGER_DATA_TYPE:
|
||||
$valid = (string)(int)$konfWert == $konfWert;
|
||||
$konfigurationsWert[$idx] = (int) $konfWert;
|
||||
break;
|
||||
case self::FLOAT_DATA_TYPE:
|
||||
$valid = (string)(float)$konfWert == $konfWert;
|
||||
$konfigurationsWert[$idx] = (float) $konfWert;
|
||||
break;
|
||||
default:
|
||||
$valid = is_string($konfWert) && preg_match('/^[A-Za-z0-9_]+$/', $konfWert);
|
||||
}
|
||||
if (!$valid) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationswert', array($konfigurationsdatentyp)));
|
||||
}
|
||||
}
|
||||
|
||||
// check if konfiguration already set for the fehlercode
|
||||
$this->FehlerkonfigurationModel->addSelect('konfiguration');
|
||||
$fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// if konfiguration exists, update by add konfiguration values to existing
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
$existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
|
||||
|
||||
if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
|
||||
|
||||
if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
|
||||
|
||||
$newKonf = json_encode(array_values(array_unique(array_merge($existingKonf, $konfigurationsWert))));
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
$result = $this->FehlerkonfigurationModel->update(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
|
||||
array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
|
||||
);
|
||||
}
|
||||
else // if no konfiguration exists, add new konfiguration entry
|
||||
{
|
||||
$newKonf = json_encode($konfigurationsWert);
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
$result = $this->FehlerkonfigurationModel->insert(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode,
|
||||
'konfiguration' => $newKonf,
|
||||
'insertvon' => $this->_uid
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// output result (insert or update)
|
||||
$this->outputJson($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes values of a Konfiguration.
|
||||
*/
|
||||
public function deleteKonfigurationsWerte()
|
||||
{
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
$konfigurationsWert = $this->input->post('konfigurationsWert');
|
||||
|
||||
// check if Konfigurationstyp correctly passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
// check if fehlercode correctly passed
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
// separate by semicolon if multiple values passed
|
||||
$konfigurationsWert = explode(';', $konfigurationsWert);
|
||||
|
||||
// check if konfiguration already set for the fehlercode
|
||||
$this->FehlerkonfigurationModel->addSelect('konfiguration');
|
||||
$fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere(
|
||||
array(
|
||||
'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz,
|
||||
'fehlercode' => $fehlercode
|
||||
)
|
||||
);
|
||||
|
||||
if (!hasData($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden'));
|
||||
|
||||
// if konfiguration exists, update values
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
$existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration);
|
||||
|
||||
if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung'));
|
||||
|
||||
if (!is_array($existingKonf)) $existingKonf = array($existingKonf);
|
||||
|
||||
$newKonfArr = array_values(array_diff($existingKonf, $konfigurationsWert));
|
||||
|
||||
// if no konfiguration values left, delete whole entry
|
||||
if (isEmptyArray($newKonfArr))
|
||||
{
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->delete(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
|
||||
)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$newKonf = json_encode($newKonfArr);
|
||||
if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON");
|
||||
|
||||
// if there are still values, delete only part of the konfiguration
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->update(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode),
|
||||
array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a Konfiguration.
|
||||
*/
|
||||
public function deleteKonfiguration()
|
||||
{
|
||||
$konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz');
|
||||
$fehlercode = $this->input->post('fehlercode');
|
||||
|
||||
// check if Konfigurationstyp correctly passed
|
||||
if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp'));
|
||||
|
||||
// check if fehlercode correctly passed
|
||||
if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt'));
|
||||
|
||||
$this->outputJson(
|
||||
$this->FehlerkonfigurationModel->delete(
|
||||
array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the UID of the logged user and checks if it is valid
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ class IssuesZustaendigkeiten extends Auth_Controller
|
||||
// Load models
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->load->model('system/Fehlerzustaendigkeiten_model', 'FehlerzustaendigkeitenModel');
|
||||
|
||||
$this->loadPhrases(
|
||||
@@ -70,7 +69,7 @@ class IssuesZustaendigkeiten extends Auth_Controller
|
||||
{
|
||||
$app = $this->input->get('app');
|
||||
|
||||
//$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz');
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz, app');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
|
||||
$fehlerRes = isset($app) ? $this->FehlerModel->loadWhere(array('app' => $app)) : $this->FehlerModel->load();
|
||||
|
||||
@@ -16,7 +16,8 @@ class Plausichecks extends Auth_Controller
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('issues/PlausicheckProducerLib');
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('app' => 'core'));
|
||||
$this->load->library('issues/PlausicheckDefinitionLib');
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load models
|
||||
@@ -44,18 +45,43 @@ class Plausichecks extends Auth_Controller
|
||||
$fehler_kurzbz = $this->input->get('fehler_kurzbz');
|
||||
|
||||
// issues array for passing issue texts
|
||||
$issueTexts = array();
|
||||
$allIssues = array();
|
||||
// all fehler kurzbz which are going to be checked
|
||||
$fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
$fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
$fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
// set Studiengang to null if not passed
|
||||
if (isEmptyString($studiengang_kz)) $studiengang_kz = null;
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($fehlerKurzbz as $fehler_kurzbz)
|
||||
{
|
||||
// get Text and fehlercode of the Fehler
|
||||
$this->FehlerModel->addSelect('fehlercode, fehlertext, fehlertyp_kurzbz');
|
||||
$fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError(getError($fehlerRes));
|
||||
|
||||
// do not check error if no data
|
||||
if (!hasData($fehlerRes)) continue;
|
||||
|
||||
// get the error data
|
||||
$fehler = getData($fehlerRes)[0];
|
||||
|
||||
// initialize issue array
|
||||
$allIssues[$fehler_kurzbz] = array('fehlercode' => $fehler->fehlercode, 'data' => array());
|
||||
|
||||
// get library name for producing issue
|
||||
$libName = $fehlerLibMappings[$fehler_kurzbz];
|
||||
|
||||
// execute the check
|
||||
$issueTexts[$fehler_kurzbz] = array();
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz);
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes));
|
||||
|
||||
@@ -69,19 +95,13 @@ class Plausichecks extends Auth_Controller
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// get Text of the Fehler
|
||||
$this->FehlerModel->addSelect('fehlertext');
|
||||
$fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
|
||||
|
||||
if (isError($fehlerRes)) $this->outputJsonError(getError($fehlerRes));
|
||||
|
||||
// optionally replace fehler parameters in text, output the fehlertext
|
||||
if (hasData($fehlerRes))
|
||||
if (!isEmptyString($fehler->fehlertext))
|
||||
{
|
||||
// use issue fehler text from database if present
|
||||
$fehlerText = getData($fehlerRes)[0]->fehlertext;
|
||||
$fehlercode = $fehler->fehlercode;
|
||||
$fehlerText = $fehler->fehlertext;
|
||||
$fehlerTyp = $fehler->fehlertyp_kurzbz;
|
||||
|
||||
if (!isEmptyArray($fehlertext_params))
|
||||
{
|
||||
@@ -91,6 +111,14 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
$fehlerText = vsprintf($fehlerText, $fehlertext_params);
|
||||
}
|
||||
|
||||
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
|
||||
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
|
||||
|
||||
$issueObj = new StdClass();
|
||||
$issueObj->fehlertext = $fehlerText;
|
||||
$issueObj->type = $fehlerTyp;
|
||||
$allIssues[$fehler_kurzbz]['data'][] = $issueObj;
|
||||
}
|
||||
else // if no issue text found, use generic text
|
||||
{
|
||||
@@ -100,12 +128,11 @@ class Plausichecks extends Auth_Controller
|
||||
// add generic parameters to issue text
|
||||
if (isset($person_id)) $fehlerText .= "; person_id: $person_id";
|
||||
if (isset($oe_kurzbz)) $fehlerText .= "; oe_kurzbz: $oe_kurzbz";
|
||||
$issueTexts[$fehler_kurzbz][] = $fehlerText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess($issueTexts);
|
||||
$this->outputJsonSuccess($allIssues);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -130,13 +157,38 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes));
|
||||
|
||||
$fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz();
|
||||
$fehlerKurzbz = $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
|
||||
$db = new DB_Model();
|
||||
|
||||
// get fehlercodes for fehler_kurzbz
|
||||
$fehlerRes = $db->execReadOnlyQuery(
|
||||
'SELECT
|
||||
fehler_kurzbz, fehlercode
|
||||
FROM
|
||||
system.tbl_fehler
|
||||
WHERE
|
||||
fehler_kurzbz IN ?',
|
||||
array($fehlerKurzbz)
|
||||
);
|
||||
|
||||
if (isError($fehlerRes)) show_error(getError($fehlerRes));
|
||||
|
||||
$fehlerKurzbzCodeMappings = array();
|
||||
if (hasData($fehlerRes))
|
||||
{
|
||||
$fehler = getData($fehlerRes);
|
||||
foreach ($fehler as $fe)
|
||||
{
|
||||
$fehlerKurzbzCodeMappings[$fe->fehler_kurzbz] = $fe->fehlercode;
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(),
|
||||
'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(),
|
||||
'studiengaenge' => hasData($studiengaengeRes) ? getData($studiengaengeRes) : array(),
|
||||
'fehler' => $fehlerKurzbz
|
||||
'fehlerKurzbzCodeMappings' => $fehlerKurzbzCodeMappings
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Interface defining method to implement for issue producer (from core and extensions)
|
||||
*/
|
||||
interface IIssueExistsChecker
|
||||
{
|
||||
/**
|
||||
* Checks if an issue exists.
|
||||
* @param array $params parameters needed for issue detection
|
||||
* @return object with success(true) if issue exists, success(false) otherwise
|
||||
*/
|
||||
public function checkIfIssueExists($paramsForChecking);
|
||||
|
||||
/**
|
||||
* Produces an issue.
|
||||
* @param array $params parameters needed for issue detection
|
||||
* @return object with success(true) if issue exists, success(false) otherwise
|
||||
*/
|
||||
//public function produceIssue($person_id, $oe_kurzbz, $paramsForProducing);
|
||||
}
|
||||
@@ -6,6 +6,8 @@
|
||||
abstract class IssueResolver_Controller extends JOB_Controller
|
||||
{
|
||||
const CI_PATH = 'application';
|
||||
const CI_LIBRARY_FOLDER = 'libraries';
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const ISSUE_RESOLVERS_FOLDER = 'issues/resolvers';
|
||||
const CHECK_ISSUE_RESOLVED_METHOD_NAME = 'checkIfIssueIsResolved';
|
||||
|
||||
@@ -60,10 +62,15 @@ abstract class IssueResolver_Controller extends JOB_Controller
|
||||
isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array()
|
||||
);
|
||||
|
||||
// if called from extension (extension name set), path includes extension names, otherwise it is the core library folder
|
||||
$libRootPath = isset($this->_extensionName) ? 'extensions/' . $this->_extensionName . '/' : '';
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::ISSUE_RESOLVERS_FOLDER . '/';
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH . '/' . $libRootPath . 'libraries/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath))
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Job for producing Plausicheck issues
|
||||
*/
|
||||
abstract class PlausiIssueProducer_Controller extends JOB_Controller
|
||||
{
|
||||
protected $_fehlerLibMappings;
|
||||
protected $_app;
|
||||
|
||||
public function __construct($app = null)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// pass extension name if calling from extension
|
||||
$extensionName = isset($this->_extensionName) ? $this->_extensionName : null;
|
||||
|
||||
// load libraries
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('extensionName' => $extensionName, 'app' => $this->_app));
|
||||
$this->load->library('IssuesLib');
|
||||
}
|
||||
|
||||
protected function producePlausicheckIssues($params)
|
||||
{
|
||||
$this->logInfo("Plausicheck issue producer job started");
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName)
|
||||
{
|
||||
// execute the check
|
||||
$this->logInfo("Checking " . $fehler_kurzbz . "...");
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
$params
|
||||
);
|
||||
|
||||
if (isError($plausicheckRes)) $this->logError(getError($plausicheckRes));
|
||||
|
||||
if (hasData($plausicheckRes))
|
||||
{
|
||||
$plausicheckData = getData($plausicheckRes);
|
||||
|
||||
foreach ($plausicheckData as $plausiData)
|
||||
{
|
||||
// get the data needed for issue production
|
||||
$person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null;
|
||||
$oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null;
|
||||
$fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null;
|
||||
$resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null;
|
||||
|
||||
// write the issue
|
||||
$addIssueRes = $this->issueslib->addFhcIssue($fehler_kurzbz, $person_id, $oe_kurzbz, $fehlertext_params, $resolution_params);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isError($addIssueRes))
|
||||
$this->logError(getError($addIssueRes));
|
||||
elseif (hasData($addIssueRes) && is_integer(getData($addIssueRes)))
|
||||
$this->logInfo("Plausicheck issue " . $fehler_kurzbz . " successfully produced, person_id: " . $person_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job stopped");
|
||||
}
|
||||
}
|
||||
@@ -174,6 +174,8 @@ class AnrechnungLib
|
||||
$anrechnung_data->insertvon = '';
|
||||
$anrechnung_data->studiensemester_kurzbz = '';
|
||||
$anrechnung_data->empfehlung = '';
|
||||
$anrechnung_data->begruendung_ects = '';
|
||||
$anrechnung_data->begruendung_lvinhalt = '';
|
||||
$anrechnung_data->status_kurzbz = '';
|
||||
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
|
||||
$anrechnung_data->dokumentname = '';
|
||||
@@ -894,6 +896,8 @@ class AnrechnungLib
|
||||
$anrechnung_data->insertvon= $anrechnung->insertvon;
|
||||
$anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemester_kurzbz;
|
||||
$anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung;
|
||||
$anrechnung_data->begruendung_ects = $anrechnung->begruendung_ects;
|
||||
$anrechnung_data->begruendung_lvinhalt = $anrechnung->begruendung_lvinhalt;
|
||||
|
||||
// Get last status_kurzbz
|
||||
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung->anrechnung_id);
|
||||
|
||||
@@ -551,10 +551,7 @@ class AuthLib
|
||||
// Needed information
|
||||
$this->_ci->PersonModel->addSelect('person_id, vorname, nachname, uid');
|
||||
// Retrieves the uid if it is possible for active users
|
||||
$this->_ci->PersonModel->addJoin(
|
||||
'(SELECT uid, person_id FROM public.tbl_benutzer WHERE aktiv = TRUE) tb', 'person_id',
|
||||
'LEFT'
|
||||
);
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id', 'LEFT');
|
||||
|
||||
// Execute query with where clause
|
||||
$personResult = $this->_ci->PersonModel->loadWhere($queryParamsArray);
|
||||
|
||||
@@ -182,6 +182,7 @@ class MailLib
|
||||
{
|
||||
if ($this->sended == $this->email_number_per_time_range)
|
||||
{
|
||||
$this->sended = 0;
|
||||
sleep($this->email_time_range); // Wait!!!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2022 fhcomplete.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once(dirname(__FILE__).'/../../vendor/nategood/httpful/bootstrap.php');
|
||||
|
||||
/**
|
||||
* Simple client to call the signature server
|
||||
*/
|
||||
class SignatureLib
|
||||
{
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
// Public static methods
|
||||
|
||||
/**
|
||||
* Returns the list of signature inside the given file
|
||||
*/
|
||||
public static function list($inputFileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Dont send Document if it is bigger than 30 MB (Limit of Signature Server)
|
||||
if (filesize($inputFileName) > 30000000)
|
||||
{
|
||||
$returnObject = new stdClass();
|
||||
$returnObject->code = 1;
|
||||
$returnObject->error = 1;
|
||||
$returnObject->retval = 'File to big';
|
||||
|
||||
return $returnObject;
|
||||
}
|
||||
|
||||
// Get the content of the given file
|
||||
$inputFileContent = file_get_contents($inputFileName);
|
||||
if ($inputFileContent === false) // if failed
|
||||
{
|
||||
error_log('An error occurred while getting the content from: '.$inputFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Posts the given file content + file name and expects a response in JSON format
|
||||
$resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
|
||||
->sendsJson()
|
||||
->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
|
||||
->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
|
||||
->expectsJson()
|
||||
->send();
|
||||
}
|
||||
}
|
||||
catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
|
||||
{
|
||||
error_log($cee->getMessage());
|
||||
}
|
||||
catch (Exception $e) // any other exception
|
||||
{
|
||||
error_log($e->getMessage());
|
||||
}
|
||||
|
||||
// If the response is fine
|
||||
if (isset($resultPost->body) && is_object($resultPost->body)
|
||||
&& isset($resultPost->body->retval) && is_array($resultPost->body->retval))
|
||||
{
|
||||
return $resultPost->body->retval;
|
||||
}
|
||||
|
||||
// Otherwise return a null as error
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Library containing definitions of all core plausichecks.
|
||||
*/
|
||||
class PlausicheckDefinitionLib
|
||||
{
|
||||
// set fehler for core plausichecks
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
private $_fehlerLibMappings = array(
|
||||
'AbbrecherAktiv' => 'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
|
||||
'AktSemesterNull' => 'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
|
||||
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
|
||||
'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
|
||||
'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
|
||||
//'StudienplanUngueltig' => 'StudienplanUngueltig'
|
||||
);
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz-library mappings for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerLibMappings()
|
||||
{
|
||||
return $this->_fehlerLibMappings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerKurzbz()
|
||||
{
|
||||
return array_keys($this->_fehlerLibMappings);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,78 +4,70 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class PlausicheckProducerLib
|
||||
{
|
||||
const CI_LIBRARY_PATH = 'application/libraries';
|
||||
const CI_PATH = 'application';
|
||||
const CI_LIBRARY_FOLDER = 'libraries';
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks';
|
||||
const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck';
|
||||
|
||||
private $_ci; // ci instance
|
||||
private $_currentStudiensemester; // current Studiensemester
|
||||
private $_extensionName; // name of extension
|
||||
private $_app; // name of application
|
||||
private $_konfiguration = array(); // konfigratio parameters
|
||||
|
||||
// set fehler which can be produced by the job
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
private $_fehlerLibMappings = array(
|
||||
'AbbrecherAktiv' => 'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
|
||||
'AktSemesterNull' => 'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
|
||||
'AktiverStudentstatusOhneKontobuchung' => 'AktiverStudentstatusOhneKontobuchung',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten',
|
||||
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
|
||||
'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
|
||||
'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher'
|
||||
//'StudienplanUngueltig' => 'StudienplanUngueltig'
|
||||
);
|
||||
|
||||
public function __construct()
|
||||
public function __construct($params = null)
|
||||
{
|
||||
// set extension name if called from extension
|
||||
if (isset($params['extensionName'])) $this->_extensionName = $params['extensionName'];
|
||||
|
||||
// set application
|
||||
$app = isset($params['app']) ? $params['app'] : null;
|
||||
|
||||
$this->_ci =& get_instance(); // get ci instance
|
||||
|
||||
// load models
|
||||
$this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
$this->_ci->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
|
||||
|
||||
// get current Studiensemester
|
||||
$studiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
// get all configuration parameters for the application
|
||||
$fehlerkonfigurationRes = $this->_ci->FehlerkonfigurationModel->getKonfiguration($app);
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfiguration = getData($fehlerkonfigurationRes);
|
||||
|
||||
foreach ($fehlerkonfiguration as $fk)
|
||||
{
|
||||
$this->_konfiguration[$fk->fehler_kurzbz][$fk->konfigurationstyp_kurzbz] = $fk->konfiguration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes check for a fehler_kurzbz, returns the result.
|
||||
* @param $fehler_kurzbz string
|
||||
* @param $studiensemester_kurzbz string optionally needed for issue production
|
||||
* @param $studiengang_kz int optionally needed for issue production
|
||||
* Executes plausicheck using a given library, returns the result.
|
||||
* @param $libName string name of library producing the issue
|
||||
* @param $fehler_kurzbz string unique short name of fehler, for which issue is produced
|
||||
* @param $params parameters passed to issue production method
|
||||
*/
|
||||
public function producePlausicheckIssue($fehler_kurzbz, $studiensemester_kurzbz = null, $studiengang_kz = null)
|
||||
public function producePlausicheckIssue($libName, $fehler_kurzbz, $params)
|
||||
{
|
||||
$libName = $this->_fehlerLibMappings[$fehler_kurzbz];
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
|
||||
// get Studiensemester
|
||||
if (isEmptyString($studiensemester_kurzbz)) $studiensemester_kurzbz = $this->_currentStudiensemester;
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::PLAUSI_ISSUES_FOLDER . '/';
|
||||
|
||||
// get path of library for issue to be produced
|
||||
$issuesLibPath = DOC_ROOT . self::CI_LIBRARY_PATH . '/' . self::PLAUSI_ISSUES_FOLDER . '/';
|
||||
$issuesLibFilePath = $issuesLibPath . $libName . '.php';
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::PLAUSI_ISSUES_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath)) return error("Issue library file " . $issuesLibFilePath . " does not exist");
|
||||
|
||||
// load konfiguration parameters of the fehler_kurzbz
|
||||
$config = isset($this->_konfiguration[$fehler_kurzbz]) ? $this->_konfiguration[$fehler_kurzbz] : null;
|
||||
|
||||
// load library connected to fehlercode
|
||||
$this->_ci->load->library(self::PLAUSI_ISSUES_FOLDER . '/'.$libName);
|
||||
$this->_ci->load->library($issuesLibPath . $libName, $config);
|
||||
|
||||
$lowercaseLibName = mb_strtolower($libName);
|
||||
|
||||
@@ -83,21 +75,7 @@ class PlausicheckProducerLib
|
||||
if (!is_callable(array($this->_ci->{$lowercaseLibName}, self::EXECUTE_PLAUSI_CHECK_METHOD_NAME)))
|
||||
return error("Method " . self::EXECUTE_PLAUSI_CHECK_METHOD_NAME . " is not defined in library $lowercaseLibName");
|
||||
|
||||
// pass the data needed for issue check
|
||||
$paramsForCheck = array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
);
|
||||
|
||||
// call the function for checking for issue production
|
||||
return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($paramsForCheck);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerKurzbz()
|
||||
{
|
||||
return array_keys($this->_fehlerLibMappings);
|
||||
return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class AbbrecherAktiv extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAbbrecherAktiv($studiengang_kz);
|
||||
$prestudentRes = $this->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,49 @@ class AbbrecherAktiv extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Abbrecher cannot be active.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudentstatus pre_status
|
||||
JOIN public.tbl_prestudent pre USING(prestudent_id)
|
||||
JOIN public.tbl_student student USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre_status.status_kurzbz ='Abbrecher'
|
||||
AND benutzer.aktiv=true";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAbschlussstatusFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,95 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prestudent should have a final status.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAbschlussstatusFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (pre.prestudent_id)
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
NOT EXISTS( /*student does not study anymore*/
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
public.tbl_prestudentstatus ps
|
||||
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
|
||||
WHERE
|
||||
prestudent_id=pre.prestudent_id
|
||||
/* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */
|
||||
AND tbl_studiensemester.ende>now() - interval '4 months'
|
||||
)
|
||||
/* check only valid begininng with 2018 */
|
||||
AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id)
|
||||
AND NOT EXISTS( /* no end status */
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE
|
||||
prestudent_id=pre.prestudent_id
|
||||
AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming')
|
||||
)
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN (?, ?)
|
||||
AND ps.prestudent_id = pre.prestudent_id
|
||||
)";
|
||||
$params[] = $prevStudiensemester;
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,15 @@ class AktSemesterNull extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +50,51 @@ class AktSemesterNull extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Current Ausbildungssemester shouldn't be 0.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus prestat USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
prestat.status_kurzbz != 'Incoming'
|
||||
AND prestat.studiensemester_kurzbz = ?
|
||||
AND ausbildungssemester = 0
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz);
|
||||
$prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,57 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with active Benutzer should have a status in the current semester.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=TRUE
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus
|
||||
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
|
||||
WHERE prestudent_id = prestudent.prestudent_id
|
||||
/* buffer of four months, as status are often entered later */
|
||||
AND sem.ende::date > NOW() - interval '4 months'
|
||||
)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getAktiverStudentstatusOhneKontobuchung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +55,66 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktiverStudentstatusOhneKontobuchung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (pre.prestudent_id)
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.studiensemester_kurzbz = ?
|
||||
AND status.status_kurzbz IN ('Student', 'Incoming')
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
public.tbl_konto
|
||||
WHERE
|
||||
person_id = pers.person_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
AND buchungsnr_verweis IS NULL
|
||||
AND betrag <= 0
|
||||
)
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
+62
-2
@@ -13,14 +13,19 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$prestudentRes = $this->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
@@ -53,4 +58,59 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id,
|
||||
status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_studentlehrverband lv USING(student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status.studiensemester_kurzbz = ?
|
||||
AND lv.studiensemester_kurzbz = ?
|
||||
AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher')
|
||||
AND get_rolle_prestudent (prestudent_id, ?)='Student'
|
||||
AND status.ausbildungssemester != lv.semester";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getBewerberNichtZumRtAngetreten(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bewerber should have participated in Reihungstest.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getBewerberNichtZumRtAngetreten(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes;
|
||||
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status_kurzbz='Bewerber'
|
||||
AND reihungstestangetreten=false
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (hasData($previousStudiensemesterRes))
|
||||
{
|
||||
$previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
$qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)";
|
||||
$params[] = $previousStudiensemester;
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry .= " AND studiensemester_kurzbz=?";
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getDatumAbschlusspruefungFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Date of final exam shouldn't be missing for Absolvent.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumAbschlusspruefungFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id,
|
||||
pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
|
||||
)
|
||||
AND abschlussbeurteilung_kurzbz!='nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
AND pruefung.datum IS NULL
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND prestatus.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($abschlusspruefung_id))
|
||||
{
|
||||
$qry .= " AND pruefung.abschlusspruefung_id = ?";
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumSponsionFehlt($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getDatumSponsionFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,72 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Date of sponsion shouldn't be missing for Absolvent.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumSponsionFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id,
|
||||
pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz
|
||||
)
|
||||
AND abschlussbeurteilung_kurzbz!='nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
AND pruefung.sponsion IS NULL
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND prestatus.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($abschlusspruefung_id))
|
||||
{
|
||||
$qry .= " AND pruefung.abschlusspruefung_id = ?";
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
+64
-1
@@ -13,11 +13,14 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz);
|
||||
$prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -42,4 +45,64 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Status Dates and status studysemester dates should be in correct order.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
// all active students with Status student in current semester
|
||||
$qry = "
|
||||
SELECT DISTINCT ON (prestudent_id) *
|
||||
FROM (
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id,
|
||||
stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
ROW_NUMBER () OVER (
|
||||
PARTITION BY prestudent.prestudent_id
|
||||
ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC
|
||||
) AS reihenfolge_semester,
|
||||
ROW_NUMBER () OVER (
|
||||
PARTITION BY prestudent.prestudent_id
|
||||
ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC
|
||||
) AS reihenfolge_datum
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=true
|
||||
AND status.status_kurzbz='Student'
|
||||
) reihenfolge
|
||||
WHERE reihenfolge_semester <> reihenfolge_datum";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getFalscheAnzahlAbschlusspruefungen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,77 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with finished studies should have exactly one final exam.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlAbschlusspruefungen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM lehre.tbl_abschlusspruefung
|
||||
WHERE student_uid = stud.student_uid
|
||||
AND abschlussbeurteilung_kurzbz != 'nicht'
|
||||
AND abschlussbeurteilung_kurzbz IS NOT NULL
|
||||
) AS anzahl_abschlusspruefungen
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status_kurzbz = 'Absolvent'
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant
|
||||
AND NOT EXISTS ( /* exclude gs */
|
||||
SELECT 1
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE prestudent_id = pre.prestudent_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
)";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= ") studenten
|
||||
WHERE anzahl_abschlusspruefungen != 1";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getFalscheAnzahlHeimatadressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,67 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students should have exactly one home address.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlHeimatadressen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id
|
||||
FROM
|
||||
(
|
||||
SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
|
||||
FROM public.tbl_adresse addr
|
||||
WHERE heimatadresse IS TRUE
|
||||
GROUP BY person_id
|
||||
) adressen
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent pre USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
anzahl_adressen != 1
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getFalscheAnzahlZustelladressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,67 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students should have exactly one delivery address.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheAnzahlZustelladressen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id
|
||||
FROM
|
||||
(
|
||||
SELECT person_id, COUNT(adresse_id) AS anzahl_adressen
|
||||
FROM public.tbl_adresse addr
|
||||
WHERE zustelladresse IS TRUE
|
||||
GROUP BY person_id
|
||||
) adressen
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent pre USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
anzahl_adressen != 1
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,15 @@ class GbDatumWeitZurueck extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +42,63 @@ class GbDatumWeitZurueck extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Birthdate is too long ago.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getGbDatumWeitZurueck(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pers.person_id
|
||||
FROM
|
||||
public.tbl_person pers
|
||||
WHERE
|
||||
pers.gebdatum < '1920-01-01'
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudent
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE person_id = pers.person_id";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= ")";
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -44,4 +52,62 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with active status should have an active Benutzer.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
|
||||
if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
|
||||
|
||||
$studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
|
||||
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzer benutzer
|
||||
JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=false
|
||||
AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?)
|
||||
AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($studiensemester_kurzbz, $studiengang_kz);
|
||||
$personRes = $this->getIncomingHeimatNationOesterreich(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +47,58 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getIncomingHeimatNationOesterreich(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pers.person_id, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_adresse addr USING(person_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.status_kurzbz = 'Incoming'
|
||||
AND addr.nation = 'A'
|
||||
AND addr.heimatadresse
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz);
|
||||
$prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,54 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming should have IN/OUT data.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON(student_uid, nachname, vorname)
|
||||
tbl_person.person_id,
|
||||
tbl_prestudent.prestudent_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student
|
||||
JOIN public.tbl_benutzer ON(student_uid=uid)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz)
|
||||
WHERE
|
||||
bismelden=TRUE
|
||||
AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND tbl_prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getIncomingOrGsFoerderrelevant(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -41,4 +49,77 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant).
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getIncomingOrGsFoerderrelevant(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON(prestudent_id)
|
||||
pers.person_id,
|
||||
ps.prestudent_id,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student stud
|
||||
JOIN public.tbl_benutzer ON(student_uid=uid)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudent ps USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz)
|
||||
WHERE
|
||||
(
|
||||
status.status_kurzbz = 'Incoming'
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
bis.tbl_mobilitaet
|
||||
JOIN public.tbl_prestudent USING(prestudent_id)
|
||||
WHERE
|
||||
prestudent_id = ps.prestudent_id
|
||||
AND gsstudientyp_kurzbz = 'Extern'
|
||||
)
|
||||
)
|
||||
AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL)
|
||||
AND bismelden=TRUE
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND ps.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getInskriptionVorLetzerBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,4 +56,93 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students of a semester shouldn't start studies before the date of Bismeldung.
|
||||
* e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020
|
||||
* e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getInskriptionVorLetzerBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
// get Bismeldedatum
|
||||
$datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz);
|
||||
|
||||
$params = array($datumBis, $studiensemester_kurzbz, $datumBis);
|
||||
|
||||
// get active students
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (student.student_uid) ? AS datum_bismeldung,
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzer benutzer
|
||||
JOIN public.tbl_student student on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
benutzer.aktiv=true
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
/* inscription date before date of first student status */
|
||||
AND (
|
||||
SELECT datum
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE prestudent_id = prestudent.prestudent_id
|
||||
AND studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
AND status_kurzbz = 'Student'
|
||||
ORDER BY datum, insertamum, ext_id
|
||||
LIMIT 1
|
||||
) < ?
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Bismeldedate from Studiensemester.
|
||||
* @param studiensemester_kurzbz string
|
||||
*/
|
||||
private function _getBisdateFromSemester($studiensemester_kurzbz)
|
||||
{
|
||||
$semesterYear = substr($studiensemester_kurzbz, 2, 6);
|
||||
$semesterType = substr($studiensemester_kurzbz, 0, 2);
|
||||
|
||||
if ($semesterType == 'SS')
|
||||
{
|
||||
return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d');
|
||||
}
|
||||
|
||||
if ($semesterType == 'WS')
|
||||
{
|
||||
return date_format(date_create($semesterYear."-04-15"), 'Y-m-d');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,18 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde($studiengang_kz);
|
||||
$personRes = $this->getNationNichtOesterreichAberGemeinde(
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
@@ -39,4 +46,49 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Nation is not Austria, but address has austrian Gemeinde.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id
|
||||
FROM
|
||||
public.tbl_adresse adr
|
||||
JOIN public.tbl_prestudent USING(person_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_student USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer ON(uid=student_uid)
|
||||
JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
adr.nation!='A'
|
||||
AND tbl_benutzer.aktiv
|
||||
AND gemeinde NOT IN ('Münster')
|
||||
AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getOrgformStgUngleichOrgformPrestudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -49,4 +57,74 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Orgform of a Studiengang in Studienplan should be the same as orgform of student.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getOrgformStgUngleichOrgformPrestudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz,
|
||||
studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform,
|
||||
prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_studiengang studiengang
|
||||
JOIN public.tbl_student student USING(studiengang_kz)
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id)
|
||||
WHERE
|
||||
benutzer.aktiv = true
|
||||
AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent')
|
||||
AND studiengang.studiengang_kz < 10000
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE)
|
||||
AND NOT EXISTS(
|
||||
SELECT 1
|
||||
FROM
|
||||
lehre.tbl_studienplan
|
||||
JOIN
|
||||
lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
WHERE
|
||||
tbl_studienplan.studienplan_id = stpl.studienplan_id
|
||||
AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz
|
||||
AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
ORDER BY student_uid";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,18 @@
|
||||
abstract class PlausiChecker
|
||||
{
|
||||
protected $_ci; // code igniter instance
|
||||
protected $_config; // configuration parameters for this plausicheck
|
||||
protected $_db; // database for queries
|
||||
|
||||
public function __construct()
|
||||
public function __construct($configurationParams = null)
|
||||
{
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
// load libraries
|
||||
$this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library
|
||||
// set configuration
|
||||
$this->_config = $configurationParams;
|
||||
|
||||
// get database for queries
|
||||
$this->_db = new DB_Model();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,12 +13,20 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getPrestudentMischformOhneOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -47,4 +55,55 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students in "mixed" Studiengang should have Orgform.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getPrestudentMischformOhneOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.status_kurzbz IN ('Bewerber', 'Student')
|
||||
AND stg.mischform
|
||||
AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL)
|
||||
AND status.studiensemester_kurzbz=?";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,48 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studiengang should be the same for prestudent and student.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING(prestudent_id)
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz
|
||||
WHERE
|
||||
stud.studiengang_kz != pre.studiengang_kz";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,62 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studiengang should be the same for prestudent and studienplan.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param studienordnung_id int if check is to be executed only for a certain studienordnung_id
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStgPrestudentUngleichStgStudienplan(
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$studienordnung_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id,
|
||||
stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent ps
|
||||
JOIN public.tbl_prestudentstatus USING(prestudent_id)
|
||||
JOIN lehre.tbl_studienplan stplan USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
ps.studiengang_kz<>stordnung.studiengang_kz
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND ps.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($studienordnung_id))
|
||||
{
|
||||
$qry .= " AND stordnung.studienordnung_id = ?";
|
||||
$params[] = $studienordnung_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,11 +13,14 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz);
|
||||
$prestudentRes = $this->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -40,4 +43,48 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* There shouldn't be any status after Abbrecher status.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
prestatus.status_kurzbz = 'Abbrecher'
|
||||
AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,20 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_ci->plausichecklib->getStudienplanUngueltig($studiensemester_kurzbz, $studiengang_kz);
|
||||
$prestudentRes = $this->getStudienplanUngueltig(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,4 +56,71 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Studienplan should be valid in current Ausbildungssemester of prestudent.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudienplanUngueltig(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT pre.person_id, pre.prestudent_id,
|
||||
tbl_studienplan.bezeichnung AS studienplan,
|
||||
status.status_kurzbz,
|
||||
status.studiensemester_kurzbz,
|
||||
status.ausbildungssemester,
|
||||
stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener')
|
||||
AND NOT EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_studienplan_semester
|
||||
WHERE
|
||||
studienplan_id=status.studienplan_id
|
||||
AND tbl_studienplan_semester.semester = status.ausbildungssemester
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz
|
||||
)
|
||||
AND status.studiensemester_kurzbz=?
|
||||
AND pre.bismelden
|
||||
AND stg.melderelevant";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND tbl_prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingHeimatNationOesterreich');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->incomingheimatnationoesterreich->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Incoming should have IN/OUT data entry.
|
||||
*/
|
||||
class CORE_INOUT_0008 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_INOUT_0008 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingOhneIoDatensatz');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->incomingohneiodatensatz->getIncomingOhneIoDatensatz(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@ class CORE_INOUT_0009 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/IncomingOrGsFoerderrelevant');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->incomingorgsfoerderrelevant->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Birth date of person shouldn't be too long ago.
|
||||
*/
|
||||
class CORE_PERSON_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/GbDatumWeitZurueck');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->gbdatumweitzurueck->getGbDatumWeitZurueck(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Nation of person should be austria if Gemeinde (city) is austrian.
|
||||
*/
|
||||
class CORE_PERSON_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/NationNichtOesterreichAberGemeinde');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->nationnichtoesterreichabergemeinde->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Person should have only one home adress.
|
||||
*/
|
||||
class CORE_PERSON_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlHeimatadressen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlheimatadressen->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Person should have only one delivery adress.
|
||||
*/
|
||||
class CORE_PERSON_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_PERSON_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlZustelladressen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlzustelladressen->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studiengang should be the same for prestudent and student.
|
||||
*/
|
||||
class CORE_STG_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STG_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudent');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->stgprestudentungleichstgstudent->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Orgform of a Studiengang in Studienplan should be the same as orgform of student.
|
||||
*/
|
||||
class CORE_STG_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/OrgformStgUngleichOrgformPrestudent');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->orgformstgungleichorgformprestudent->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students in "mixed" Studiengang should have Orgform.
|
||||
*/
|
||||
class CORE_STG_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/PrestudentMischformOhneOrgform');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->prestudentmischformohneorgform->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studiengang should be the same for prestudent and studienplan.
|
||||
*/
|
||||
class CORE_STG_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STG_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudienplan');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
|
||||
$checkRes = $this->_ci->stgprestudentungleichstgstudienplan->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Abbrecher cannot be active.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AbbrecherAktiv');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAbbrecherAktiv(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->abbrecheraktiv->getAbbrecherAktiv(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* There shouldn't be any status after Abbrecher status.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StudentstatusNachAbbrecher');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->studentstatusnachabbrecher->getStudentstatusNachAbbrecher(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->ausbildungssemprestudentungleichausbildungssemstatus->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with active status should have an active Benutzer.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/InaktiverStudentAktiverStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->inaktiverstudentaktiverstatus->getInaktiverStudentAktiverStatus(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students of a semester shouldn't start studies before the date of Bismeldung.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/InskriptionVorLetzerBismeldung');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->inskriptionvorletzerbismeldung->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Status Dates and status studysemester dates should be in correct order.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumStudiensemesterFalscheReihenfolge');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->datumstudiensemesterfalschereihenfolge->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with active Benutzer should have a status in the current semester.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktiverStudentOhneStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->aktiverstudentohnestatus->getAktiverStudentOhneStatus(null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Studienplan should be valid in current Ausbildungssemester of prestudent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/StudienplanUngueltig');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->studienplanungueltig->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Students with finished studies should have exactly one final exam.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/FalscheAnzahlAbschlusspruefungen');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->falscheanzahlabschlusspruefungen->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Date of final exam shouldn't be missing for Absolvent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumAbschlusspruefungFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
$checkRes = $this->_ci->datumabschlusspruefungfehlt->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Date of sponsion shouldn't be missing for Absolvent.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/DatumSponsionFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
$checkRes = $this->_ci->datumsponsionfehlt->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Bewerber should have participated in Reihungstest.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/BewerberNichtZumRtAngetreten');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->bewerbernichtzumrtangetreten->getBewerberNichtZumRtAngetreten(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Current Ausbildungssemester shouldn't be 0.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktSemesterNull');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->aktsemesternull->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Incoming shouldn't have austrian home address.
|
||||
* Prestudent should have a final status.
|
||||
*/
|
||||
class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
|
||||
{
|
||||
@@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AbschlussstatusFehlt');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
|
||||
$checkRes = $this->_ci->abschlussstatusfehlt->getAbschlussstatusFehlt(null, null, $params['prestudent_id']);
|
||||
|
||||
if (isError($checkRes)) return $checkRes;
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0015 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/PlausicheckLib');
|
||||
$this->_ci->load->library('issues/plausichecks/AktiverStudentstatusOhneKontobuchung');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung(
|
||||
$checkRes = $this->_ci->aktiverstudentstatusohnekontobuchung->getAktiverStudentstatusOhneKontobuchung(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
|
||||
@@ -30,7 +30,7 @@ class Anrechnung_model extends DB_Model
|
||||
*/
|
||||
public function createAnrechnungsantrag(
|
||||
$prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id,
|
||||
$begruendung_id, $dms_id, $anmerkung_student = null
|
||||
$begruendung_id, $dms_id, $anmerkung_student = null, $begruendung_ects = null, $begruendung_lvinhalt = null
|
||||
)
|
||||
{
|
||||
// Start DB transaction
|
||||
@@ -44,6 +44,8 @@ class Anrechnung_model extends DB_Model
|
||||
'dms_id' => $dms_id,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'anmerkung_student' => $anmerkung_student,
|
||||
'begruendung_ects' => $begruendung_ects,
|
||||
'begruendung_lvinhalt' => $begruendung_lvinhalt,
|
||||
'insertvon' => $this->_uid
|
||||
));
|
||||
|
||||
|
||||
@@ -204,4 +204,14 @@ class Studiensemester_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
public function getAktAndFutureSemester()
|
||||
{
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE start >= NOW() OR (start <= NOW() AND ende >= NOW())
|
||||
ORDER BY start';
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -326,10 +326,12 @@ class Person_model extends DB_Model
|
||||
|
||||
SELECT p2.person_id
|
||||
FROM tbl_person p1
|
||||
JOIN tbl_prestudent ps ON p1.person_id = ps.person_id
|
||||
INNER JOIN (
|
||||
SELECT vorname, nachname, gebdatum, person_id
|
||||
FROM tbl_person
|
||||
) p2
|
||||
SELECT vorname, nachname, gebdatum, person.person_id
|
||||
FROM tbl_person person
|
||||
JOIN tbl_prestudent sps ON person.person_id = sps.person_id
|
||||
) p2
|
||||
ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
|
||||
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
class Fehlerkonfiguration_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'system.tbl_fehler_konfiguration';
|
||||
$this->pk = array('konfigurationstyp_kurzbz', 'fehlercode');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all set configuration parameters, optionally filtered by app.
|
||||
* @param string $app
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getKonfiguration($app = null)
|
||||
{
|
||||
$fehlerkonfiguration = array();
|
||||
|
||||
$this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler fehler', 'fehlercode');
|
||||
$fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfigurationData = getData($fehlerkonfigurationRes);
|
||||
foreach ($fehlerkonfigurationData as $fk)
|
||||
{
|
||||
$konf = json_decode($fk->konfiguration);
|
||||
if (is_array($konf))
|
||||
{
|
||||
$fk->konfiguration = $konf;
|
||||
$fehlerkonfiguration[] = $fk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success($fehlerkonfiguration);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
class Fehlerkonfigurationstyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'system.tbl_fehler_konfigurationstyp';
|
||||
$this->pk = array('konfigurationstyp_kurzbz');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all set configuration parameters, optionally filtered by app.
|
||||
* @param string $app
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getKonfiguration($app = null)
|
||||
{
|
||||
$fehlerkonfiguration = array();
|
||||
|
||||
$this->addSelect('fehlercode, konfigurationstyp_kurzbz, konfiguration, fehler_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler_konfigurationstyp konftyp', 'konfigurationstyp_kurzbz');
|
||||
$this->addJoin('system.tbl_fehler fehler', 'fehlercode');
|
||||
$fehlerkonfigurationRes = isset($app) ? $this->loadWhere(array('fehler.app' => $app)) : $this->load();
|
||||
|
||||
if (isError($fehlerkonfigurationRes)) return $fehlerkonfigurationRes;
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
$fehlerkonfigurationData = getData($fehlerkonfigurationRes);
|
||||
foreach ($fehlerkonfigurationData as $fk)
|
||||
{
|
||||
$konf = json_decode($fk->konfiguration);
|
||||
if (is_array($konf))
|
||||
{
|
||||
$fk->konfiguration = $konf;
|
||||
$fehlerkonfiguration[] = $fk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success($fehlerkonfiguration);
|
||||
}
|
||||
}
|
||||
@@ -92,85 +92,93 @@ $this->load->view(
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="col-lg-4">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<td><?php echo $antragData->matrikelnr ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<td><?php echo $antragData->stg_bezeichnung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<td><?php echo $antragData->lv_bezeichnung ?></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td colspan="3"><span id="ects"><?php echo $antragData->ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4">
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td>
|
||||
<?php $len = count($antragData->lektoren) - 1 ?>
|
||||
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
|
||||
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
|
||||
echo $key === $len ? '' : ', ' ?>
|
||||
<?php endforeach; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><span id="ects"><?php echo $antragData->ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-5">
|
||||
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
|
||||
<span class="approveAnrechnungDetail-anrechnungEctsTooltip"
|
||||
data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</th>
|
||||
<td colspan="3">
|
||||
<td>
|
||||
Total: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
|
||||
[Schulisch: <span id="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>"><?php echo $antragData->sumEctsSchulisch ?></span> /
|
||||
Beruflich: <span id="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>"><?php echo $antragData->sumEctsBeruflich ?></span> ]
|
||||
<span id="sumEctsMsg"></span>
|
||||
<span id="sumEctsMsg"></span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td colspan="3">
|
||||
<?php $len = count($antragData->lektoren) - 1 ?>
|
||||
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
|
||||
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
|
||||
echo $key === $len ? '' : ', ' ?>
|
||||
<?php endforeach; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td colspan="3"><?php echo $antragData->zgv ?></td>
|
||||
<th class="col-xs-3"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td><?php echo $antragData->zgv ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
|
||||
<td colspan="3"><?php echo $anrechnungData->anmerkung ?></td>
|
||||
<td><?php echo $anrechnungData->anmerkung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
|
||||
<td colspan="3">
|
||||
<td>
|
||||
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
|
||||
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
|
||||
<td colspan="3"><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
|
||||
<td><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungEctsLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungLvinhaltLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_lvinhalt ?></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<?php
|
||||
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
|
||||
const CHAR_LENGTH125 = 125;
|
||||
const CHAR_LENGTH150 = 150;
|
||||
const CHAR_LENGTH500 = 500;
|
||||
const CHAR_LENGTH1000 = 1000;
|
||||
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
@@ -197,6 +200,46 @@ $this->load->view(
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Begruendung ECTS -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<b><?php echo $this->p->t('anrechnung', 'begruendungEcts'); ?></b> 
|
||||
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungBegruendungEctsTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<textarea class="form-control" name="begruendung_ects" rows="1" id="requestAnrechnung-begruendungEcts"
|
||||
maxlength="<?php echo CHAR_LENGTH150 ?>" required><?php echo $anrechnungData->begruendung_ects; ?></textarea>
|
||||
<small><span class="text-muted pull-right"><?php echo $this->p->t('ui', 'maxZeichen'); ?> :<span id="requestAnrechnung-begruendungEcts-charCounter"><?php echo CHAR_LENGTH150 ?></span></span></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Begruendung LV Inhalt -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<b><?php echo $this->p->t('anrechnung', 'begruendungLvinhalt'); ?></b> 
|
||||
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
|
||||
title="<?php echo $this->p->t('anrechnung', 'anrechnungBegruendungLvinhaltTooltipText'); ?>">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<textarea class="form-control" name="begruendung_lvinhalt" rows="7" id="requestAnrechnung-begruendungLvinhalt"
|
||||
minlength="<?php echo CHAR_LENGTH500 ?>"
|
||||
maxlength="<?php echo CHAR_LENGTH1000 ?>" required><?php echo $anrechnungData->begruendung_lvinhalt; ?></textarea>
|
||||
<small><span class="text-muted pull-right"> / <?php echo $this->p->t('ui', 'maxZeichen'); ?> :<span id="requestAnrechnung-begruendungLvinhalt-charCounterMax"><?php echo CHAR_LENGTH1000 ?></span></span></small>
|
||||
<small><span class="text-muted pull-right"><?php echo $this->p->t('ui', 'fehlendeMinZeichen'); ?> :<span id="requestAnrechnung-begruendungLvinhalt-charCounterMin"><?php echo CHAR_LENGTH500 ?></span></span></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Dokument Upload-->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
@@ -242,8 +285,8 @@ $this->load->view(
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<textarea class="form-control" name="anmerkung" rows="1" id="requestAnrechnung-herkunftDerKenntnisse"
|
||||
maxlength="<?php echo HERKUNFT_DER_KENNTNISSE_MAX_LENGTH ?>" required><?php echo $anrechnungData->anmerkung; ?></textarea>
|
||||
<small><span class="text-muted pull-right"><?php echo $this->p->t('ui', 'maxZeichen'); ?> :<span id="requestAnrechnung-herkunftDerKenntnisse-charCounter"><?php echo HERKUNFT_DER_KENNTNISSE_MAX_LENGTH ?></span></span></small>
|
||||
maxlength="<?php echo CHAR_LENGTH125 ?>" required><?php echo $anrechnungData->anmerkung; ?></textarea>
|
||||
<small><span class="text-muted pull-right"><?php echo $this->p->t('ui', 'maxZeichen'); ?> :<span id="requestAnrechnung-herkunftDerKenntnisse-charCounter"><?php echo CHAR_LENGTH125 ?></span></span></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,6 +16,23 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Referenzbeispiele ECTS Berechnung panel -->
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading" role="tab" id="headingBegruendung">
|
||||
<h4 class="panel-title">
|
||||
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseBegruendung"
|
||||
aria-expanded="false" aria-controls="collapseBegruendung">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapseBegruendung" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingBegruendung">
|
||||
<div class="panel-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Nachweisdokumente: Voraussetzung panel -->
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading" role="tab" id="headingTwo">
|
||||
|
||||
@@ -84,49 +84,50 @@ $this->load->view(
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="col-lg-4">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
|
||||
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
|
||||
<td><?php echo $antragData->matrikelnr ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
|
||||
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<th class="col-xs-5"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
|
||||
<td><?php echo $antragData->stg_bezeichnung ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
|
||||
<td><?php echo $antragData->lv_bezeichnung ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><?php echo $antragData->ects ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td>
|
||||
<tr>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'ects'); ?></th>
|
||||
<td><?php echo $antragData->ects ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-5"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
|
||||
<td>
|
||||
<?php $len = count($antragData->lektoren) - 1 ?>
|
||||
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
|
||||
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
|
||||
echo $key === $len ? '' : ', ' ?>
|
||||
<?php endforeach; ?>
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<table class="table table-bordered table-condensed table-fixed">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
|
||||
<td><?php echo $antragData->zgv ?></td>
|
||||
@@ -142,6 +143,14 @@ $this->load->view(
|
||||
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungEctsLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_ects ?></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'begruendungLvinhaltLabel'); ?></th>
|
||||
<td><span><?php echo $anrechnungData->begruendung_lvinhalt ?></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -15,6 +15,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading" role="tab" id="headingBegruendung">
|
||||
<h4 class="panel-title">
|
||||
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseBegruendung"
|
||||
aria-expanded="false" aria-controls="collapseBegruendung">
|
||||
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i> 
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungTitle'); ?>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapseBegruendung" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingBegruendung">
|
||||
<div class="panel-body">
|
||||
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoEctsBerechnungBody'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading" role="tab" id="headingZero">
|
||||
<h4 class="panel-title">
|
||||
|
||||
@@ -25,6 +25,7 @@ SELECT
|
||||
lv_oe_kurzbz,
|
||||
lektor,
|
||||
stunden,
|
||||
stundensatz,
|
||||
betrag,
|
||||
vertrag_id,
|
||||
vertrag_stunden,
|
||||
@@ -149,6 +150,7 @@ FROM
|
||||
END AS "lv_oe_kurzbz",
|
||||
(person.nachname || \' \' || person.vorname) AS "lektor",
|
||||
TRUNC(lema.semesterstunden, 1) AS "stunden",
|
||||
lema.stundensatz,
|
||||
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
|
||||
vertrag_id,
|
||||
vertragsstunden AS "vertrag_stunden",
|
||||
@@ -270,6 +272,7 @@ FROM
|
||||
END AS "lv_oe_kurzbz",
|
||||
(nachname || \' \' || vorname) AS "lektor",
|
||||
TRUNC(pb.stunden, 1) AS "stunden",
|
||||
pb.stundensatz,
|
||||
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
|
||||
vertrag_id,
|
||||
vertragsstunden AS "vertrag_stunden",
|
||||
@@ -325,6 +328,7 @@ $filterWidgetArray = array(
|
||||
ucfirst($this->p->t('lehre', 'organisationseinheit')),
|
||||
ucfirst($this->p->t('lehre', 'lektor')),
|
||||
ucfirst($this->p->t('ui', 'stunden')),
|
||||
ucfirst($this->p->t('ui', 'stundensatz')),
|
||||
ucfirst($this->p->t('ui', 'betrag')),
|
||||
ucfirst($this->p->t('ui', 'vertrag')). '-ID',
|
||||
ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'stunden')),
|
||||
@@ -399,6 +403,8 @@ $filterWidgetArray = array(
|
||||
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
||||
bottomCalc:"sum", bottomCalcParams:{precision:1}},
|
||||
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
|
||||
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
||||
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
|
||||
|
||||
@@ -435,7 +435,7 @@ $filterWidgetArray = array(
|
||||
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
||||
bottomCalc:"sum", bottomCalcParams:{precision:1}},
|
||||
stundensatz: {visible: false, align:"right", formatter: form_formatNulltoStringNumber,
|
||||
stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber,
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
|
||||
betrag: {align:"right", formatter: form_formatNulltoStringNumber,
|
||||
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
$this->config->load('infocenter');
|
||||
$APP = '\'infocenter\'';
|
||||
$ABGEWIESENEN_STATUS = '\'Abgewiesener\'';
|
||||
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
|
||||
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
|
||||
@@ -17,6 +18,8 @@ $query = '
|
||||
p.nachname AS "Nachname",
|
||||
so.studiengangkurzbzlang as "Studiengang",
|
||||
pss.insertamum AS "AbgewiesenAm",
|
||||
pl.zeitpunkt AS "LockDate",
|
||||
pl.lockuser AS "LockUser",
|
||||
(
|
||||
SELECT l.zeitpunkt
|
||||
FROM system.tbl_log l
|
||||
@@ -54,6 +57,15 @@ $query = '
|
||||
JOIN public.tbl_studiengang sg USING(studiengang_kz)
|
||||
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
|
||||
LEFT JOIN (
|
||||
SELECT tpl.person_id,
|
||||
tpl.zeitpunkt,
|
||||
sp.nachname AS lockuser
|
||||
FROM system.tbl_person_lock tpl
|
||||
JOIN public.tbl_benutzer sb USING (uid)
|
||||
JOIN public.tbl_person sp ON sb.person_id = sp.person_id
|
||||
WHERE tpl.app = '.$APP.'
|
||||
) pl USING(person_id)
|
||||
WHERE pss.status_kurzbz = '. $ABGEWIESENEN_STATUS .'
|
||||
AND pss.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
|
||||
AND (sg.typ IN ('. $STUDIENGANG_TYP .')
|
||||
@@ -70,6 +82,7 @@ $query = '
|
||||
'requiredPermissions' => 'infocenter',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'checkboxes' => 'PersonId',
|
||||
'additionalColumns' => array('Details'),
|
||||
'columnsAliases' => array(
|
||||
'PersonId',
|
||||
'PreStudentID',
|
||||
@@ -77,11 +90,23 @@ $query = '
|
||||
ucfirst($this->p->t('person', 'nachname')),
|
||||
ucfirst($this->p->t('lehre', 'studiengang')),
|
||||
ucfirst($this->p->t('infocenter', 'abgewiesenam')),
|
||||
ucfirst($this->p->t('global', 'sperrdatum')),
|
||||
ucfirst($this->p->t('global', 'gesperrtVon')),
|
||||
ucfirst($this->p->t('global', 'nachricht')),
|
||||
ucfirst($this->p->t('infocenter', 'kaution'))
|
||||
),
|
||||
|
||||
'formatRow' => function($datasetRaw) {
|
||||
/* NOTE: Dont use $this here for PHP Version compatibility */
|
||||
$datasetRaw->{'Details'} = sprintf(
|
||||
'<a href="%s?person_id=%s&origin_page=%s&fhc_controller_id=%s&prev_filter_id=%s">Details</a>',
|
||||
site_url('system/infocenter/InfoCenter/showDetails'),
|
||||
$datasetRaw->{'PersonId'},
|
||||
'abgewiesen',
|
||||
(isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''),
|
||||
(isset($_GET['filter_id']) ? $_GET['filter_id'] : '')
|
||||
);
|
||||
|
||||
if ($datasetRaw->{'Nachricht'} === null)
|
||||
{
|
||||
$datasetRaw->{'Nachricht'} = 'Nein';
|
||||
@@ -103,10 +128,29 @@ $query = '
|
||||
{
|
||||
$datasetRaw->{'Kaution'} = 'Offen';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'LockDate'} == null)
|
||||
{
|
||||
$datasetRaw->{'LockDate'} = '-';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'LockUser'} == null)
|
||||
{
|
||||
$datasetRaw->{'LockUser'} = '-';
|
||||
}
|
||||
|
||||
$datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i');
|
||||
return $datasetRaw;
|
||||
},
|
||||
|
||||
'markRow' => function($datasetRaw) {
|
||||
|
||||
if ($datasetRaw->LockDate != null)
|
||||
{
|
||||
return FilterWidget::DEFAULT_MARK_ROW_CLASS;
|
||||
}
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Info Center',
|
||||
'jquery3' => true,
|
||||
'jqueryui1' => true,
|
||||
'jquerycheckboxes1' => true,
|
||||
'bootstrap3' => true,
|
||||
'fontawesome4' => true,
|
||||
'sbadmintemplate3' => true,
|
||||
'tablesorter2' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'dialoglib' => true,
|
||||
'phrases' => array(
|
||||
'person' => array('vorname', 'nachname'),
|
||||
'global' => array('mailAnXversandt'),
|
||||
'ui' => array('bitteEintragWaehlen')
|
||||
),
|
||||
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'),
|
||||
'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
Aufgenommen
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<?php $this->load->view('system/infocenter/infocenterAufgenommenData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
$this->config->load('infocenter');
|
||||
$AUFGENOMMENER_STATUS = '\'Aufgenommener\'';
|
||||
$REJECTED_STATUS = '\'Abgewiesener\'';
|
||||
$STUDIENGANG_TYP = '\'l\'';
|
||||
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
|
||||
$LOGDATA_NAME = '\'Message sent\'';
|
||||
$LOGDATA_VON = '\'online\'';
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
p.person_id AS "PersonId",
|
||||
p.vorname AS "Vorname",
|
||||
p.nachname AS "Nachname",
|
||||
(
|
||||
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ) || UPPER(sg.kurzbz)), \', \')
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
JOIN public.tbl_prestudent ps USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang sg USING(studiengang_kz)
|
||||
WHERE
|
||||
pss.status_kurzbz = '. $AUFGENOMMENER_STATUS .'
|
||||
AND ps.person_id = p.person_id
|
||||
AND sg.typ IN ('.$STUDIENGANG_TYP.')
|
||||
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM tbl_prestudentstatus spss
|
||||
WHERE spss.prestudent_id = pss.prestudent_id
|
||||
AND spss.status_kurzbz = '. $REJECTED_STATUS .'
|
||||
AND spss.studiensemester_kurzbz IN (
|
||||
SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >
|
||||
(SELECT start FROM public.tbl_studiensemester sss WHERE studiensemester_kurzbz = '. $STUDIENSEMESTER .'))
|
||||
)
|
||||
LIMIT 1
|
||||
) AS "Studiengang"
|
||||
FROM
|
||||
public.tbl_person p
|
||||
WHERE
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudent sps
|
||||
JOIN public.tbl_studiengang ssg USING(studiengang_kz)
|
||||
WHERE sps.person_id = p.person_id
|
||||
AND ssg.typ IN (' . $STUDIENGANG_TYP . ')
|
||||
AND ' . $AUFGENOMMENER_STATUS . ' = (
|
||||
SELECT spss.status_kurzbz
|
||||
FROM public.tbl_prestudentstatus spss
|
||||
WHERE spss.prestudent_id = sps.prestudent_id
|
||||
ORDER BY spss.datum DESC, spss.insertamum DESC, spss.ext_id DESC
|
||||
LIMIT 1
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM tbl_prestudentstatus spss
|
||||
WHERE spss.prestudent_id = sps.prestudent_id
|
||||
AND spss.status_kurzbz = ' . $AUFGENOMMENER_STATUS . '
|
||||
AND spss.studiensemester_kurzbz = ' . $STUDIENSEMESTER . '
|
||||
)
|
||||
)
|
||||
|
||||
';
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => $query,
|
||||
'app' => InfoCenter::APP,
|
||||
'datasetName' => 'aufgenommen',
|
||||
'filter_id' => $this->input->get('filter_id'),
|
||||
'requiredPermissions' => 'infocenter',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'checkboxes' => 'PersonId',
|
||||
'additionalColumns' => array('Details'),
|
||||
'columnsAliases' => array(
|
||||
'PersonId',
|
||||
ucfirst($this->p->t('person', 'vorname')) ,
|
||||
ucfirst($this->p->t('person', 'nachname')),
|
||||
ucfirst($this->p->t('lehre', 'studiengang'))
|
||||
),
|
||||
|
||||
'formatRow' => function($datasetRaw)
|
||||
{
|
||||
$datasetRaw->{'Details'} = sprintf(
|
||||
'<a href="%s?person_id=%s&origin_page=%s&fhc_controller_id=%s&prev_filter_id=%s">Details</a>',
|
||||
site_url('system/infocenter/InfoCenter/showDetails'),
|
||||
$datasetRaw->{'PersonId'},
|
||||
'aufgenommen',
|
||||
(isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''),
|
||||
(isset($_GET['filter_id']) ? $_GET['filter_id'] : '')
|
||||
);
|
||||
return $datasetRaw;
|
||||
}
|
||||
);
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
?>
|
||||
@@ -57,10 +57,11 @@
|
||||
if (isset($lockedby)):
|
||||
echo $this->p->t('global', 'wirdBearbeitetVon').': ';
|
||||
echo $lockedby;
|
||||
if ($origin_page == 'index'):
|
||||
if (in_array($origin_page, array('index', 'abgewiesen'))):
|
||||
$unlockpath = 'unlockPerson/'.$stammdaten->person_id;
|
||||
$unlockpath .= '?fhc_controller_id='.$fhc_controller_id;
|
||||
$unlockpath .= '&filter_id='.$prev_filter_id;
|
||||
$unlockpath .= '&origin_page='.$origin_page;
|
||||
?>
|
||||
|
||||
<a href="<?php echo $unlockpath; ?>">
|
||||
|
||||
@@ -6,7 +6,6 @@ $ALL_FUNKTIONEN_OE_KURZBZ = "('" . implode("','", array_keys($all_funktionen_oe_
|
||||
// all oes for which logged user has issues permissions, including permissions for "special" issue funktion
|
||||
$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')";
|
||||
$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')";
|
||||
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
|
||||
|
||||
// get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes
|
||||
$query = "WITH zustaendigkeiten AS (
|
||||
@@ -34,73 +33,97 @@ $query = "WITH zustaendigkeiten AS (
|
||||
FROM system.tbl_fehler_zustaendigkeiten zst
|
||||
)";
|
||||
|
||||
$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
|
||||
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
|
||||
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
|
||||
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
|
||||
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
|
||||
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
|
||||
(
|
||||
/* show all relevant Studiengänge of person and wether it is an employee*/
|
||||
SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
|
||||
|| (CASE WHEN EXISTS (
|
||||
SELECT 1 FROM public.tbl_mitarbeiter ma
|
||||
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
|
||||
WHERE person_id = prestudents.person_id
|
||||
AND ben.aktiv
|
||||
) THEN ' | Mitarbeiter' ELSE '' END)
|
||||
FROM (
|
||||
SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
|
||||
FROM public.tbl_prestudent ps
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
WHERE person_id = pers.person_id
|
||||
ORDER BY prestudent_id DESC
|
||||
) prestudents
|
||||
WHERE last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
|
||||
GROUP BY person_id
|
||||
LIMIT 1;
|
||||
) AS \"Zugehörigkeit\",
|
||||
CASE
|
||||
WHEN
|
||||
EXISTS(SELECT 1
|
||||
FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
|
||||
THEN 'Ja'
|
||||
WHEN
|
||||
EXISTS(SELECT 1
|
||||
FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
|
||||
THEN 'Nein'
|
||||
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
|
||||
END AS \"Hauptzuständig\",
|
||||
(
|
||||
SELECT string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
|
||||
FROM system.tbl_fehler_zustaendigkeiten
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE fehlercode = fr.fehlercode
|
||||
GROUP BY fehlercode
|
||||
) AS \"Person Zuständigkeiten\",
|
||||
(
|
||||
SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
|
||||
FROM system.tbl_fehler_zustaendigkeiten
|
||||
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
|
||||
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
|
||||
WHERE fehlercode = fr.fehlercode
|
||||
GROUP BY fehlercode
|
||||
) AS \"Organisationseinheit Zuständigkeiten\",
|
||||
pers.bpk AS \"BPK\",
|
||||
pers.matr_nr AS \"Matrikelnummer\"
|
||||
FROM system.tbl_issue iss
|
||||
JOIN system.tbl_fehler fr USING (fehlercode)
|
||||
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
|
||||
JOIN system.tbl_issue_status stat USING (status_kurzbz)
|
||||
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
|
||||
WHERE EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
|
||||
SELECT 1 FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = TRUE)";
|
||||
$query .= "
|
||||
SELECT
|
||||
issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
|
||||
inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
|
||||
ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\",
|
||||
stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\",
|
||||
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
|
||||
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
|
||||
pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
|
||||
(
|
||||
/* show all relevant Studiengänge of person and wether it is an employee*/
|
||||
SELECT
|
||||
STRING_AGG(studiengang || ' ' || last_status, ' | ')
|
||||
|| (CASE WHEN EXISTS (
|
||||
SELECT 1 FROM public.tbl_mitarbeiter ma
|
||||
JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
|
||||
WHERE person_id = prestudents.person_id
|
||||
AND ben.aktiv
|
||||
) THEN ' | Mitarbeiter' ELSE '' END)
|
||||
FROM (
|
||||
SELECT
|
||||
DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang,
|
||||
get_rolle_prestudent(ps.prestudent_id, null) AS last_status
|
||||
FROM
|
||||
public.tbl_prestudent ps
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
WHERE
|
||||
person_id = pers.person_id
|
||||
ORDER BY
|
||||
prestudent_id DESC
|
||||
) prestudents
|
||||
WHERE
|
||||
last_status IN ('Abgewiesener','Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
|
||||
GROUP BY
|
||||
person_id
|
||||
LIMIT 1;
|
||||
) AS \"Zugehörigkeit\",
|
||||
CASE
|
||||
WHEN
|
||||
EXISTS(SELECT 1
|
||||
FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = TRUE) /* If Zuständigkeit is defined for the oe/person, zustaendig. */
|
||||
THEN 'Ja'
|
||||
WHEN
|
||||
EXISTS(SELECT 1
|
||||
FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = FALSE) /* If Zuständigkeit is defined for different oe/person, not zustaendig. */
|
||||
THEN 'Nein'
|
||||
ELSE 'Ja' /* If no Zuständigkeit defined, zustaendig by default. */
|
||||
END AS \"Hauptzuständig\",
|
||||
(
|
||||
SELECT
|
||||
string_agg(vorname || ' ' || nachname, ' | ' ORDER BY vorname, nachname)
|
||||
FROM
|
||||
system.tbl_fehler_zustaendigkeiten
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
WHERE
|
||||
fehlercode = fr.fehlercode
|
||||
GROUP BY
|
||||
fehlercode
|
||||
) AS \"Person Zuständigkeiten\",
|
||||
(
|
||||
SELECT
|
||||
string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung ||
|
||||
COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
|
||||
FROM
|
||||
system.tbl_fehler_zustaendigkeiten
|
||||
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
|
||||
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
|
||||
WHERE
|
||||
fehlercode = fr.fehlercode
|
||||
GROUP BY
|
||||
fehlercode
|
||||
) AS \"Organisationseinheit Zuständigkeiten\",
|
||||
pers.bpk AS \"BPK\",
|
||||
pers.matr_nr AS \"Matrikelnummer\"
|
||||
FROM
|
||||
system.tbl_issue iss
|
||||
JOIN system.tbl_fehler fr USING (fehlercode)
|
||||
JOIN system.tbl_fehlertyp ftyp USING (fehlertyp_kurzbz)
|
||||
JOIN system.tbl_issue_status stat USING (status_kurzbz)
|
||||
LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id
|
||||
WHERE
|
||||
fr.app IN ('core', 'dvuh')
|
||||
AND (
|
||||
EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */
|
||||
SELECT 1 FROM zustaendigkeiten
|
||||
WHERE fehlercode = iss.fehlercode
|
||||
AND zustaendig = TRUE)";
|
||||
|
||||
// show issue if it is assigend to oe of logged in user or to student of oe of logged in user
|
||||
if (!isEmptyArray($all_oe_kurzbz_berechtigt))
|
||||
@@ -131,6 +154,7 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
|
||||
)
|
||||
)";
|
||||
}
|
||||
$query .= ") ";
|
||||
|
||||
$query .= " ORDER BY
|
||||
CASE
|
||||
@@ -146,17 +170,18 @@ $query .= " ORDER BY
|
||||
datum DESC, fehlercode, issue_id DESC";
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => $query,
|
||||
'query' => $query,
|
||||
'app' => 'core',
|
||||
'datasetName' => 'issues',
|
||||
'filter_id' => $this->input->get('filter_id'),
|
||||
'tableUniqueId' => 'issues',
|
||||
'requiredPermissions' => 'system/issues_verwalten',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'tableUniqueId' => 'issues',
|
||||
'requiredPermissions' => 'system/issues_verwalten',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'checkboxes' => 'issue_id',
|
||||
'columnsAliases' => array(
|
||||
'ID',
|
||||
'columnsAliases' => array(
|
||||
'ID',
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlercodeExtern')),
|
||||
ucfirst($this->p->t('global', 'datum')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'inhalt')),
|
||||
@@ -176,10 +201,15 @@ $filterWidgetArray = array(
|
||||
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten')),
|
||||
'BPK',
|
||||
'Matrikelnummer'
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
'BPK',
|
||||
'Matrikelnummer'
|
||||
),
|
||||
'formatRow' => function ($datasetRaw) {
|
||||
|
||||
if ($datasetRaw->{'Fehler Kurzbezeichnung'} == null)
|
||||
{
|
||||
$datasetRaw->{'Fehler Kurzbezeichnung'} = '-';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'Fehlercode extern'} == null)
|
||||
{
|
||||
@@ -238,7 +268,7 @@ $filterWidgetArray = array(
|
||||
|
||||
return $datasetRaw;
|
||||
},
|
||||
'markRow' => function($datasetRaw) {
|
||||
'markRow' => function ($datasetRaw) {
|
||||
|
||||
$mark = '';
|
||||
|
||||
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Fehler Konfiguration',
|
||||
'jquery3' => true,
|
||||
'jqueryui1' => true,
|
||||
'jquerycheckboxes1' => true,
|
||||
'bootstrap3' => true,
|
||||
'fontawesome4' => true,
|
||||
'sbadmintemplate3' => true,
|
||||
'tablesorter2' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'dialoglib' => true,
|
||||
'phrases' => array(
|
||||
'ui',
|
||||
'fehlermonitoring'
|
||||
),
|
||||
'customCSSs' => array('public/css/issues/issuesKonfiguration.css', 'public/css/sbadmin2/tablesort_bootstrap.css'),
|
||||
'customJSs' => array('public/js/issues/issuesKonfiguration.js', 'public/js/bootstrapper.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
<?php echo $this->p->t('fehlermonitoring', 'fehlerKonfiguration') ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-4">
|
||||
<div class="panel panel-default">
|
||||
<table class="table table-bordered" id="fehlercodeSelectTable">
|
||||
<tr>
|
||||
<td>
|
||||
<label for="fehlerappSelect">App</label>
|
||||
<select class="form-control" name="fehlerappSelect" id="fehlerappSelect">
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<div class="panel panel-default">
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<td class="tableCellNoRightBorder">
|
||||
<label for="konfigSelect"><?php echo $this->p->t('fehlermonitoring', 'konfigurationstyp') ?></label>
|
||||
<select class="form-control" name="konfigSelect" id="konfigSelect">
|
||||
</select>
|
||||
<i class="fa fa-info-circle" id="konfigurationstypInfoIcon"></i>
|
||||
</td>
|
||||
<td class="tableCellNoLeftBorder">
|
||||
<label for="fehlercodeSelect"><?php echo $this->p->t('fehlermonitoring', 'fehlercode') ?></label>
|
||||
<select class="form-control" name="fehlercodeSelect" id="fehlercodeSelect">
|
||||
</select>
|
||||
<i class="fa fa-info-circle" id="fehlercodeInfoIcon"></i>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" name="konfigurationsWert" id="konfigurationsWert"
|
||||
placeholder="<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertPlatzhalter') ?>">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-default" id="assignKonfiguration">
|
||||
<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertZuweisen') ?>
|
||||
</button>
|
||||
<button class="btn btn-default" id="deleteKonfiguration">
|
||||
<?php echo $this->p->t('fehlermonitoring', 'konfigurationswertLoeschen') ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div>
|
||||
<?php $this->load->view('system/issues/issuesKonfigurationData.php'); ?>
|
||||
</div>
|
||||
<div class="modal fade" id="fehlerInfo" tabindex="-1"
|
||||
role="dialog"
|
||||
aria-labelledby="fehlerInfoLabel"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close"
|
||||
data-dismiss="modal"
|
||||
aria-hidden="true">×
|
||||
</button>
|
||||
<h4 class="modal-title" id="fehlerInfoLabel">
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="fehlerInfoContent">
|
||||
<table class="table table-condensed table-bordered">
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlercode')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="fehlercodeInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="fehlerkurzbzInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertyp')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="fehlertypInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'fehlertext')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="fehlertextInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal-fade -->
|
||||
<div class="modal fade" id="konfigurationsInfo" tabindex="-1"
|
||||
role="dialog"
|
||||
aria-labelledby="konfigurationstypInfoLabel"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close"
|
||||
data-dismiss="modal"
|
||||
aria-hidden="true">×
|
||||
</button>
|
||||
<h4 class="modal-title" id="konfigurationstypInfoLabel">
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body" id="konfigurationstypInfoContent">
|
||||
<table class="table table-condensed table-bordered">
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="konfigurationstypInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="konfigurationsbeschreibungInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><?php echo ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')) ?></b>
|
||||
</td>
|
||||
<td>
|
||||
<span id="konfigurationsdatentypInfo"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal-fade -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
// get assigned Konfiguration
|
||||
$query = "SELECT
|
||||
konftyp.konfigurationstyp_kurzbz, fe.fehlercode, fe.fehler_kurzbz, konf.konfiguration, fe.app,
|
||||
konftyp.beschreibung AS konfigurationsbeschreibung, konftyp.konfigurationsdatentyp, fe.fehlertext
|
||||
FROM
|
||||
system.tbl_fehler_konfiguration konf
|
||||
JOIN system.tbl_fehler_konfigurationstyp konftyp USING (konfigurationstyp_kurzbz)
|
||||
JOIN system.tbl_fehler fe USING (fehlercode)
|
||||
ORDER BY
|
||||
konf.konfigurationstyp_kurzbz, fe.fehlercode";
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => $query,
|
||||
'app' => 'core',
|
||||
'datasetName' => 'fehlerKonfiguration',
|
||||
'filter_id' => $this->input->get('filter_id'),
|
||||
'tableUniqueId' => 'issuesKonfiguration',
|
||||
'requiredPermissions' => 'admin',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'additionalColumns' => array('Delete'),
|
||||
'columnsAliases' => array(
|
||||
ucfirst($this->p->t('fehlermonitoring', 'konfigurationstyp')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlercode')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlerkurzbz')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'konfigurationswert')),
|
||||
'Application',
|
||||
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsbeschreibung')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'konfigurationsdatentyp')),
|
||||
ucfirst($this->p->t('fehlermonitoring', 'fehlertext')),
|
||||
),
|
||||
'formatRow' => function($datasetRaw) {
|
||||
|
||||
$datasetRaw->{'Delete'} =
|
||||
"<button
|
||||
data-konfigurationstyp-kurzbz='".$datasetRaw->{'konfigurationstyp_kurzbz'}."'
|
||||
data-fehlercode='".$datasetRaw->{'fehlercode'}."'
|
||||
class='btn btn-default deleteBtn'>"
|
||||
.ucfirst($this->p->t('ui', 'loeschen'))."</button>";
|
||||
|
||||
if ($datasetRaw->{'konfigurationsbeschreibung'} == null)
|
||||
{
|
||||
$datasetRaw->{'konfigurationsbeschreibung'} = '-';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'fehlertext'} == null)
|
||||
{
|
||||
$datasetRaw->{'fehlertext'} = '-';
|
||||
}
|
||||
|
||||
return $datasetRaw;
|
||||
}
|
||||
);
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
@@ -71,9 +71,9 @@ $this->load->view(
|
||||
<label>Fehler</label>
|
||||
<select class="form-control" name="fehler_kurzbz" id="fehler_kurzbz">
|
||||
<option value="" selected="selected">Alle</option>';
|
||||
<?php foreach ($fehler as $fehler_kurzbz):?>
|
||||
<?php foreach ($fehlerKurzbzCodeMappings as $fehler_kurzbz => $fehlercode):?>
|
||||
<option value="<?php echo $fehler_kurzbz ?>">
|
||||
<?php echo $fehler_kurzbz ?>
|
||||
<?php echo $fehler_kurzbz.' ('.$fehlercode.')' ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
if ($bootstrap3 === true) generateJSsInclude('vendor/twbs/bootstrap3/dist/js/bootstrap.min.js');
|
||||
|
||||
// Bootstrap 5 JS
|
||||
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.min.js');
|
||||
if ($bootstrap5 === true) generateJSsInclude('vendor/twbs/bootstrap5/dist/js/bootstrap.bundle.min.js');
|
||||
|
||||
// Moment JS
|
||||
if ($momentjs2 === true)
|
||||
|
||||
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
|
||||
require_once('../../../include/projektarbeit.class.php');
|
||||
require_once('../../../include/projektbetreuer.class.php');
|
||||
require_once('../../../include/sancho.inc.php');
|
||||
require_once('../../../application/libraries/SignatureLib.php');
|
||||
|
||||
if (!$db = new basis_db())
|
||||
$db=false;
|
||||
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
|
||||
$htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n";
|
||||
$htmlstr .= "<input type='hidden' name='command' value='update'>\n";
|
||||
$htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n";
|
||||
if(!$row->abgabedatum)
|
||||
|
||||
$uploadedDocumentSigned = null;
|
||||
if (!$row->abgabedatum)
|
||||
{
|
||||
if ($row->datum<date('Y-m-d'))
|
||||
{
|
||||
@@ -626,8 +629,7 @@ while ($row=@$db->db_fetch_object($result))
|
||||
$fcol='#000000';
|
||||
}
|
||||
}
|
||||
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked=\"checked\"':'')." >";
|
||||
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
|
||||
|
||||
if($row->fixtermin=='t')
|
||||
{
|
||||
$htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>";
|
||||
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
|
||||
$htmlstr .= " </select></td>\n";
|
||||
$htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n";
|
||||
$htmlstr .= " <td>".($row->abgabedatum==''?' ':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n";
|
||||
if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
|
||||
|
||||
if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
|
||||
{
|
||||
$htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>";
|
||||
|
||||
if(!$row->abgabedatum)
|
||||
if (!$row->abgabedatum)
|
||||
{
|
||||
$htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>";
|
||||
}
|
||||
@@ -692,6 +695,60 @@ while ($row=@$db->db_fetch_object($result))
|
||||
{
|
||||
$htmlstr .= " <td> </td>";
|
||||
}
|
||||
|
||||
if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
|
||||
{
|
||||
$signaturVorhanden = false;
|
||||
if ($row->paabgabetyp_kurzbz == 'end')
|
||||
{
|
||||
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
|
||||
{
|
||||
// Check if the document is signed
|
||||
$signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
|
||||
if (is_array($signList) && count($signList) > 0)
|
||||
{
|
||||
$signaturVorhanden = true;
|
||||
// The document is signed
|
||||
}
|
||||
elseif (isset($signList->code) && $signList->code == 1)
|
||||
{
|
||||
$uploadedDocumentSigned = $p->t('abgabetool/uploaddDocumentToBigForSignature');
|
||||
}
|
||||
elseif ($signList === null)
|
||||
{
|
||||
$uploadedDocumentSigned = 'WARNING: signature server error';
|
||||
}
|
||||
else
|
||||
{
|
||||
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($uploadedDocumentSigned != null)
|
||||
{
|
||||
$htmlstr .= '
|
||||
<td>
|
||||
<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 5px; border: 1px solid; border-radius: 4px; ">
|
||||
<b>'.$uploadedDocumentSigned.'</b>
|
||||
</div>
|
||||
</td>';
|
||||
}
|
||||
elseif($signaturVorhanden)
|
||||
{
|
||||
$htmlstr .= '
|
||||
<td>
|
||||
<div style="color: #198754; background-color: #d1e7dd; border-color: #a3cfbb; padding: 5px; border: 1px solid; border-radius: 4px; ">
|
||||
<b>'.$p->t('abgabetool/uploadedDocumentSigned').'</b>
|
||||
</div>
|
||||
</td>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$htmlstr .= " <td> </td>";
|
||||
}
|
||||
|
||||
|
||||
$htmlstr .= " </tr>\n";
|
||||
|
||||
|
||||
@@ -710,7 +767,7 @@ $htmlstr .= '<tr id="'.$db->convert_html_chars($projektarbeit_id).'">'."\n";
|
||||
//$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>";
|
||||
$htmlstr .= "<td> </td>";
|
||||
|
||||
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
|
||||
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
|
||||
|
||||
$htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n";
|
||||
$qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'";
|
||||
|
||||
@@ -36,6 +36,7 @@ require_once('../../../include/phrasen.class.php');
|
||||
require_once('../../../include/projektarbeit.class.php');
|
||||
require_once('../../../include/projektbetreuer.class.php');
|
||||
require_once('../../../include/sancho.inc.php');
|
||||
require_once('../../../application/libraries/SignatureLib.php');
|
||||
|
||||
$anzeigesprache = getSprache();
|
||||
$p = new phrasen($anzeigesprache);
|
||||
@@ -93,6 +94,7 @@ else
|
||||
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
|
||||
$abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1');
|
||||
$seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1');
|
||||
$signaturVorhanden = (isset($_POST['signaturVorhanden']) && $_POST['signaturVorhanden']=='true'?true:false);
|
||||
}
|
||||
|
||||
$user = get_uid();
|
||||
@@ -111,6 +113,7 @@ $titel = $projektarbeit_obj->titel;
|
||||
$person = new person();
|
||||
$person->load($bid);
|
||||
$betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost;
|
||||
$uploadedDocumentSigned = null;
|
||||
|
||||
if($uid!=$user)
|
||||
{
|
||||
@@ -258,6 +261,35 @@ if($command=='add')
|
||||
echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br> ";
|
||||
$command='';
|
||||
}
|
||||
|
||||
if ($signaturVorhanden === false)
|
||||
{
|
||||
// Mail an Studiengang wenn keine Signatur gefunden wurde
|
||||
$student = new student();
|
||||
if(!$student->load($projektarbeit_obj->student_uid))
|
||||
die($p->t('global/userNichtGefunden'));
|
||||
|
||||
$stg_obj = new studiengang();
|
||||
if(!$stg_obj->load($student->studiengang_kz))
|
||||
die($p->t('global/fehlerBeimLesenAusDatenbank'));
|
||||
|
||||
$subject = 'Abgabe ohne Signatur';
|
||||
$tomail = $stg_obj->email;
|
||||
$data = array(
|
||||
'vorname' => $student->vorname,
|
||||
'nachname' => $student->nachname,
|
||||
'studiengang' => $stg_obj->bezeichnung
|
||||
);
|
||||
|
||||
$mailres = sendSanchoMail(
|
||||
'ParbeitsbeurteilungSiganturFehlt',
|
||||
$data,
|
||||
$tomail,
|
||||
$subject,
|
||||
'sancho_header_min_bw.jpg',
|
||||
'sancho_footer_min_bw.jpg'
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -280,11 +312,11 @@ if($command=="update" && $error!=true)
|
||||
$extensions = explode(".", $_FILES['datei']['name']);
|
||||
if(strtoupper(end($extensions))=='PDF')
|
||||
{
|
||||
if($paabgabetyp_kurzbz!='end')
|
||||
if ($paabgabetyp_kurzbz != 'end')
|
||||
{
|
||||
//"normaler" Upload
|
||||
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
|
||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
|
||||
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
|
||||
{
|
||||
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"');
|
||||
|
||||
@@ -299,18 +331,40 @@ if($command=="update" && $error!=true)
|
||||
else
|
||||
{
|
||||
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
|
||||
}
|
||||
}$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
|
||||
}
|
||||
else
|
||||
else // endupload type
|
||||
{
|
||||
//Upload der Endabgabe - Eingabe der Zusatzdaten
|
||||
$command='add';
|
||||
if(!$error)
|
||||
if (!$error)
|
||||
{
|
||||
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
|
||||
}
|
||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
|
||||
|
||||
$signaturVorhanden = true;
|
||||
|
||||
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
|
||||
{
|
||||
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
|
||||
{
|
||||
// Check if the document is signed
|
||||
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
|
||||
if (is_array($signList) && count($signList) > 0)
|
||||
{
|
||||
// The document is signed
|
||||
}
|
||||
elseif ($signList === null)
|
||||
{
|
||||
$uploadedDocumentSigned = 'WARNING: signature server error';
|
||||
}
|
||||
else
|
||||
{
|
||||
$signaturVorhanden = false;
|
||||
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSignedStudent');
|
||||
}
|
||||
}
|
||||
|
||||
/*$qry="UPDATE campus.tbl_paabgabe SET
|
||||
abgabedatum = now(),
|
||||
updatevon = '".$user."',
|
||||
@@ -339,6 +393,7 @@ if($command=="update" && $error!=true)
|
||||
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
|
||||
$htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n";
|
||||
$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
|
||||
$htmlstr .= '<input type="hidden" name="signaturVorhanden" value="'.($signaturVorhanden?'true':'false').'">'."\n";
|
||||
$htmlstr .= "<tr>\n";
|
||||
$htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>";
|
||||
$sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache");
|
||||
@@ -372,6 +427,21 @@ if($command=="update" && $error!=true)
|
||||
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td>
|
||||
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n";
|
||||
$htmlstr .="<tr><td> </td></tr>\n";
|
||||
|
||||
// If there are info about the signed document
|
||||
if ($uploadedDocumentSigned != null)
|
||||
{
|
||||
$htmlstr .= "<tr>\n";
|
||||
$htmlstr .= "<td colspan='2' style='text-align: center;'>";
|
||||
$htmlstr .= '<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 15px; border: 1px solid; border-radius: 4px;">
|
||||
|
||||
<b>'.$uploadedDocumentSigned.'</b></td>
|
||||
</div>';
|
||||
$htmlstr .= "</td>";
|
||||
$htmlstr .= "</tr>\n";
|
||||
}
|
||||
|
||||
$htmlstr .="<tr><td> </td></tr>\n";
|
||||
$htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n";
|
||||
$htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>";
|
||||
$htmlstr .="<tr></tr><td> </td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr>
|
||||
|
||||
@@ -98,9 +98,9 @@ if($stsem=='')
|
||||
|
||||
//$note = $_REQUEST["note"];
|
||||
|
||||
if(!$rechte->isBerechtigt('admin',0) &&
|
||||
!$rechte->isBerechtigt('admin',$lv_obj->studiengang_kz) &&
|
||||
!$rechte->isBerechtigt('lehre',$lv_obj->studiengang_kz))
|
||||
if(!$rechte->isBerechtigt('admin', 0) &&
|
||||
!$rechte->isBerechtigt('admin', $lv_obj->studiengang_kz) &&
|
||||
!$rechte->isBerechtigt('lehre', $lv_obj->studiengang_kz))
|
||||
{
|
||||
$qry = "SELECT lehreinheit_id FROM lehre.tbl_lehrveranstaltung JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||
@@ -117,11 +117,11 @@ if(!$rechte->isBerechtigt('admin',0) &&
|
||||
}
|
||||
}
|
||||
|
||||
function savenote($db,$lvid, $student_uid, $note, $punkte=null)
|
||||
function savenote($db, $lvid, $student_uid, $note, $punkte = null)
|
||||
{
|
||||
global $stsem, $user, $p, $noten_anmerkung;
|
||||
$jetzt = date("Y-m-d H:i:s");
|
||||
$punkte = str_replace(',','.',$punkte);
|
||||
$punkte = str_replace(',', '.', $punkte);
|
||||
//Ermitteln ob der Student diesem Kurs zugeteilt ist
|
||||
$qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung WHERE uid=".$db->db_add_param($student_uid)." AND lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER);
|
||||
if($result = $db->db_query($qry))
|
||||
@@ -207,13 +207,12 @@ if (isset($_REQUEST["submit"]))
|
||||
$note = $_REQUEST["note"];
|
||||
$punkte = (isset($_REQUEST["punkte"])?$_REQUEST["punkte"]:'');
|
||||
|
||||
$response = savenote($db,$lvid, $student_uid, $note, $punkte);
|
||||
$response = savenote($db, $lvid, $student_uid, $note, $punkte);
|
||||
echo $response;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
foreach ($_POST as $row=>$val)
|
||||
foreach ($_POST as $row => $val)
|
||||
{
|
||||
if(mb_strstr(mb_strtolower($row), 'matrikelnr_'))
|
||||
{
|
||||
@@ -232,7 +231,7 @@ if (isset($_REQUEST["submit"]))
|
||||
$response.="\nNote oder Punkte fehlen";
|
||||
continue;
|
||||
}
|
||||
$punkte=str_replace(',','.', $punkte);
|
||||
$punkte=str_replace(',', '.', $punkte);
|
||||
|
||||
//check ob statt Matrikelnummer nicht bereits student_uid (Moodle Grade Import) vorliegt..
|
||||
$student = new student();
|
||||
@@ -241,7 +240,7 @@ if (isset($_REQUEST["submit"]))
|
||||
//UID ermitteln
|
||||
if(!$student_uid = $student->getUidFromMatrikelnummer($matrikelnummer))
|
||||
{
|
||||
$response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht',array($matrikelnummer));
|
||||
$response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht', array($matrikelnummer));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -268,7 +267,7 @@ if (isset($_REQUEST["submit"]))
|
||||
}
|
||||
}
|
||||
|
||||
$val=savenote($db,$lvid, $student_uid, $note, $punkte);
|
||||
$val=savenote($db, $lvid, $student_uid, $note, $punkte);
|
||||
if($val!='neu' && $val!='update' && $val!='update_f')
|
||||
$response.=$val;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user