Compare commits

...

1 Commits

Author SHA1 Message Date
ma0048 0cfae22d3d anrechnungen schreibberechtigt ueberpruefungen backendseitig 2025-03-04 15:48:06 +01:00
8 changed files with 171 additions and 72 deletions
@@ -22,14 +22,14 @@ class approveAnrechnungDetail extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:r',
'download' => 'lehre/anrechnung_genehmigen:r',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw',
'withdraw' => 'lehre/anrechnung_genehmigen:rw',
'withdrawRequestRecommendation' => 'lehre/anrechnung_genehmigen:rw',
'saveEmpfehlungsNotiz' => 'lehre/anrechnung_genehmigen:rw'
'index' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':r',
'download' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':r',
'approve' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw',
'reject' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw',
'requestRecommendation' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw',
'withdraw' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw',
'withdrawRequestRecommendation' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw',
'saveEmpfehlungsNotiz' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN .':rw'
)
);
@@ -140,6 +140,9 @@ class approveAnrechnungDetail extends Auth_Controller
// Approve Anrechnung
foreach ($data as $item)
{
if (!$this->_checkBerechtigung($item['anrechnung_id']))
continue;
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
{
$json[]= array(
@@ -185,6 +188,9 @@ class approveAnrechnungDetail extends Auth_Controller
// Reject Anrechnung
foreach ($data as $item)
{
if (!$this->_checkBerechtigung($item['anrechnung_id']))
continue;
if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
@@ -220,6 +226,9 @@ class approveAnrechnungDetail extends Auth_Controller
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
if (!$this->_checkBerechtigung($anrechnung_id))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
$retval = array();
// Check if Anrechnungs-LV has lector
@@ -285,6 +294,9 @@ class approveAnrechnungDetail extends Auth_Controller
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
if (!$this->_checkBerechtigung($anrechnung_id))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
// Delete last status approved / rejected.
// If last status is 'approved', Genehmigung is resetted.
$result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id);
@@ -313,6 +325,9 @@ class approveAnrechnungDetail extends Auth_Controller
show_error('Wrong parameter.');
}
if (!$this->_checkBerechtigung($anrechnung_id))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
// Get boolean empfehlung of given Anrechnung
if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0])
{
@@ -362,6 +377,9 @@ class approveAnrechnungDetail extends Auth_Controller
$this->terminateWithJsonError($this->p->t('ui', 'systemFehler'));
}
if (!$this->_checkBerechtigung($anrechnung_id))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
// Save Empfehlungstext
$result = self::_saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id);
@@ -601,4 +619,17 @@ class approveAnrechnungDetail extends Auth_Controller
$this->_uid
);
}
private function _checkBerechtigung($anrechnung_id)
{
$this->AnrechnungModel->addJoin('tbl_prestudent', 'prestudent_id');
$result = $this->AnrechnungModel->loadWhere(array('anrechnung_id' => $anrechnung_id));
if (isError($result) || !hasData($result))
show_error('Failed retrieving anrechnung');
$antragData = getData($result)[0];
return $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $antragData->studiengang_kz);
}
}
@@ -20,11 +20,11 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:r',
'download' => 'lehre/anrechnung_genehmigen:r',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
'index' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN . ':r',
'download' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN . ':r',
'approve' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN . ':rw',
'reject' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN . ':rw',
'requestRecommendation' => self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN . ':rw'
)
);
@@ -135,6 +135,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Approve Anrechnung
foreach ($data as $item)
{
if (!$this->_checkBerechtigung($item['anrechnung_id']))
continue;
// Get Prestudent
$this->AnrechnungModel->addSelect('prestudent_id');
$result = $this->AnrechnungModel->load($item['anrechnung_id']);
@@ -174,6 +177,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Reject Anrechnung
foreach ($data as $item)
{
if (!$this->_checkBerechtigung($item['anrechnung_id']))
continue;
if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
@@ -212,6 +218,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
foreach ($data as $item)
{
if (!$this->_checkBerechtigung($item['anrechnung_id']))
continue;
// Check if Anrechnungs-LV has lector
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id']))
{
@@ -483,4 +492,17 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $oeLeitung_arr;
}
private function _checkBerechtigung($anrechnung_id)
{
$this->AnrechnungModel->addJoin('tbl_prestudent', 'prestudent_id');
$result = $this->AnrechnungModel->loadWhere(array('anrechnung_id' => $anrechnung_id));
if (isError($result) || !hasData($result))
show_error('Failed retrieving anrechnung');
$antragData = getData($result)[0];
return $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $antragData->studiengang_kz);
}
}
@@ -13,9 +13,9 @@ class CreateAnrechnung extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_anlegen:r',
'getLVsByStudent' => 'lehre/anrechnung_anlegen:r',
'create' => 'lehre/anrechnung_anlegen:rw'
'index' => self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN . ':r',
'getLVsByStudent' => self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN . ':r',
'create' => self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN . ':rw'
)
);
@@ -24,6 +24,7 @@ class CreateAnrechnung extends Auth_Controller
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
// Load libraries
@@ -67,13 +68,22 @@ class CreateAnrechnung extends Auth_Controller
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
$studiengang_kz_arr = array();
// Get Studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN))
if ($studiengaenge = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 'suid'))
{
show_error('Failed retrieving Studiengaenge');
foreach($studiengaenge as $studiengang)
{
$berechtigt = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 'suid', $studiengang);
if ($berechtigt)
$studiengang_kz_arr[]= $studiengang;
}
}
else
show_error('Failed retrieving Studiengaenge');
// Get Anrechnungsbegruendungen
$this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegruendungModel');
$begruendung_arr = getData($this->AnrechnungbegruendungModel->load());
@@ -124,7 +134,17 @@ class CreateAnrechnung extends Auth_Controller
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
$begruendung_id = $this->input->post('begruendung_id');
$herkunftKenntnisse = $this->input->post('herkunftKenntnisse');
$prestudent = $this->PrestudentModel->load(array('prestudent_id' => $prestudent_id));
if (!hasData($prestudent) || isError($prestudent))
$this->terminateWithJsonError($this->p->t('ui', 'keineBerechtigung'));
$studiengang = getData($prestudent)[0]->studiengang_kz;
if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN, 'suid', $studiengang))
$this->terminateWithJsonError($this->p->t('ui', 'keineBerechtigung'));
// Validate upload file
if (empty($_FILES['uploadfile']['name']))
{
@@ -21,10 +21,10 @@ class reviewAnrechnungDetail extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
'index' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'download' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'recommend' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'dontRecommend' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw'
)
);
@@ -127,17 +127,23 @@ class reviewAnrechnungDetail extends Auth_Controller
foreach ($data as $item)
{
// Approve Anrechnung
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($item['anrechnung_id']);
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($item['anrechnung_id']);
if (is_null($empfehlungData) && $isEmpfehlungsberechtigt)
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
// Approve Anrechnung
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
}
@@ -184,18 +190,25 @@ class reviewAnrechnungDetail extends Auth_Controller
foreach ($data as $item)
{
// Approve Anrechnung
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($item['anrechnung_id']);
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($item['anrechnung_id']);
if (is_null($empfehlungData) && $isEmpfehlungsberechtigt)
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
// Approve Anrechnung
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
}
// Output json to ajax
@@ -256,7 +269,7 @@ class reviewAnrechnungDetail extends Auth_Controller
/**
* Check if user is entitled to read dms doc
* @param $dms_id
* @param $anrechnung_id
*/
private function _checkIfEntitledToReadAnrechnung($anrechnung_id)
{
@@ -19,10 +19,10 @@ class reviewAnrechnungUebersicht extends Auth_Controller
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
'index' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'download' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'recommend' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw',
'dontRecommend' => self::BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN . ':rw'
)
);
@@ -96,15 +96,21 @@ class reviewAnrechnungUebersicht extends Auth_Controller
foreach ($data as $item)
{
// Approve Anrechnung
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($item['anrechnung_id']);
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($item['anrechnung_id']);
if (is_null($empfehlungData) && $isEmpfehlungsberechtigt)
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
// Approve Anrechnung
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
}
}
}
@@ -145,15 +151,21 @@ class reviewAnrechnungUebersicht extends Auth_Controller
foreach ($data as $item)
{
// Approve Anrechnung
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($item['anrechnung_id']);
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($item['anrechnung_id']);
if (is_null($empfehlungData) && $isEmpfehlungsberechtigt)
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
// Approve Anrechnung
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
}
}
}
@@ -16,7 +16,7 @@ $query = '
anrechnung.begruendung_id,
anrechnung.dms_id,
CASE
WHEN stg.typ || stg.kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE
WHEN stg.oe_kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE
ELSE FALSE
END "schreibberechtigt",
anrechnung.studiensemester_kurzbz,
@@ -187,11 +187,12 @@ var format_ectsSumBisherUndNeu = function (cell, formatterParams, onRendered) {
// Formats row selectable/unselectable
function func_selectableCheck(row) {
let status_kurzbz = row.getData().status_kurzbz;
let schreibberechtigt = row.getData().schreibberechtigt;
return (
status_kurzbz != ANRECHNUNGSTATUS_APPROVED &&
(status_kurzbz != ANRECHNUNGSTATUS_APPROVED &&
status_kurzbz != ANRECHNUNGSTATUS_REJECTED &&
status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && schreibberechtigt == "true")
);
}
@@ -280,7 +281,7 @@ function tableWidgetHook_selectAllButton(tableWidgetDiv) {
.tabulator("getRows", true)
.filter(
(row) =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_STGL
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_STGL && row.getData().schreibberechtigt == "true"
);
tableWidgetDiv
@@ -95,7 +95,7 @@ function func_selectableCheck(row) {
let status_kurzbz = row.getData().status_kurzbz;
let empfehlungsberechtigt = row.getData().empfehlungsberechtigt;
return status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false";
return status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && empfehlungsberechtigt == "true";
}
@@ -158,7 +158,7 @@ function tableWidgetHook_selectAllButton(tableWidgetDiv) {
.tabulator("getRows", true)
.filter(
(row) =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && row.getData().empfehlungsberechtigt == "true"
);
tableWidgetDiv