improvements

This commit is contained in:
cgfhtw
2023-08-31 08:26:16 +02:00
parent 13f71502e6
commit 1009f73109
5 changed files with 123 additions and 24 deletions
@@ -17,7 +17,22 @@ class Studentenverwaltung extends FHC_Controller
{
// TODO(chris): load stgs (this is just for testing)
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->loadWhere(['aktiv' => true]);
$this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz');
$this->StudiengangModel->addDistinct();
$this->StudiengangModel->addSelect('v.studiengang_kz');
$this->StudiengangModel->addSelect('tbl_studiengang.bezeichnung');
$this->StudiengangModel->addSelect('kurzbzlang');
$this->StudiengangModel->addSelect('erhalter_kz');
$this->StudiengangModel->addSelect('typ');
$this->StudiengangModel->addSelect('kurzbz');
$this->StudiengangModel->addOrder('erhalter_kz');
$this->StudiengangModel->addOrder('typ');
$this->StudiengangModel->addOrder('kurzbz');
$result = $this->StudiengangModel->loadWhere(['v.aktiv' => true]);
if (isError($result))
return $this->outputJson($result);
if (!hasData($result))
@@ -57,4 +72,78 @@ class Studentenverwaltung extends FHC_Controller
]
]);
}
/**
* @param integer $studiengang_kz
* @return void
*/
public function getStudents($studiengang_kz = null)
{
// TODO(chris): stdSem?
$stdSem='SS2023';
// TODO(chris): load students filtered by the params
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id');
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid');
$this->PrestudentModel->addJoin('public.tbl_studentlehrverband v', 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($stdSem));
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('s.prestudent_id');
$this->PrestudentModel->addSelect('b.uid');
$this->PrestudentModel->addSelect('titelpre');
$this->PrestudentModel->addSelect('titelpost');
$this->PrestudentModel->addSelect('vorname');
$this->PrestudentModel->addSelect('wahlname');
$this->PrestudentModel->addSelect('vornamen');
$this->PrestudentModel->addSelect('geschlecht');
$this->PrestudentModel->addSelect('nachname');
$this->PrestudentModel->addSelect('gebdatum');
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
$this->PrestudentModel->addSelect('ersatzkennzeichen');
$this->PrestudentModel->addSelect('svnr');
$this->PrestudentModel->addSelect('s.matrikelnr');
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
$this->PrestudentModel->addSelect('v.semester');
$this->PrestudentModel->addSelect('v.verband');
$this->PrestudentModel->addSelect('v.gruppe');
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
$this->PrestudentModel->addSelect('mentor');
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
$this->PrestudentModel->addSelect("(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS email_privat", false);
$this->PrestudentModel->addSelect("(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=s.prestudent_id) AS punkte", false);
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
$this->PrestudentModel->addSelect('tbl_prestudent.reihungstest_id');
$this->PrestudentModel->addSelect('tbl_prestudent.anmeldungreihungstest');
$this->PrestudentModel->addSelect('p.matr_nr');
$this->PrestudentModel->addSelect('tbl_prestudent.gsstudientyp_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.priorisierung');
$this->PrestudentModel->addSelect('p.zugangscode');
$this->PrestudentModel->addSelect('p.bpk');
$this->PrestudentModel->addOrder('nachname');
$this->PrestudentModel->addOrder('vorname');
// TODO(chris): do we need that? do we want that?
if ($studiengang_kz === null)
$this->PrestudentModel->addLimit(1000);
if ($studiengang_kz !== null)
$result = $this->PrestudentModel->loadWhere([
'tbl_prestudent.studiengang_kz' => $studiengang_kz
]);
else
$result = $this->PrestudentModel->load();
if (isError($result)) {
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
$this->outputJson(getError($result));
} else {
$this->outputJson(getData($result));
}
}
}
+2 -2
View File
@@ -33,12 +33,12 @@
<div class="offcanvas-header justify-content-end px-1 d-md-none">
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<stv-verband></stv-verband>
<stv-verband @select-verband="onSelectVerband"></stv-verband>
</nav>
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
<vertical-split>
<template #top>
<stv-list v-model:selected="selected"></stv-list>
<stv-list ref="stvList" v-model:selected="selected"></stv-list>
</template>
<template #bottom>
<stv-details :student="lastSelected"></stv-details>
+5 -2
View File
@@ -18,7 +18,7 @@
import FhcSearchbar from "../components/searchbar/searchbar.js";
import StvVerband from "../components/Studienverwaltung/Verband.js";
import StvList from "../components/Studienverwaltung/List.js";
import StvStudent from "../components/Studienverwaltung/Student.js";
import StvDetails from "../components/Studienverwaltung/Details.js";
import VerticalSplit from "../components/verticalsplit/verticalsplit.js";
import fhcapifactory from "./api/fhcapifactory.js";
@@ -29,7 +29,7 @@ const app = Vue.createApp({
FhcSearchbar,
StvVerband,
StvList,
StvStudent,
StvDetails,
VerticalSplit
},
data() {
@@ -78,6 +78,9 @@ const app = Vue.createApp({
}
},
methods: {
onSelectVerband(link) {
this.$refs.stvList.updateUrl(link);
},
searchfunction(searchsettings) {
return Vue.$fhcapi.Search.search(searchsettings);
}
+16 -16
View File
@@ -1,4 +1,5 @@
import {CoreFilterCmpt} from "../filter/Filter.js";
import {CoreRESTClient} from '../../RESTClient.js';
export default {
components: {
@@ -13,22 +14,16 @@ export default {
data() {
return {
tabulatorOptions: {
columns:[ //Define Table Columns
{title:"Name", field:"name", width:150},
{title:"Age", field:"age", hozAlign:"left", formatter:"progress"},
{title:"Favourite Color", field:"col"},
{title:"Date Of Birth", field:"dob", sorter:"date", hozAlign:"center"},
],
data: [
{id:1, name:"Oli Bob", age:"12", col:"red", dob:""},
{id:2, name:"Mary May", age:"1", col:"blue", dob:"14/05/1982"},
{id:3, name:"Christine Lobowski", age:"42", col:"green", dob:"22/05/1982"},
{id:4, name:"Brendon Philips", age:"125", col:"orange", dob:"01/08/1980"},
{id:5, name:"Margret Marmajuke", age:"16", col:"yellow", dob:"31/01/1999"},
{id:6, name:"Oli Bob", age:"12", col:"red", dob:""},
{id:7, name:"Mary May", age:"1", col:"blue", dob:"14/05/1982"},
{id:8, name:"Christine Lobowski", age:"42", col:"green", dob:"22/05/1982"},
{id:9, name:"Brendon Philips", age:"125", col:"orange", dob:"01/08/1980"}
ajaxURL: CoreRESTClient._generateRouterURI("components/Studentenverwaltung/getStudents"),
//autoColumns: true,
columns:[
{title:"UID", field:"uid"},
{title:"TitelPre", field:"titelpre"},
{title:"Nachname", field:"nachname"},
{title:"Vorname", field:"vorname"},
{title:"Wahlname", field:"wahlname", visible:false},
// TODO(chris): IMPLEMENT!
],
height: 'auto',
@@ -48,6 +43,10 @@ export default {
},
rowSelectionChanged(data) {
this.$emit('update:selected', data);
},
updateUrl(url) {
this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url));
console.log(CoreRESTClient._generateRouterURI(url));
}
},
mounted() {
@@ -55,6 +54,7 @@ export default {
template: `
<div class="stv-list h-100 pt-3">
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
:tabulator-events="tabulatorEvents"
table-only
@@ -5,6 +5,9 @@ export default {
TreeTable: primevue.treetable,
TreeColumn: primevue.column
},
emits: [
'selectVerband'
],
data() {
return {
loading: true,
@@ -31,15 +34,19 @@ export default {
}
}
},
onSelectTreeNode(node) {
if (node.link)
this.$emit('selectVerband', node.link);
},
mapResultToTreeData(el) {
const cp = {
data: el
};
if (el.studiengang_kz !== undefined) {
// TODO(chris): scrolling doesn't work
cp.key = el.studiengang_kz;
cp.data.name = el.bezeichnung;
cp.data.name = el.kurzbzlang + ' (' + (el.typ + el.kurzbz).toUpperCase() + ') - ' + el.bezeichnung;
cp.leaf = false;
cp.link = 'components/Studentenverwaltung/getStudents/' + el.studiengang_kz;
}
if (el.children)
cp.children = el.children.map(this.mapResultToTreeData);
@@ -62,7 +69,7 @@ export default {
});
},
template: `
<tree-table class="stv-verband p-treetable-sm" :value="nodes" lazy @node-expand="onExpandTreeNode" scrollable scroll-height="flex">
<tree-table class="stv-verband p-treetable-sm" :value="nodes" lazy @node-expand="onExpandTreeNode" selection-mode="single" @node-select="onSelectTreeNode" scrollable scroll-height="flex">
<tree-column field="name" header="Verband" expander></tree-column>
</tree-table>`
};