From bd92777b96076e4e5b3cb2b90df9b1b6c656a1e4 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Mon, 4 Sep 2023 16:52:46 +0200 Subject: [PATCH] improvements 2 --- application/config/routes.php | 2 + .../components/Studentenverwaltung.php | 149 ------ .../controllers/components/stv/Students.php | 343 ++++++++++++++ .../controllers/components/stv/Verband.php | 429 ++++++++++++++++++ application/views/Studentenverwaltung.php | 27 +- public/js/apps/Studentenverwaltung.js | 82 +--- .../js/components/Studienverwaltung/List.js | 69 --- .../js/components/Stv/Studentenverwaltung.js | 117 +++++ .../Stv/Studentenverwaltung/Details.js | 30 ++ .../Studentenverwaltung/Details/Details.js | 87 ++++ .../Studentenverwaltung/Details/Notizen.js} | 4 +- .../Stv/Studentenverwaltung/List.js | 114 +++++ .../Studentenverwaltung}/Verband.js | 41 +- 13 files changed, 1158 insertions(+), 336 deletions(-) delete mode 100644 application/controllers/components/Studentenverwaltung.php create mode 100644 application/controllers/components/stv/Students.php create mode 100644 application/controllers/components/stv/Verband.php delete mode 100644 public/js/components/Studienverwaltung/List.js create mode 100644 public/js/components/Stv/Studentenverwaltung.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Details.js rename public/js/components/{Studienverwaltung/Details.js => Stv/Studentenverwaltung/Details/Notizen.js} (51%) create mode 100644 public/js/components/Stv/Studentenverwaltung/List.js rename public/js/components/{Studienverwaltung => Stv/Studentenverwaltung}/Verband.js (53%) diff --git a/application/config/routes.php b/application/config/routes.php index 15da5698f..a5bd3a7c8 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -61,6 +61,8 @@ $route['api/v1/organisation/[O|o]rganisationseinheit/(:any)'] = 'api/v1/organisa $route['api/v1/ressource/[B|b]etriebsmittelperson/(:any)'] = 'api/v1/ressource/betriebsmittelperson2/$1'; $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1'; +$route['studentenverwaltung/(:any)'] = 'Studentenverwaltung/index'; + // load routes from extensions $subdir = 'application/config/extensions'; $dirlist = scandir($subdir); diff --git a/application/controllers/components/Studentenverwaltung.php b/application/controllers/components/Studentenverwaltung.php deleted file mode 100644 index 63fb7118c..000000000 --- a/application/controllers/components/Studentenverwaltung.php +++ /dev/null @@ -1,149 +0,0 @@ -load->model('organisation/Studiengang_model', 'StudiengangModel'); - - $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)) - return $this->outputJsonSuccess([]); - $list = getData($result); - $list[] = [ - 'name' => 'International', - 'children' => [ - [ - 'name' => 'Incoming', - 'leaf' => true - ], - [ - 'name' => 'Outgoing', - 'leaf' => true - ], - [ - 'name' => 'Gemeinsame Studien', - 'leaf' => true - ] - ] - ]; - $this->outputJsonSuccess($list); - } - - /** - * @param integer $studiengang_kz - * @return void - */ - public function getStudiengang($studiengang_kz) - { - // TODO(chris): load stgSemester + prestudent - $this->outputJson([ - [ - 'key' => 2, - 'name' => 'PreStudent' - ] - ]); - } - - /** - * @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)); - } - } -} diff --git a/application/controllers/components/stv/Students.php b/application/controllers/components/stv/Students.php new file mode 100644 index 000000000..4d00a1f54 --- /dev/null +++ b/application/controllers/components/stv/Students.php @@ -0,0 +1,343 @@ + return [] + * /inout => return [] + * /inout/incoming => getIncoming + * /inout/outgoing => getOutgoing + * /inout/gemeinsamestudien => getGemeinsamestudien + * /(studiengang_kz) => getStudents + * /(studiengang_kz)/prestudent => getPrestudents + * /(studiengang_kz)/prestudent/* => getPrestudents + * /(studiengang_kz)/(semester) => getStudents + * /(studiengang_kz)/(semester)/grp/(gruppe_kurzbz) => getStudents + * /(studiengang_kz)/(semester)/(verband) => getStudents + * /(studiengang_kz)/(semester)/(verband)/(gruppe) => getStudents + * /(studiengang_kz)/(org_form) => getStudents + * /(studiengang_kz)/(org_form)/prestudent => getPrestudents + * /(studiengang_kz)/(org_form)/prestudent/* => getPrestudents + * /(studiengang_kz)/(org_form)/(semester) => getStudents + * /(studiengang_kz)/(org_form)/(semester)/grp/(gruppe_kurzbz) + * => getStudents + * /(studiengang_kz)/(org_form)/(semester)/(verband) => getStudents + * /(studiengang_kz)/(org_form)/(semester)/(verband)/(gruppe) + * => getStudents + * /uid/(student_uid) => getStudent + * + * @param string $method + * @param array $params (optional) + * + * @return void + */ + public function _remap($method, $params = []) + { + if ($method == '' || $method == 'index') + return $this->outputJson([]); + + if ($method == 'inout') { + if (!count($params)) + return $this->outputJson([]); + switch ($params[0]) { + case 'incoming': + return $this->getIncoming(); + case 'outgoing': + return $this->getOutgoing(); + case 'gemeinsamestudien': + return $this->getGemeinsamestudien(); + default: + return show_404(); + } + } + + $count = count($params); + if (!$count) + return $this->getStudents($method); + + if ($method == 'uid' && $count == 1) + return $this->getStudent($params[0]); + + if (is_numeric($params[0])) { + $sem = $params[0]; + if ($count == 3 && $params[1] == 'grp') { + $g = $params[2]; + $ver = null; + $grp = null; + } else { + $g = null; + $ver = $count > 1 ? $params[1] : null; + $grp = $count > 2 ? $params[2] : null; + } + return $this->getStudents($method, $sem, $ver, $grp, $g); + } elseif ($params[0] == 'prestudent') { + if ($count == 1) + return $this->getPrestudents($method); + if ($count == 2) + return $this->getPrestudents($method, $params[1]); + return $this->getPrestudents($method, $params[1], $params[$count-1]); + } else { + $org = $params[0]; + if ($count > 1 && $params[1] == 'prestudent') { + if ($count == 2) + return $this->getPrestudents(null, null, $org); + if ($count == 3) + return $this->getPrestudents($params[2], null, $org); + return $this->getPrestudents($params[2], $params[$count-1], $org); + } + $sem = $count > 1 ? $params[1] : null; + if ($count == 4 && $params[2] == 'grp') { + $g = $params[3]; + $ver = null; + $grp = null; + } else { + $g = null; + $ver = $count > 2 ? $params[2] : null; + $grp = $count > 3 ? $params[3] : null; + } + + return $this->getStudents($method, $sem, $ver, $grp, $g, $org); + } + + show_404(); + } + + /** + * @return void + */ + protected function getIncoming() + { + // TODO(chris): IMPLEMENT! + $this->outputJson([]); + } + + /** + * @return void + */ + protected function getOutgoing() + { + // TODO(chris): IMPLEMENT! + $this->outputJson([]); + } + + /** + * @return void + */ + protected function getGemeinsamestudien() + { + // TODO(chris): IMPLEMENT! + $this->outputJson([]); + } + + /** + * @param integer $studiengang_kz + * @param string $studiensemester_kurzbz (optional) + * @param string $filter (optional) + * @param string $orgform_kurzbz (optional) + * + * @return void + */ + protected function getPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null) + { + // TODO(chris): @see: prestudent.class::loadInteressentenUndBewerber + // TODO(chris): IMPLEMENT! + $this->outputJson([]); + } + + /** + * @param integer $studiengang_kz + * @param integer $semester (optional) + * @param string $verband (optional) + * @param integer $gruppe (optional) + * @param string $gruppe_kurzbz (optional) + * @param string $orgform_kurzbz (optional) + * + * @return void + */ + protected function getStudents($studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null) + { + // TODO(chris): stdSem from Variable + $studiensemester_kurzbz='SS2023'; + + $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($studiensemester_kurzbz) + ); + + $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'); + + + $where = []; + + if ($gruppe_kurzbz !== null) { + $this->PrestudentModel->addJoin('public.tbl_benutzergruppe g', 'uid'); + $where['g.gruppe_kurzbz'] = $gruppe_kurzbz; + $where['g.studiensemester_kurzbz'] = $studiensemester_kurzbz; + } else { + $where['v.studiengang_kz'] = $studiengang_kz; + + if ($semester !== null) + $where['v.semester'] = $semester; + + if ($verband !== null) + $where['v.verband'] = $verband; + + if ($gruppe !== null) + $where['v.gruppe'] = $gruppe; + + if (!$verband && !$gruppe && $orgform_kurzbz !== null) { + $this->PrestudentModel->db->where( + "( + SELECT orgform_kurzbz + FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_prestudent.prestudent_id + AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . " + ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 + )", + $this->PrestudentModel->escape($orgform_kurzbz), + false + ); + } + + } + + $result = $this->PrestudentModel->loadWhere($where); + + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + $this->outputJson(getError($result)); + } else { + $this->outputJson(getData($result) ?: []); + } + } + /** + * @param string $student_uid + * + * @return void + */ + protected function getStudent($student_uid) + { + // TODO(chris): stdSem from Variable + $studiensemester_kurzbz='SS2023'; + + $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($studiensemester_kurzbz) + ); + + $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'); + + $where = []; + + $result = $this->PrestudentModel->loadWhere([ + 's.student_uid' => $student_uid + ]); + + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + $this->outputJson(getError($result)); + } else { + $this->outputJson(getData($result) ?: []); + } + } +} diff --git a/application/controllers/components/stv/Verband.php b/application/controllers/components/stv/Verband.php new file mode 100644 index 000000000..70ccf55f2 --- /dev/null +++ b/application/controllers/components/stv/Verband.php @@ -0,0 +1,429 @@ +load->model('organisation/Studiengang_model', 'StudiengangModel'); + } + + /** + * Remap calls: + * / + * /(studiengang_kz) => getStudiengang + * /(studiengang_kz)/(semester) => getSemester + * /(studiengang_kz)/(semester)/(verband) => getVerband + * /(studiengang_kz)/(org_form) => getStudiengang + * /(studiengang_kz)/(org_form)/(semester) => getSemester + * /(studiengang_kz)/(org_form)/(semester)/(verband) => getVerband + * + * @param string $method + * @param array $params (optional) + * + * @return void + */ + public function _remap($method, $params = []) + { + if ($method == '' || $method == 'index') + return $this->getBase(); + + $count = count($params); + if (!$count) + return $this->getStudiengang($method); + + if ($count == 1) { + if (is_numeric($params[0])) + return $this->getSemester($method, $params[0]); + else + return $this->getStudiengang($method, $params[0]); + } + if ($count == 2) { + if (is_numeric($params[0])) + return $this->getVerband($method, $params[0], $params[1]); + else + return $this->getSemester($method, $params[1], $params[0]); + } + if ($count == 3 && !is_numeric($params[0]) && is_numeric($params[1]) && !is_numeric($params[2])) + return $this->getVerband($method, $params[1], $params[2], $params[0]); + + show_404(); + } + + /** + * @return void + */ + protected function getBase() + { + $this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz'); + + $this->StudiengangModel->addDistinct(); + $this->StudiengangModel->addSelect("v.studiengang_kz AS link"); + $this->StudiengangModel->addSelect("CONCAT(kurzbzlang, ' (', UPPER(CONCAT(typ, kurzbz)), ') - ', tbl_studiengang.bezeichnung) AS name", false); + $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)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + $list = getData($result) ?: []; + $list[] = [ + 'name' => 'International', + 'link' => 'inout', + 'children' => [ + [ + 'name' => 'Incoming', + 'link' => 'inout/incoming', + 'leaf' => true + ], + [ + 'name' => 'Outgoing', + 'link' => 'inout/outgoing', + 'leaf' => true + ], + [ + 'name' => 'Gemeinsame Studien', + 'link' => 'inout/gemeinsamestudien', + 'leaf' => true + ] + ] + ]; + $this->outputJson($list); + } + + /** + * @param integer $studiengang_kz + * @param string $orgform (optional) + * + * @return void + */ + protected function getStudiengang($studiengang_kz, $org_form = null) + { + $link = $studiengang_kz . '/'; + if ($org_form !== null) + $link .= $org_form . '/'; + + $this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz'); + + $this->StudiengangModel->addDistinct(); + $this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", semester) AS link", false); + $this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester ORDER BY verband, gruppe LIMIT 1)) AS name", false); + + $this->StudiengangModel->addSelect('semester'); + + $this->StudiengangModel->addOrder('semester'); + + if ($org_form !== null) { + $this->StudiengangModel->db->group_start(); + $this->StudiengangModel->db->where('v.semester', 0); + $this->StudiengangModel->db->or_where('v.orgform_kurzbz', $org_form); + $this->StudiengangModel->db->group_end(); + } + + $result = $this->StudiengangModel->loadWhere([ + 'v.studiengang_kz' => $studiengang_kz, + 'v.aktiv' => true + ]); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + $list = getData($result) ?: []; + array_unshift($list, [ + 'name' => 'PreStudent', + 'link' => $link . 'prestudent', + 'children' => $this->getStdSem($link . 'prestudent/') + ]); + + if ($org_form === null) { + // NOTE(chris): if mischform show orgforms + $result = $this->StudiengangModel->load($studiengang_kz); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + if (hasData($result)) { + if (current(getData($result))->mischform) { + $this->load->model('organisation/Studienordnung_model', 'StudienordnungModel'); + + $this->StudienordnungModel->addDistinct(); + $this->StudienordnungModel->addSelect("CONCAT(studiengang_kz, '/', p.orgform_kurzbz) AS link"); + $this->StudienordnungModel->addSelect("p.orgform_kurzbz AS name"); + + // TODO(chris): semester for gruppe_kurzbz <- what did i mean by that? + + $this->StudienordnungModel->addJoin('lehre.tbl_studienplan p', 'studienordnung_id'); + + $result = $this->StudienordnungModel->loadWhere([ + 'aktiv' => true, + 'studiengang_kz' => $studiengang_kz, + 'p.orgform_kurzbz !=' => 'DDP' + ]); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + if (hasData($result)) + $list = array_merge($list, getData($result)); + } + } + + } + $this->outputJson($list); + } + + /** + * @param integer $studiengang_kz + * @param integer $semester + * @param string $orgform + * + * @return void + */ + protected function getSemester($studiengang_kz, $semester, $org_form = null) + { + $link = $studiengang_kz . '/'; + if ($org_form !== null) + $link .= $org_form . '/'; + $link .= $semester . '/'; + + + $this->load->model('organisation/Gruppe_model', 'GruppeModel'); + + $this->GruppeModel->addDistinct(); + $this->GruppeModel->addSelect("CONCAT(" . $this->GruppeModel->escape($link . 'grp/') . ", gruppe_kurzbz) AS link", false); + $this->GruppeModel->addSelect("CONCAT(gruppe_kurzbz, ' (', bezeichnung, ')') AS name", false); + $this->GruppeModel->addSelect("TRUE AS leaf", false); + + $this->GruppeModel->addSelect('sort'); + $this->GruppeModel->addSelect('gruppe_kurzbz'); + + $this->GruppeModel->addOrder('sort'); + $this->GruppeModel->addOrder('gruppe_kurzbz'); + + $where = [ + 'studiengang_kz' => $studiengang_kz, + 'semester' => $semester, + 'lehre' => true, + 'sichtbar' => true, + 'aktiv' => true, + 'direktinskription' => false + ]; + + if ($org_form !== null) + $where['orgform_kurzbz'] = $org_form; + + $result = $this->GruppeModel->loadWhere($where); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + $list = getData($result) ?: []; + + + $this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz'); + + $this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", verband) AS link", false); + $this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband ORDER BY gruppe LIMIT 1)) AS name", false); + $this->StudiengangModel->addSelect("CASE WHEN MAX(gruppe)='' OR MAX(gruppe)=' ' THEN TRUE ELSE FALSE END AS leaf"); + + $this->StudiengangModel->addSelect('verband'); + + $this->StudiengangModel->addOrder('verband'); + + $this->StudiengangModel->addGroupBy('link, name, verband'); + + $where = [ + 'v.studiengang_kz' => $studiengang_kz, + 'v.semester' => $semester, + 'v.verband !=' => '', + 'v.aktiv' => true + ]; + + if ($org_form !== null && $semester) // NOTE(chris): on semester 0 show all? + $where['v.orgform_kurzbz'] = $org_form; + + $result = $this->StudiengangModel->loadWhere($where); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + $list = array_merge($list, getData($result) ?: []); + + $this->outputJson($list); + } + + /** + * @param integer $studiengang_kz + * @param integer $semester + * @param integer $verband + * @param string $orgform + * + * @return void + */ + protected function getVerband($studiengang_kz, $semester, $verband, $org_form = null) + { + $link = $studiengang_kz . '/'; + if ($org_form !== null) + $link .= $org_form . '/'; + $link .= $semester . '/'. $verband . '/'; + + + $this->StudiengangModel->addJoin('public.tbl_lehrverband v', 'studiengang_kz'); + + $this->StudiengangModel->addDistinct(); + $this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", gruppe) AS link", false); + $this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, gruppe, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband AND gruppe=v.gruppe ORDER BY gruppe LIMIT 1)) AS name", false); + $this->StudiengangModel->addSelect("TRUE AS leaf", false); + + $this->StudiengangModel->addSelect('gruppe'); + + $this->StudiengangModel->addOrder('gruppe'); + + $where = [ + 'v.studiengang_kz' => $studiengang_kz, + 'v.semester' => $semester, + 'v.verband' => $verband, + 'v.gruppe !=' => '', + 'v.aktiv' => true + ]; + + if ($org_form !== null && $semester) // NOTE(chris): on semester 0 show all? + $where['v.orgform_kurzbz'] = $org_form; + + $result = $this->StudiengangModel->loadWhere($where); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } + + $list = getData($result) ?: []; + + $this->outputJson($list); + } + + /** + * @param string $link + * + * @return array + */ + protected function getStdSem($link) + { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + /** + * TODO(chris): filter with variable: + * - $number_displayed_past_studiensemester from Variable + * - then: $stsem_obj->getPlusMinus(NULL, $number_displayed_past_studiensemester, 'ende ASC'); + */ + $result = $this->StudiensemesterModel->load(); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + $this->outputJson(getError($result)); + exit; + } + + $studiensemester = getData($result) ?: []; + $result = []; + + foreach ($studiensemester as $sem) { + $semlink = $link . $sem->studiensemester_kurzbz; + $intlink = $semlink . '/interessenten'; + $result[] = [ + 'name' => $sem->studiensemester_kurzbz, + 'link' => $semlink, + 'children' => [ + [ + 'name' => 'Interessenten', + 'link' => $intlink, + 'children' => [ + [ + 'name' => 'Bewerbung nicht abgeschickt', + 'link' => $intlink . '/bewerbungnichtabgeschickt', + 'leaf' => true + ], + [ + 'name' => 'Bewerbung abgeschickt, Status unbestätigt', + 'link' => $intlink . '/bewerbungabgeschickt', + 'leaf' => true + ], + [ + 'name' => 'ZGV erfüllt', + 'link' => $intlink . '/zgv', + 'leaf' => true + ], + [ + 'name' => 'Status bestätigt', + 'link' => $intlink . '/statusbestaetigt', + 'children' => [ + [ + 'name' => 'Nicht zum Reihungstest angemeldet', + 'link' => $intlink . '/statusbestaetigt/reihungstestnichtangemeldet', + 'leaf' => true + ], + [ + 'name' => 'Reihungstest angemeldet', + 'link' => $intlink . '/statusbestaetigt/reihungstestangemeldet', + 'leaf' => true + ] + ] + ], + [ + 'name' => 'Nicht zum Reihungstest angemeldet', + 'link' => $intlink . '/reihungstestnichtangemeldet', + 'leaf' => true + ], + [ + 'name' => 'Reihungstest angemeldet', + 'link' => $intlink . '/reihungstestangemeldet', + 'leaf' => true + ] + ] + ], + [ + 'name' => 'Bewerber', + 'link' => $semlink . '/bewerber', + 'leaf' => true + ], + [ + 'name' => 'Aufgenommen', + 'link' => $semlink . '/aufgenommen', + 'leaf' => true + ], + [ + 'name' => 'Warteliste', + 'link' => $semlink . '/warteliste', + 'leaf' => true + ], + [ + 'name' => 'Absage', + 'link' => $semlink . '/absage', + 'leaf' => true + ], + [ + 'name' => 'Incoming', + 'link' => $semlink . '/incoming', + 'leaf' => true + ] + ] + ]; + } + + return $result; + } +} diff --git a/application/views/Studentenverwaltung.php b/application/views/Studentenverwaltung.php index 96cf0974d..f156ed32a 100644 --- a/application/views/Studentenverwaltung.php +++ b/application/views/Studentenverwaltung.php @@ -21,32 +21,7 @@ ?>
- - -
-
- -
- - - - -
-
-
+
load->view('templates/FHC-Footer', $includesArray); ?> diff --git a/public/js/apps/Studentenverwaltung.js b/public/js/apps/Studentenverwaltung.js index 9507ba3f5..2fc79fbdb 100644 --- a/public/js/apps/Studentenverwaltung.js +++ b/public/js/apps/Studentenverwaltung.js @@ -15,77 +15,25 @@ * along with this program. If not, see . */ -import FhcSearchbar from "../components/searchbar/searchbar.js"; -import StvVerband from "../components/Studienverwaltung/Verband.js"; -import StvList from "../components/Studienverwaltung/List.js"; -import StvDetails from "../components/Studienverwaltung/Details.js"; -import VerticalSplit from "../components/verticalsplit/verticalsplit.js"; +import FhcStudentenverwaltung from "../components/Stv/Studentenverwaltung.js"; import fhcapifactory from "./api/fhcapifactory.js"; Vue.$fhcapi = fhcapifactory; -const app = Vue.createApp({ - components: { - FhcSearchbar, - StvVerband, - StvList, - StvDetails, - VerticalSplit - }, - data() { - return { - selected: [], - searchbaroptions: { - types: [ - "person", - "student", - "prestudent" - ], - actions: { - person: { - defaultaction: { - type: "link", - action: function(data) { - return data.profil; - } - }, - childactions: [ - { - "label": "testchildaction1", - "icon": "fas fa-check-circle", - "type": "function", - "action": function(data) { - alert('person testchildaction 01 ' + JSON.stringify(data)); - } - }, - { - "label": "testchildaction2", - "icon": "fas fa-file-csv", - "type": "function", - "action": function(data) { - alert('person testchildaction 02 ' + JSON.stringify(data)); - } - } - ] - } - } - }, - } - }, - computed: { - lastSelected() { - return this.selected[this.selected.length - 1]; - } - }, - methods: { - onSelectVerband(link) { - this.$refs.stvList.updateUrl(link); - }, - searchfunction(searchsettings) { - return Vue.$fhcapi.Search.search(searchsettings); - } - } +const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; + +const router = VueRouter.createRouter({ + history: VueRouter.createWebHistory(), + routes: [ + { path: `/${ciPath}/studentenverwaltung`, component: FhcStudentenverwaltung }, + { path: `/${ciPath}/studentenverwaltung/:id`, component: FhcStudentenverwaltung } + ] }); -app.use(primevue.config.default).mount('#main'); +const app = Vue.createApp(); + +app + .use(router) + .use(primevue.config.default) + .mount('#main'); diff --git a/public/js/components/Studienverwaltung/List.js b/public/js/components/Studienverwaltung/List.js deleted file mode 100644 index a74512d7e..000000000 --- a/public/js/components/Studienverwaltung/List.js +++ /dev/null @@ -1,69 +0,0 @@ -import {CoreFilterCmpt} from "../filter/Filter.js"; -import {CoreRESTClient} from '../../RESTClient.js'; - -export default { - components: { - CoreFilterCmpt - }, - props: { - selected: Array - }, - emits: [ - 'update:selected' - ], - data() { - return { - tabulatorOptions: { - 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', - selectable: true - }, - tabulatorEvents: [ - { - event: 'rowSelectionChanged', - handler: this.rowSelectionChanged - } - ] - } - }, - methods: { - actionNewPrestudent() { - console.log('actionNewPrestudent'); - }, - rowSelectionChanged(data) { - this.$emit('update:selected', data); - }, - updateUrl(url) { - this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url)); - console.log(CoreRESTClient._generateRouterURI(url)); - } - }, - mounted() { - }, - template: ` -
- - -
` -}; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js new file mode 100644 index 000000000..d28672f17 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2022 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import FhcSearchbar from "../searchbar/searchbar.js"; +import VerticalSplit from "../verticalsplit/verticalsplit.js"; +import StvVerband from "./Studentenverwaltung/Verband.js"; +import StvList from "./Studentenverwaltung/List.js"; +import StvDetails from "./Studentenverwaltung/Details.js"; + + +export default { + components: { + FhcSearchbar, + StvVerband, + StvList, + StvDetails, + VerticalSplit + }, + data() { + return { + selected: [], + searchbaroptions: { + types: [ + "person", + "student", + "prestudent" + ], + actions: { + person: { + defaultaction: { + type: "link", + action: function(data) { + return data.profil; + } + }, + childactions: [ + { + "label": "testchildaction1", + "icon": "fas fa-check-circle", + "type": "function", + "action": function(data) { + alert('person testchildaction 01 ' + JSON.stringify(data)); + } + }, + { + "label": "testchildaction2", + "icon": "fas fa-file-csv", + "type": "function", + "action": function(data) { + alert('person testchildaction 02 ' + JSON.stringify(data)); + } + } + ] + } + } + }, + } + }, + computed: { + lastSelected() { + return this.selected[this.selected.length - 1]; + } + }, + methods: { + onSelectVerband(link) { + this.$refs.stvList.updateUrl(link); + }, + searchfunction(searchsettings) { + return Vue.$fhcapi.Search.search(searchsettings); + } + }, + mounted() { + if (this.$route.params.id) { + this.$refs.stvList.updateUrl('components/stv/students/uid/' + this.$route.params.id); + } + }, + template: ` + +
+
+ +
+ + + + +
+
+
` +}; diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js new file mode 100644 index 000000000..6072cb3b3 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -0,0 +1,30 @@ +import DetailsDetails from './Details/Details.js'; +import DetailsNotizen from './Details/Notizen.js'; + +export default { + components: { + DetailsDetails, + DetailsNotizen + }, + props: { + student: Object + }, + data() { + return { + component: 'DetailsDetails', + tabs: { + DetailsDetails: 'Details', + DetailsNotizen: 'Notizen' + } + } + }, + template: ` +
+ + +
` +}; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Details.js new file mode 100644 index 000000000..ece956b64 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Details.js @@ -0,0 +1,87 @@ +export default { + props: { + student: Object + }, + data() { + return { + person_id: '', + bpk: '', + anrede: '', + titelpre: '', + titelpost: '', + nachname: '', + vorname: '', + vornamen: '', + wahlname: '', + gebdatum: '', + gebort: '', + gebnation: '' + } + }, + watch: { + student(n) { + this.person_id = n.person_id; + this.bpk = n.bpk; + this.anrede = n.anrede; + this.titelpre = n.titelpre; + this.titelpost = n.titelpost; + this.nachname = n.nachname; + this.vorname = n.vorname; + this.vornamen = n.vornamen; + this.wahlname = n.wahlname; + this.gebdatum = n.gebdatum; + // TODO(chris): gebdatum > datepicker + // TODO(chris): gebort & getnation? + } + }, + template: ` +
+
+ Person +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
` +}; \ No newline at end of file diff --git a/public/js/components/Studienverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js similarity index 51% rename from public/js/components/Studienverwaltung/Details.js rename to public/js/components/Stv/Studentenverwaltung/Details/Notizen.js index f119b34e4..f94468b4c 100644 --- a/public/js/components/Studienverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js @@ -3,7 +3,7 @@ export default { student: Object }, template: ` -
- {{student}} +
+ NOT YET IMPLEMENTED
` }; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js new file mode 100644 index 000000000..c6eb097d2 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -0,0 +1,114 @@ +import {CoreFilterCmpt} from "../../filter/Filter.js"; +import {CoreRESTClient} from '../../../RESTClient.js'; + +export default { + components: { + CoreFilterCmpt + }, + props: { + selected: Array + }, + emits: [ + 'update:selected' + ], + data() { + return { + tabulatorOptions: { + columns:[ + {title:"UID", field:"uid"}, + {title:"TitelPre", field:"titelpre"}, + {title:"Nachname", field:"nachname"}, + {title:"Vorname", field:"vorname"}, + {title:"Wahlname", field:"wahlname", visible:false}, + {title:"Vornamen", field:"vornamen", visible:false}, + {title:"TitelPost", field:"titelpost"}, + {title:"SVNR", field:"svnr"}, + {title:"Ersatzkennzeichen", field:"ersatzkennzeichen"}, + {title:"Geburtsdatum", field:"geburtsdatum_iso"}, + {title:"Geschlecht", field:"geschlecht"}, + {title:"Sem.", field:"semester"}, + {title:"Verb.", field:"verband"}, + {title:"Grp.", field:"gruppe"}, + {title:"Studiengang", field:"studiengang"}, + {title:"Studiengang_kz", field:"studiengang_kz", visible:false}, + {title:"Personenkennzeichen", field:"matrikelnummer"}, + {title:"PersonID", field:"person_id"}, + {title:"Status", field:"status"}, + {title:"Status Datum", field:"status_datum_iso", visible:false}, + {title:"Status Bestaetigung", field:"status_bestaetigung_iso", visible:false}, + {title:"Status Datum ISO", field:"status_datum_iso", visible:false}, + {title:"Status Bestaetigung ISO", field:"status_bestaetigung_iso", visible:false}, + {title:"EMail (Privat)", field:"mail_privat", visible:false}, + {title:"EMail (Intern)", field:"mail_intern", visible:false}, + {title:"Anmerkungen", field:"anmerkungen", visible:false}, + {title:"AnmerkungPre", field:"anmerkungpre", visible:false}, + {title:"OrgForm", field:"orgform"}, + {title:"Aufmerksamdurch", field:"orgform", visible:false}, + {title:"Gesamtpunkte", field:"punkte", visible:false}, + {title:"Aufnahmegruppe", field:"aufnahmegruppe_kurzbz", visible:false}, + {title:"Dual", field:"dual_bezeichnung", visible:false}, + {title:"Matrikelnummer", field:"matr_nr", visible:false}, + {title:"Studienplan", field:"studienplan_bezeichnung"}, + {title:"PreStudentInnenID", field:"prestudent_id"}, + {title:"Priorität", field:"priorisierung_realtiv"}, + {title:"Mentor", field:"mentor", visible:false}, + {title:"Aktiv", field:"aktiv", visible:false}, + {title:"GeburtsdatumISO", field:"geburtsdatum_iso", visible:false}, + ], + + layout: 'fitDataFill', + layoutColumnsOnNewData: false, + height: 'auto', + selectable: true, + //persistence: true + }, + tabulatorEvents: [ + { + event: 'rowSelectionChanged', + handler: this.rowSelectionChanged + } + ] + } + }, + methods: { + actionNewPrestudent() { + console.log('actionNewPrestudent'); + }, + rowSelectionChanged(data) { + this.$emit('update:selected', data); + }, + updateUrl(url) { + this.$refs.table.tabulator.on("dataProcessed", () => { + let rows = this.$refs.table.tabulator.getRows(); + if (rows.length && rows.length == 1) { + console.log(); + this.$refs.table.tabulator.selectRow(); + } + }); + + if (!this.$refs.table.tableBuilt) + this.$refs.table.tabulator.on("tableBuilt", () => { + this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url)); + }); + else + this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url)); + } + }, + mounted() { + }, + template: ` +
+ + +
` +}; \ No newline at end of file diff --git a/public/js/components/Studienverwaltung/Verband.js b/public/js/components/Stv/Studentenverwaltung/Verband.js similarity index 53% rename from public/js/components/Studienverwaltung/Verband.js rename to public/js/components/Stv/Studentenverwaltung/Verband.js index 630e583a2..b670d0875 100644 --- a/public/js/components/Studienverwaltung/Verband.js +++ b/public/js/components/Stv/Studentenverwaltung/Verband.js @@ -1,4 +1,4 @@ -import {CoreRESTClient} from '../../RESTClient.js'; +import {CoreRESTClient} from '../../../RESTClient.js'; export default { components: { @@ -17,55 +17,50 @@ export default { methods: { onExpandTreeNode(node) { if (!node.children) { - let url = ''; - if (node.data.studiengang_kz) { - url = "getStudiengang/" + node.data.studiengang_kz; - } - - if (url) { + if (node.data.link) { this.loading = true; CoreRESTClient - .get("components/Studentenverwaltung/" + url) + .get("components/stv/verband/" + node.data.link) + .then(result => result.data) .then(result => { - const subNodes = result.data.map(this.mapResultToTreeData); + const subNodes = result.map(this.mapResultToTreeData); node.children = subNodes; this.loading = false; + }) + .catch(error => { + console.error(error); }); } } }, onSelectTreeNode(node) { - if (node.link) - this.$emit('selectVerband', node.link); + if (node.data.link) + this.$emit('selectVerband', 'components/stv/students/' + node.data.link); }, mapResultToTreeData(el) { const cp = { + key: ("" + el.link).replace('/', '-'), data: el }; - if (el.studiengang_kz !== undefined) { - cp.key = el.studiengang_kz; - 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); else cp.leaf = el.leaf || false; + return cp; } }, mounted() { CoreRESTClient - .get("components/Studentenverwaltung") + .get("components/stv/verband") .then(result => result.data) .then(result => { - if(CoreRESTClient.isError(result)) { - console.error(CoreRESTClient.getError(result)); - } else if (CoreRESTClient.hasData(result)) { - this.nodes = CoreRESTClient.getData(result).map(this.mapResultToTreeData); - } + this.nodes = result.map(this.mapResultToTreeData); this.loading = false; + }) + .catch(error => { + console.error(error); }); }, template: `