mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 00:12:15 +00:00
Repeater Grades
This commit is contained in:
@@ -31,8 +31,10 @@ class Grades extends FHCAPI_Controller
|
||||
'list' => 'student/noten:r',
|
||||
'getCertificate' => 'student/noten:r',
|
||||
'getTeacherProposal' => 'student/noten:r',
|
||||
'getRepeaterGrades' => 'student/noten:r',
|
||||
'updateCertificate' => ['admin:w', 'assistenz:w'],
|
||||
'copyTeacherProposalToCertificate' => 'student/noten:w',
|
||||
'copyRepeaterGradeToCertificate' => 'student/noten:w',
|
||||
'getGradeFromPoints' => 'student/noten:r'
|
||||
]);
|
||||
|
||||
@@ -111,6 +113,20 @@ class Grades extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
public function getRepeaterGrades($prestudent_id)
|
||||
{
|
||||
$this->load->library('AntragLib');
|
||||
|
||||
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||
|
||||
|
||||
$result = $this->antraglib->getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz);
|
||||
|
||||
$grades = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($grades);
|
||||
}
|
||||
|
||||
public function updateCertificate()
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
@@ -264,6 +280,79 @@ class Grades extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
public function copyRepeaterGradeToCertificate()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules("studierendenantrag_lehrveranstaltung_id", "", "required|integer"); // TODO(chris): phrase
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$id = $this->input->post('studierendenantrag_lehrveranstaltung_id');
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->model('education/Studierendenantraglehrveranstaltung_model', 'StudierendenantraglehrveranstaltungModel');
|
||||
|
||||
$this->StudierendenantraglehrveranstaltungModel->addSelect("tbl_studierendenantrag_lehrveranstaltung.*");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addSelect("student_uid");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addJoin("campus.tbl_studierendenantrag", "studierendenantrag_id");
|
||||
$this->StudierendenantraglehrveranstaltungModel->addJoin("public.tbl_student", "prestudent_id", "LEFT");
|
||||
|
||||
$result = $this->StudierendenantraglehrveranstaltungModel->load($id);
|
||||
$repeaterGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$repeaterGrade)
|
||||
show_404();
|
||||
|
||||
$repeaterGrade = current($repeaterGrade);
|
||||
|
||||
// NOTE(chris): Stg Permissions
|
||||
// TODO(chris): Are those permissions correct?
|
||||
if (!$this->hasPermissionCopy($repeaterGrade->lehrveranstaltung_id, $repeaterGrade->student_uid))
|
||||
return $this->_outputAuthError([$this->router->method => 'student/noten']);
|
||||
|
||||
$data = [
|
||||
'note' => $repeaterGrade->note,
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $repeaterGrade->insertamum,
|
||||
'bemerkung' => $repeaterGrade->anmerkung
|
||||
];
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->load([
|
||||
$repeaterGrade->studiensemester_kurzbz,
|
||||
$repeaterGrade->student_uid,
|
||||
$repeaterGrade->lehrveranstaltung_id
|
||||
]);
|
||||
$certificateGrade = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($certificateGrade) {
|
||||
// NOTE(chris): update
|
||||
$data['updateamum'] = $data['uebernahmedatum'];
|
||||
$data['updatevon'] = $authUID;
|
||||
|
||||
$this->ZeugnisnoteModel->update([
|
||||
$repeaterGrade->studiensemester_kurzbz,
|
||||
$repeaterGrade->student_uid,
|
||||
$repeaterGrade->lehrveranstaltung_id
|
||||
], $data);
|
||||
} else {
|
||||
// NOTE(chris): insert
|
||||
$data['insertamum'] = $data['uebernahmedatum'];
|
||||
$data['insertvon'] = $authUID;
|
||||
$data['lehrveranstaltung_id'] = $repeaterGrade->lehrveranstaltung_id;
|
||||
$data['student_uid'] = $repeaterGrade->student_uid;
|
||||
$data['studiensemester_kurzbz'] = $repeaterGrade->studiensemester_kurzbz;
|
||||
|
||||
$this->ZeugnisnoteModel->insert($data);
|
||||
}
|
||||
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
public function getGradeFromPoints()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
@@ -10,6 +10,9 @@ export default {
|
||||
all = all ? '/all' : '';
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all);
|
||||
},
|
||||
getRepeaterGrades(prestudent_id) {
|
||||
return this.$fhcApi.get('api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id);
|
||||
},
|
||||
updateCertificate(data) {
|
||||
return this.$fhcApi.post('api/frontend/v1/stv/grades/updateCertificate', data);
|
||||
},
|
||||
@@ -26,6 +29,17 @@ export default {
|
||||
}
|
||||
);
|
||||
},
|
||||
copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {
|
||||
return this.$fhcApi.post(
|
||||
'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',
|
||||
{
|
||||
studierendenantrag_lehrveranstaltung_id
|
||||
},
|
||||
{
|
||||
errorHeader: lv_bezeichnung
|
||||
}
|
||||
);
|
||||
},
|
||||
getGradeFromPoints(points) {
|
||||
return this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints', data);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt
|
||||
},
|
||||
emits: [
|
||||
"copied"
|
||||
],
|
||||
props: {
|
||||
student: Object,
|
||||
allSemester: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabulatorEvents: []
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
tabulatorOptions() {
|
||||
return {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: (url, config, params) => {
|
||||
return this.$fhcApi.factory.stv.grades.getRepeaterGrades(params.prestudent_id, params.stdsem);
|
||||
},
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
prestudent_id: this.student.prestudent_id,
|
||||
stdsem: this.allSemester
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => {
|
||||
return response.data || [];
|
||||
},
|
||||
// TODO(chris): phrasen
|
||||
columns: [
|
||||
{ field: 'lv_bezeichnung', title: 'Lehrveranstaltung' },
|
||||
{ field: 'note_bezeichnung', title: 'Note' },
|
||||
{ field: 'insertvon', title: 'MitarbeiterInUID', visible: false },
|
||||
{ field: 'benotungsdatum', title: 'Benotungsdatum', visible: false },
|
||||
{ field: 'freigabedatum', title: 'Freigabedatum', visible: false },
|
||||
{ field: 'studiensemester_kurzbz', title: 'Studiensemester', visible: false },
|
||||
{ field: 'stg_bezeichnung', title: 'Studiengang', visible: false },
|
||||
{ field: 'note', title: 'Note', visible: false },
|
||||
{ field: 'prestudent_uid', title: 'PrestudentID', visible: false },
|
||||
{ field: 'lehrveranstaltung_id', title: 'Lehrveranstaltung ID', visible: false },
|
||||
{ field: 'studierendenantrag_lehrveranstaltung_id', title: 'StudstatusLvID', visible: false }
|
||||
],
|
||||
layout: 'fitDataStretch',
|
||||
height: '100%',
|
||||
selectable: true,
|
||||
selectableRangeMode: 'click',
|
||||
persistenceID: 'stv-details-noten-repeater'
|
||||
};
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
student(n) {
|
||||
this.$refs.table.reloadTable();
|
||||
},
|
||||
allSemester(n) {
|
||||
this.$refs.table.reloadTable();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
copyGrades(selected) {
|
||||
const promises = selected.map(
|
||||
grade => this.$fhcApi.factory
|
||||
.stv.grades.copyRepeaterGradeToCertificate(grade)
|
||||
.then(() => {
|
||||
this.$refs.table.tabulator.deselectRow(this.$refs.table.tabulator.getRows().find(el => el.getData() == grade).getElement());
|
||||
})
|
||||
);
|
||||
Promise
|
||||
.allSettled(promises)
|
||||
.then(results => {
|
||||
if (results.some(res => res.status == "fulfilled")) {
|
||||
// TODO(chris): phrase
|
||||
this.$fhcAlert.alertSuccess("updated");
|
||||
this.$emit('copied');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div class="stv-details-noten-repeater d-flex flex-column">
|
||||
<!-- TODO(chris): phrase -->
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
title="Repeater Grades"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
:tabulator-events="tabulatorEvents"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
reload
|
||||
>
|
||||
<template #actions="{selected}">
|
||||
<button class="btn btn-primary" :disabled="!selected.length" @click="copyGrades(selected)">
|
||||
<!-- TODO(chris): phrase -->
|
||||
<i class="fa-solid fa-arrow-left"></i> copy
|
||||
</button>
|
||||
</template>
|
||||
</core-filter-cmpt>
|
||||
</div>`
|
||||
};
|
||||
Reference in New Issue
Block a user