Abmeldung durch Stgl: status => typ

This commit is contained in:
cgfhtw
2023-07-10 10:19:06 +02:00
parent 5eca034911
commit 3fce448451
12 changed files with 204 additions and 13 deletions
@@ -76,6 +76,23 @@ class Abmeldung extends FHC_Controller
$this->outputJsonSuccess(getData($result));
}
public function getDetailsForAntrag($studierendenantrag_id)
{
if (!$this->antraglib->isEntitledToShowAntrag($studierendenantrag_id)) return show_404();
$result = $this->antraglib->getDetailsForAntrag($studierendenantrag_id);
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
if ($data->typ !== Studierendenantrag_model::TYP_ABMELDUNG_STGL)
return show_404();
$this->outputJsonSuccess($data);
}
public function createAntrag()
{
$this->load->library('form_validation');
@@ -201,7 +201,7 @@ class Leitung extends FHC_Controller
public function canBeObjected($studierendenantrag_id)
{
return $this->antraglib->hasStatus($studierendenantrag_id, Studierendenantragstatus_model::STATUS_APPROVED_STGL);
return $this->antraglib->hasType($studierendenantrag_id, Studierendenantrag_model::TYP_ABMELDUNG_STGL);
}
public function isObjected($studierendenantrag_id)
@@ -241,6 +241,11 @@ class Leitung extends FHC_Controller
return $this->outputJsonSuccess($studierendenantrag_id);
}
public function approveAbmeldungStgl()
{
return $this->approveAbmeldung();
}
public function approveUnterbrechung()
{
$this->load->library('form_validation');
@@ -129,6 +129,15 @@ class Studierendenantrag extends FHC_Controller
]);
}
public function abmeldungstgl($prestudent_id, $studierendenantrag_id)
{
$this->load->view('lehre/Antrag/Create', [
'prestudent_id' => $prestudent_id,
'studierendenantrag_id' => $studierendenantrag_id,
'antrag_type' => 'AbmeldungStgl'
]);
}
public function unterbrechung($prestudent_id, $studierendenantrag_id = null)
{
$this->load->view('lehre/Antrag/Create', [
+25 -6
View File
@@ -85,15 +85,15 @@ class AntragLib
$prestudent = getData($result)[0];
if($prestudent->person_id == getAuthPersonId())
$status = Studierendenantragstatus_model::STATUS_CREATED;
$typ = Studierendenantrag_model::TYP_ABMELDUNG;
else
$status = Studierendenantragstatus_model::STATUS_CREATED_STGL;
$typ = Studierendenantrag_model::TYP_ABMELDUNG_STGL;
$result = $this->_ci->StudierendenantragModel->insert([
'prestudent_id' => $prestudent_id,
'studiensemester_kurzbz'=> $studiensemester_kurzbz,
'datum' => date('c'),
'typ' => Studierendenantrag_model::TYP_ABMELDUNG,
'typ' => $typ,
'insertvon' => $insertvon,
'grund' => $grund
]);
@@ -105,7 +105,7 @@ class AntragLib
$result = $this->_ci->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $antrag_id,
'studierendenantrag_statustyp_kurzbz' => $status,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_CREATED,
'insertvon' => $insertvon
]);
@@ -148,7 +148,7 @@ class AntragLib
$result = $this->_ci->StudierendenantragstatusModel->insert([
'studierendenantrag_id' => $studierendenantrag_id,
'studierendenantrag_statustyp_kurzbz' => $status_approved,
'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
'insertvon' => $insertvon
]);
if (isError($result))
@@ -160,7 +160,7 @@ class AntragLib
$errors[] = getError($resultPrestudent);
continue;
}
if ($status_approved == Studierendenantragstatus_model::STATUS_APPROVED)
if ($status->typ == Studierendenantrag_model::TYP_ABMELDUNG)
{
$antrag = getData($resultPrestudent)[0];
@@ -1482,6 +1482,25 @@ class AntragLib
return in_array($lastStatus->studierendenantrag_statustyp_kurzbz, $status);
}
/**
* @param integer $antrag_id
* @param string|array $type
*
* @return boolean
*/
public function hasType($antrag_id, $type)
{
$result = $this->_ci->StudierendenantragModel->load($antrag_id);
if (!hasData($result))
return false;
$antrag = getData($result)[0];
if (!is_array($type))
$type = [$type];
return in_array($antrag->typ, $type);
}
/**
* @param integer $antrag_id
@@ -3,6 +3,7 @@ class Studierendenantrag_model extends DB_Model
{
const TYP_ABMELDUNG = 'Abmeldung';
const TYP_ABMELDUNG_STGL = 'AbmeldungStgl';
const TYP_UNTERBRECHUNG = 'Unterbrechung';
const TYP_WIEDERHOLUNG = 'Wiederholung';
@@ -567,7 +567,7 @@ class Studiengang_model extends DB_Model
if ($not_antrag_typ !== null && is_array($not_antrag_typ)) {
foreach($not_antrag_typ as $k => $v)
$not_antrag_typ[$k] = $this->db->escape($v);
$this->addJoin('campus.tbl_studierendenantrag a', 'a.prestudent_id=p.prestudent_id and a.typ in ('. implode(',', $not_antrag_typ ).')', 'LEFT');
$this->addJoin('campus.tbl_studierendenantrag a', 'a.prestudent_id=p.prestudent_id and a.typ in ('. implode(',', $not_antrag_typ ).") AND campus.get_status_studierendenantrag (a.studierendenantrag_id)<>'" . Studierendenantragstatus_model::STATUS_CANCELLED . "'", 'LEFT');
$this->db->where('a.typ IS NULL');
}
@@ -1,4 +1,5 @@
import StudierendenantragAbmeldung from './Form/Abmeldung.js';
import StudierendenantragAbmeldungStgl from './Form/AbmeldungStgl.js';
import StudierendenantragUnterbrechung from './Form/Unterbrechung.js';
import StudierendenantragWiederholung from './Form/Wiederholung.js';
import Phrasen from '../../mixins/Phrasen.js';
@@ -6,6 +7,7 @@ import Phrasen from '../../mixins/Phrasen.js';
export default {
components: {
StudierendenantragAbmeldung,
StudierendenantragAbmeldungStgl,
StudierendenantragUnterbrechung,
StudierendenantragWiederholung
},
@@ -0,0 +1,99 @@
import {CoreFetchCmpt} from '../../Fetch.js';
import Phrasen from '../../../mixins/Phrasen.js';
export default {
components: {
CoreFetchCmpt
},
mixins: [
Phrasen
],
emits: [
'setInfos',
'setStatus'
],
props: {
studierendenantragId: Number
},
data() {
return {
data: null
}
},
computed: {
statusSeverity() {
switch (this.data.status)
{
case 'Erstellt': return 'info';
case 'Genehmigt': return 'success';
default: return 'info';
}
}
},
methods: {
load() {
return axios.get(
FHC_JS_DATA_STORAGE_OBJECT.app_root +
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
'/components/Antrag/Abmeldung/getDetailsForAntrag/' +
this.studierendenantragId
).then(
result => {
this.data = result.data.retval;
if (this.data.status) {
this.$emit("setStatus", {
msg: this.p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}),
severity: this.statusSeverity
});
}
return result;
}
);
}
},
template: `
<div class="studierendenantrag-form-abmeldung">
<core-fetch-cmpt :api-function="load">
<div class="row">
<div class="col-12">
<table class="table">
<tr>
<th>{{p.t('lehre', 'studiengang')}}</th>
<td align="right">{{data.bezeichnung}}</td>
</tr>
<tr>
<th>{{p.t('lehre', 'organisationsform')}}</th>
<td align="right">{{data.orgform_bezeichnung}}</td>
</tr>
<tr>
<th>{{p.t('projektarbeitsbeurteilung', 'nameStudierende')}}</th>
<td align="right">{{data.name}}</td>
</tr>
<tr>
<th>{{p.t('person', 'personenkennzeichen')}}</th>
<td align="right">{{data.matrikelnr}}</td>
</tr>
<tr>
<th>{{p.t('lehre', 'studienjahr')}}</th>
<td align="right">{{data.studienjahr_kurzbz}}</td>
</tr>
<tr>
<th>{{p.t('lehre', 'semester')}}</th>
<td align="right">{{data.semester}}</td>
</tr>
</table>
</div>
<div class="mb-3">
<h5>{{p.t('studierendenantrag', 'antrag_grund')}}:</h5>
<pre>{{data.grund}}</pre>
</div>
</div>
<template v-slot:error="{errorMessage}">
<div class="alert alert-danger m-0" role="alert">
{{ errorMessage }}
</div>
</template>
</core-fetch-cmpt>
</div>
`
}
@@ -79,6 +79,7 @@ export default {
@complete="loadData"
inputId="newAntragModalAutoComplete"
dropdown
dropdown-mode="current"
>
<template #option="slotProps">
<div :title="slotProps.option.prestudent_id">
@@ -230,7 +230,7 @@ export default {
'content/pdfExport.php?xml=Antrag' + data.typ + '.xml.php&xsl=Antrag' + data.typ + '&id='+ data.studierendenantrag_id +'&output=pdf';
container.append(button);
}
if(data.typ == 'Abmeldung' && data.status == 'GenehmigtStgl')
if(data.typ == 'AbmeldungStgl' && data.status == 'Genehmigt')
{
// NOTE(chris): Object
let button = document.createElement('button');
@@ -240,7 +240,7 @@ export default {
container.append(button);
}
if(data.typ == 'Abmeldung' && data.status == 'Beeinsprucht')
if(data.typ == 'AbmeldungStgl' && data.status == 'Beeinsprucht')
{
// NOTE(chris): Deny Objection
let button = document.createElement('button');
@@ -294,7 +294,7 @@ export default {
if (this.stgL.includes(data.studiengang_kz))
{
// NOTE(chris): Approve
if ((data.typ == 'Wiederholung' && data.status == 'Lvszugewiesen') || (data.typ != 'Wiederholung' && (data.status == 'Erstellt' || data.status == 'ErstelltStgl'))) {
if ((data.typ == 'Wiederholung' && data.status == 'Lvszugewiesen') || (data.typ != 'Wiederholung' && data.status == 'Erstellt')) {
let button = document.createElement('button');
button.innerHTML = this.p.t('studierendenantrag', 'btn_approve');
button.className = "btn btn-outline-secondary";
@@ -27,9 +27,7 @@ if($result = @$db->db_query("SELECT 1 FROM campus.tbl_studierendenantrag_statust
(studierendenantrag_statustyp_kurzbz, bezeichnung)
VALUES
('Erstellt', '{\"Erstellt\",\"Created\"}'),
('ErstelltStgl', '{\"Erstellt\",\"Created\"}'),
('Genehmigt', '{\"Genehmigt\",\"Approved\"}'),
('GenehmigtStgl', '{\"Vorläufig Genehmigt\",\"Provisionally Approved\"}'),
('Beeinsprucht', '{\"Beeinsprucht\",\"Objected\"}'),
('Abgelehnt', '{\"Abgelehnt\",\"Rejected\"}'),
('Verzichtet', '{\"Verzichtet\",\"Pass\"}'),
+40
View File
@@ -18585,6 +18585,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'title_AbmeldungStgl',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abmeldung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'De-registration',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
@@ -18845,6 +18865,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'antrag_typ_AbmeldungStgl',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abmeldung (durch Studiengangsleitung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Cancellation (by course director)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',