Merge branch 'feature-35066/Studstatus_divers'

This commit is contained in:
Harald Bamberger
2023-12-20 19:57:33 +01:00
13 changed files with 402 additions and 76 deletions
@@ -75,12 +75,18 @@ class Leitung extends FHC_Controller
$this->outputJsonSuccess($stgs);
}
public function getAntraege($studiengang = null)
public function getAntraege($studiengang = null, $extra = null)
{
if ($studiengang && $studiengang == 'todo') {
$studiengang = $extra;
$extra = true;
} else {
$extra = false;
}
if($studiengang)
if ($studiengang) {
$studiengaenge = [$studiengang];
else {
} else {
$studiengaenge =$this->permissionlib->getSTG_isEntitledFor('student/antragfreigabe');
if(!is_array($studiengaenge))
$studiengaenge = [];
@@ -96,7 +102,9 @@ class Leitung extends FHC_Controller
$antraege = [];
if ($studiengaenge) {
$result = $this->StudierendenantragModel->loadForStudiengaenge($studiengaenge);
$result = $extra
? $this->StudierendenantragModel->loadActiveForStudiengaenge($studiengaenge)
: $this->StudierendenantragModel->loadForStudiengaenge($studiengaenge);
if (isError($result)) {
$this->output->set_status_header(500);
return $this->outputJson('Internal Server Error');
@@ -76,10 +76,9 @@ class Wiederholung extends FHC_Controller
if (isError($result)) {
return $this->outputJsonError(getError($result));
}
$data = getData($result);
$result = $this->antraglib->getFailedExamForPrestudent($prestudent_id);
$result = $this->antraglib->getFailedExamForPrestudent($prestudent_id, $data->datum, $data->studiensemester_kurzbz);
// NOTE(chris): error handling for this function should already happenden in antraglib->getPrestudentWiederholungsBerechtigt()
$pruefungsdata = current(getData($result));
+113 -10
View File
@@ -62,6 +62,24 @@ class AntragLib
'insertvon' => $insertvon
]);
// NOTE(chris): remove "preabbrecher" statusgrund for Stgl-Abmeldungen if set
$res = $this->_ci->StudierendenantragModel->load($antrag_id);
if (hasData($res) && current(getData($res))->typ == Studierendenantrag_model::TYP_ABMELDUNG_STGL) {
$this->_ci->PrestudentstatusModel->addSelect('tbl_status_grund.statusgrund_kurzbz');
$res = $this->_ci->PrestudentstatusModel->getLastStatusWithStgEmail(current(getData($res))->prestudent_id, '', 'Student');
if (hasData($res) && current(getData($res))->statusgrund_kurzbz == 'preabbrecher') {
$prestudentstatus = current(getData($res));
$this->_ci->PrestudentstatusModel->update([
'prestudent_id' => $prestudentstatus->prestudent_id,
'status_kurzbz'=>$prestudentstatus->status_kurzbz,
'studiensemester_kurzbz'=>$prestudentstatus->studiensemester_kurzbz,
'ausbildungssemester'=>$prestudentstatus->ausbildungssemester
], [
'statusgrund_id' => null
]);
}
}
return $result;
}
@@ -1013,12 +1031,12 @@ class AntragLib
$semA,
$ausbildungssemester + 1,
$antrag->prestudent_id,
$antrag->studiensemester_kurzbz,
$sprache
);
if (isError($result))
return $result;
$lvsA = $result->retval; // NOTE(chris): don't use getData() because we want to differenciate [] and null
$repeat_last = false;
if ($lvsA) {
foreach($lvsA as $lv)
{
@@ -1029,6 +1047,81 @@ class AntragLib
$lv->antrag_anmerkung = $lvszugewiesen[$lv->lehrveranstaltung_id]->anmerkung;
}
}
} elseif ($lvsA === null) {
// NOTE(chris): We are repeating the last semester
$repeat_last = true;
$result = $this->_ci->PrestudentstatusModel->getStatusByFilter($antrag->prestudent_id, 'Student', $ausbildungssemester - 1);
if (isError($result))
return $result;
$stdsems = getData($result) ?: [];
$stdsem = null;
$result = $this->_ci->StudiensemesterModel->load($antrag->studiensemester_kurzbz);
if (isError($result))
return $result;
if (!hasData($result))
return error($this->_ci->p->t('studierendenantrag', 'error_no_stdsem', ['studiensemester_kurzbz' => $antrag->studiensemester_kurzbz]));
$asem = current(getData($result));
foreach ($stdsems as $sem) {
$result = $this->_ci->StudiensemesterModel->load($sem->studiensemester_kurzbz);
if (isError($result))
return $result;
if (hasData($result)) {
if (current(getData($result))->start < $asem->start) {
$stdsem = $sem->studiensemester_kurzbz;
break;
}
}
}
// NOTE(chris): if we don't find a status in the previous semester there is something wrong
if (!$stdsem)
return error($this->_ci->p->t('studierendenantrag', 'error_no_status_in_prev_sem'));
$result = $this->getLvsByStgStsemAndSem(
$studiengang_kz,
$orgform_kurzbz,
$semA,
$ausbildungssemester - 1,
$antrag->prestudent_id,
$sprache
);
if (isError($result))
return $result;
$lvsA = getData($result) ?: [];
$result = $this->getLvsByStgStsemAndSem(
$studiengang_kz,
$orgform_kurzbz,
$stdsem,
$ausbildungssemester - 1,
$antrag->prestudent_id,
$sprache
);
if (isError($result))
return $result;
$lvsAtest = getData($result) ?: [];
if (count(array_intersect(array_map(function ($a) {
return $a->lehrveranstaltung_id;
}, $lvsA), array_map(function ($a) {
return $a->lehrveranstaltung_id;
}, $lvsAtest)))) {
foreach ($lvsA as $lv) {
if (isset($lvszugewiesen[$lv->lehrveranstaltung_id]) && ($lvszugewiesen[$lv->lehrveranstaltung_id]->note == 0)) {
$lv->antrag_anmerkung = $lvszugewiesen[$lv->lehrveranstaltung_id]->anmerkung;
$lv->antrag_zugelassen = true;
}
}
} else {
$lvsA = null;
}
}
$result = $this->getLvsByStgStsemAndSem(
@@ -1037,7 +1130,6 @@ class AntragLib
$semB,
$ausbildungssemester,
$antrag->prestudent_id,
$antrag->studiensemester_kurzbz,
$sprache
);
if (isError($result))
@@ -1053,10 +1145,14 @@ class AntragLib
// TODO(manu): eventuelle Änderungen taggen
}
return success([
$result = [
'1' . $semA => $lvsA,
'2' . $semB => $lvsB ?: []
]);
];
if ($repeat_last)
$result['repeat_last'] = true;
return success($result);
}
public function getLvsByStgStsemAndSem(
@@ -1065,7 +1161,6 @@ class AntragLib
$studiensemester_kurzbz,
$ausbildungssemester,
$prestudent_id,
$note_stsem,
$sprache
) {
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
@@ -1119,8 +1214,7 @@ class AntragLib
return $this->_ci->StudienplanModel->getStudienplanLehrveranstaltungForPrestudent(
$studienplan->studienplan_id,
$ausbildungssemester,
$prestudent_id,
$note_stsem
$prestudent_id
);
}
@@ -1405,6 +1499,8 @@ class AntragLib
$resultDetails->grund = $resultAntrag->grund;
$resultDetails->studierendenantrag_id = $resultAntrag->studierendenantrag_id;
$resultDetails->typ = $resultAntrag->typ;
$resultDetails->datum = $resultAntrag->datum;
$resultDetails->studiensemester_kurzbz = $resultAntrag->studiensemester_kurzbz;
return success($resultDetails);
}
@@ -1506,9 +1602,9 @@ class AntragLib
);
}
public function getFailedExamForPrestudent($prestudent_id)
public function getFailedExamForPrestudent($prestudent_id, $max_date = null, $studiensemester_kurzbz = null)
{
return $this->_ci->PruefungModel->loadWhereCommitteeExamFailedForPrestudent($prestudent_id);
return $this->_ci->PruefungModel->loadWhereCommitteeExamFailedForPrestudent($prestudent_id, $max_date, $studiensemester_kurzbz);
}
public function saveLvs($lvArray)
@@ -1622,6 +1718,7 @@ class AntragLib
if ($student_uid) {
$email = $this->_ci->StudentModel->getEmailFH($student_uid);
$vorlage = 'Sancho_Mail_Antrag_W_Student';
$sem_not_allowed = $sem_to_repeat = '';
$list_not_allowed = $list_to_repeat = $this->_ci->p->t('studierendenantrag', 'mail_part_error_no_lvs');
@@ -1629,6 +1726,12 @@ class AntragLib
$result = $this->getLvsForAntrag($antrag_id);
if (hasData($result)) {
$lvs = getData($result);
$repeat_last = false;
if (isset($lvs['repeat_last'])) {
$repeat_last = true;
unset($lvs['repeat_last']);
$vorlage .= '_Lst';
}
foreach ($lvs as $sem => $lv_list) {
$lvs_filtered = array_filter($lv_list, function ($el) {
return property_exists($el, 'antrag_zugelassen') && $el->antrag_zugelassen;
@@ -1651,7 +1754,7 @@ class AntragLib
// NOTE(chris): Sancho mail
sendSanchoMail(
'Sancho_Mail_Antrag_W_Student',
$vorlage,
[
'antrag_id' => $antrag_id,
'stg' => $stg->bezeichnung,
@@ -139,6 +139,8 @@ class Pruefung_model extends DB_Model
$this->db->where_not_in("n.note", $note_blacklist);
$this->db->where_in("p.pruefungstyp_kurzbz", ['kommPruef','zusKommPruef']);
$this->addOrder('p.datum', 'DESC');
return $this->load();
}
@@ -201,12 +203,19 @@ class Pruefung_model extends DB_Model
*
* @return stdClass
*/
public function loadWhereCommitteeExamFailedForPrestudent($prestudent_id)
public function loadWhereCommitteeExamFailedForPrestudent($prestudent_id, $max_date = null, $studiensemester_kurzbz = null)
{
$this->withDetailsForStudierendenAntrag();
$this->db->where('ps.prestudent_id', $prestudent_id);
if ($max_date !== null) {
$this->db->where('p.datum <', $max_date);
}
if ($studiensemester_kurzbz !== null) {
$this->db->where('le.studiensemester_kurzbz', $studiensemester_kurzbz);
}
return $this->loadWhereCommitteeExamsFailed();
}
@@ -26,9 +26,10 @@ class Studierendenantrag_model extends DB_Model
return $this->loadForStudiengaenge($studiengaenge, $typ, $this->StudierendenantragstatusModel::STATUS_CREATED);
}
public function loadForStudiengaenge($studiengaenge, $typ = null, $status = null)
public function loadForStudiengaenge($studiengaenge, $typ = null, $status = null, $sql = null)
{
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
if ($sql == null)
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->addSelect('UPPER(stg.typ) || UPPER(stg.kurzbz) || \' \' || stg.bezeichnung AS bezeichnung');
$this->addSelect('bezeichnung_mehrsprachig[(' . $sql . ')] AS orgform', false);
@@ -73,6 +74,26 @@ class Studierendenantrag_model extends DB_Model
return $this->loadWhere($where);
}
public function loadActiveForStudiengaenge($studiengaenge) {
// NOTE(chris): get language before changing things in the global db object because getUserLanguage() might use it and it should not have been tampered with
$sql = "SELECT index FROM public.tbl_sprache WHERE sprache='" . getUserLanguage() . "' LIMIT 1";
$this->db->group_start();
$this->db->where_not_in('s.studierendenantrag_statustyp_kurzbz', [
Studierendenantragstatus_model::STATUS_CANCELLED,
Studierendenantragstatus_model::STATUS_APPROVED,
Studierendenantragstatus_model::STATUS_REJECTED,
Studierendenantragstatus_model::STATUS_OBJECTION_DENIED
]);
$this->db->or_group_start();
$this->db->where('s.studierendenantrag_statustyp_kurzbz', Studierendenantragstatus_model::STATUS_APPROVED);
$this->db->where('tbl_studierendenantrag.typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
$this->db->group_end();
$this->db->group_end();
return $this->loadForStudiengaenge($studiengaenge, null, null, $sql);
}
public function isInStudiengang($studierendenantrag_id, $studiengaenge)
{
$this->addJoin('public.tbl_prestudent', 'prestudent_id');
@@ -65,20 +65,40 @@ class Studierendenantraglehrveranstaltung_model extends DB_Model
'stat.studierendenantrag_status_id = campus.get_status_id_studierendenantrag(a.studierendenantrag_id)'
);
$this->addJoin('public.tbl_student s', 'prestudent_id');
$this->addJoin(
'lehre.tbl_zeugnisnote z',
'z.lehrveranstaltung_id=lv.lehrveranstaltung_id AND z.student_uid=s.student_uid AND z.studiensemester_kurzbz=a.studiensemester_kurzbz',
'LEFT'
);
// NOTE(chris): last offizell note
$this->addJoin('(
SELECT z.*
FROM lehre.tbl_zeugnisnote z
LEFT JOIN public.tbl_studiensemester zs
USING(studiensemester_kurzbz)
JOIN (
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
FROM lehre.tbl_zeugnisnote zi
LEFT JOIN lehre.tbl_note zin
USING(note)
LEFT JOIN public.tbl_studiensemester zis
USING(studiensemester_kurzbz)
WHERE zin.aktiv AND zin.offiziell
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
) zx
ON (
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
AND z.student_uid=zx.student_uid
AND zs.start = zx.start
)) z', 'z.lehrveranstaltung_id=lv.lehrveranstaltung_id AND z.student_uid=s.student_uid', 'LEFT');
$this->addJoin('lehre.tbl_note zn', 'z.note = zn.note', 'LEFT');
$this->load->config('studierendenantrag');
$note_intern_angerechntet = $this->config->item('wiederholung_note_angerechnet');
return $this->loadWhere([
'ps.prestudent_id' => $prestudent_id,
'a.typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG,
'stat.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
'n.note <> ' => 0,
$this->dbTable . '.studiensemester_kurzbz' => $studiensemester_kurzbz,
'(n.note<>19 OR (z.note IS NOT NULL AND zn.positiv))' => null
'(n.note<>' . $this->db->escape($note_intern_angerechntet) . ' OR (z.note IS NOT NULL AND zn.positiv))' => null
]);
}
}
@@ -60,7 +60,7 @@ class Studienplan_model extends DB_Model
));
}
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id, $note_stsem)
public function getStudienplanLehrveranstaltungForPrestudent($studienplan_id, $semester, $prestudent_id)
{
$lang = 'SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage());
$sql = 'SELECT student_uid FROM public.tbl_student WHERE prestudent_id=' . $this->escape($prestudent_id);
@@ -75,11 +75,27 @@ class Studienplan_model extends DB_Model
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung', 'studienplan_id');
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->addJoin(
'lehre.tbl_zeugnisnote zn',
'zn.lehrveranstaltung_id=lv.lehrveranstaltung_id AND zn.student_uid=(' . $sql . ') AND zn.studiensemester_kurzbz=' . $this->escape($note_stsem),
'LEFT'
);
// NOTE(chris): last offizell note
$this->addJoin('(
SELECT z.*
FROM lehre.tbl_zeugnisnote z
LEFT JOIN public.tbl_studiensemester zs
USING(studiensemester_kurzbz)
JOIN (
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
FROM lehre.tbl_zeugnisnote zi
LEFT JOIN lehre.tbl_note zin
USING(note)
LEFT JOIN public.tbl_studiensemester zis
USING(studiensemester_kurzbz)
WHERE zin.aktiv AND zin.offiziell
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
) zx
ON (
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
AND z.student_uid=zx.student_uid
AND zs.start = zx.start
)) zn', 'zn.lehrveranstaltung_id=lv.lehrveranstaltung_id AND zn.student_uid=( ' . $sql . ')', 'LEFT');
$this->addJoin('lehre.tbl_note n', 'n.note=zn.note', 'LEFT');
$this->addOrder('lehre.tbl_studienplan_lehrveranstaltung.sort');
@@ -49,12 +49,13 @@ export default {
console.error(error);
});
},
changeFilter(evt) {
this.filter = evt.target.value || undefined;
changeFilter(filter) {
this.filter = filter || undefined;
this.reload();
},
reload() {
this.$refs.table.reload(this.filter);
if (this.$refs.table)
this.$refs.table.reload(this.filter);
this.loadFilter();
},
download() {
@@ -336,6 +337,7 @@ export default {
ref="table"
:stg-a="stgkzA"
:stg-l="stgkzL"
:filter="filter"
v-model:columnData="columns"
v-model:selectedData="selectedData"
@action:approve="actionApprove"
@@ -1,3 +1,5 @@
const LOCAL_STORAGE_ID = 'studierendenantrag_leitung_2023-11-14_header_filter';
export default {
props: {
stgs: Array
@@ -5,16 +7,67 @@ export default {
emits: [
'input'
],
data() {
return {
todo_value: '',
stg_value: ''
}
},
computed: {
value() {
const a = [];
if (this.todo_value)
a.push(this.todo_value);
if (this.stg_value)
a.push(this.stg_value);
return a.join('/');
}
},
watch: {
value(n) {
window.localStorage.setItem(LOCAL_STORAGE_ID, n);
this.$emit('input', n);
}
},
created() {
var values = 'todo';
const savedPath = window.localStorage.getItem(LOCAL_STORAGE_ID);
if (savedPath !== null) {
values = savedPath;
}
values = values.split('/');
if (values.length) {
if (values.length == 1) {
if (values[0] == 'todo')
values.push('');
else
values.unshift('');
}
this.stg_value = values.pop();
this.todo_value = values.pop();
}
},
template: `
<div class="studierendenantrag-leitung-header fhc-table-header d-flex align-items-center mb-2 gap-2">
<h3 class="h5 col m-0">{{$p.t('studierendenantrag', 'studierendenantraege')}}</h3>
<div v-if="stgs.length > 1" class="col-auto">
<select ref="stg_select" class="form-select" @input="$emit('input', $event)">
<option value="">{{$p.t('global', 'alle')}}</option>
<option v-for="stg in stgs" :key="stg.studiengang_kz" :value="stg.studiengang_kz">
{{stg.bezeichnung}}
</option>
</select>
<div class="col-auto row row-cols-lg-auto g-3 align-items-center">
<div class="col-12">
<select class="form-select" v-model="todo_value">
<option value="todo">{{$p.t('studierendenantrag', 'filter_todo')}}</option>
<option value="">{{$p.t('studierendenantrag', 'filter_all')}}</option>
</select>
</div>
<div class="col-12">
<select v-if="stgs.length > 1" class="form-select" v-model="stg_value">
<option value="">{{$p.t('global', 'alle')}}</option>
<option v-for="stg in stgs" :key="stg.studiengang_kz" :value="stg.studiengang_kz">
{{stg.bezeichnung}}
</option>
</select>
</div>
</div>
</div>
`
@@ -16,6 +16,7 @@ export default {
data(){
return {
lvs: null,
repeat_last: false,
refresh: true,
result: false,
check: false
@@ -35,13 +36,16 @@ export default {
},
methods: {
setlvs(param) {
if(param.error)
{
if(param.error) {
this.$refs.fetchCompt.error = true;
this.$refs.fetchCompt.errorMessage = param.retval;
}
else
} else {
this.repeat_last = !!param.retval.repeat_last;
if (this.repeat_last) {
delete param.retval.repeat_last;
}
this.lvs = param.retval;
}
},
loadlvs() {
if (!this.antragId)
@@ -82,7 +86,7 @@ export default {
<table v-else class="table caption-top" v-for="(lv_arr, sem) in lvzugelassen" :key="sem">
<caption>
<span class="d-flex justify-content-between">
<span>{{ $p.t('studierendenantrag',['title_lv_nicht_zugelassen', 'title_lv_wiederholen'][sem.substr(0,1)-1]) }}</span>
<span>{{ $p.t('studierendenantrag',['title_lv_nicht_zugelassen', 'title_lv_wiederholen'][repeat_last ? 1 : sem.substr(0,1)-1]) }}</span>
<span>{{sem.substr(1)}}</span>
</span>
</caption>
@@ -13,7 +13,8 @@ export default {
selectedData: Array,
columnData: Array,
stgL: Array,
stgA: Array
stgA: Array,
filter: String
},
emits: [
'update:columnData',
@@ -80,7 +81,7 @@ export default {
{
let val = cell.getValue();
if (!val)
return '';
return '&nbsp;';
let date = new Date(val);
return date.toLocaleDateString();
}
@@ -90,7 +91,7 @@ export default {
movableColumns: true,
maxHeight: '50vh',
layout: "fitDataFill",
ajaxURL: this.ajaxUrl,
ajaxURL: this.ajaxUrl + (this.filter || ''),
persistence: { // NOTE(chris): do not store column titles
sort: true, //persist column sorting
filter: true, //persist filters
@@ -201,7 +202,7 @@ export default {
this.$refs.modalGrundPre.innerHTML = val;
});
return val ? link : '';
return val ? link : '&nbsp;';
}
}, {
field: 'dms_id',
@@ -209,7 +210,7 @@ export default {
formatter: (cell, formatterParams, onRendered) => {
let val = cell.getValue();
if (!val)
return '';
return '&nbsp;';
let link = document.createElement('a');
link.href = FHC_JS_DATA_STORAGE_OBJECT.app_root +
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
@@ -338,6 +339,9 @@ export default {
container.append(button);
}
if (container.innerHTML == '')
container.innerHTML = '&nbsp;';
return container;
}
}]
@@ -41,10 +41,11 @@ export default {
methods: {
save() {
this.isloading = true;
const forbiddenLvs = this.lvs1.filter(lv => lv.antrag_zugelassen && !lv._children).map(lv => ({
const forbiddenLvs = this.lvs1.filter(lv => (lv.antrag_zugelassen || this.lvs.repeat_last)
&& !lv._children).map(lv => ({
studierendenantrag_id: this.antragId,
lehrveranstaltung_id: lv.lehrveranstaltung_id,
zugelassen: 0,
zugelassen: this.lvs.repeat_last ? (lv.antrag_zugelassen ? 1 : 2) : 0,
anmerkung: lv.antrag_anmerkung || "",
studiensemester_kurzbz: this.lvs1sem
}));
@@ -109,6 +110,8 @@ export default {
.loadCategory(['ui', 'lehre', 'studierendenantrag', 'global'])
.then(() => {
for (var k in result.data.retval) {
if (k === 'repeat_last')
continue;
if (result.data.retval[k] === null) {
const alert = document.createElement('div');
alert.innerHTML = this.$p.t('studierendenantrag', 'error_stg_last_semester');
@@ -147,29 +150,33 @@ export default {
{title: this.$p.t('lehre','lehrform'), field: "lehrform_kurzbz"},
{title: "ECTS", field: "ects"},
{title: this.$p.t('lehre','note'), field: "note", formatter:(cell, formatterParams, onRendered)=>cell.getValue() || "---"},
{title: (index==1) ? this.$p.t('studierendenantrag','lv_nicht_zulassen') : this.$p.t('studierendenantrag','lv_wiederholen'), field: "antrag_zugelassen", formatter: (cell, formatterParams, onRendered) => {
let data = cell.getData();
if(data._children || !data.zeugnis)
return "";
let input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.role = "switch";
input.checked = cell.getValue();
input.addEventListener('input', () => {
lvs[data.studienplan_lehrveranstaltung_id].antrag_zugelassen = input.checked;
cell.getRow().reformat();
});
if (this.disabled) {
input.disabled = true;
{
title: index == 1 && !result.data.retval.repeat_last ? this.$p.t('studierendenantrag','lv_nicht_zulassen') : this.$p.t('studierendenantrag','lv_wiederholen'),
field: "antrag_zugelassen",
formatter: (cell, formatterParams, onRendered) => {
let data = cell.getData();
if(data._children || !data.zeugnis)
return "";
let input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.role = "switch";
input.checked = cell.getValue();
input.addEventListener('input', () => {
lvs[data.studienplan_lehrveranstaltung_id].antrag_zugelassen = input.checked;
cell.getRow().reformat();
});
if (this.disabled) {
input.disabled = true;
}
let div = document.createElement('div');
div.className = 'form-check form-switch';
div.append(input);
return div;
}
let div = document.createElement('div');
div.className = 'form-check form-switch';
div.append(input);
return div;
}},
},
{
title: this.$p.t('global','anmerkung'),
field: "antrag_anmerkung",
@@ -233,7 +240,7 @@ export default {
<div ref="alertbox"></div>
<span class="d-flex justify-content-between h4">
<span>{{$p.t('studierendenantrag', 'title_lv_nicht_zugelassen')}}</span>
<span>{{lvs.repeat_last ? $p.t('studierendenantrag', 'title_lv_wiederholen') : $p.t('studierendenantrag', 'title_lv_nicht_zugelassen')}}</span>
<span>{{lvs1sem}}</span>
</span>
<div ref="lvtable1" class="mb-3">
+80
View File
@@ -19905,6 +19905,46 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'filter_all',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'alle anzeigen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'show all',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'filter_todo',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'nur offene anzeigen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'only show open',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
@@ -21388,6 +21428,46 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'error_no_stdsem',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Das Studiensemester {studiensemester_kurzbz} existiert nicht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Semester {studiensemester_kurzbz} does not exist',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',
'phrase' => 'error_no_status_in_prev_sem',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Kein Status im letzten Semester gefunden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'No status found in previous semester',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'studierendenantrag',