Merge branch 'merge_FHC4_55354_55991_55992_60874_60876_60875_61229_61230_61231' into feature-61232/Studierendenverwaltung_Karteireiter_Projektarbeit_portieren

This commit is contained in:
Alexei Karpenko
2025-07-15 15:24:30 +02:00
126 changed files with 15413 additions and 738 deletions
@@ -158,6 +158,11 @@ class BetriebsmittelP extends FHCAPI_Controller
], [
'uid_in_person' => $this->p->t('person', 'error_uidNotInPerson')
]);
$this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution'])
]);
$this->validateNewOrUpdate();
$betriebsmitteltyp = $this->input->post('betriebsmitteltyp');
@@ -241,6 +246,10 @@ class BetriebsmittelP extends FHCAPI_Controller
public function updateBetriebsmittel($betriebsmittelperson_id)
{
$this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution'])
]);
$this->validateNewOrUpdate();
$betriebsmitteltyp = $this->input->post('betriebsmitteltyp');
@@ -0,0 +1,328 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Funktionen extends FHCAPI_Controller
{
public function __construct()
{
//TODO(Manu) check permissions
parent::__construct(array(
'getAllFunctions' => ['admin:r', 'assistenz:r'],
'getAllUserFunctions' => ['admin:r', 'assistenz:r'],
'getOrgHeads' => ['admin:r', 'assistenz:r'],
'getOrgetsForCompany' => ['admin:r', 'assistenz:r'],
'getAllOrgUnits' => ['admin:r', 'assistenz:r'],
'loadFunction' => ['admin:r', 'assistenz:r'],
'insertFunction' => ['admin:rw', 'assistenz:rw'],
'updateFunction' => ['admin:rw', 'assistenz:rw'],
'deleteFunction' => ['admin:rw', 'assistenz:rw'],
)
);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
]);
// Load models
$this->load->model('extensions/FHC-Core-Personalverwaltung/Api_model', 'ApiModel');
$this->load->model('ressource/Funktion_model', 'FunktionModel');
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
}
public function getAllFunctions()
{
$this->FunktionModel->addSelect("funktion_kurzbz");
$this->FunktionModel->addSelect("beschreibung");
$this->FunktionModel->addSelect("aktiv");
$this->FunktionModel->addSelect("beschreibung AS label");
$this->FunktionModel->addOrder("beschreibung");
$result = $this->FunktionModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getOrgHeads()
{
$result = $this->OrganisationseinheitModel->getHeads();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getAllUserFunctions($uid)
{
if(!$uid)
{
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'UID']), self::ERROR_TYPE_GENERAL);
}
$sql = "
SELECT
dv.dienstverhaeltnis_id,
un.bezeichnung || ' (' || TO_CHAR(dv.von, 'DD.MM.YYYY') || CASE WHEN dv.bis IS NOT NULL THEN ' - '
|| TO_CHAR(dv.bis, 'DD.MM.YYYY') ELSE '' END || ')' AS dienstverhaeltnis_unternehmen ,
'[' || oet.bezeichnung || '] ' || oe.bezeichnung AS funktion_oebezeichnung,
f.beschreibung AS funktion_beschreibung,
bf.*,
fb.bezeichnung AS fachbereich_bezeichnung,
CASE
WHEN
bf.datum_bis IS NOT NULL AND bf.datum_bis::date < now()::date
THEN
false
ELSE
true
END aktiv
FROM
public.tbl_benutzerfunktion bf
JOIN
public.tbl_organisationseinheit oe ON oe.oe_kurzbz = bf.oe_kurzbz
JOIN
public.tbl_organisationseinheittyp oet ON oe.organisationseinheittyp_kurzbz = oet.organisationseinheittyp_kurzbz
JOIN
public.tbl_funktion f ON f.funktion_kurzbz = bf.funktion_kurzbz
LEFT JOIN
hr.tbl_vertragsbestandteil_funktion vf ON vf.benutzerfunktion_id = bf.benutzerfunktion_id
LEFT JOIN
hr.tbl_vertragsbestandteil v ON vf.vertragsbestandteil_id = v.vertragsbestandteil_id
LEFT JOIN
hr.tbl_dienstverhaeltnis dv ON v.dienstverhaeltnis_id = dv.dienstverhaeltnis_id
LEFT JOIN
public.tbl_organisationseinheit un ON dv.oe_kurzbz = un.oe_kurzbz
LEFT JOIN
public.tbl_fachbereich fb ON fb.fachbereich_kurzbz = bf.fachbereich_kurzbz
WHERE
bf.uid = ?
ORDER BY
bf.datum_von, bf.datum_von ASC";
$benutzerfunktionen = $this->BenutzerfunktionModel->execReadOnlyQuery($sql, array($uid));
$data = $this->getDataOrTerminateWithError($benutzerfunktionen);
$this->terminateWithSuccess($data);
}
/*
* returns list of all organisation units
* as key value list to be used in select or autocomplete
*/
public function getAllOrgUnits()
{
$sql = "
SELECT
oe.oe_kurzbz, oe.aktiv,
'[' || COALESCE(oet.bezeichnung, oet.organisationseinheittyp_kurzbz) ||
'] ' || COALESCE(oe.bezeichnung, oe.oe_kurzbz) AS label
FROM public.tbl_organisationseinheit oe
JOIN public.tbl_organisationseinheittyp oet ON oe.organisationseinheittyp_kurzbz = oet.organisationseinheittyp_kurzbz
ORDER BY oet.bezeichnung ASC, oe.bezeichnung ASC";
$result = $this->OrganisationseinheitModel->execReadOnlyQuery($sql);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
/*
* return list of child orgets for a given company orget_kurzbz
* as key value list to be used in select or autocomplete
*/
public function getOrgetsForCompany($companyOrgetkurzbz = null)
{
$sql = "
SELECT
oe.oe_kurzbz, oe.aktiv,
'[' || COALESCE(oet.bezeichnung, oet.organisationseinheittyp_kurzbz) ||
'] ' || COALESCE(oe.bezeichnung, oe.oe_kurzbz) AS label
FROM (
WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as
(
SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit
WHERE oe_kurzbz=?
UNION ALL
SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes
WHERE o.oe_parent_kurzbz=oes.oe_kurzbz
)
SELECT oe_kurzbz
FROM oes
GROUP BY oe_kurzbz
) c
JOIN public.tbl_organisationseinheit oe ON oe.oe_kurzbz = c.oe_kurzbz
JOIN public.tbl_organisationseinheittyp oet ON oe.organisationseinheittyp_kurzbz = oet.organisationseinheittyp_kurzbz
ORDER BY oet.bezeichnung ASC, oe.bezeichnung ASC";
$childorgets = $this->OrganisationseinheitModel->execReadOnlyQuery($sql, array($companyOrgetkurzbz));
$data = $this->getDataOrTerminateWithError($childorgets);
$this->terminateWithSuccess($data);
}
public function loadFunction($benutzerfunktion_id)
{
$this->BenutzerfunktionModel->addSelect("*");
$result = $this->BenutzerfunktionModel->loadWhere(
array('benutzerfunktion_id' => $benutzerfunktion_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function insertFunction()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$uid = $this->input->post('uid');
if(!$uid)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'UID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$datum_von = $formData['datum_von'] ?? null;
$datum_bis = $formData['datum_bis'] ?? null;
$formData['oe_kurzbz'] = is_array($formData['oe_kurzbz']) ? $formData['oe_kurzbz']['oe_kurzbz'] : $formData['oe_kurzbz'];
$formData['funktion_kurzbz'] = is_array($formData['funktion_kurzbz'])
? $formData['funktion_kurzbz']['funktion_kurzbz']
: $formData['funktion_kurzbz'];
$bezeichnung = $formData['bezeichnung'] ?? null;
$wochenstunden = $formData['wochenstunden'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('datum_von', 'VonDatum', 'required|is_valid_date', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'VonDatum']),
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
]);
$this->form_validation->set_rules('datum_bis', 'BisDatum', 'is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'BisDatum'])
]);
$this->form_validation->set_rules('oe_kurzbz', 'Organisationseinheit', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Organisationseinheit'])
]);
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Funktion'])
]);
$this->form_validation->set_rules('wochenstunden', 'Wochenstunden', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Wochenstunden'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->BenutzerfunktionModel->insert([
'uid' => $uid,
'datum_von' => $datum_von,
'datum_bis' => $datum_bis ,
'oe_kurzbz' => $formData['oe_kurzbz'],
'funktion_kurzbz' => $formData['funktion_kurzbz'],
'bezeichnung' => $bezeichnung,
'wochenstunden' => $wochenstunden,
'insertamum' => date('c'),
'insertvon' => $authUID,
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function updateFunction()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$uid = $this->input->post('uid');
if(!$uid)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'UID']), self::ERROR_TYPE_GENERAL);
}
$benutzerfunktion_id = $this->input->post('benutzerfunktion_id');
if(!$benutzerfunktion_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Benutzerfunktion ID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$datum_von = $formData['datum_von'] ?? null;
$datum_bis = $formData['datum_bis'] ?? null;
$formData['oe_kurzbz'] = is_array($formData['oe_kurzbz']) ? $formData['oe_kurzbz']['oe_kurzbz'] : $formData['oe_kurzbz'];
$formData['funktion_kurzbz'] = is_array($formData['funktion_kurzbz'])
? $formData['funktion_kurzbz']['funktion_kurzbz']
: $formData['funktion_kurzbz'];
$bezeichnung = $formData['bezeichnung'] ?? null;
$wochenstunden = $formData['wochenstunden'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('datum_von', 'VonDatum', 'required|is_valid_date', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'VonDatum']),
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
]);
$this->form_validation->set_rules('datum_bis', 'BisDatum', 'is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'BisDatum'])
]);
$this->form_validation->set_rules('oe_kurzbz', 'Organisationseinheit', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Organisationseinheit'])
]);
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Funktion'])
]);
$this->form_validation->set_rules('wochenstunden', 'Wochenstunden', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Wochenstunden'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->BenutzerfunktionModel->update(
[
'benutzerfunktion_id' => $benutzerfunktion_id,
],
[
'uid' => $uid,
'datum_von' => $datum_von,
'datum_bis' => $datum_bis ,
'oe_kurzbz' => $formData['oe_kurzbz'],
'funktion_kurzbz' => $formData['funktion_kurzbz'],
'bezeichnung' => $bezeichnung,
'wochenstunden' => $wochenstunden,
'updateamum' => date('c'),
'updatevon' => $authUID,
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteFunction($benutzerfunktion_id)
{
$result = $this->BenutzerfunktionModel->delete(
array('benutzerfunktion_id' => $benutzerfunktion_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
@@ -0,0 +1,458 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Messages extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getMessages' => ['admin:r', 'assistenz:r'],
'getVorlagen' => ['admin:r', 'assistenz:r'],
'getMessageVarsPerson' => ['admin:r', 'assistenz:r'],
'getMsgVarsPrestudent' => ['admin:r', 'assistenz:r'],
'getMsgVarsLoggedInUser' => ['admin:r', 'assistenz:r'],
'getNameOfDefaultRecipient' => ['admin:r', 'assistenz:r'],
'sendMessage' => ['admin:r', 'assistenz:r'],
'deleteMessage' => ['admin:r', 'assistenz:r'],
'getVorlagentext' => ['admin:r', 'assistenz:r'],
'getPreviewText' => ['admin:r', 'assistenz:r'],
'getReplyData' => ['admin:r', 'assistenz:r'],
'getPersonId' => ['admin:r', 'assistenz:r'],
'getUid' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('system/Message_model', 'MessageModel');
$this->load->model('CL/Messages_model', 'MessagesModel');
// Additional Permission Checks
//TODO(manu) check permissions
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
$this->load->library('MessageLib');
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
public function getMessages($id, $type_id, $size, $page)
{
if($type_id != 'person_id'){
$id = $this->_getPersonId($id, $type_id);
}
$offset = $size * ($page - 1);
$limit = $size;
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
$data = $this->getDataOrTerminateWithError($result);
$this->addMeta('count', $data['count']);
$this->terminateWithSuccess($data['data']);
}
public function getVorlagen()
{
//get oe of user
$uid = getAuthUID();
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$result = $this->BenutzerfunktionModel->getBenutzerfunktionByUid($uid, 'oezuordnung');
$data = $this->getDataOrTerminateWithError($result);
$oe_kurzbz = current($data);
$this->load->model('system/Vorlage_model', 'VorlageModel');
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz->oe_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
//If admin
$this->VorlageModel->addOrder('vorlage_kurzbz', 'ASC');
$result = $this->VorlageModel->loadWhere(
array(
'mimetype' => 'text/html'
));
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getVorlagentext($vorlage_kurzbz)
{
//$this->terminateWithError("vor " . $vorlage_kurzbz, self::ERROR_TYPE_GENERAL);
//$studiengang_kz = 227; //TODO(Manu) dynamisieren NULL
$studiengang_kz = 0;
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
$this->VorlagestudiengangModel->addOrder('version', 'DESC');
$result = $this->VorlagestudiengangModel->loadWhere(
[
'vorlage_kurzbz' =>$vorlage_kurzbz,
'studiengang_kz' => $studiengang_kz
]);
$data = $this->getDataOrTerminateWithError($result);
//not correct with Vorlage
$vorlage = current($data);
//$this->terminateWithSuccess($data);
$this->terminateWithSuccess($vorlage->text);
}
public function getMessageVarsPerson($id, $typeId)
{
$person_id = ($typeId == 'mitarbeiter_uid') ? $this->_getPersonId($id, $typeId) : $id;
$result = $this->MessageModel->getMsgVarsDataByPersonId($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getMsgVarsPrestudent($id, $typeId)
{
$prestudent_id = ($typeId == 'uid') ? $this->_getPrestudentIdFromUid($id) : $id;
$result = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getMsgVarsLoggedInUser()
{
$result = $this->MessageModel->getMsgVarsLoggedInUser();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getNameOfDefaultRecipient($id, $type_id)
{
$id = ($type_id != 'person_id') ? $this->_getPersonId($id, $type_id) : $id;
$this->load->model('person/Person_model', 'PersonModel');
$result = $this->PersonModel->load($id);
$data = $this->getDataOrTerminateWithError($result);
$name = current($data);
$this->terminateWithSuccess($name->vorname . " " . $name->nachname );
}
public function sendMessage($recipient_id)
{
//has to be uid
// $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL);
//default setting
$receiversPersonId = $this->_getPersonId($recipient_id, 'uid');
$uid = getAuthUID();
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere(
['uid' => $uid]
);
$data = $this->getDataOrTerminateWithError($result);
$benutzer = current($data);
if (isset($_POST['data']))
{
$data = json_decode($_POST['data']);
unset($_POST['data']);
foreach ($data as $k => $v) {
$_POST[$k] = $v;
}
}
$this->load->library('form_validation');
$this->form_validation->set_rules('subject', 'Betreff', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betreff'])
]);
$this->form_validation->set_rules('body', 'Text', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Text'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$subject = $this->input->post('subject');
$body = $this->input->post('body');
$relationmessage_id = $this->input->post('relationmessage_id');
$typeId = $this->input->post('type_id');
$id = $this->input->post('id');
if($typeId == 'uid')
{
$prestudent_id = $this-> _getPrestudentIdFromUid($id);
//parseMessagetext for variables Prestudent
$result = $this->MessagesModel->parseMessageTextPrestudent($prestudent_id, $body);
$bodyParsed = $this->getDataOrTerminateWithError($result);
}
if($typeId == 'mitarbeiter_uid')
{
$person_id = $this->_getPersonId($id, $typeId);
$result = $this->MessagesModel->parseMessageTextPerson($person_id, $body);
$bodyParsed = $this->getDataOrTerminateWithError($result);
$this->terminateWithError($bodyParsed, self::ERROR_TYPE_GENERAL);
}
elseif($typeId == 'person_id')
{
$result = $this->MessagesModel->parseMessageTextPerson($id, $body);
$bodyParsed = $this->getDataOrTerminateWithError($result);
}
elseif($typeId == 'prestudent_id')
{
// $this->terminateWithError("prestudent_id ", self::ERROR_TYPE_GENERAL);
$result = $this->MessagesModel->parseMessageTextPrestudent($id, $body);
$bodyParsed = $this->getDataOrTerminateWithError($result);
}
else
{
$this->terminateWithError("type_id " . $typeId . " not valid", self::ERROR_TYPE_GENERAL);
}
$result = $this->messagelib->sendMessageUser($receiversPersonId, $subject, $bodyParsed, $benutzer->person_id, null, $relationmessage_id);
$this->terminateWithSuccess($result);
}
public function getPreviewText($id, $type_id)
{
if (isset($_POST['data']))
{
$data = json_decode($_POST['data']);
unset($_POST['data']);
}
else
$this->terminateWithError("Textbody missing ", self::ERROR_TYPE_GENERAL);
switch($type_id)
{
case 'uid':
$prestudent_id = $this->_getPrestudentIdFromUid($id);
$result = $this->MessagesModel->parseMessageTextPrestudent($prestudent_id, $data);
break;
case 'prestudent_id':
$result = $this->MessagesModel->parseMessageTextPrestudent($id, $data);
break;
case 'person_id':
$result = $this->MessagesModel->parseMessageTextPerson($id, $data);
break;
case 'mitarbeiter_uid':
{
$person_id = $this->_getPersonId($id, $type_id);
$result = $this->MessagesModel->parseMessageTextPerson($person_id, $data);
}
break;
default:
$this->terminateWithError("MESSAGES::getPreviewText logic for type_id " . $type_id . " not defined yet", self::ERROR_TYPE_GENERAL);
break;
}
$bodyParsed = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($bodyParsed);
}
public function getReplyData($messageId)
{
//TODO(Manu) validation of messageId: if number
$this->MessageModel->addSelect('public.tbl_msg_message.*');
$this->MessageModel->addSelect('r.*');
$this->MessageModel->addSelect('p.nachname');
$this->MessageModel->addSelect('p.vorname');
$this->MessageModel->addJoin('public.tbl_msg_recipient r', 'ON (r.message_id = public.tbl_msg_message.message_id)');
$this->MessageModel->addJoin('public.tbl_person p', 'ON (p.person_id = public.tbl_msg_message.person_id)');
$result = $this->MessageModel->loadWhere(
array('r.message_id' => $messageId)
);
$dataMessage = $this->getDataOrTerminateWithError($result);
$prefix = "Re: "; // reply subject prefix
$subject = $dataMessage[0]->subject;
$body = $dataMessage[0]->body;
$replyBody = $this->_getReplyBody($body, $dataMessage[0]->nachname, $dataMessage[0]->vorname, $dataMessage[0]->insertamum);
$dataMessage[0]->replyBody = $replyBody;
$dataMessage[0]->rest = "Help Manu";
$dataMessage[0]->replySubject = $prefix . $subject;
$this->terminateWithSuccess($dataMessage);
}
public function deleteMessage($messageId)
{
// Start DB transaction
$this->db->trans_begin();
$result = $this->MessageModel->deleteMessageRecipient($messageId);
if (isError($result)) {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$result = $this->MessageModel->deleteMessageStatus($messageId);
if (isError($result)) {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$result = $this->MessageModel->deleteMessage($messageId);
if (isError($result)) {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->db->trans_commit();
$this->terminateWithSuccess($result);
}
public function getPersonId($id, $typeId)
{
if ($typeId == 'uid' || $typeId == 'mitarbeiter_uid')
{
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere(
['uid' => $id]
);
}
elseif($typeId == 'prestudent_id')
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->loadWhere(
['prestudent_id' => $id]
);
}
$data = $this->getDataOrTerminateWithError($result);
$person = current($data);
$this->terminateWithSuccess($person->person_id);
}
public function getUid($id, $typeId)
{
if (!$typeId)
{
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Type ID']), self::ERROR_TYPE_GENERAL);
}
elseif ($typeId == 'person_id')
{
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere(
['person_id' => $id]
);
}
elseif($typeId == 'prestudent_id')
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->loadWhere(
['prestudent_id' => $id]
);
$data = $this->getDataOrTerminateWithError($result);
$person = current($data);
$person_id = $person->person_id;
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere(
['person_id' => $person_id]
);
}
elseif($typeId == 'uid' || $typeId == 'mitarbeiter_uid')
{
$this->terminateWithSuccess($id);
}
else
{
$this->terminateWithError("MESSAGES::getUID logic for type_id " . $typeId . " not defined yet", self::ERROR_TYPE_GENERAL);
}
$data = $this->getDataOrTerminateWithError($result);
$benutzer = current($data);
$this->terminateWithSuccess($benutzer->uid);
}
private function _getPersonId($id, $typeId)
{
if ($typeId == 'uid' || $typeId == 'mitarbeiter_uid')
{
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$result = $this->BenutzerModel->loadWhere(
['uid' => $id]
);
}
elseif($typeId == 'prestudent_id')
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->loadWhere(
['prestudent_id' => $id]
);
}
$data = $this->getDataOrTerminateWithError($result);
$person = current($data);
return $person->person_id;
}
private function _getPrestudentIdFromUid($uid)
{
// $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL);
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->loadWhere(
['student_uid' => $uid]
);
$data = $this->getDataOrTerminateWithError($result);
$student = current($data);
// $this->terminateWithError($student->prestudent_id, self::ERROR_TYPE_GENERAL);
return $student->prestudent_id;
}
private function _getReplyBody($body, $receiverName, $receiverSurname, $sentDate)
{
// To quote a reply body message
$bodyFormat = "<br>
<br>
<blockquote>
<i>
On %s %s %s wrote:
</i>
</blockquote>
<blockquote style='border-left:2px solid; padding-left: 8px'>
%s
</blockquote>";
return sprintf(
$bodyFormat,
date_format(date_create($sentDate), 'd.m.Y H:i'), $receiverName, $receiverSurname, $body
);
}
}
@@ -20,6 +20,8 @@ class Abschlusspruefung extends FHCAPI_Controller
'getBeurteilungen' => ['admin:rw', 'assistenz:rw'],
'getAkadGrade' => ['admin:rw', 'assistenz:rw'],
'getMitarbeiter' => ['admin:rw', 'assistenz:rw'],
'getAllMitarbeiter' => ['admin:rw', 'assistenz:rw'],
'getAllPersons' => ['admin:rw', 'assistenz:rw'],
'getPruefer' => ['admin:rw', 'assistenz:rw'],
'getTypStudiengang' => ['admin:rw', 'assistenz:rw'],
'checkForExistingExams' => ['admin:rw', 'assistenz:rw'],
@@ -38,6 +40,51 @@ class Abschlusspruefung extends FHCAPI_Controller
// Load models
$this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel');
//Permission checks for Studiengangsarray
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
if ($this->router->method == 'insertAbschlusspruefung' || $this->router->method == 'updateAbschlusspruefung')
{
$student_uid = $this->input->post('uid') ?: ($this->input->post('formData')['student_uid'] ?? null);
if(!$student_uid)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedStgsFromUid($student_uid, $allowedStgs);
}
if ($this->router->method == 'deleteAbschlusspruefung')
{
$abschlusspruefung_id = $this->input->post('id');
if(!$abschlusspruefung_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Abschlusspruefung ID']), self::ERROR_TYPE_GENERAL);
}
$result = $this->AbschlusspruefungModel->load(
array('abschlusspruefung_id' => $abschlusspruefung_id)
);
$data = $this->getDataOrTerminateWithError($result);
$student_uid = current($data)->student_uid;
$this->_checkAllowedStgsFromUid($student_uid, $allowedStgs);
}
}
private function _checkAllowedStgsFromUid($student_uid, $allowedStgs)
{
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
$data = $this->getDataOrTerminateWithError($result);
$studiengang_kz = current($data)->studiengang_kz;
if (!in_array($studiengang_kz, $allowedStgs))
{
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
}
}
public function getAbschlusspruefung($student_uid)
@@ -149,16 +196,16 @@ class Abschlusspruefung extends FHCAPI_Controller
{
$studiengang_kz= $this->input->post('studiengang_kz');
/* if (!$studiengang_kzs || !is_array($studiengang_kzs)) {
$this->load->library('form_validation');
/* if (!$studiengang_kzs || !is_array($studiengang_kzs)) {
$this->load->library('form_validation');
$this->form_validation->set_rules('studiengang_kzs', '', 'required|is_null', [
'is_null' => $this->p->t('ui', 'error_fieldMustBeArray')
]);
$this->form_validation->set_rules('studiengang_kzs', '', 'required|is_null', [
'is_null' => $this->p->t('ui', 'error_fieldMustBeArray')
]);
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
}*/
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
}*/
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
@@ -224,19 +271,7 @@ class Abschlusspruefung extends FHCAPI_Controller
$formData = $this->input->post('formData');
$_POST['pruefungstyp_kurzbz'] = $formData['pruefungstyp_kurzbz'];
$_POST['akadgrad_id']= $formData['akadgrad_id'];
$_POST['vorsitz'] = isset($formData['vorsitz']['mitarbeiter_uid']) ? $formData['vorsitz']['mitarbeiter_uid'] : $formData['vorsitz'];
$_POST['pruefer1'] = isset($formData['pruefer1']['person_id']) ? $formData['pruefer1']['person_id'] : $formData['pruefer1'];
$_POST['pruefer2'] = isset($formData['pruefer2']['person_id']) ? $formData['pruefer2']['person_id'] : $formData['pruefer2'];
$_POST['pruefer3'] = isset($formData['pruefer3']['person_id']) ? $formData['pruefer3']['person_id'] : $formData['pruefer3'];
$_POST['pruefungsantritt_kurzbz'] = $formData['pruefungsantritt_kurzbz'];
$_POST['abschlussbeurteilung_kurzbz'] = $formData['abschlussbeurteilung_kurzbz'];
$_POST['datum']= $formData['datum'];
$_POST['sponsion']= $formData['sponsion'];
$_POST['anmerkung'] = $formData['anmerkung'];
$_POST['protokoll']= $formData['protokoll'];
$_POST['note'] = $formData['note'];
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('pruefungstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
@@ -261,19 +296,19 @@ class Abschlusspruefung extends FHCAPI_Controller
$result = $this->AbschlusspruefungModel->insert([
'student_uid' => $student_uid,
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
'akadgrad_id' => $this->input->post('akadgrad_id'),
'vorsitz' => $this->input->post('vorsitz'),
'pruefungsantritt_kurzbz' => $this->input->post('pruefungsantritt_kurzbz'),
'abschlussbeurteilung_kurzbz' => $this->input->post('abschlussbeurteilung_kurzbz'),
'datum' => $this->input->post('datum'), //TODO(Manu) check if minute format like FAS
'sponsion' => $this->input->post('sponsion'),
'pruefer1' => $this->input->post('pruefer1'),
'pruefer2' => $this->input->post('pruefer2'),
'pruefer3' => $this->input->post('pruefer3'),
'protokoll' => $this->input->post('protokoll'),
'note' => $this->input->post('note'),
'anmerkung' => $this->input->post('anmerkung'),
'pruefungstyp_kurzbz' => $formData['pruefungstyp_kurzbz'],
'akadgrad_id' => $formData['akadgrad_id'],
'vorsitz' => $formData['vorsitz'],
'pruefungsantritt_kurzbz' => $formData['pruefungsantritt_kurzbz'],
'abschlussbeurteilung_kurzbz' => $formData['abschlussbeurteilung_kurzbz'],
'datum' => $formData['datum'], //TODO(Manu) check if minute format like FAS
'sponsion' => $formData['sponsion'],
'pruefer1' => $formData['pruefer1'],
'pruefer2' => $formData['pruefer2'],
'pruefer3' => $formData['pruefer3'],
'protokoll' => $formData['protokoll'],
'note' => $formData['note'],
'anmerkung' => $formData['anmerkung'],
'insertamum' => date('c'),
'insertvon' => getAuthUID()
]);
@@ -295,25 +330,17 @@ class Abschlusspruefung extends FHCAPI_Controller
}
$formData = $this->input->post('formData');
$_POST['student_uid'] = $formData['student_uid'];
$_POST['pruefungstyp_kurzbz'] = $formData['pruefungstyp_kurzbz'];
$_POST['akadgrad_id']= $formData['akadgrad_id'];
$_POST['vorsitz'] = isset($formData['vorsitz']['mitarbeiter_uid']) ? $formData['vorsitz']['mitarbeiter_uid'] : $formData['vorsitz'];
$_POST['pruefer1'] = isset($formData['pruefer1']['person_id']) ? $formData['pruefer1']['person_id'] : $formData['pruefer1'];
$_POST['pruefer2'] = isset($formData['pruefer2']['person_id']) ? $formData['pruefer2']['person_id'] : $formData['pruefer2'];
$_POST['pruefer3'] = isset($formData['pruefer3']['person_id']) ? $formData['pruefer3']['person_id'] : $formData['pruefer3'];
$_POST['pruefungsantritt_kurzbz'] = $formData['pruefungsantritt_kurzbz'];
$_POST['abschlussbeurteilung_kurzbz'] = $formData['abschlussbeurteilung_kurzbz'];
$_POST['datum']= $formData['datum'];
$_POST['sponsion']= $formData['sponsion'];
$_POST['anmerkung'] = $formData['anmerkung'];
$_POST['protokoll']= $formData['protokoll'];
$_POST['note'] = $formData['note'];
$vorsitz = isset($formData['vorsitz']['mitarbeiter_uid']) ? $formData['vorsitz']['mitarbeiter_uid'] : $formData['vorsitz'];
$pruefer1 = isset($formData['pruefer1']['person_id']) ? $formData['pruefer1']['person_id'] : $formData['pruefer1'];
$pruefer2 = isset($formData['pruefer2']['person_id']) ? $formData['pruefer2']['person_id'] : $formData['pruefer2'];
$pruefer3 = isset($formData['pruefer3']['person_id']) ? $formData['pruefer3']['person_id'] : $formData['pruefer3'];
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('pruefungstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$this->form_validation->set_rules('akadgrad_id', 'AkadGrad', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'AkadGrad'])
]);
@@ -334,25 +361,25 @@ class Abschlusspruefung extends FHCAPI_Controller
$result = $this->AbschlusspruefungModel->update(
[
'abschlusspruefung_id' => $abschlusspruefung_id
'abschlusspruefung_id' => $abschlusspruefung_id
],
[
'student_uid' => $this->input->post('student_uid'),
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
'akadgrad_id' => $this->input->post('akadgrad_id'),
'vorsitz' => $this->input->post('vorsitz'),
'pruefungsantritt_kurzbz' => $this->input->post('pruefungsantritt_kurzbz'),
'abschlussbeurteilung_kurzbz' => $this->input->post('abschlussbeurteilung_kurzbz'),
'datum' => $this->input->post('datum'),
'sponsion' => $this->input->post('sponsion'),
'pruefer1' => $this->input->post('pruefer1'),
'pruefer2' => $this->input->post('pruefer2'),
'pruefer3' => $this->input->post('pruefer3'),
'protokoll' => $this->input->post('protokoll'),
'note' => $this->input->post('note'),
'anmerkung' => $this->input->post('anmerkung'),
'insertamum' => date('c'),
'insertvon' => getAuthUID()
'student_uid' => $formData['student_uid'],
'pruefungstyp_kurzbz' => $formData['pruefungstyp_kurzbz'],
'akadgrad_id' => $formData['akadgrad_id'],
'vorsitz' => $vorsitz,
'pruefungsantritt_kurzbz' => $formData['pruefungsantritt_kurzbz'],
'abschlussbeurteilung_kurzbz' => $formData['abschlussbeurteilung_kurzbz'],
'datum' => $formData['datum'],
'sponsion' => $formData['sponsion'],
'pruefer1' => $pruefer1,
'pruefer2' => $pruefer2,
'pruefer3' => $pruefer3,
'protokoll' => $formData['protokoll'],
'note' => $formData['note'],
'anmerkung' => $formData['anmerkung'],
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
@@ -417,4 +444,58 @@ class Abschlusspruefung extends FHCAPI_Controller
}
$this->terminateWithSuccess('step3');
}
/*
* returns list of all Mitarbeiter
* as key value list to be used in select or autocomplete
*/
public function getAllMitarbeiter()
{
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$sql = "
SELECT
ma.mitarbeiter_uid as mitarbeiter_uid,
CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid, ')') as label
FROM
public.tbl_mitarbeiter ma
JOIN public.tbl_benutzer bn ON (bn.uid = ma.mitarbeiter_uid)
JOIN public.tbl_person p ON (p.person_id = bn.person_id)
ORDER BY
p.nachname ASC
";
$result = $this->MitarbeiterModel->execReadOnlyQuery($sql);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
/*
* returns list of all Persons
* as key value list to be used in select or autocomplete
*/
public function getAllPersons()
{
$this->load->model('person/Person_model', 'PersonModel');
$sql = "
SELECT
p.vorname, p.nachname, p.person_id,
CONCAT(p.nachname, ' ', p.vorname) as label
FROM
public.tbl_person p
-- JOIN public.tbl_benutzer bn ON (p.person_id = bn.person_id)
-- and bn.aktiv = 'true'
ORDER BY
p.nachname ASC
";
//TODO(manu) check if filter active benutzer
$result = $this->PersonModel->execReadOnlyQuery($sql);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
@@ -0,0 +1,256 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Anrechnungen extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getAnrechnungen' => ['admin:r', 'assistenz:r'],
'deleteAnrechnung' => ['admin:rw', 'assistenz:rw'],
'getLehrveranstaltungen' => ['admin:r', 'assistenz:r'],
'getBegruendungen' => ['admin:r', 'assistenz:r'],
'getLektoren' => ['admin:r', 'assistenz:r'],
'getLvsKompatibel' => ['admin:r', 'assistenz:r'],
'insertAnrechnung' => ['admin:rw', 'assistenz:rw'],
'loadAnrechnung' => ['admin:rw', 'assistenz:rw'],
'updateAnrechnung' => ['admin:rw', 'assistenz:rw'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui', 'lehre'
]);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungsModel');
}
public function getAnrechnungen($prestudent_id)
{
$result = $this->AnrechnungsModel->getAnrechnungsData($prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getBegruendungen()
{
$this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegrueundungsModel');
$result = $this->AnrechnungbegrueundungsModel->load();
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(getData($result) ?: []);
}
public function getLehrveranstaltungen($prestudent_id)
{
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$result = $this->PrestudentstatusModel->getLastStatus($prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
$studienplan_id = current($data)->studienplan_id;
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLvsByStudienplanId($studienplan_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getLvsKompatibel($lehrveranstaltung_id)
{
$this->AnrechnungsModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'ON (lv.lehrveranstaltung_id = lehre.tbl_anrechnung.lehrveranstaltung_id)');
$result = $this->AnrechnungsModel->loadWhere(
['lehrveranstaltung_id_kompatibel' => $lehrveranstaltung_id]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getLektoren($studiengang_kz)
{
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$result = $this->MitarbeiterModel->getLektoren($studiengang_kz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function insertAnrechnung()
{
$this->load->library('form_validation');
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$_POST['lehrveranstaltung_id'] =
(isset($formData['lehrveranstaltung_id']) && !empty($formData['lehrveranstaltung_id']))
? $formData['lehrveranstaltung_id']
: null;
$_POST['lehrveranstaltung_id_kompatibel'] =
(isset($formData['lehrveranstaltung_id_kompatibel']) && !empty($formData['lehrveranstaltung_id_kompatibel']))
? $formData['lehrveranstaltung_id_kompatibel']
: null;
$_POST['begruendung'] =
(isset($formData['begruendung_id']) && !empty($formData['begruendung_id']))
? $formData['begruendung_id']
: null;
$_POST['genehmigtVon'] = (isset($formData['genehmigt_von']) && !empty($formData['genehmigt_von']))
? $formData['genehmigt_von']
: null;
$this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung'])
]);
$this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Begruendung'])
]);
if($_POST['begruendung'] == 2)
{
$this->form_validation->set_rules('lehrveranstaltung_id_kompatibel', 'Lehrveranstaltung_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung Kompatibel'])
]);
}
$this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->AnrechnungsModel->insert(
[
'prestudent_id' => $prestudent_id,
'lehrveranstaltung_id' => $_POST['lehrveranstaltung_id'],
'lehrveranstaltung_id_kompatibel' => $_POST['lehrveranstaltung_id_kompatibel'],
'begruendung_id' => $_POST['begruendung'],
'genehmigt_von' => $_POST['genehmigtVon']
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadAnrechnung($anrechnung_id)
{
$this->AnrechnungsModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'ON (lv.lehrveranstaltung_id = lehre.tbl_anrechnung.lehrveranstaltung_id)');
$result = $this->AnrechnungsModel->loadWhere(
array('anrechnung_id' => $anrechnung_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function updateAnrechnung()
{
$this->load->library('form_validation');
$anrechnung_id = $this->input->post('anrechnung_id');
if(!$anrechnung_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Anrechnung UID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$_POST['lehrveranstaltung_id'] =
(isset($formData['lehrveranstaltung_id']) && !empty($formData['lehrveranstaltung_id']))
? $formData['lehrveranstaltung_id']
: null;
$_POST['lehrveranstaltung_id_kompatibel'] =
(isset($formData['lehrveranstaltung_id_kompatibel']) && !empty($formData['lehrveranstaltung_id_kompatibel']))
? $formData['lehrveranstaltung_id_kompatibel']
: null;
$_POST['begruendung'] = (isset($formData['begruendung_id']) && !empty($formData['begruendung_id'])) ? $formData['begruendung_id'] : null;
$_POST['genehmigtVon'] = (isset($formData['genehmigt_von']) && !empty($formData['genehmigt_von'])) ? $formData['genehmigt_von'] : null;
$this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung'])
]);
$this->form_validation->set_rules('begruendung', 'Begruendung', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Begruendung'])
]);
if($_POST['begruendung'] == 2)
{
$this->form_validation->set_rules('lehrveranstaltung_id_kompatibel', 'Lehrveranstaltung_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung Kompatibel'])
]);
}
$this->form_validation->set_rules('genehmigtVon', 'GenehmigtVon', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'GenehmigtVon'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->AnrechnungsModel->update(
[
'anrechnung_id' => $anrechnung_id,
],
[
'lehrveranstaltung_id' => $_POST['lehrveranstaltung_id'],
'lehrveranstaltung_id_kompatibel' => $_POST['lehrveranstaltung_id_kompatibel'],
'begruendung_id' => $_POST['begruendung'],
'genehmigt_von' => $_POST['genehmigtVon']
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteAnrechnung($anrechnung_id)
{
// Start DB transaction
$this->db->trans_begin();
//delete anrechnung_id of table tbl_anrechnung_anrechnungstatus
$this->load->model('education/Anrechnunganrechnungstatus_model','AnrechnungAnrechnungstatusModel');
$result = $this->AnrechnungAnrechnungstatusModel->delete(
array('anrechnung_id' => $anrechnung_id)
);
$this->getDataOrTerminateWithError($result);
//delete anrechnung_id of table tbl_anrechnung
$result = $this->AnrechnungsModel->delete(
array('anrechnung_id' => $anrechnung_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->db->trans_commit();
$this->terminateWithSuccess($data);
}
}
@@ -0,0 +1,414 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Aufnahmetermine extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getAufnahmetermine' => ['admin:r', 'assistenz:r'],
'loadAufnahmetermin' => ['admin:r', 'assistenz:r'],
'insertAufnahmetermin' => ['admin:rw', 'assistenz:rw'],
'updateAufnahmetermin' => ['admin:rw', 'assistenz:rw'],
'deleteAufnahmetermin' => ['admin:rw', 'assistenz:rw'],
'getListPlacementTests' => ['admin:r', 'assistenz:r'],
'getListStudyPlans' => ['admin:r', 'assistenz:r'],
'loadDataRtPrestudent' => ['admin:r', 'assistenz:r'],
'insertOrUpdateDataRtPrestudent' => ['admin:r', 'assistenz:r'],
'loadAufnahmegruppen' => ['admin:r', 'assistenz:r'],
'getResultReihungstest' => ['admin:r', 'assistenz:r'],
'getZukuenftigeReihungstestStg' => ['admin:r', 'assistenz:r'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
'admission'
]);
// Load models
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
}
public function getAufnahmetermine($person_id)
{
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function insertAufnahmetermin()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$formData = $this->input->post('formData');
$person_id = $this->input->post('person_id');
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
}
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
$studienplan_id = (isset($formData['studienplan_id']) && !empty($formData['studienplan_id'])) ? $formData['studienplan_id'] : null;
$punkte = (isset($formData['punkte']) && !empty($formData['punkte'])) ? $formData['punkte'] : null;
//validation if there is already an RT with chosen data existing
$result = $this->RtPersonModel->loadWhere(
array(
'rt_id' => $rt_id,
'person_id' => $person_id,
'studienplan_id' => $studienplan_id,
)
);
$data = getData($result);
if($data)
return $this->terminateWithError("Error", self::ERROR_TYPE_GENERAL);
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('punkte', 'Punkte', 'numeric', [
'required' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Punkte'])
]);
$this->form_validation->set_rules('studienplan_id', 'studienplan_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studienplan'])
]);
$this->form_validation->set_rules('rt_id', 'Reihungstest_id', 'required', [
'is_valid_date' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Reihungstest'])
]);
$this->form_validation->set_rules('anmeldedatum', 'AnmeldeDatum', 'is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Anmeldedatum'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->RtPersonModel->insert([
'person_id' => $person_id,
'rt_id' => $rt_id,
'anmeldedatum' => $anmeldedatum,
'teilgenommen' => $teilgenommen,
'studienplan_id' => $studienplan_id,
'punkte' => $punkte,
'insertamum' => date('c'),
'insertvon' => $authUID,
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadAufnahmetermin($rt_person_id)
{
$result = $this->RtPersonModel->loadWhere(
array('rt_person_id' => $rt_person_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function updateAufnahmetermin()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$formData = $this->input->post('formData');
$rt_person_id = $this->input->post('rt_person_id');
$person_id = (isset($formData['person_id']) && !empty($formData['person_id'])) ? $formData['person_id'] : null;
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
}
if(!$rt_person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'RT_Person ID']), self::ERROR_TYPE_GENERAL);
}
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
$studienplan_id = (isset($formData['studienplan_id']) && !empty($formData['studienplan_id'])) ? $formData['studienplan_id'] : null;
$punkte = (isset($formData['punkte']) && !empty($formData['punkte'])) ? $formData['punkte'] : null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('punkte', 'Punkte', 'numeric', [
'required' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Punkte'])
]);
$this->form_validation->set_rules('studienplan_id', 'studienplan_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studienplan'])
]);
$this->form_validation->set_rules('rt_id', 'Reihungstest_id', 'required', [
'is_valid_date' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Reihungstest'])
]);
$this->form_validation->set_rules('anmeldedatum', 'AnmeldeDatum', 'is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Anmeldedatum'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->RtPersonModel->update(
[
'rt_person_id' => $rt_person_id,
'person_id' => $person_id,
],
[
'rt_id' => $rt_id,
'anmeldedatum' => $anmeldedatum,
'teilgenommen' => $teilgenommen,
'studienplan_id' => $studienplan_id,
'punkte' => $punkte,
'insertamum' => date('c'),
'insertvon' => $authUID,
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteAufnahmetermin($rt_person_id)
{
$result = $this->RtPersonModel->delete(
array('rt_person_id' => $rt_person_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getListPlacementTests($prestudent_id)
{
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
//get studienplan array
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->PrestudentstatusModel->addSelect('*');
$this->PrestudentstatusModel->addSelect('sp.studienplan_id');
$this->PrestudentstatusModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
$result = $this->PrestudentstatusModel->loadWhere(
array(
'prestudent_id' => $prestudent_id,
'status_kurzbz' => 'Interessent'
)
);
$data = $this->getDataOrTerminateWithError($result);
$studienplan_arr = [];
$include_ids = [];
foreach ($data as $item)
{
if($item->studienplan_id != null)
$studienplan_arr[] = $item->studienplan_id;
}
//get Placementtests Person
$person_id = $this->_getPersonId($prestudent_id);
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
$dataRt = $this->getDataOrTerminateWithError($resultRt);
foreach ($dataRt as $item)
{
if(!in_array($item->studienplan_id, $studienplan_arr))
$studienplan_arr[] = $item->studienplan_id;
if(!in_array($item->rt_id, $include_ids) && ($item->rt_id != null))
$include_ids[] = $item->rt_id;
}
$result = $this->ReihungstestModel->getReihungstestByStudyPlanAndIds($studienplan_arr, $include_ids);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getListStudyPlans($person_id)
{
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
$result = $this->StudienplanModel->getStudienplaeneForPerson($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadDataRtPrestudent($prestudent_id)
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->PrestudentModel->addSelect(["reihungstestangetreten"]);
$this->PrestudentModel->addSelect(["rt_gesamtpunkte"]);
$this->PrestudentModel->addSelect(["aufnahmegruppe_kurzbz"]);
$result = $this->PrestudentModel->loadWhere(
array('prestudent_id' => $prestudent_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function insertOrUpdateDataRtPrestudent()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$formData = $this->input->post('formData');
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$rt_gesamtpunkte =
(isset($formData['rt_gesamtpunkte']) && !empty($formData['rt_gesamtpunkte']))
? $formData['rt_gesamtpunkte']
: null;
$reihungstestangetreten =
(isset($formData['reihungstestangetreten']) && !empty($formData['reihungstestangetreten']))
? $formData['reihungstestangetreten']
: null;
$aufnahmegruppe_kurzbz =
(isset($formData['aufnahmegruppe_kurzbz']) && !empty($formData['aufnahmegruppe_kurzbz']))
? $formData['aufnahmegruppe_kurzbz']
: null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('rt_gesamtpunkte', 'Rt_gesamtpunkte', 'numeric', [
'required' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Rt_gesamtpunkte'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->update(
[
'prestudent_id' => $prestudent_id,
],
[
'reihungstestangetreten' => $reihungstestangetreten,
'rt_gesamtpunkte' => $rt_gesamtpunkte,
'aufnahmegruppe_kurzbz' => $aufnahmegruppe_kurzbz,
'updateamum' => date('c'),
'updatevon' => $authUID,
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadAufnahmegruppen()
{
$uid = $this->input->get('uid');
$studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz');
$this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel');
$result = $this->BenutzergruppeModel->loadAufnahmegruppen($uid, $studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(($data));
}
public function getResultReihungstest()
{
$person_id = $this->input->get('person_id');
$punkte = $this->input->get('punkte');
$reihungstest_id = $this->input->get('reihungstest_id');
if(!$reihungstest_id)
{
$this->terminateWithSuccess(null);
}
//for gewichtung
$studiengang_kz = $this->input->get('studiengang_kz');
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz);
$data = $this->getDataOrTerminateWithError($result);
$weightedArray = [];
foreach ($data as $abl)
{
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
}
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray);
/* if (isError($result))
{
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}*/
$this->terminateWithSuccess($result);
}
public function getZukuenftigeReihungstestStg()
{
$studiengang_kz = $this->input->get('studiengang_kz');
if(!$studiengang_kz)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
}
$result = $this->ReihungstestModel->getZukuenftigeReihungstestStg($studiengang_kz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
private function _getPersonId($prestudent_id)
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->loadWhere(
['prestudent_id' => $prestudent_id]
);
$data = $this->getDataOrTerminateWithError($result);
$person = current($data);
return $person->person_id;
}
}
@@ -84,6 +84,10 @@ class Config extends FHCAPI_Controller
'title' => 'Status',
'component' => './Stv/Studentenverwaltung/Details/MultiStatus.js'
];
$result['documents'] = [
'title' => $this->p->t('stv', 'tab_documents'),
'component' => './Stv/Studentenverwaltung/Details/Dokumente.js'
];
$result['banking'] = [
'title' => $this->p->t('stv', 'tab_banking'),
'component' => './Stv/Studentenverwaltung/Details/Konto.js',
@@ -100,6 +104,15 @@ class Config extends FHCAPI_Controller
'title' => $this->p->t('stv', 'tab_resources'),
'component' => './Stv/Studentenverwaltung/Details/Betriebsmittel.js'
];
$result['groups'] = [
'title' => $this->p->t('stv', 'tab_groups'),
'component' => './Stv/Studentenverwaltung/Details/Gruppen.js'
];
$result['messages'] = [
'title' => $this->p->t('stv', 'tab_messages'),
'component' => './Stv/Studentenverwaltung/Details/Messages.js'
];
$result['grades'] = [
'title' => $this->p->t('stv', 'tab_grades'),
'component' => './Stv/Studentenverwaltung/Details/Noten.js',
@@ -118,6 +131,12 @@ class Config extends FHCAPI_Controller
'component' => './Stv/Studentenverwaltung/Details/Pruefung.js'
];
$result['exemptions'] = [
'title' => $this->p->t('lehre', 'anrechnungen'),
'component' => './Stv/Studentenverwaltung/Details/Anrechnungen.js',
'config' => $config['exemptions']
];
$result['finalexam'] = [
'title' => $this->p->t('stv', 'tab_finalexam'),
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
@@ -147,6 +166,26 @@ class Config extends FHCAPI_Controller
]
];
$result['jointstudies'] = [
'title' => $this->p->t('stv', 'tab_jointstudies'),
'component' => './Stv/Studentenverwaltung/Details/JointStudies.js'
];
$result['coursedates'] = [
'title' => $this->p->t('stv', 'tab_courseDates'),
'component' => './Stv/Studentenverwaltung/Details/Lehrveranstaltungstermine.js'
];
$result['admissionDates'] = [
'title' => $this->p->t('stv', 'tab_admissionDates'),
'component' => './Stv/Studentenverwaltung/Details/Aufnahmetermine.js'
];
$result['functions'] = [
'title' => $this->p->t('stv', 'tab_functions'),
'component' => './Stv/Studentenverwaltung/Details/Funktionen.js'
];
Events::trigger('stv_conf_student', function & () use (&$result) {
return $result;
});
@@ -182,7 +221,7 @@ class Config extends FHCAPI_Controller
]
];
$result['finalexam'] = [
'title' => $this->p->t('stv', 'tab_finalexam'),
'title' => $this->p->t('stv', 'tab_finalexam'),
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
'config' => $config['finalexam']
];
@@ -0,0 +1,562 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Dokumente extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getDocumentsUnaccepted' => ['admin:r', 'assistenz:r'],
'getDocumentsAccepted' => ['admin:r', 'assistenz:r'],
'deleteZuordnung' => ['admin:rw', 'assistenz:rw'],
'createZuordnung' => ['admin:rw', 'assistenz:rw'],
'loadAkte' => ['admin:rw', 'assistenz:rw'],
'deleteAkte' => ['admin:rw', 'assistenz:rw'],
'updateAkte' => ['admin:rw', 'assistenz:rw'],
'getDoktypen' => ['admin:r', 'assistenz:r'],
'uploadDokument' => ['admin:rw', 'assistenz:rw'],
'download' => ['admin:rw', 'assistenz:rw'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
$this->load->library('DmsLib', array('who' => getAuthUID()));
// Load language phrases
$this->loadPhrases([
'ui',
'dokumente'
]);
// Load models
$this->load->model('crm/Akte_model', 'AkteModel');
$this->load->model('crm/Dokument_model', 'DokumentModel');
$this->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel');
//TODO(Manu) check additional Berechtigungen
//TODO(Manu) check if using dokument lib instead of dokument model?
}
public function getDocumentsUnaccepted($prestudent_id, $studiengang_kz)
{
if(!$prestudent_id)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if (!is_numeric($prestudent_id))
$this->terminateWithError($this->p->t('ui', 'error_valueNotNumeric', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if(!$studiengang_kz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$person_id = $this->_getPersonId($prestudent_id);
$result = $this->DokumentModel->getUnacceptedDocuments($prestudent_id, $person_id);
$dataAkteUnaccepted = $this->getDataOrTerminateWithError($result);
$resultMd = $this->_getMissingDocuments($studiengang_kz, $prestudent_id);
$data = $this->_mergeDocuments($dataAkteUnaccepted, $resultMd);
$this->terminateWithSuccess($data);
}
public function getDocumentsAccepted($prestudent_id, $studiengang_kz)
{
if(!$prestudent_id)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if (!is_numeric($prestudent_id))
$this->terminateWithError($this->p->t('ui', 'error_valueNotNumeric', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if(!$studiengang_kz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
$arrayAccepted = [];
$person_id = $this->_getPersonId($prestudent_id);
$docNames = array_map(function ($item) {
return $item->dokument_kurzbz;
}, $resultPreDoc);
foreach($docNames as $doc)
{
$result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (hasData($result))
{
$data = getData($result);
foreach ($data as $value)
{
array_push($arrayAccepted, $value);
}
}
}
//Array for total list of accepted documents
$newDataMap = [];
foreach ($arrayAccepted as $item) {
$newDataMap[] = (array)$item;
}
$listExistingKurzbz = array_column($newDataMap, 'dokument_kurzbz');
foreach ($resultPreDoc as $item)
{
if (!in_array($item->dokument_kurzbz, $listExistingKurzbz))
{
$newDataMap[] = (array)$item;
}
}
$this->terminateWithSuccess($newDataMap);
}
public function deleteZuordnung($prestudent_id, $dokument_kurzbz)
{
if(!$prestudent_id)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if (!is_numeric($prestudent_id))
$this->terminateWithError($this->p->t('ui', 'error_valueNotNumeric', ['value' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if(!$dokument_kurzbz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Dokument_kurzbz']), self::ERROR_TYPE_GENERAL);
$result = $this->DokumentprestudentModel->delete(
[
'prestudent_id' => $prestudent_id,
'dokument_kurzbz' => $dokument_kurzbz
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadAkte($akte_id)
{
if (!$akte_id)
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Akte ID']), self::ERROR_TYPE_GENERAL);
$this->AkteModel->addSelect('public.tbl_akte.*');
$this->AkteModel->addSelect("CONCAT(public.tbl_person.vorname, ' ' , public.tbl_person.nachname) AS namePerson");
$this->AkteModel->addJoin('public.tbl_person', 'person_id');
$result = $this->AkteModel->loadWhere(
[
'akte_id' => $akte_id,
]
);
$data = $this->getDataOrTerminateWithError($result);
$data = current($data);
$this->terminateWithSuccess($data);
}
public function updateAkte()
{
$this->form_validation->set_rules('akte_id', 'Akte ID', 'required', [
'required' => $this->p->t('dokumente', 'err_updateNotAllowed')
]);
$this->form_validation->set_rules('dokument_kurzbz', 'Dokumenttyp', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Dokumenttyp'])
]);
$this->form_validation->set_rules('nachreichung_am', 'Nachreichung am', 'is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Nachreichung am'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$uid = getAuthUID();
$result = $this->AkteModel->update(
[
'akte_id' => $this->input->post('akte_id'),
],
[
'dokument_kurzbz' => $this->input->post('dokument_kurzbz'),
'anmerkung_intern' => $this->input->post('anmerkung_intern'),
'titel_intern' => $this->input->post('titel_intern'),
'nachgereicht_am' => $this->input->post('nachgereicht_am'),
'updateamum' => date('c'),
'updatevon' => $uid,
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function createZuordnung($prestudent_id, $dokument_kurzbz)
{
if (!$prestudent_id)
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
if(!$dokument_kurzbz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Dokument_kurzbz']), self::ERROR_TYPE_GENERAL);
$uid = getAuthUid();
//check if more than 1 dokumentkurzbz
//if()
$result = $this->DokumentprestudentModel->insert(
[
'prestudent_id' => $prestudent_id,
'dokument_kurzbz' => $dokument_kurzbz,
'mitarbeiter_uid' => $uid,
'datum' => date('c'),
'insertamum' => date('c'),
'insertvon' => $uid,
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteAkte($akte_id)
{
if (!$akte_id)
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Akte ID']), self::ERROR_TYPE_GENERAL);
$result = $this->AkteModel->load($akte_id);
$dataAkte = $this->getDataOrTerminateWithError($result);
$logdata_akte = var_export($dataAkte, true);
$dms_id = current($dataAkte)->dms_id;
$nachgereicht = current($dataAkte)->nachgereicht;
$inhalt = current($dataAkte)->inhalt;
$inhaltVorhanden = $inhalt != '';
$uid = getAuthUid();
$this->db->trans_start();
if($dms_id)
{
$this->load->model('content/Dms_model', 'DmsModel');
$result = $this->DmsModel->load($dms_id);
$data = $this->getDataOrTerminateWithError($result);
$logdata_dms = (array)$data;
$logdata_dms = "Logdata: " . var_export($logdata_dms, true);
//delete from dmsLib
$this->load->library('DmsLib');
$person_id = current($dataAkte)->person_id;
$result = $this->dmslib->delete($person_id, $dms_id);
$this->getDataOrTerminateWithError($result);
//LOGGING Dms ID
$this->load->model('system/Log_model', 'LogModel');
$result = $this->LogModel->insert([
'executetime' => date('c'),
'mitarbeiter_uid' => $uid,
'beschreibung' => "Löschen der DMS_ID ". $dms_id,
'sql' => $logdata_dms
]);
$this->getDataOrTerminateWithError($result);
//delete akte
$result = $this->AkteModel->delete(
[
'akte_id' => $akte_id
]
);
$data = $this->getDataOrTerminateWithError($result);
//Logging Deletion Akte
$result = $this->LogModel->insert([
'executetime' => date('c'),
'mitarbeiter_uid' => $uid,
'beschreibung' => "Löschen der Akte ". $akte_id,
'sql' => "DELETE FROM public.tbl_akte WHERE akte_id=" .$akte_id. " LogData: ". $logdata_akte
]);
$this->getDataOrTerminateWithError($result);
$this->db->trans_complete();
$this->terminateWithSuccess($data);
}
elseif (!!$dms_id || ($nachgereicht && !$inhaltVorhanden))
{
$result = $this->AkteModel->delete(
[
'akte_id' => $akte_id
]
);
$data = $this->getDataOrTerminateWithError($result);
$result = $this->LogModel->insert([
'executetime' => date('c'),
'mitarbeiter_uid' => $uid,
'beschreibung' => "Löschen der Akte ". $akte_id,
'sql' => "DELETE FROM public.tbl_akte WHERE akte_id=" .$akte_id. " LogData: ". $logdata_akte
]);
$this->getDataOrTerminateWithError($result);
$this->db->trans_complete();
$this->terminateWithSuccess($data);
}
else
$this->terminateWithError($this->p->t('dokumente', 'err_deleteDokHere'), self::ERROR_TYPE_GENERAL);
}
public function uploadDokument()
{
$this->load->library('DmsLib');
$prestudent_id = $this->input->post('prestudent_id');
$anmerkung_intern = $this->input->post('anmerkung_intern');
$titel_intern = $this->input->post('titel_intern');
$dokument_kurzbz = $this->input->post('dokument_kurzbz');
$this->form_validation->set_rules('prestudent_id', 'Prestudent_id', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Prestudent ID'])
]);
$this->form_validation->set_rules('dokument_kurzbz', 'Dokumenttyp', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Dokumenttyp'])
]);
//validation if attachment was added
$this->form_validation->set_rules('anhang', 'Attachment', 'callback_file_check');
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$this->db->trans_start();
$uid = getAuthUID();
$dms = array(
'kategorie_kurzbz' => 'Akte',
'version' => 0,
'name' => $_FILES['anhang']['name'],
'mimetype' => $_FILES['anhang']['type'],
'insertamum' => date('c'),
'insertvon' => $uid
);
$result = $this->dmslib->upload($dms, 'anhang', array("jpg", "png", "pdf"));
if (isError($result))
{
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$dms_id = $result->retval['dms_id'];
$person_id = $this->_getPersonId($prestudent_id);
$result = $this->DokumentModel->load($dokument_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$bezeichnung = current($data)->bezeichnung;
//save entry in akte
if($dms_id)
{
$result = $this->AkteModel->insert([
'person_id' => $person_id,
'dms_id' => $dms_id,
'dokument_kurzbz' => $dokument_kurzbz,
'mimetype' => $_FILES['anhang']['type'],
'insertamum' => date('c'),
'erstelltam' => date('c'),
'insertvon' => $uid,
'anmerkung_intern' => $anmerkung_intern,
'titel_intern' => $titel_intern,
'bezeichnung' => $bezeichnung,
'titel' => $_FILES['anhang']['name']
]);
$data = $this->getDataOrTerminateWithError($result);
$this->db->trans_complete();
$this->terminateWithSuccess($data);
}
$this->db->trans_complete();
$this->terminateWithSuccess($data);
}
public function getDoktypen()
{
$this->DokumentModel->addSelect('dokument_kurzbz');
$this->DokumentModel->addSelect('bezeichnung');
$this->DokumentModel->addOrder('dokument_kurzbz', 'ASC');
$result = $this->DokumentModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function download()
{
//TODO(Manu) check filetype, Decoding
$akte_id = $this->input->get('akte_id');
if(!$akte_id)
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Akte ID']), self::ERROR_TYPE_GENERAL);
if (!is_numeric($akte_id))
$this->terminateWithError($this->p->t('ui', 'error_valueNotNumeric', ['value' => 'Akte ID']), self::ERROR_TYPE_GENERAL);
$result = $this->AkteModel->load($akte_id);
if (!hasData($result)) $this->terminateWithError('Akte not found');
$data = getData($result)[0];
$mimetype = $data->mimetype;
$filecontentbase64 = $data->inhalt;
$filename = $data->titel;
if(intval($data->dms_id) > 0)
{
$dmsdokres = $this->dmslib->read($data->dms_id);
if (!hasData($dmsdokres)) $this->terminateWithError('DMS File not found');
$dmsdok = getData($dmsdokres)[0];
$mimetype = $dmsdok->mimetype;
$filecontentbase64 = $dmsdok->file_content;
$filename = $dmsdok->name;
}
$filecontent = '';
if (!empty($filecontentbase64)) {
$filecontent = base64_decode($filecontentbase64, true);
if ($filecontent === false) {
$this->terminateWithError('Base64-Dekodierung failed.');
}
}
$this->terminateWithFileOutput($mimetype, $filecontent, $filename);
}
private function _getMissingDocuments($studiengang_kz, $prestudent_id)
{
$result = $this->DokumentModel->getMissingDocuments($studiengang_kz, $prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
return $data;
}
private function _getUnacceptedDocuments($prestudent_id)
{
$person_id = $this->_getPersonId($prestudent_id);
$result = $this->DokumentModel->getUnacceptedDocuments($prestudent_id, $person_id);
$data = $this->getDataOrTerminateWithError($result);
return $data;
}
/**
* helper function for merging objects
* sorts object after merging according to dokument_kurzbz
* @param $original object of documents of akte
* @param object $toMerge documents to merge (of dokumentprestudent, dokumentstudiengang)
* @return Array mergedObject
*/
private function _mergeDocuments($original, $toMerge)
{
$existingKurzbez = [];
foreach ($original as $doc) {
$existingKurzbez[$doc->dokument_kurzbz] = true;
}
foreach ($toMerge as $doc) {
if (!isset($existingKurzbez[$doc->dokument_kurzbz])) {
$original[] = $doc;
$existingKurzbez[$doc->dokument_kurzbz] = true;
}
else
{
foreach($original as $docOriginal)
{
if ($docOriginal->dokument_kurzbz == $doc->dokument_kurzbz)
{
$docOriginal->pflicht = $doc->pflicht;
$docOriginal->onlinebewerbung = $doc->onlinebewerbung;
}
}
}
}
usort($original, function ($a, $b) {
return strcmp($a->dokument_kurzbz, $b->dokument_kurzbz);
});
return $original;
}
private function _getDocumentsOfAkte($person_id)
{
$result = $this->AkteModel->getAktenFAS($person_id);
$data = $this->getDataOrTerminateWithError($result);
return $data;
}
private function _getPrestudentDokumente($prestudent_id)
{
$result = $this->DokumentprestudentModel->getPrestudentDokumente($prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
return $data;
}
private function _getPersonId($prestudent_id)
{
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->loadWhere(
['prestudent_id' => $prestudent_id]
);
$data = $this->getDataOrTerminateWithError($result);
$person = current($data);
return $person->person_id;
}
public function file_check($str)
{
if (isset($_FILES['anhang']) && $_FILES['anhang']['size'] > 0)
{
$allowed_mime_types = ['image/jpeg', 'image/png', 'application/pdf'];
$mime = mime_content_type($_FILES['anhang']['tmp_name']);
if (in_array($mime, $allowed_mime_types))
{
return true;
} else
{
$this->form_validation->set_message('file_check', $this->p->t('dokumente', 'error_fileType'));
return false;
}
}
else
{
$this->form_validation->set_message('file_check', $this->p->t('dokumente', 'error_fileMissing'));
return false;
}
}
}
@@ -0,0 +1,287 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class GemeinsameStudien extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getStudien' => ['admin:r', 'assistenz:r'],
'loadStudie' => ['admin:r', 'assistenz:r'],
'insertStudie' => ['admin:rw', 'assistenz:rw'],
'updateStudie' => ['admin:rw', 'assistenz:rw'],
'deleteStudie' => ['admin:rw', 'assistenz:rw'],
'getProgramsStudien' => ['admin:r', 'assistenz:r'],
'getTypenMobility' => ['admin:r', 'assistenz:r'],
'getStudiensemester' => ['admin:r', 'assistenz:r'],
'getStudienprogramme' => ['admin:r', 'assistenz:r'],
'getPartnerfirmen' => ['admin:r', 'assistenz:r'],
'getStatiPrestudent' => ['admin:r', 'assistenz:r'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
'jointstudies'
]);
// Load models
$this->load->model('codex/Mobilitaet_model', 'MobilitaetModel');
//TODO(check if additional Permissions necessary): 'student/stammdaten'
}
public function getStudien($prestudent_id)
{
$this->MobilitaetModel->addSelect('mobilitaet_id');
$this->MobilitaetModel->addSelect('mobilitaetstyp_kurzbz');
$this->MobilitaetModel->addSelect('prestudent_id');
$this->MobilitaetModel->addSelect('studiensemester_kurzbz');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.mobilitaetsprogramm_code');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.gsprogramm_id');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.firma_id');
$this->MobilitaetModel->addSelect('status_kurzbz');
$this->MobilitaetModel->addSelect('ausbildungssemester');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertvon');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertamum');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updatevon');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updateamum');
$this->MobilitaetModel->addSelect('mp.kurzbz');
$this->MobilitaetModel->addSelect('gp.gsprogrammtyp_kurzbz');
$this->MobilitaetModel->addSelect('gp.bezeichnung as studienprogramm');
$this->MobilitaetModel->addSelect('f.name as partner');
$this->MobilitaetModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_mobilitaet.mobilitaetsprogramm_code)', 'LEFT');
$this->MobilitaetModel->addJoin('bis.tbl_gsprogramm gp', 'ON (gp.gsprogramm_id = bis.tbl_mobilitaet.gsprogramm_id)', 'LEFT');
$this->MobilitaetModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = bis.tbl_mobilitaet.firma_id)', 'LEFT');
$result = $this->MobilitaetModel->loadWhere([
'prestudent_id' => $prestudent_id,
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getTypenMobility()
{
$this->load->model('codex/Mobilitaetstyp_model', 'MobilitaetstypModel');
$result = $this->MobilitaetstypModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStudiensemester()
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addOrder('studienjahr_kurzbz', 'DESC');
$result = $this->StudiensemesterModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStudienprogramme()
{
$this->load->model('codex/Gsprogramm_model', 'GsprogrammModel');
$result = $this->GsprogrammModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getPartnerfirmen()
{
$this->load->model('ressource/Firma_model', 'FirmaModel');
$result = $this->FirmaModel->loadWhere(
['partner_code !=' => null]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStatiPrestudent()
{
$this->load->model('crm/Status_model', 'StatusModel');
$result = $this->StatusModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadStudie($mobilitaet_id)
{
$result = $this->MobilitaetModel->load($mobilitaet_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function insertStudie()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$ausbildungssemester = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester']))
? $formData['ausbildungssemester']
: null;
$mobilitaetstyp_kurzbz = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz']))
? $formData['mobilitaetstyp_kurzbz']
: null;
$studiensemester_kurzbz = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz']))
? $formData['studiensemester_kurzbz'] : null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester'])
]);
$this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']),
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz']))
? $formData['status_kurzbz']
: null;
$mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code']))
? $formData['mobilitaetsprogramm_code']
: null;
$gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id']))
? $formData['gsprogramm_id']
: null;
$firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null;
$result = $this->MobilitaetModel->insert([
'prestudent_id' => $prestudent_id,
'mobilitaetstyp_kurzbz' =>$mobilitaetstyp_kurzbz,
'status_kurzbz' => $status_kurzbz,
'studiensemester_kurzbz' =>$studiensemester_kurzbz,
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'gsprogramm_id' => $gsprogramm_id,
'firma_id' => $firma_id,
'ausbildungssemester' =>$ausbildungssemester,
'insertvon' => $authUID,
'insertamum' => date('c'),
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function updateStudie()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$mobilitaet_id = (isset($formData['mobilitaet_id']) && !empty($formData['mobilitaet_id']))
? $formData['mobilitaet_id'] :
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilitaet ID']), self::ERROR_TYPE_GENERAL);
$ausbildungssemester = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester']))
? $formData['ausbildungssemester']
: null;
$mobilitaetstyp_kurzbz = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz']))
? $formData['mobilitaetstyp_kurzbz']
: null;
$studiensemester_kurzbz = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz']))
? $formData['studiensemester_kurzbz']
: null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester'])
]);
$this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']),
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz'])) ? $formData['status_kurzbz'] : null;
$mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code']))
? $formData['mobilitaetsprogramm_code']
: null;
$gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id']))
? $formData['gsprogramm_id']
: null;
$firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null;
$result = $this->MobilitaetModel->update(
[
'mobilitaet_id' => $mobilitaet_id,
],
[
'prestudent_id' => $prestudent_id,
'mobilitaetstyp_kurzbz' => $mobilitaetstyp_kurzbz,
'status_kurzbz' => $status_kurzbz,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'gsprogramm_id' => $gsprogramm_id,
'firma_id' => $firma_id,
'ausbildungssemester' => $ausbildungssemester,
'updatevon' => $authUID,
'updateamum' => date('c'),
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteStudie($mobilitaet_id)
{
if(!$mobilitaet_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilität ID']), self::ERROR_TYPE_GENERAL);
}
$result = $this->MobilitaetModel->delete(
array('mobilitaet_id' => $mobilitaet_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
@@ -0,0 +1,80 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Gruppen extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getGruppen' => ['admin:r', 'assistenz:r'],
'deleteGruppe' => ['admin:rw', 'assistenz:rw'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
// Load language phrases
$this->loadPhrases([
'ui', 'gruppenmanagement'
]);
// Load models
$this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel');
$this->load->model('organisation/Gruppe_model', 'GruppeModel');
}
public function getGruppen($student_uid)
{
$this->BenutzergruppeModel ->addSelect('gruppe_kurzbz');
$this->BenutzergruppeModel ->addSelect('bezeichnung');
$this->BenutzergruppeModel ->addSelect('generiert');
$this->BenutzergruppeModel ->addSelect('uid');
$this->BenutzergruppeModel ->addSelect('studiensemester_kurzbz');
$this->BenutzergruppeModel ->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
$this->BenutzergruppeModel-> addOrder('bezeichnung', 'ASC');
$result = $this->BenutzergruppeModel->loadWhere(
array(
'uid' => $student_uid
)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteGruppe()
{
$student_uid = $this->input->post('id');
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
//Validate if automatic group generation
$result = $this->GruppeModel-> loadWhere(
array(
'gruppe_kurzbz' => $gruppe_kurzbz
)
);
$data = $this->getDataOrTerminateWithError($result);
$generation = current($data);
if($generation->generiert)
{
$this->terminateWithError($this->p->t('gruppenmanagement', 'error_deleteGeneratedGroups'), self::ERROR_TYPE_GENERAL);
}
$result = $this->BenutzergruppeModel->delete(
array(
'gruppe_kurzbz' => $gruppe_kurzbz,
'uid' => $student_uid
)
);
$data = $this->getDataOrTerminateWithError($result);
return $this->terminateWithSuccess($data);
}
}
@@ -28,7 +28,8 @@ class Kontakt extends FHCAPI_Controller
'getStandorte' => ['admin:r', 'assistenz:r'],
'getStandorteByFirma' => ['admin:r', 'assistenz:r'],
'getKontakte' => ['admin:r', 'assistenz:r'],
'getBankverbindung' => ['mitarbeiter/bankdaten:r', 'student/bankdaten:r']
'getBankverbindung' => ['mitarbeiter/bankdaten:r', 'student/bankdaten:r'],
'getAllFirmen' => ['admin:r', 'assistenz:r']
]);
// Load Libraries
@@ -46,6 +47,7 @@ class Kontakt extends FHCAPI_Controller
$this->load->model('organisation/standort_model', 'StandortModel');
$this->load->model('ressource/firma_model', 'FirmaModel');
$this->load->model('person/Kontakt_model', 'KontaktModel');
$this->load->model('person/Kontakttyp_model', 'KontakttypModel');
// Extra Permissionchecks
$permsMa = [];
@@ -197,13 +199,7 @@ class Kontakt extends FHCAPI_Controller
$name = isset($_POST['name']) ? $_POST['name'] : null;
$typ = isset($_POST['typ']) ? $_POST['typ'] : null;
$anmerkung = isset($_POST['anmerkung']) ? $_POST['anmerkung'] : null;
if(isset($_POST['firma']))
{
$firma_id = $_POST['firma']['firma_id'];
}
else
$firma_id = null;
$firma_id = isset($_POST['firma_id']) ? $_POST['firma_id'] : null;
$result = $this->AdresseModel->insert(
[
@@ -270,17 +266,6 @@ class Kontakt extends FHCAPI_Controller
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Adresse_id']), self::ERROR_TYPE_GENERAL);
}
if(isset($_POST['firma']))
{
$firma_id = $_POST['firma']['firma_id'];
}
elseif(isset($_POST['firma_id']))
{
$firma_id = $_POST['firma_id'];
}
else
$firma_id = null;
$person_id = isset($_POST['person_id']) ? $_POST['person_id'] : null;
$co_name = isset($_POST['co_name']) ? $_POST['co_name'] : null;
$strasse = isset($_POST['strasse']) ? $_POST['strasse'] : null;
@@ -290,6 +275,7 @@ class Kontakt extends FHCAPI_Controller
$name = isset($_POST['name']) ? $_POST['name'] : null;
$typ = isset($_POST['typ']) ? $_POST['typ'] : null;
$anmerkung = isset($_POST['anmerkung']) ? $_POST['anmerkung'] : null;
$firma_id = isset($_POST['firma_id']) ? $_POST['firma_id'] : null;
$result = $this->AdresseModel->update(
[
@@ -444,8 +430,10 @@ class Kontakt extends FHCAPI_Controller
THEN public.tbl_kontakt.updateamum
ELSE public.tbl_kontakt.insertamum
END) AS lastUpdate, st.bezeichnung, f.name");
$this->KontakttypModel->addSelect("kt.beschreibung as kontakttypbeschreibung");
$this->StandortModel->addJoin('public.tbl_standort st', 'ON (public.tbl_kontakt.standort_id = st.standort_id)', 'LEFT');
$this->FirmaModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = st.firma_id)', 'LEFT');
$this->KontakttypModel->addJoin('public.tbl_kontakttyp kt', 'ON (public.tbl_kontakt.kontakttyp = kt.kontakttyp)');
$result = $this->KontaktModel->loadWhere(
array('person_id' => $person_id)
);
@@ -595,8 +583,8 @@ class Kontakt extends FHCAPI_Controller
'anmerkung' => $anmerkung,
'kontakt' => $kontakt,
'zustellung' => $_POST['zustellung'],
'insertvon' => $uid,
'insertamum' => date('c'),
'updatevon' => $uid,
'updateamum' => date('c'),
'standort_id' => $standort_id,
'ext_id' => $ext_id
]
@@ -671,6 +659,7 @@ class Kontakt extends FHCAPI_Controller
$iban = $this->input->post('iban');
$typ = $this->input->post('typ');
$verrechnung = $this->input->post('verrechnung');
$uid = getAuthUID();
$result = $this->BankverbindungModel->insert(
[
@@ -681,7 +670,7 @@ class Kontakt extends FHCAPI_Controller
'iban' => $iban,
'blz' => $blz,
'kontonr' => $kontonr,
'insertvon' => 'uid',
'insertvon' => $uid,
'insertamum' => date('c'),
'typ' => $typ,
'verrechnung' => $verrechnung,
@@ -798,4 +787,25 @@ class Kontakt extends FHCAPI_Controller
return $this->GemeindeModel->checkLocation($_POST['plz'], $_POST['gemeinde'], $_POST['ort']);
}
/*
* returns list of all companies
* as key value list to be used in select or autocomplete
*/
public function getAllFirmen()
{
$sql = "
SELECT
f.firma_id, f.name,
f.name AS label
FROM public.tbl_firma f
ORDER BY f.name ASC";
$result = $this->FirmaModel->execReadOnlyQuery($sql);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
@@ -116,6 +116,8 @@ class Konto extends FHCAPI_Controller
{
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
$this->BuchungstypModel->addOrder('beschreibung');
$result = $this->BuchungstypModel->load();
$data = $this->getDataOrTerminateWithError($result);
@@ -0,0 +1,408 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class LvTermine extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getStundenplan' => ['admin:r', 'assistenz:r'],
'getStudiensemester' => ['admin:r', 'assistenz:r'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
]);
// Load models
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
//query verwenden wie im Cis endpoint
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$this->load->model('person/Benutzergruppe_model', 'BenutzergruppeModel');
}
//TODO Build own lib or combine with Controller Stundenplan.php
//here use of logic of Stundenplan.php, extended with parameters uid, grouping, and used dbTable
public function getStundenplan($uid, $start_date = null, $end_date = null, $groupConsecutiveHours = false, $dbStundenplanTable = "stundenplan")
{
$student_uid = $uid;
$semester_range = $this->studienSemesterErmitteln($start_date, $end_date);
$this->sortStudienSemester($semester_range);
$this->applyLoadUeberSemesterHaelfte($semester_range);
$benutzer_gruppen = $this->fetchBenutzerGruppenFromStudiensemester($semester_range, $student_uid);
$student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($semester_range, $student_uid);
if(!$groupConsecutiveHours)
$stundenplan_query = $this->StundenplanModel->getStundenplanQuery(
$start_date,
$end_date,
$semester_range,
$benutzer_gruppen,
$student_lehrverband
);
else
$stundenplan_query = $this->StundenplanModel->getStundenplanQuery(
$start_date,
$end_date,
$semester_range,
$benutzer_gruppen,
$student_lehrverband,
true,
$dbStundenplanTable
);
if(!$stundenplan_query)
{
$this->terminateWithSuccess([]);
}
if($groupConsecutiveHours)
{
$stundenplan_data = $this->StundenplanModel->stundenplanGruppierungConsecutive($stundenplan_query);
}
else
{
$stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($stundenplan_query);
}
$stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? [];
$this->terminateWithSuccess($stundenplan_data);
$this->expand_object_information($stundenplan_data);
$this->returnObj['$stundenplan_query'] = $stundenplan_query;
$this->returnObj['$student_lehrverband'] = $student_lehrverband;
$this->returnObj['$benutzer_gruppen'] = $benutzer_gruppen;
$this->terminateWithSuccess($stundenplan_data);
}
public function getStudiensemester()
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addOrder('studienjahr_kurzbz', 'DESC');
$result = $this->StudiensemesterModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
//copied from Stundenplan.php
private function studienSemesterErmitteln($start_date, $end_date)
{
// gets all studiensemester from the student from start_date to end_date
$semester_range = $this->StudiensemesterModel->getByDateRange($start_date, $end_date);
$semester_range = array_map(
function ($sem) {
return $sem->studiensemester_kurzbz;
},
$this->getDataOrTerminateWithError($semester_range)
);
// if no studiensemester is found for the given timespan, get the nearest studiensemester
if(count($semester_range) == 0)
{
$aktuelle_studiensemester = $this->StudiensemesterModel->getNearest();
$aktuelle_studiensemester = $this->getDataOrTerminateWithError($aktuelle_studiensemester);
if (count($aktuelle_studiensemester) == 0) {
$this->terminateWithError("No aktuelles semester");
}
$aktuelle_studiensemester = current($aktuelle_studiensemester)->studiensemester_kurzbz;
// push aktuelles semester in active semester array
array_push($semester_range, $aktuelle_studiensemester);
}
return $semester_range;
}
//copied from Stundenplan.php
private function sortStudienSemester(&$semester_range)
{
usort(
$semester_range,
function ($first, $second) {
$sem_first = null;
$year_first = null;
$match_first = null;
$sem_second = null;
$year_second = null;
$match_second = null;
preg_match('/([WS]+)([0-9]+)/', $first, $match_first);
preg_match('/([WS]+)([0-9]+)/', $second, $match_second);
$sem_first = $match_first[1];
$year_first = intval($match_first[2]);
$sem_second = $match_second[1];
$year_second = intval($match_second[2]);
if($year_first < $year_second)
{
return -1;
}
elseif($year_first > $year_second)
{
return 1;
}
elseif($year_first == $year_second && $sem_first > $sem_second)
{
return 1;
}
elseif($year_first == $year_second && $sem_first < $sem_second)
{
return -1;
}
return 0;
}
);
}
//copied from Stundenplan.php
private function applyLoadUeberSemesterHaelfte(&$semester_range)
{
/*
@var($semester_collection)
convert the array of studiensemester into an associative array with the studiensemester as the key
and the values of each key are the studiensemester needed for the query associated to that studiensemester
example:
#INPUT:
['WS2023','SS2024','WS2024']
#OUTPUT:
[
'WS2023' => ['SS2023','WS2023']
'SS2024' => ['WS2023','SS2024']
'WS2024' => ['SS2024','WS2024']
]
*/
$semester_collection = [];
foreach($semester_range as $studiensemester)
{
$previous_studiensemester = $this->StudiensemesterModel->getPreviousFrom($studiensemester);
$previous_studiensemester = $this->getDataOrTerminateWithError($previous_studiensemester);
if (count($previous_studiensemester) == 0) {
$this->terminateWithError("No previous semester");
}
$previous_studiensemester = current($previous_studiensemester)->studiensemester_kurzbz;
$semester_collection[$studiensemester] = [$previous_studiensemester, $studiensemester];
}
/*
@var($studienSemesterDateRanges)
fetches for each studiensemester the start and end date, (SS) summer studiensemester are extended by 1 month to cover the summerbreak
based on the LVPLAN_LOAD_UEBER_SEMESTERHAELFTE constant it will load both the semester and the previous semester with the full date range
or the semester with the full date range and the previous semester with the half date range:
#INPUT:
[
'WS2023' => ['SS2023','WS2023']
'SS2024' => ['WS2023','SS2024']
'WS2024' => ['SS2024','WS2024']
]
#OUTPUT: depends whether LVPLAN_LOAD_UEBER_SEMESTERHAELFTE is true or false
~ if LVPLAN_LOAD_UEBER_SEMESTERHAELFTE == true
[
"SS2024": [
"WS2023": [
"start"=> "2024-02-03",
"ende"=> "2024-08-31"
],
"SS2024": [
"start"=> "2024-02-03",
"ende"=> "2024-08-31"
]
]
]
~ if LVPLAN_LOAD_UEBER_SEMESTERHAELFTE == false
[
"SS2024": [
"WS2023": [
"start"=> "2024-02-03",
"ende"=> "2024-05-17"
],
"SS2024": [
"start"=> "2024-02-03",
"ende"=> "2024-08-31"
]
]
]
*/
$studienSemesterDateRanges=[];
foreach($semester_collection as $semester_original => $semester_adjoint)
{
$semester_start_ende = $this->StudiensemesterModel->getStartEndeFromStudiensemester($semester_original);
$semester_start_ende = current($this->getDataOrTerminateWithError($semester_start_ende));
// initialize empty arrays to add key value pairs
$studienSemesterDateRanges[$semester_original] = [];
// check if the studiensemester is a summer semester and add 1 month to bridge the school summer break
$match = null;
preg_match("/^(SS)([0-9]+)/", $semester_original, $match);
if(count($match) >0)
{
$one_month = new DateInterval('P1M');
$one_day = DateInterval::createFromDateString('1 days');
$summer_studiensemester_end_date = DateTime::createFromFormat('Y-m-d', $semester_start_ende->ende);
$summer_studiensemester_end_date->add($one_month);
$summer_studiensemester_end_date->sub($one_day);
$semester_start_ende->ende = date_format($summer_studiensemester_end_date, 'Y-m-d');
}
if (defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true)
{
foreach($semester_adjoint as $adjoint)
{
$studienSemesterDateRanges[$semester_original][$adjoint]=$semester_start_ende;
}
}
else
{
//TODO: half of a DateInterval might not be correctly calculated
// calculate the half of the studiensemester
$studiensemester_start_date = DateTime::createFromFormat('Y-m-d', $semester_start_ende->start);
$studiensemester_end_date = DateTime::createFromFormat('Y-m-d', $semester_start_ende->ende);
$studiensemester_time_difference = $studiensemester_start_date->diff($studiensemester_end_date);
$half_dateNumber = ceil($studiensemester_time_difference->d/2)+ceil(($studiensemester_time_difference->m*30)/2);
$half_dateInterval = new DateInterval('P'.strval($half_dateNumber) .'D');
$studiensemester_half = date_format($studiensemester_start_date->add($half_dateInterval), 'Y-m-d');
$first_half = new stdClass();
$first_half->start = $semester_start_ende->start;
$first_half->ende = $studiensemester_half;
$studienSemesterDateRanges[$semester_original][$semester_adjoint[0]] = $first_half;
$studienSemesterDateRanges[$semester_original][$semester_adjoint[1]] = $semester_start_ende;
}
$semester_range = $studienSemesterDateRanges;
}
}
//copied from Stundenplan.php, extended with $student_uid
private function fetchBenutzerGruppenFromStudiensemester($semester_range, $student_uid)
{
//$student_uid = getAuthUID();
$benutzer_gruppen = [];
// for each studiensemester fetch the benutzer gruppen and add them to an associate $bentuzer_gruppen array
/*
[
['WS2023'] => [['gruppe1_SS2023','gruppe2_SS2023'],['gruppe1_WS2023','gruppe2_WS2023']],
['SS2024'] => [['gruppe1_WS2023','gruppe2_WS2023'],['gruppe1_SS2024','gruppe2_SS2024']],
['WS2024'] => [['gruppe1_SS2024','gruppe2_SS2024'],['gruppe1_WS2024','gruppe2_WS2024']],
]
*/
foreach($semester_range as $semester_key => $semester_array)
{
$benutzer_gruppen[$semester_key] = [];
// each semester could have ajoint semesters that need to be checked
foreach($semester_array as $semester => $semester_date_range)
{
// for each active semester query the benutzer_gruppen associated to the semester
$benutzer_query = $this->BenutzergruppeModel->execReadOnlyQuery("
SELECT * FROM tbl_benutzergruppe where uid = ? AND studiensemester_kurzbz = ?", [$student_uid, $semester]);
$benutzer_query_result = $this->getDataOrTerminateWithError($benutzer_query);
array_push(
$benutzer_gruppen[$semester_key],
array_map(
function ($item) {
return "'".$item->gruppe_kurzbz. "'";
},
$benutzer_query_result
)
);
}
}
// merge the gruppen of each studiensemester together for the original studiensemester
/*
[
['WS2023'] => ['gruppe1_SS2023','gruppe2_SS2023','gruppe1_WS2023','gruppe2_WS2023'],
['SS2024'] => ['gruppe1_WS2023','gruppe2_WS2023','gruppe1_SS2024','gruppe2_SS2024'],
['WS2024'] => ['gruppe1_SS2024','gruppe2_SS2024','gruppe1_WS2024','gruppe2_WS2024'],
]
*/
$benutzer_gruppen = array_map(
function ($gruppe) {
$merged_gruppe = [];
foreach($gruppe as $gruppen_array)
{
$merged_gruppe = array_merge($merged_gruppe, $gruppen_array);
}
return $merged_gruppe;
},
$benutzer_gruppen
);
return $benutzer_gruppen;
}
//copied from Stundenplan.php, extended with $student_uid
private function fetchStudentlehrverbandFromStudiensemester($semester_range, $student_uid)
{
//$student_uid = getAuthUID();
$student_lehrverband = [];
// for each studiensemester fetch the studentlehrverbaende and add them to an associate $student_lehrverband array
/*
[
['WS2023'] => [ [ ['stg_kz'=>298,'semester'=>1,'verband'=>"A",'gruppe'=>""] ] ],
['SS2024'] => [ [ ['stg_kz'=>298,'semester'=>1,'verband'=>"A",'gruppe'=>""] ], [ ['stg_kz'=>298,'semester'=>2,'verband'=>"A",'gruppe'=>""] ] ],
['WS2024'] => [ [ ['stg_kz'=>298,'semester'=>2,'verband'=>"A",'gruppe'=>""] ], [ ['stg_kz'=>298,'semester'=>3,'verband'=>"A",'gruppe'=>""] ] ],
]
*/
foreach($semester_range as $semester_key => $semester_array)
{
$student_lehrverband[$semester_key] = [];
foreach($semester_array as $semester => $semester_date_range)
{
// for each active semester query the student_lehrverband associated to the semester
$lehrverband_query = $this->BenutzergruppeModel->execReadOnlyQuery("
SELECT * FROM tbl_studentlehrverband where student_uid = ? AND studiensemester_kurzbz = ?", [$student_uid, $semester]);
$lehrverband_query_result = $this->getDataOrTerminateWithError($lehrverband_query);
array_push($student_lehrverband[$semester_key], array_map(
function ($item) {
$result = new stdClass();
$result->studiengang_kz = $item->studiengang_kz;
$result->semester = $item->semester;
$result->verband = $item->verband;
$result->gruppe = $item->gruppe;
return $result;
},
$lehrverband_query_result));
}
}
// merge the studentlehrverband of each studiensemester together for the original studiensemester
/*
[
['WS2023'] => [ ['stg_kz'=>298,'semester'=>1,'verband'=>"A",'gruppe'=>""] ],
['SS2024'] => [ ['stg_kz'=>298,'semester'=>1,'verband'=>"A",'gruppe'=>""], ['stg_kz'=>298,'semester'=>2,'verband'=>"A",'gruppe'=>""] ],
['WS2024'] => [ ['stg_kz'=>298,'semester'=>2,'verband'=>"A",'gruppe'=>""], ['stg_kz'=>298,'semester'=>3,'verband'=>"A",'gruppe'=>""] ],
]
*/
$student_lehrverband = array_map(
function ($studentlehrverband) {
$merged_studentlehrverband = [];
foreach($studentlehrverband as $studentlehrverband_array)
{
$merged_studentlehrverband = array_merge($merged_studentlehrverband, $studentlehrverband_array);
}
return $merged_studentlehrverband;
},
$student_lehrverband
);
return $student_lehrverband;
}
}
@@ -3,6 +3,7 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
use CI3_Events as Events;
class Mobility extends FHCAPI_Controller
{
@@ -40,13 +41,54 @@ class Mobility extends FHCAPI_Controller
// Load models
$this->load->model('codex/Bisio_model', 'BisioModel');
//Permission checks for Studiengangsarray
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
if ($this->router->method == 'insertMobility' || $this->router->method == 'updateMobility')
{
$student_uid = $this->input->post('uid');
if(!$student_uid)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL);
}
$this->_checkAllowedStgsFromUid($student_uid, $allowedStgs);
}
if ($this->router->method == 'deleteMobility') {
$bisio_id = $this->input->post('bisio_id');
if(!$bisio_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Bisio ID']), self::ERROR_TYPE_GENERAL);
}
$result = $this->BisioModel->load(
array('bisio_id' => $bisio_id)
);
$data = $this->getDataOrTerminateWithError($result);
$student_uid = current($data)->student_uid;
$this->_checkAllowedStgsFromUid($student_uid, $allowedStgs);
}
}
private function _checkAllowedStgsFromUid($student_uid, $allowedStgs)
{
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
$data = $this->getDataOrTerminateWithError($result);
$studiengang_kz = current($data)->studiengang_kz;
if (!in_array($studiengang_kz, $allowedStgs))
{
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
}
}
public function getMobilitaeten($student_uid)
{
$this->BisioModel->addSelect("*");
$this->BisioModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_bisio.mobilitaetsprogramm_code)', 'LEFT');
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)','LEFT');
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)', 'LEFT');
$this->BisioModel->addOrder('von', 'DESC');
$this->BisioModel->addOrder('bis', 'DESC');
$this->BisioModel->addOrder('bisio_id', 'DESC');
@@ -83,14 +125,20 @@ class Mobility extends FHCAPI_Controller
$formData = $this->input->post('formData');
$_POST['von'] = (isset($formData['von']) && !empty($formData['von'])) ? $formData['von'] : null;
$_POST['bis'] = (isset($formData['bis']) && !empty($formData['bis'])) ? $formData['bis'] : null;
$_POST['nation_code'] = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A';
$_POST['mobilitaetsprogramm_code'] = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null;
$_POST['herkunftsland_code'] = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A';
$_POST['ects_erworben'] = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null;
$_POST['ects_angerechnet'] = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null;
$_POST['lehreinheit_id'] = (isset($formData['lehreinheit_id']) && !empty($formData['lehreinheit_id'])) ? $formData['lehreinheit_id'] : null;
$von = $formData['von'] ?? null;
$bis = $formData['bis'] ?? null;
$nation_code = $formData['nation_code'] ?? null;
$mobilitaetsprogramm_code = $formData['mobilitaetsprogramm_code'] ?? null;
$herkunftsland_code = $formData['herkunftsland_code'] ?? null;
$ects_erworben = $formData['ects_erworben'] ?? null;
$ects_angerechnet = $formData['ects_angerechnet'] ?? null;
$lehreinheit_id = $formData['lehreinheit_id'] ?? null;
$ort = $formData['ort'] ?? null;
$universitaet = $formData['universitaet'] ?? null;
$localPurposes = $formData['localPurposes'] ?? null;
$localSupports = $formData['localSupports'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('nation_code', 'Nation_code', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Nation_code'])
@@ -126,23 +174,18 @@ class Mobility extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$ort = (isset($formData['ort']) && !empty($formData['ort'])) ? $formData['ort'] : null;
$universitaet = (isset($formData['universitaet']) && !empty($formData['universitaet'])) ? $formData['universitaet'] : null;
$localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPurposes'])) ? $formData['localPurposes'] : null;
$localSupports = (isset($formData['localSupports']) && !empty($formData['localSupports'])) ? $formData['localSupports'] : null;
$result = $this->BisioModel->insert([
'student_uid' => $student_uid,
'von' => $_POST['von'],
'bis' => $_POST['bis'],
'mobilitaetsprogramm_code' => $_POST['mobilitaetsprogramm_code'],
'nation_code' => $_POST['nation_code'],
'herkunftsland_code' => $_POST['herkunftsland_code'],
'lehreinheit_id' => $_POST['lehreinheit_id'],
'von' => $von,
'bis' => $bis,
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'nation_code' => $nation_code,
'herkunftsland_code' => $herkunftsland_code,
'lehreinheit_id' => $lehreinheit_id,
'ort' => $ort,
'universitaet' => $universitaet,
'ects_erworben' => $_POST['ects_erworben'] ,
'ects_angerechnet' => $_POST['ects_angerechnet'],
'ects_erworben' => $ects_erworben ,
'ects_angerechnet' => $ects_angerechnet,
'insertamum' => date('c'),
'insertvon' => $authUID,
]);
@@ -171,7 +214,7 @@ class Mobility extends FHCAPI_Controller
{
$this->BisioModel->addSelect("*");
$this->BisioModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_bisio.mobilitaetsprogramm_code)', 'LEFT');
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)','LEFT');
$this->BisioModel->addJoin('lehre.tbl_lehreinheit le', 'ON (le.lehreinheit_id = bis.tbl_bisio.lehreinheit_id)', 'LEFT');
$result = $this->BisioModel->loadWhere(
array('bisio_id' => $bisio_id)
);
@@ -194,14 +237,18 @@ class Mobility extends FHCAPI_Controller
}
$formData = $this->input->post('formData');
$_POST['von'] = (isset($formData['von']) && !empty($formData['von'])) ? $formData['von'] : null;
$_POST['bis'] = (isset($formData['bis']) && !empty($formData['bis'])) ? $formData['bis'] : null;
$_POST['nation_code'] = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A';
$_POST['mobilitaetsprogramm_code'] = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null;
$_POST['herkunftsland_code'] = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A';
$_POST['ects_erworben'] = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null;
$_POST['ects_angerechnet'] = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null;
$_POST['lehreinheit_id'] = (isset($formData['lehreinheit_id']) && !empty($formData['lehreinheit_id'])) ? $formData['lehreinheit_id'] : null;
$von = $formData['von'] ?? null;
$bis = $formData['bis'] ?? null;
$nation_code = $formData['nation_code'] ?? null;
$mobilitaetsprogramm_code = $formData['mobilitaetsprogramm_code'] ?? null;
$herkunftsland_code = $formData['herkunftsland_code'] ?? null;
$ects_erworben = $formData['ects_erworben'] ?? null;
$ects_angerechnet = $formData['ects_angerechnet'] ?? null;
$lehreinheit_id = $formData['lehreinheit_id'] ?? null;
$ort = $formData['ort'] ?? null;
$universitaet = $formData['universitaet'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('nation_code', 'Nation_code', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Nation_code'])
@@ -209,6 +256,7 @@ class Mobility extends FHCAPI_Controller
$this->form_validation->set_rules('herkunftsland_code', 'Herkunftsland_code', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Herkunftsland_code'])
]);
$this->form_validation->set_rules('mobilitaetsprogramm_code', 'Mobilitaetsprogramm_code', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Mobilitaetsprogramm_code'])
]);
@@ -243,16 +291,17 @@ class Mobility extends FHCAPI_Controller
],
[
'student_uid' => $student_uid,
'von' => $_POST['von'],
'bis' => $_POST['bis'],
'mobilitaetsprogramm_code' => $_POST['mobilitaetsprogramm_code'],
'nation_code' => $_POST['nation_code'],
'herkunftsland_code' => $_POST['herkunftsland_code'],
'lehreinheit_id' => $_POST['lehreinheit_id'],
'ort' => $formData['ort'],
'universitaet' => $formData['universitaet'],
'ects_erworben' => $_POST['ects_erworben'] ,
'ects_angerechnet' => $_POST['ects_angerechnet'],
'von' => $von,
'bis' => $bis,
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'nation_code' => $nation_code,
'herkunftsland_code' => $herkunftsland_code,
'lehreinheit_id' => $lehreinheit_id,
'ort' => $ort,
'universitaet' => $universitaet,
'ects_erworben' => $ects_erworben ,
'ects_angerechnet' => $ects_angerechnet,
'updateamum' => date('c'),
'updatevon' => $authUID,
]
@@ -263,30 +312,12 @@ class Mobility extends FHCAPI_Controller
$this->terminateWithSuccess(current($data));
}
public function deleteMobility($bisio_id)
public function deleteMobility()
{
//check if extension table exists
$result = $this->BisioModel->tableExists('extension', 'tbl_mo_bisioidzuordnung');
$data = $this->getDataOrTerminateWithError($result);
$bisio_id = $this->input->post('bisio_id');
//if table exists check if existing entry
if(!empty($data))
{
$this->BisioModel->addSelect("count(*)");
$this->BisioModel->addJoin('extension.tbl_mo_bisioidzuordnung mo', 'ON (mo.bisio_id = bis.tbl_bisio.bisio_id)', 'LEFT');
$resultCheckMo = $this->BisioModel->loadWhere(
array('mo.bisio_id' => $bisio_id)
);
$resultCheckMo = $this->getDataOrTerminateWithError($resultCheckMo);
$count = current($resultCheckMo)->count;
$existsInExtension = $count > 0 ? true : false;
if($existsInExtension)
$this->terminateWithError($this->p->t('mobility', 'error_existingEntryInExtension'), self::ERROR_TYPE_GENERAL);
}
//check if entry in MobilityOnline extension exists
Events::trigger('mobility_delete', $bisio_id);
$result = $this->BisioModel->delete(
array('bisio_id' => $bisio_id)
@@ -294,6 +325,7 @@ class Mobility extends FHCAPI_Controller
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getLVList($studiengang_kz)
@@ -475,7 +507,6 @@ class Mobility extends FHCAPI_Controller
if($local_support){
$aufenthaltfoerderung_code = $local_support;
}
$this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel');
if(!$local_support)
@@ -739,8 +739,12 @@ class Status extends FHCAPI_Controller
// Start DB transaction
$this->db->trans_begin();
//Delete Studentlehrverband if no Status left in this semester
$cilsresult = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id, $studiensemester_kurzbz);
$isLastPrestudentStatusForSemester = $this->getDataOrTerminateWithError($cilsresult);
//Delete Status
$result = $this->PrestudentstatusModel->delete(
$delpsresult = $this->PrestudentstatusModel->delete(
[
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz,
@@ -748,14 +752,9 @@ class Status extends FHCAPI_Controller
'studiensemester_kurzbz' => $studiensemester_kurzbz
]
);
$this->getDataOrTerminateWithError($delpsresult);
$this->getDataOrTerminateWithError($result);
//Delete Studentlehrverband if no Status left in this semester
$result = $this->PrestudentstatusModel->checkIfLastStatusEntry($prestudent_id, $studiensemester_kurzbz);
$result = $this->getDataOrTerminateWithError($result);
if ($result)
if ($isLastPrestudentStatusForSemester)
{
//get student_uid
$this->load->model('crm/Student_model', 'StudentModel');
@@ -1529,9 +1528,32 @@ class Status extends FHCAPI_Controller
$newStudentlvb['semester'] = $ausbildungssemester;
} // If there is no lehrverband just use the same as in the previous studiensemester
//add studentlehrverband
$result = $this->StudentlehrverbandModel->insert($newStudentlvb);
$checkres = $this->StudentlehrverbandModel->load(array(
'student_uid' => $studentlvb->student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
));
if(hasData($checkres))
{
$result = $this->StudentlehrverbandModel->update(
array(
'student_uid' => $studentlvb->student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
),
array(
'studiengang_kz' => $studentlvb->studiengang_kz,
'semester' => $studentlvb->semester,
'verband' => $studentlvb->verband,
'gruppe' => $studentlvb->gruppe,
'updateamum' => $now,
'updatevon' => $authUID
)
);
}
else
{
//add studentlehrverband
$result = $this->StudentlehrverbandModel->insert($newStudentlvb);
}
$this->getDataOrTerminateWithError($result);
@@ -74,7 +74,19 @@ class Student extends FHCAPI_Controller
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->PrestudentModel->addSelect('p.*');
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('p.titelpre');
$this->PrestudentModel->addSelect('p.nachname');
$this->PrestudentModel->addSelect('p.vorname');
$this->PrestudentModel->addSelect('p.wahlname');
$this->PrestudentModel->addSelect('p.vornamen');
$this->PrestudentModel->addSelect('p.titelpost');
$this->PrestudentModel->addSelect('p.svnr');
$this->PrestudentModel->addSelect('p.ersatzkennzeichen');
$this->PrestudentModel->addSelect('p.gebdatum');
$this->PrestudentModel->addSelect('p.geschlecht');
$this->PrestudentModel->addSelect('p.foto');
$this->PrestudentModel->addSelect('p.foto_sperre');
$this->PrestudentModel->addSelect('s.student_uid');
$this->PrestudentModel->addSelect('matrikelnr');
$this->PrestudentModel->addSelect('b.aktiv');
@@ -117,6 +129,19 @@ class Student extends FHCAPI_Controller
$this->terminateWithSuccess(current($student));
}
protected function isLaufendesSemester($selectedSemester)
{
$laufendesStudiensemester = '';
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudiensemesterModel->getNearest();
if(hasData($result)) {
$laufendesStudiensemester = (getData($result))[0]->studiensemester_kurzbz;
}
$islaufendesSemester = $selectedSemester === $laufendesStudiensemester;
return $islaufendesSemester;
}
/**
* Saves data to a prestudent
*
@@ -125,15 +150,19 @@ class Student extends FHCAPI_Controller
*/
public function save($prestudent_id)
{
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
$this->load->library('form_validation');
$authuid = getAuthUID();
$now = date('c');
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date');
$this->form_validation->set_rules('semester', 'Semester', 'integer');
@@ -142,7 +171,6 @@ class Student extends FHCAPI_Controller
$result = $this->udflib->getCiValidations($this->PersonModel, $this->input->post());
//TODO(Manu) check with Chris: input number not allowed
$udf_field_validations = $this->getDataOrTerminateWithError($result);
$this->form_validation->set_rules($udf_field_validations);
@@ -197,7 +225,7 @@ class Student extends FHCAPI_Controller
'anmerkung',
'homepage'
];
// add UDFs
$result = $this->udflib->getDefinitionForModel($this->PersonModel);
@@ -215,6 +243,10 @@ class Student extends FHCAPI_Controller
}
$array_allowed_props_student = ['matrikelnr'];
if($this->isLaufendesSemester($studiensemester_kurzbz))
{
$array_allowed_props_student = ['matrikelnr', 'verband', 'semester', 'gruppe'];
}
$update_student = array();
foreach ($array_allowed_props_student as $prop) {
$val = $this->input->post($prop);
@@ -223,6 +255,15 @@ class Student extends FHCAPI_Controller
}
}
$array_allowed_props_benutzer = ['aktiv', 'alias'];
$update_benutzer = array();
foreach ($array_allowed_props_benutzer as $prop) {
$val = $this->input->post($prop);
if ($val !== null) {
$update_benutzer[$prop] = $val;
}
}
// Check PKs
if (count($update_lehrverband) + count($update_student) && $uid === null) {
$this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_student')]);
@@ -230,6 +271,9 @@ class Student extends FHCAPI_Controller
if (count($update_person) && $person_id === null) {
$this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_person')]);
}
if (count($update_benutzer) && $uid === null) {
$this->terminateWithValidationErrors(['' => $this->p->t('lehre', 'error_no_student')]);
}
// Do Updates
if (count($update_lehrverband)) {
@@ -240,6 +284,8 @@ class Student extends FHCAPI_Controller
if(hasData($curstudlvb) && count(getData($curstudlvb)) > 0 )
{
$update_lehrverband['updatevon'] = $authuid;
$update_lehrverband['updateamum'] = $now;
$result = $this->StudentlehrverbandModel->update([
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $uid
@@ -247,6 +293,8 @@ class Student extends FHCAPI_Controller
}
else
{
$update_lehrverband['insertvon'] = $authuid;
$update_lehrverband['insertamum'] = $now;
$result = $this->StudentlehrverbandModel->insert(array_merge([
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'student_uid' => $uid,
@@ -258,6 +306,8 @@ class Student extends FHCAPI_Controller
}
if (count($update_person)) {
$update_person['updatevon'] = $authuid;
$update_person['updateamum'] = $now;
$result = $this->PersonModel->update(
$person_id,
$update_person
@@ -267,6 +317,8 @@ class Student extends FHCAPI_Controller
if (count($update_student)) {
$update_student['updatevon'] = $authuid;
$update_student['updateamum'] = $now;
$result = $this->StudentModel->update(
[$uid],
$update_student
@@ -274,10 +326,26 @@ class Student extends FHCAPI_Controller
$this->getDataOrTerminateWithError($result);
}
if (count($update_benutzer)) {
$update_benutzer['updatevon'] = $authuid;
$update_benutzer['updateamum'] = $now;
if (array_key_exists("aktiv", $update_benutzer))
{
$update_benutzer['updateaktivvon'] = $authuid;
$update_benutzer['updateaktivam'] = $now;
}
$result = $this->BenutzerModel->update(
[$uid],
$update_benutzer
);
$this->getDataOrTerminateWithError($result);
}
$this->terminateWithSuccess(array_fill_keys(array_merge(
array_keys($update_lehrverband),
array_keys($update_person),
array_keys($update_student)
array_keys($update_student),
array_keys($update_benutzer)
), ''));
}
@@ -223,25 +223,25 @@ class Students extends FHCAPI_Controller
break;
case "bewerbungnichtabgeschickt":
$where['ps.status_kurzbz'] = 'Interessent';
$where['bewerbung_abgeschicktamum'] = null;
$where['ps.bewerbung_abgeschicktamum'] = null;
break;
case "bewerbungabgeschickt":
$where['ps.status_kurzbz'] = 'Interessent';
$where['bewerbung_abgeschicktamum IS NOT NULL'] = null;
$where['bestaetigtam'] = null;
$where['ps.bewerbung_abgeschicktamum IS NOT NULL'] = null;
$where['ps.bestaetigtam'] = null;
break;
case "statusbestaetigt":
$where['ps.status_kurzbz'] = 'Interessent';
$where['bestaetigtam IS NOT NULL'] = null;
$where['ps.bestaetigtam IS NOT NULL'] = null;
break;
case "statusbestaetigtrtnichtangemeldet":
$where['ps.status_kurzbz'] = 'Interessent';
$where['bestaetigtam IS NOT NULL'] = null;
$where['ps.bestaetigtam IS NOT NULL'] = null;
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "statusbestaetigtrtangemeldet":
$where['ps.status_kurzbz'] = 'Interessent';
$where['bestaetigtam IS NOT NULL'] = null;
$where['ps.bestaetigtam IS NOT NULL'] = null;
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
break;
case "zgv":
@@ -622,6 +622,8 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect('ersatzkennzeichen');
$this->PrestudentModel->addSelect('gebdatum');
$this->PrestudentModel->addSelect('geschlecht');
$this->PrestudentModel->addSelect('foto');
$this->PrestudentModel->addSelect('foto_sperre');
// semester
// verband
@@ -629,6 +631,7 @@ class Students extends FHCAPI_Controller
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
$this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
$this->PrestudentModel->addSelect("s.matrikelnr");
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
@@ -640,7 +643,7 @@ class Students extends FHCAPI_Controller
);
$this->PrestudentModel->addSelect("
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
THEN b.uid || " . $this->PrestudentModel->escape(DOMAIN) . "
THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
ELSE '' END AS mail_intern", false);
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
@@ -709,7 +712,12 @@ class Students extends FHCAPI_Controller
*/
protected function addFilter($studiensemester_kurzbz)
{
$filter = $this->input->get('filter');
$filter = json_decode($this->input->get('filter'), true);
if (!is_array($filter))
{
$this->addMeta('addfilter', 'invalid filter: ' . $this->input->get('filter'));
return;
}
if (isset($filter['konto_count_0'])) {
$bt = $this->PrestudentModel->escape($filter['konto_count_0']);
$stdsem = $this->PrestudentModel->escape($studiensemester_kurzbz);
@@ -0,0 +1,720 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Vertraege extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getAllVertraege' => ['vertrag/mitarbeiter:r'],
'getAllContractsNotAssigned' => ['vertrag/mitarbeiter:r'],
'getAllContractsAssigned' => ['vertrag/mitarbeiter:r'],
'getAllContractTypes' => ['vertrag/mitarbeiter:r'],
'getAllContractStati' => ['vertrag/mitarbeiter:r'],
'getStatiOfContract' => ['vertrag/mitarbeiter:r'],
'loadContract' => ['vertrag/mitarbeiter:r'],
'loadContractStatus' => ['vertrag/mitarbeiter:r'],
'updateContract' =>['vertrag/mitarbeiter:w'],
'addNewContract' =>['vertrag/mitarbeiter:w'],
'deleteContract' =>['vertrag/mitarbeiter:w'],
'insertContractStatus' =>['vertrag/mitarbeiter:w'],
'deleteContractStatus' =>['vertrag/mitarbeiter:w'],
'updateContractStatus' =>['vertrag/mitarbeiter:w'],
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
'getHeader' => ['vertrag/mitarbeiter:r'],
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
]);
//Load Models and Libraries
$this->load->model('accounting/Vertrag_model', 'VertragModel');
$this->load->model('accounting/Vertragsstatus_model', 'VertragsstatusModel');
$this->load->model('accounting/Vertragstyp_model', 'VertragstypModel');
$this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel');
// Load language phrases
$this->loadPhrases([
'ui',
'vertrag'
]);
}
public function getAllVertraege($person_id)
{
$result = $this->VertragModel->loadContractsOfPerson($person_id);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function getAllContractsNotAssigned($person_id)
{
$result = $this->VertragModel->loadContractsOfPersonNotAssigned($person_id);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function getAllContractsAssigned($person_id, $vertrag_id)
{
$result = $this->VertragModel->loadContractsOfPersonAssigned($person_id, $vertrag_id);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function getStatiOfContract($person_id, $vertrag_id)
{
//check if vertrag_id corresponds with person_id and return null if not
$result = $this->VertragModel->loadWhere(
array(
'vertrag_id' => $vertrag_id,
'person_id' => $person_id
)
);
if(!hasData($result))
{
$this->terminateWithSuccess([]);
}
$result = $this->VertragModel->getStatiOfContract($vertrag_id);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function getAllContractTypes()
{
$result = $this->VertragstypModel->load();
if (isError($result))
{
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(getData($result) ?: []);
}
public function getAllContractStati()
{
$result = $this->VertragsstatusModel->load();
if (isError($result))
{
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(getData($result) ?: []);
}
public function addNewContract()
{
$this->load->library('form_validation');
$person_id = $this->input->post('person_id');
if(!$person_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$vertragstyp_kurzbz = $formData['vertragstyp_kurzbz'] ?? null;
$vertragsdatum = $formData['vertragsdatum'] ?? null;
$bezeichnung = $formData['bezeichnung'] ?? null;
$betrag = $formData['betrag'] ?? null;
$vertragsstunden = $formData['vertragsstunden'] ?? null;
$vertragsstunden_studiensemester_kurzbz = $formData['vertragsstunden_studiensemester_kurzbz'] ?? null;
$anmerkung = $formData['anmerkung'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('bezeichnung', 'Bezeichnung', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Bezeichnung'])
]);
$this->form_validation->set_rules('vertragstyp_kurzbz', 'Vertragstyp', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragstyp'])
]);
$this->form_validation->set_rules('vertragsdatum', 'Vertragsdatum', 'required|is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Vertragsdatum']),
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragsdatum'])
]);
$this->form_validation->set_rules('betrag', 'Betrag', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betrag']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Betrag'])
]);
$this->form_validation->set_rules('vertragsstunden', 'Stunden(Vertrags-Urfassung)', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stunden(Vertrags-Urfassung)'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$lehrauftraege = $this->input->post('clickedRows');
$this->db->trans_start();
$result = $this->VertragModel->insert([
'person_id' => $person_id,
'vertragsdatum' => $vertragsdatum,
'bezeichnung' => $bezeichnung,
'vertragstyp_kurzbz' => $vertragstyp_kurzbz,
'betrag' => $betrag,
'vertragsstunden' => $vertragsstunden,
'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz,
'anmerkung' => $anmerkung,
'insertamum' => date('c'),
'insertvon' => getAuthUID()
]);
$this->getDataOrTerminateWithError($result);
$vertrag_id = $result->retval;
$status_result = $this->VertragvertragsstatusModel->insert([
'vertrag_id' => $vertrag_id,
'uid' => getAuthUID(),
'vertragsstatus_kurzbz' => 'neu',
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
'datum' => date('c')
]);
if (!$status_result) {
$this->db->trans_rollback();
$this->terminateWithError($this->p->t('vertrag', 'error_insertOrUpdateStatusVertrag'), self::ERROR_TYPE_GENERAL);
}
//Hinzufügen der Lehraufträge
foreach ($lehrauftraege as $row)
{
if ($row['type'] == 'Lehrauftrag')
{
$this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
$result_lehrauftrag = $this->LehreinheitmitarbeiterModel->update(
[
'lehreinheit_id' => $row['lehreinheit_id'],
'mitarbeiter_uid' => $row['mitarbeiter_uid']
],
[
'vertrag_id' => $vertrag_id
]
);
if (!$result_lehrauftrag) {
$this->db->trans_rollback();
$this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL);
}
}
if ($row['type'] == 'Betreuung')
{
$this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel');
$result_projektbetreuer = $this->Projektbetreuermodel->update(
[
'person_id' => $person_id,
'projektarbeit_id' => $row['projektarbeit_id'],
'betreuerart_kurzbz' => $row['betreuerart_kurzbz']
],
[
'vertrag_id' => $vertrag_id
]
);
if (!$result_projektbetreuer)
{
$this->db->trans_rollback();
$this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL);
}
}
}
$this->db->trans_complete();
$this->terminateWithSuccess(true);
}
public function updateContract()
{
$this->load->library('form_validation');
$vertrag_id = $this->input->post('vertrag_id');
$person_id = $this->input->post('person_id');
$formData = $this->input->post('formData');
$lehrauftraege = $this->input->post('clickedRows');
$vertragstyp_kurzbz = $formData['vertragstyp_kurzbz'] ?? null;
$vertragsdatum = $formData['vertragsdatum'] ?? null;
$bezeichnung = $formData['bezeichnung'] ?? null;
$betrag = $formData['betrag'] ?? null;
$vertragsstunden = $formData['vertragsstunden'] ?? null;
$vertragsstunden_studiensemester_kurzbz = $formData['vertragsstunden_studiensemester_kurzbz'] ?? null;
$anmerkung = $formData['anmerkung'] ?? null;
$this->form_validation->set_data($formData);
$this->form_validation->set_rules('bezeichnung', 'Bezeichnung', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Bezeichnung'])
]);
$this->form_validation->set_rules('vertragstyp_kurzbz', 'Vertragstyp', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragstyp'])
]);
$this->form_validation->set_rules('vertragsdatum', 'Vertragsdatum', 'required|is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Vertragsdatum']),
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragsdatum'])
]);
$this->form_validation->set_rules('betrag', 'Betrag', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betrag']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Betrag'])
]);
$this->form_validation->set_rules('vertragsstunden', 'Stunden(Vertrags-Urfassung)', 'numeric', [
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stunden(Vertrags-Urfassung)'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$this->db->trans_start();
$result = $this->VertragModel->update(
$vertrag_id,
[
'person_id' => $person_id,
'vertragsdatum' => $vertragsdatum,
'bezeichnung' => $bezeichnung,
'vertragstyp_kurzbz' => $vertragstyp_kurzbz,
'betrag' => $betrag,
'vertragsstunden' => $vertragsstunden,
'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz,
'anmerkung' => $anmerkung,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
$this->getDataOrTerminateWithError($result);
//Adding of Lehraufträge
foreach ($lehrauftraege as $row)
{
if ($row['type'] == 'Lehrauftrag')
{
$this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
$result_lehrauftrag = $this->LehreinheitmitarbeiterModel->update(
[
'lehreinheit_id' => $row['lehreinheit_id'],
'mitarbeiter_uid' => $row['mitarbeiter_uid']
],
[
'vertrag_id' => $vertrag_id,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
if (!$result_lehrauftrag) {
$this->db->trans_rollback();
$this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL);
}
}
if ($row['type'] == 'Betreuung')
{
$this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel');
$result_projektbetreuer = $this->Projektbetreuermodel->update(
[
'person_id' => $person_id,
'projektarbeit_id' => $row['projektarbeit_id'],
'betreuerart_kurzbz' => $row['betreuerart_kurzbz']
],
[
'vertrag_id' => $vertrag_id,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
if (!$result_projektbetreuer)
{
$this->db->trans_rollback();
$this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL);
}
}
}
$this->db->trans_complete();
$this->terminateWithSuccess(true);
}
public function loadContract($vertrag_id)
{
$result = $this->VertragModel->load($vertrag_id);
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result)) {
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess(current(getData($result)));
}
public function deleteContract($vertrag_id)
{
$this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
//check if attached Lehrauftrag
$resultLehrauftrag = $this->LehreinheitmitarbeiterModel->load([
'vertrag_id' => $vertrag_id
]);
if(hasData($resultLehrauftrag))
{
$resultLehrauftrag = getData($resultLehrauftrag);
foreach($resultLehrauftrag as $lehrauftrag)
{
$result = $this->LehreinheitmitarbeiterModel->update(
[
'lehreinheit_id' => $lehrauftrag->lehreinheit_id,
'mitarbeiter_uid' => $lehrauftrag->mitarbeiter_uid,
'vertrag_id' => $vertrag_id
],
[
'vertrag_id' => null,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
$this->getDataOrTerminateWithError($result);
}
}
//if attached Betreuung
$this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel');
//if attached Betreuung
$resultBetreuung = $this->Projektbetreuermodel->load([
'vertrag_id' => $vertrag_id
]);
if(hasData($resultBetreuung))
{
$resultBetreuung = getData($resultBetreuung);
foreach($resultBetreuung as $betreuung)
{
$result = $this->Projektbetreuermodel->update(
[
'person_id' => $betreuung->person_id,
'projektarbeit_id' => $betreuung->projektarbeit_id,
'betreuerart_kurzbz' => $betreuung->betreuerart_kurzbz,
'vertrag_id' => $vertrag_id
],
[
'vertrag_id' => null,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
$this->getDataOrTerminateWithError($result);
}
}
$result = $this->VertragvertragsstatusModel->load([
'vertrag_id' => $vertrag_id
]);
if(hasData($result))
{
$data = getData($result);
foreach ($data as $item)
{
//delete all entries in lehre.tbl_vertrag_vertragsstatus
$result = $this->VertragvertragsstatusModel->delete([
'vertrag_id' => $vertrag_id,
'vertragsstatus_kurzbz' => $item->vertragsstatus_kurzbz,
'uid' => $item->uid
]);
if(isError($result))
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
}
//delete Contract
$result = $this->VertragModel->delete(
array('vertrag_id' => $vertrag_id,
)
);
if (isError($result)) {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result)) {
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess(current(getData($result)));
}
public function insertContractStatus()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('vertragsstatus_kurzbz', 'vertragsstatus_kurzbz', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'vertragsstatus_kurzbz'])
]);
$this->form_validation->set_rules('datum', 'Datum', 'required|is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Datum']),
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Datum'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$result = $this->VertragvertragsstatusModel->loadWhere(
array(
'vertrag_id' => $this->input->post('vertrag_id'),
'vertragsstatus_kurzbz' => $this->input->post('vertragsstatus_kurzbz')
)
);
if (hasData($result))
{
$this->terminateWithError($this->p->t('vertrag', 'error_statusVorhanden'), self::ERROR_TYPE_GENERAL);
}
$status_result = $this->VertragvertragsstatusModel->insert([
'vertrag_id' => $this->input->post('vertrag_id'),
'uid' => getAuthUID(),
'vertragsstatus_kurzbz' => $this->input->post('vertragsstatus_kurzbz'),
'insertamum' => date('c'),
'insertvon' => getAuthUID(),
'datum' => $this->input->post('datum')
]);
if (!$status_result) {
$this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.');
}
return $this->terminateWithSuccess(current(getData($status_result)));
}
public function deleteContractStatus()
{
$status = $this->input->post('vertragsstatus_kurzbz');
$vertrag_id = $this->input->post('vertrag_id');
$result = $this->VertragvertragsstatusModel->delete(
array(
'vertrag_id' => $vertrag_id,
'vertragsstatus_kurzbz' => $status
)
);
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result))
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'vertragsstatus_kurzb']), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess(current(getData($result)));
}
public function loadContractStatus()
{
$status = $this->input->get('vertragsstatus_kurzbz');
$vertrag_id = $this->input->get('vertrag_id');
$result = $this->VertragvertragsstatusModel->loadWhere(
array(
'vertrag_id' => $vertrag_id,
'vertragsstatus_kurzbz' => $status
)
);
if (!$result) {
$this->terminateWithError('Status not existing');
}
return $this->terminateWithSuccess(current(getData($result)));
}
public function updateContractStatus()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('vertragsstatus_kurzbz', 'vertragsstatus_kurzbz', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'vertragsstatus_kurzbz'])
]);
$this->form_validation->set_rules('datum', 'Datum', 'required|is_valid_date', [
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Datum']),
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Datum'])
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$status_result = $this->VertragvertragsstatusModel->update(
[
'vertrag_id' => $this->input->post('vertrag_id'),
'vertragsstatus_kurzbz' => $this->input->post('vertragsstatus_kurzbz')
],
[
'uid' => getAuthUID(),
'updateamum' => date('c'),
'updatevon' => getAuthUID(),
'datum' => $this->input->post('datum')
]
);
if (!$status_result) {
$this->terminateWithError('Fehler beim Updaten des Vertragsstatus.');
}
return $this->terminateWithSuccess(current(getData($status_result)));
}
public function deleteLehrauftrag()
{
$lehreinheit_id = $this->input->post('lehreinheit_id');
$mitarbeiter_uid = $this->input->post('mitarbeiter_uid');
$vertrag_id = $this->input->post('vertrag_id');
$this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
//kein delete: ein update, bei dem die vertrag_id auf null gesetzt wird
$result = $this->LehreinheitmitarbeiterModel->update(
[
'lehreinheit_id' => $lehreinheit_id,
'mitarbeiter_uid' => $mitarbeiter_uid,
'vertrag_id' => $vertrag_id
],
[
'vertrag_id' => null,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result))
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Id_Lehrauftrag']), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess(current(getData($result)));
}
public function deleteBetreuung()
{
$person_id= $this->input->post('person_id');
$projektarbeit_id = $this->input->post('projektarbeit_id');
$betreuerart_kurzbz = $this->input->post('betreuerart_kurzbz');
$vertrag_id = $this->input->post('vertrag_id');
$this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel');
$result = $this->Projektbetreuermodel->update(
[
'person_id' => $person_id,
'projektarbeit_id' => $projektarbeit_id,
'betreuerart_kurzbz' => $betreuerart_kurzbz,
'vertrag_id' => $vertrag_id
],
[
'vertrag_id' => null,
'updateamum' => date('c'),
'updatevon' => getAuthUID()
]
);
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result))
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Id_Projektbetreuung']), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess(current(getData($result)));
}
public function getMitarbeiter()
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getPersonenWithContractDetails();
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
if (!hasData($result))
{
//return data before PV21 (with filter fix angestellt, active and with bisverwendung)
$result = $this->Mitarbeitermodel->getPersonal(true, true, true);
if (isError($result))
{
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
}
return $this->terminateWithSuccess(getData($result));
}
public function getPersonAbteilung($mitarbeiter_uid)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getLeitungOrg($oekurzbz)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function getHeader($person_id)
{
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
$result = $this->Mitarbeitermodel->getHeader($person_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
}
@@ -0,0 +1,63 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Vorlagen extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getVorlagen' => ['admin:r', 'assistenz:r'],
'getVorlagenByLoggedInUser' => ['admin:r', 'assistenz:r'],
]);
//Load Models
$this->load->model('system/Vorlage_model', 'VorlageModel');
// Additional Permission Checks
//TODO(manu) check permissions
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
$this->load->library('VorlageLib');
// Load language phrases
$this->loadPhrases([
'ui'
]);
}
public function getVorlagen()
{
$this->load->model('system/Vorlage_model', 'VorlageModel');
$this->VorlageModel->addOrder('vorlage_kurzbz', 'ASC');
$result = $this->VorlageModel->loadWhere(
array(
'mimetype' => 'text/html'
));
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getVorlagenByLoggedInUser()
{
//get oe of user
$uid = getAuthUID();
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
$result = $this->BenutzerfunktionModel->getBenutzerfunktionByUid($uid, 'oezuordnung');
$data = $this->getDataOrTerminateWithError($result);
$oe_kurzbz = current($data);
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz->oe_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}