diff --git a/application/controllers/api/frontend/v1/lv/Gruppe.php b/application/controllers/api/frontend/v1/lv/Gruppe.php
index daebe8a61..f60d3a99a 100644
--- a/application/controllers/api/frontend/v1/lv/Gruppe.php
+++ b/application/controllers/api/frontend/v1/lv/Gruppe.php
@@ -15,6 +15,7 @@ class Gruppe extends FHCAPI_Controller
'getBenutzerSearch' => ['admin:r', 'assistenz:r'],
'getAllSearch' => ['admin:r', 'assistenz:r'],
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
+ 'getGruppe' => ['admin:r', 'assistenz:r'],
]);
$this->_ci = &get_instance();
@@ -67,7 +68,7 @@ class Gruppe extends FHCAPI_Controller
$this->checkPermission($lehreinheit_id);
- $result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, !($lehrverband === 'false'));
+ $result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, $lehrverband === true || $lehrverband === 'true');
if (isError($result))
$this->terminateWithError(getError($result));
@@ -75,6 +76,71 @@ class Gruppe extends FHCAPI_Controller
$this->terminateWithSuccess($result);
}
+ public function getGruppe()
+ {
+ $lehrverband = $this->input->post('lehrverband');
+
+ $gruppen_result = array();
+
+ if ($lehrverband === false)
+ {
+ $gruppen_result = $this->_ci->GruppeModel->loadWhere(array(
+ 'studiengang_kz' => $this->input->post('stg_kz'),
+ 'gruppe_kurzbz' => $this->input->post('gruppe_kurzbz'),
+ 'aktiv' => true
+ ));
+ }
+ else if ($lehrverband === true)
+ {
+
+ if (!isEmptyString($this->input->post('verband')))
+ {
+ $this->LehrverbandModel->db->where('verband', $this->input->post('verband'));
+ }
+ else
+ {
+ $this->LehrverbandModel->db->group_start();
+ $this->LehrverbandModel->db->where("trim(verband) = ''");
+ $this->LehrverbandModel->db->or_where("verband IS NULL");
+ $this->LehrverbandModel->db->group_end();
+ }
+
+ if (!isEmptyString($this->input->post('gruppe')))
+ {
+ $this->LehrverbandModel->db->where('gruppe', $this->input->post('gruppe'));
+ }
+ else
+ {
+ $this->LehrverbandModel->db->group_start();
+ $this->LehrverbandModel->db->where("trim(gruppe) = ''");
+ $this->LehrverbandModel->db->or_where("gruppe IS NULL");
+ $this->LehrverbandModel->db->group_end();
+ }
+
+ if (!isEmptyString((string)$this->input->post('semester')))
+ {
+ $this->LehrverbandModel->db->where('semester', $this->input->post('semester'));
+ }
+ else
+ {
+
+ $this->LehrverbandModel->db->group_start();
+ $this->LehrverbandModel->db->where("semester = ''");
+ $this->LehrverbandModel->db->or_where("semester IS NULL");
+ $this->LehrverbandModel->db->group_end();
+ }
+
+ $gruppen_result = $this->LehrverbandModel->loadWhere(array('studiengang_kz' => $this->input->post('stg_kz'), 'aktiv' => true));
+ }
+
+ if (!hasData($gruppen_result))
+ return $this->terminateWithError('No group found');
+
+ $gruppen_array = getData($gruppen_result)[0];
+
+ $this->terminateWithSuccess($gruppen_array->gid);
+ }
+
public function getByLehreinheit($lehreinheit_id = null)
{
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id))
diff --git a/application/controllers/api/frontend/v1/lv/StgTree.php b/application/controllers/api/frontend/v1/lv/StgTree.php
index 8272da978..f36d4030f 100644
--- a/application/controllers/api/frontend/v1/lv/StgTree.php
+++ b/application/controllers/api/frontend/v1/lv/StgTree.php
@@ -25,7 +25,25 @@ class StgTree extends FHCAPI_Controller
return $this->_outputAuthError([$method => ['admin:r', 'assistenz:r']]);
}
- return $this->getStudiengang($method);
+ $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]);
+ }
+
+
+
show_404();
}
@@ -64,16 +82,27 @@ class StgTree extends FHCAPI_Controller
$this->terminateWithSuccess($list);
}
- protected function getStudiengang($studiengang_kz)
+ 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("TRUE AS leaf", 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->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
@@ -111,6 +140,115 @@ class StgTree extends FHCAPI_Controller
$list = array_merge($list, $result);
}
}
+ $this->terminateWithSuccess($list);
+ }
+
+ 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->addSelect($this->GruppeModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
+
+ $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);
+
+ $list = $this->getDataOrTerminateWithError($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($this->StudiengangModel->escape($semester) . ' AS semester');
+ $this->StudiengangModel->addSelect('verband');
+ $this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
+
+ $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);
+ $result = $this->getDataOrTerminateWithError($result);
+
+ $list = array_merge($list, $result);
+
+ $this->terminateWithSuccess($list);
+ }
+
+ 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('v.semester');
+ $this->StudiengangModel->addSelect('v.verband');
+ $this->StudiengangModel->addSelect('gruppe');
+ $this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
+
+ $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)
+ $where['v.orgform_kurzbz'] = $org_form;
+
+ $result = $this->StudiengangModel->loadWhere($where);
+
+ $list = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($list);
}
diff --git a/application/models/education/Lehreinheitgruppe_model.php b/application/models/education/Lehreinheitgruppe_model.php
index dee8bbfe1..139d639cb 100644
--- a/application/models/education/Lehreinheitgruppe_model.php
+++ b/application/models/education/Lehreinheitgruppe_model.php
@@ -341,7 +341,7 @@ class Lehreinheitgruppe_model extends DB_Model
$this->db->where('lehreinheit_id', $lehreinheit_id);
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
- if (!isEmptyString($gruppen_array->semester))
+ if (!isEmptyString((string)$gruppen_array->semester))
{
$this->db->where('semester', $gruppen_array->semester);
}
@@ -444,30 +444,37 @@ class Lehreinheitgruppe_model extends DB_Model
)
ELSE tbl_gruppe.beschreibung
END AS beschreibung");
- $this->addSelect("CASE
- WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
- (
- SELECT EXISTS (
- SELECT 1
- FROM lehre.tbl_stundenplandev
- WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
- AND studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
- AND semester = tbl_lehreinheitgruppe.semester
- AND TRIM(COALESCE(verband, '')) = TRIM(tbl_lehreinheitgruppe.verband)
- AND TRIM(COALESCE(gruppe, '')) = TRIM(tbl_lehreinheitgruppe.gruppe)
- AND (gruppe_kurzbz IS NULL OR gruppe_kurzbz = '')
- )
- )
- ELSE
+ $this->addSelect("
+ CASE
+ WHEN trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, '')) = '' THEN
(
SELECT EXISTS (
SELECT 1
- FROM lehre.tbl_stundenplandev
- WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
- AND gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
+ FROM lehre.tbl_stundenplandev sp
+ WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
+ AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
+ AND sp.semester = tbl_lehreinheitgruppe.semester
+ AND trim(COALESCE(sp.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
+ AND trim(COALESCE(sp.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
+ AND trim(COALESCE(sp.gruppe_kurzbz, '')) = ''
)
)
- END AS verplant");
+ ELSE
+ (
+ SELECT EXISTS (
+ SELECT 1
+ FROM lehre.tbl_stundenplandev sp
+ WHERE sp.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
+ AND sp.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
+ AND sp.semester = tbl_lehreinheitgruppe.semester
+ AND trim(COALESCE(sp.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
+ AND trim(COALESCE(sp.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
+ AND trim(COALESCE(sp.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))
+ )
+ )
+ END AS verplant
+ ");
+
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
diff --git a/public/css/Lvverwaltung.css b/public/css/Lvverwaltung.css
index 6e0f4c760..b8152d39a 100644
--- a/public/css/Lvverwaltung.css
+++ b/public/css/Lvverwaltung.css
@@ -38,3 +38,9 @@ textarea[name="anmerkung"] {
{
border-color: black;
}
+
+.node-verband {
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+}
diff --git a/public/js/api/lehrveranstaltung/gruppe.js b/public/js/api/lehrveranstaltung/gruppe.js
index 44340bec7..23db4c069 100644
--- a/public/js/api/lehrveranstaltung/gruppe.js
+++ b/public/js/api/lehrveranstaltung/gruppe.js
@@ -18,6 +18,14 @@ export default {
params: newData
};
},
+ getGruppe(gruppe)
+ {
+ return {
+ method: 'post',
+ url: '/api/frontend/v1/lv/gruppe/getGruppe/',
+ params: gruppe
+ };
+ },
getByLehreinheit(lehreinheit_id)
{
return {
diff --git a/public/js/components/LVVerwaltung/Details/Gruppen.js b/public/js/components/LVVerwaltung/Details/Gruppen.js
index 024bf6468..5244136cc 100644
--- a/public/js/components/LVVerwaltung/Details/Gruppen.js
+++ b/public/js/components/LVVerwaltung/Details/Gruppen.js
@@ -2,6 +2,7 @@ import {CoreFilterCmpt} from "../../filter/Filter.js";
import FormForm from '../../Form/Form.js';
import FormInput from '../../Form/Input.js';
import ApiGruppe from "../../../api/lehrveranstaltung/gruppe.js";
+import drop from '../../../directives/drop.js';
export default{
name: "LVGruppen",
components: {
@@ -9,6 +10,9 @@ export default{
FormForm,
FormInput
},
+ directives: {
+ drop
+ },
props: {
lehreinheit_id: Number
},
@@ -187,28 +191,48 @@ export default{
this.reload();
})
},
+ onDropVerband(node, gruppe) {
+ this.$api.call(ApiGruppe.getGruppe(gruppe))
+ .then(result => result.data)
+ .then(result => {
+
+ let newData = {
+ 'gid': result,
+ 'lehreinheit_id': this.lehreinheit_id,
+ 'lehrverband': gruppe.lehrverband,
+ }
+ this.$api.call(ApiGruppe.add(newData))
+ .then(result => {
+ this.reload()
+ })
+ });
+
+ },
+
},
template: `
-