mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-16 22:42:16 +00:00
Merge branch 'feature-35066/Studstatus_divers'
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
@@ -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 ' ';
|
||||
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 : ' ';
|
||||
}
|
||||
}, {
|
||||
field: 'dms_id',
|
||||
@@ -209,7 +210,7 @@ export default {
|
||||
formatter: (cell, formatterParams, onRendered) => {
|
||||
let val = cell.getValue();
|
||||
if (!val)
|
||||
return '';
|
||||
return ' ';
|
||||
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 = ' ';
|
||||
|
||||
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">
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user