new workflow Terminate of Studierendenantrag

- DB Update for new studierendenantrag_statustyp with studierendenantrag_statustyp_kurzbz = 'Storniert'
- new permission student/studierendenantrag
- possibility to set status to Terminated in case of new permission
This commit is contained in:
ma0068
2026-06-01 14:10:14 +02:00
parent cb7a0f7669
commit 7858d90d12
11 changed files with 234 additions and 7 deletions
@@ -45,7 +45,8 @@ class Leitung extends FHCAPI_Controller
'unpauseAntrag' => ['student/antragfreigabe:w', 'student/studierendenantrag:w'],
'objectAntrag' => ['student/antragfreigabe:w', 'student/studierendenantrag:w'],
'approveObjection' => ['student/antragfreigabe:w', 'student/studierendenantrag:w'],
'denyObjection' => ['student/antragfreigabe:w', 'student/studierendenantrag:w']
'denyObjection' => ['student/antragfreigabe:w', 'student/studierendenantrag:w'],
'terminateAntrag' => ['student/antragstornieren:w']
]);
// Libraries
@@ -426,4 +427,37 @@ class Leitung extends FHCAPI_Controller
return $this->terminateWithSuccess($studierendenantrag_id);
}
public function terminateAntrag()
{
$this->load->library('form_validation');
$this->form_validation->set_rules(
'studierendenantrag_id',
'Studierenden Antrag',
[
'required',
['isEntitledToTerminateAntrag', [$this->antraglib, 'isEntitledToTerminateAntrag']],
['antragCanBeTerminated', [$this->antraglib, 'antragCanBeTerminated']]
],
[
'isEntitledToUnpauseAntrag' => $this->p->t('studierendenantrag', 'error_no_right'),
'antragCanBeTerminated' => $this->p->t(
'studierendenantrag',
'error_not_terminated',
['id' => $this->input->post('studierendenantrag_id')]
)
]
);
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
$studierendenantrag_id = $this->input->post('studierendenantrag_id');
$result = $this->antraglib->terminateAntrag($studierendenantrag_id, getAuthUID());
$this->getDataOrTerminateWithError($result);
return $this->terminateWithSuccess($studierendenantrag_id);
}
}
@@ -86,9 +86,12 @@ class Studierendenantrag extends FHC_Controller
$stgA = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag') ?: [];
$permissionTerminateAntrag = $this->permissionlib->isBerechtigt('student/antragstornieren');
$this->load->view('lehre/Antrag/Leitung/List', [
'stgA' => $stgA,
'stgL' => $stgL
'stgL' => $stgL,
'permissionTerminateAntrag' => $permissionTerminateAntrag
]);
}
+47
View File
@@ -1948,6 +1948,22 @@ class AntragLib
return $result;
}
/**
* @param integer $antrag_id
* @param string $insertvon
*
* @return stdClass
*/
public function terminateAntrag($antrag_id, $insertvon)
{
$result = $this->_ci->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $antrag_id,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_TERMINATED,
'insertvon' => $insertvon
]);
return $result;
}
/**
* @param integer $studierendenantrag_id
@@ -2119,6 +2135,16 @@ class AntragLib
return $this->hasAccessToAntrag($antrag_id, 'student/antragfreigabe');
}
/**
* @param integer $antrag_id
*
* @return boolean
*/
public function isEntitledToTerminateAntrag($antrag_id)
{
return ($this->hasAccessToAntrag($antrag_id, 'student/antragstornieren'));
}
/**
* @param integer $antrag_id
*
@@ -2149,6 +2175,27 @@ class AntragLib
return $this->_ci->StudierendenantragModel->isManuallyPaused($antrag_id);
}
/**
* @param integer $antrag_id
*
* @return boolean
*/
public function antragCanBeTerminated($antrag_id)
{
$this->_ci->StudierendenantragModel->db->where_not_in('campus.get_status_studierendenantrag(studierendenantrag_id)', [
Studierendenantragstatus_model::STATUS_DEREGISTERED,
Studierendenantragstatus_model::STATUS_APPROVED,
Studierendenantragstatus_model::STATUS_TERMINATED
]);
$result = $this->_ci->StudierendenantragModel->loadWhere([
'studierendenantrag_id' => $antrag_id,
'typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG
]);
return hasData($result);
}
/**
* @param integer $antrag_id
* @param string|array $status
@@ -16,6 +16,7 @@ class Studierendenantragstatus_model extends DB_Model
const STATUS_OBJECTION_DENIED = 'EinspruchAbgelehnt';
const STATUS_DEREGISTERED = 'Abgemeldet';
const STATUS_PAUSE = 'Pause';
const STATUS_TERMINATED = 'Storniert';
const INSERTVON_ABMELDUNGSTGL = "AbmeldungStgl";
const INSERTVON_DEREGISTERED = "Studienabbruch";
@@ -44,6 +44,7 @@ $this->load->view(
<studierendenantrag-leitung
:stg-a="<?= htmlspecialchars(json_encode(array_values($stgA))); ?>"
:stg-l="<?= htmlspecialchars(json_encode(array_values($stgL))); ?>"
:permission-terminate-antrag="<?= json_encode($permissionTerminateAntrag); ?>"
>
</studierendenantrag-leitung>