diff --git a/application/controllers/api/frontend/v1/lv/Noten.php b/application/controllers/api/frontend/v1/lv/Noten.php
new file mode 100644
index 000000000..614ee6609
--- /dev/null
+++ b/application/controllers/api/frontend/v1/lv/Noten.php
@@ -0,0 +1,84 @@
+ 'student/noten:r',
+ 'getTeacherProposal' => 'student/noten:r',
+ ]);
+
+ // Load Libraries
+ $this->load->library('VariableLib', ['uid' => getAuthUID()]);
+
+ // Load Phrases
+ $this->loadPhrases([
+ 'stv',
+ 'person',
+ 'lehre'
+ ]);
+ }
+
+ public function getCertificate($lv_id, $studiensemester_kurzbz = null)
+ {
+ if (is_null($lv_id) || !ctype_digit((string)$lv_id))
+ $this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
+
+ $this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel');
+ $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
+ $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+
+ $result = $this->LehrveranstaltungModel->loadWhere([
+ 'lehrveranstaltung_id' => $lv_id
+ ]);
+
+ $lehrveranstaltung = $this->getDataOrTerminateWithError($result);
+
+ if (!$lehrveranstaltung)
+ $this->terminateWithSuccess([]);
+
+ if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
+ {
+ $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
+ }
+
+ $result = $this->ZeugnisnoteModel->getZeugnisnoten(null, $studiensemester_kurzbz, $lehrveranstaltung[0]->lehrveranstaltung_id);
+
+ $grades = $this->getDataOrTerminateWithError($result);
+
+ $this->terminateWithSuccess($grades);
+ }
+
+ public function getTeacherProposal($lv_id, $studiensemester_kurzbz = null)
+ {
+ if (is_null($lv_id) || !ctype_digit((string)$lv_id))
+ $this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
+
+ $this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel');
+ $this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
+ $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+
+ $result = $this->LehrveranstaltungModel->loadWhere([
+ 'lehrveranstaltung_id' => $lv_id
+ ]);
+
+ $lehrveranstaltung = $this->getDataOrTerminateWithError($result);
+
+ if (!$lehrveranstaltung)
+ $this->terminateWithSuccess([]);
+
+ if ($studiensemester_kurzbz !== null && !$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
+ {
+ $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
+ }
+
+ $result = $this->LvgesamtnoteModel->getLvGesamtNoten($lv_id, null, $studiensemester_kurzbz);
+
+ $grades = $this->getDataOrTerminateWithError($result);
+
+ $this->terminateWithSuccess($grades);
+ }
+
+}
diff --git a/application/controllers/api/frontend/v1/lv/Setup.php b/application/controllers/api/frontend/v1/lv/Setup.php
index d0170974f..fa5b542bf 100644
--- a/application/controllers/api/frontend/v1/lv/Setup.php
+++ b/application/controllers/api/frontend/v1/lv/Setup.php
@@ -44,6 +44,7 @@ class Setup extends FHCAPI_Controller
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
+ $this->_ci->load->helper('hlp_document');
}
public function getLETabs()
@@ -88,6 +89,18 @@ class Setup extends FHCAPI_Controller
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/LVTermine.js',
'config' => []
);
+ $tabs['noten'] = array (
+ 'title' => 'Noten',
+ 'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Noten.js',
+ 'config' => [
+ 'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
+ 'edit' => 'both', // Possible values: both|header|inline
+ 'delete' => 'inline', // Possible values: both|header|inline
+ 'documents' => 'inline', // Possible values: both|header|inline
+ 'documentslist' => gradesDocumentsList(),
+ 'semesterSelect' => false
+ ]
+ );
$this->terminateWithSuccess($tabs);
}
diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php
index bc1fbebfe..cc6c04430 100644
--- a/application/controllers/api/frontend/v1/stv/Config.php
+++ b/application/controllers/api/frontend/v1/stv/Config.php
@@ -301,6 +301,7 @@ class Config extends FHCAPI_Controller
public function student()
{
+ $this->load->helper('hlp_document');
$result = [];
$config = $this->config->item('tabs');
@@ -376,9 +377,9 @@ class Config extends FHCAPI_Controller
'config' => [
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
'edit' => 'both', // Possible values: both|header|inline
- 'delete' => 'both', // Possible values: both|header|inline
- 'documents' => 'both', // Possible values: both|header|inline
- 'documentslist' => $this->gradesDocumentsList()
+ 'delete' => 'inline', // Possible values: both|header|inline
+ 'documents' => 'inline', // Possible values: both|header|inline
+ 'documentslist' => gradesDocumentsList()
]
];
@@ -622,188 +623,6 @@ class Config extends FHCAPI_Controller
] + $this->kontoColumns();
}
- /**
- * Helper function to generate the default documentslist config for the
- * grades tab.
- *
- * The resulting array consists of elements which are associative arrays
- * that can have the following entries:
- * title (required) on the first level this can be HTML code.
- * permissioncheck (optional) an URL to an FHCAPI endpoint which returns
- * true or false.
- * link (optional) an URL that will be called if "action" and
- * "children" are not defined.
- * action (optional) an associative array that describes an
- * POST action that will be called if "children" is
- * not defined.
- * It can have the following entries:
- * - url (required) an URL to an FHCAPI endpoint.
- * - post (optional) an associative array with the POST data to
- * be sent.
- * - response (optional) a string that will be displayed on success.
- * children (optional) an array of child elements
- *
- * All strings that start with { and end with } in the URLs and the
- * actions post parameter will be replaced with the corresponding
- * attribute of the current dataset (e.G: {uid} will be replaced with the
- * uid of the current dataset)
- *
- * @return array
- */
- protected function gradesDocumentsList()
- {
- $permissioncheck = site_url("api/frontend/v1/documents/permissionAlternativeFormat/{studiengang_kz}");
-
- $title_ger = $this->p->t("global", "deutsch");
- $title_eng = $this->p->t("global", "englisch");
- $title_ff = $this->p->t("stv", "document_certificate");
- $title_lv = $this->p->t("stv", "document_coursecertificate");
-
- $link_ff = "documents/export/" .
- "zertifikat.rdf.php/" .
- "Zertifikat" .
- "?stg_kz={studiengang_kz_lv}" .
- "&uid={uid}" .
- "&ss={studiensemester_kurzbz}" .
- "&lvid={lehrveranstaltung_id}";
- $link_lv_ger = "documents/export/" .
- "lehrveranstaltungszeugnis.rdf.php/" .
- "LVZeugnis" .
- "?stg_kz={studiengang_kz}" .
- "&uid={uid}" .
- "&ss={studiensemester_kurzbz}" .
- "&lvid={lehrveranstaltung_id}";
- $link_lv_eng = "documents/export/" .
- "lehrveranstaltungszeugnis.rdf.php/" .
- "LVZeugnisEng" .
- "?stg_kz={studiengang_kz}" .
- "&uid={uid}" .
- "&ss={studiensemester_kurzbz}" .
- "&lvid={lehrveranstaltung_id}";
-
- $archive_url = "api/frontend/v1/documents/archiveSigned";
- $archive_response = $this->p->t("stv", "document_signed_and_archived");
- $archive_post_ff = [
- "xml" => "zertifikat.rdf.php",
- "xsl" => "Zertifikat",
- "stg_kz" => "{studiengang_kz_lv}",
- "uid" => "{uid}",
- "ss" => "{studiensemester_kurzbz}",
- "lvid" => "{lehrveranstaltung_id}"
- ];
- $archive_post_lv_ger = [
- "xml" => "lehrveranstaltungszeugnis.rdf.php",
- "xsl" => "LVZeugnis",
- "stg_kz" => "{studiengang_kz}",
- "uid" => "{uid}",
- "ss" => "{studiensemester_kurzbz}",
- "lvid" => "{lehrveranstaltung_id}"
- ];
- $archive_post_lv_eng = [
- "xml" => "lehrveranstaltungszeugnis.rdf.php",
- "xsl" => "LVZeugnisEng",
- "stg_kz" => "{studiengang_kz}",
- "uid" => "{uid}",
- "ss" => "{studiensemester_kurzbz}",
- "lvid" => "{lehrveranstaltung_id}"
- ];
-
- $list = [
- [
- 'title' => '',
- 'children' => [
- [
- 'title' => $title_ff,
- 'link' => site_url($link_ff)
- ],
- [
- 'title' => $title_lv,
- 'children' => [
- [
- 'title' => $title_ger,
- 'link' => site_url($link_lv_ger),
- 'children' => [
- [
- 'title' => 'PDF',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_ger)
- ],
- [
- 'title' => 'DOC',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_ger . "&output=doc")
- ],
- [
- 'title' => 'ODT',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_ger . "&output=odt")
- ]
- ]
- ],
- [
- 'title' => $title_eng,
- 'link' => site_url($link_lv_eng),
- 'children' => [
- [
- 'title' => 'PDF',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_eng)
- ],
- [
- 'title' => 'DOC',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_eng . "&output=doc")
- ],
- [
- 'title' => 'ODT',
- 'permissioncheck' => $permissioncheck,
- 'link' => site_url($link_lv_eng . "&output=odt")
- ]
- ]
- ]
- ]
- ]
- ]
- ],
- [
- 'title' => '',
- 'children' => [
- [
- 'title' => $title_ff,
- 'action' => [
- 'url' => site_url($archive_url),
- 'post' => $archive_post_ff,
- 'response' => $archive_response
- ]
- ],
- [
- 'title' => $title_lv,
- 'children' => [
- [
- 'title' => $title_ger,
- 'action' => [
- 'url' => site_url($archive_url),
- 'post' => $archive_post_lv_ger,
- 'response' => $archive_response
- ]
- ],
- [
- 'title' => $title_eng,
- 'action' => [
- 'url' => site_url($archive_url),
- 'post' => $archive_post_lv_eng,
- 'response' => $archive_response
- ]
- ]
- ]
- ]
- ]
- ]
- ];
-
- return $list;
- }
-
/**
* Sort tab list
*
diff --git a/application/helpers/hlp_document_helper.php b/application/helpers/hlp_document_helper.php
new file mode 100644
index 000000000..5b457fe82
--- /dev/null
+++ b/application/helpers/hlp_document_helper.php
@@ -0,0 +1,188 @@
+load->library('PhrasesLib', array('stv'), 'p');
+
+ $permissioncheck = site_url("api/frontend/v1/documents/permissionAlternativeFormat/{studiengang_kz}");
+
+ $title_ger = $ci->p->t("global", "deutsch");
+ $title_eng = $ci->p->t("global", "englisch");
+ $title_ff = $ci->p->t("stv", "document_certificate");
+ $title_lv = $ci->p->t("stv", "document_coursecertificate");
+
+ $link_ff = "documents/export/" .
+ "zertifikat.rdf.php/" .
+ "Zertifikat" .
+ "?stg_kz={studiengang_kz_lv}" .
+ "&uid={uid}" .
+ "&ss={studiensemester_kurzbz}" .
+ "&lvid={lehrveranstaltung_id}";
+ $link_lv_ger = "documents/export/" .
+ "lehrveranstaltungszeugnis.rdf.php/" .
+ "LVZeugnis" .
+ "?stg_kz={studiengang_kz}" .
+ "&uid={uid}" .
+ "&ss={studiensemester_kurzbz}" .
+ "&lvid={lehrveranstaltung_id}";
+ $link_lv_eng = "documents/export/" .
+ "lehrveranstaltungszeugnis.rdf.php/" .
+ "LVZeugnisEng" .
+ "?stg_kz={studiengang_kz}" .
+ "&uid={uid}" .
+ "&ss={studiensemester_kurzbz}" .
+ "&lvid={lehrveranstaltung_id}";
+
+ $archive_url = "api/frontend/v1/documents/archiveSigned";
+ $archive_response = $ci->p->t("stv", "document_signed_and_archived");
+ $archive_post_ff = [
+ "xml" => "zertifikat.rdf.php",
+ "xsl" => "Zertifikat",
+ "stg_kz" => "{studiengang_kz_lv}",
+ "uid" => "{uid}",
+ "ss" => "{studiensemester_kurzbz}",
+ "lvid" => "{lehrveranstaltung_id}"
+ ];
+ $archive_post_lv_ger = [
+ "xml" => "lehrveranstaltungszeugnis.rdf.php",
+ "xsl" => "LVZeugnis",
+ "stg_kz" => "{studiengang_kz}",
+ "uid" => "{uid}",
+ "ss" => "{studiensemester_kurzbz}",
+ "lvid" => "{lehrveranstaltung_id}"
+ ];
+ $archive_post_lv_eng = [
+ "xml" => "lehrveranstaltungszeugnis.rdf.php",
+ "xsl" => "LVZeugnisEng",
+ "stg_kz" => "{studiengang_kz}",
+ "uid" => "{uid}",
+ "ss" => "{studiensemester_kurzbz}",
+ "lvid" => "{lehrveranstaltung_id}"
+ ];
+
+ $list = [
+ [
+ 'title' => '',
+ 'children' => [
+ [
+ 'title' => $title_ff,
+ 'link' => site_url($link_ff)
+ ],
+ [
+ 'title' => $title_lv,
+ 'children' => [
+ [
+ 'title' => $title_ger,
+ 'link' => site_url($link_lv_ger),
+ 'children' => [
+ [
+ 'title' => 'PDF',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_ger)
+ ],
+ [
+ 'title' => 'DOC',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_ger . "&output=doc")
+ ],
+ [
+ 'title' => 'ODT',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_ger . "&output=odt")
+ ]
+ ]
+ ],
+ [
+ 'title' => $title_eng,
+ 'link' => site_url($link_lv_eng),
+ 'children' => [
+ [
+ 'title' => 'PDF',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_eng)
+ ],
+ [
+ 'title' => 'DOC',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_eng . "&output=doc")
+ ],
+ [
+ 'title' => 'ODT',
+ 'permissioncheck' => $permissioncheck,
+ 'link' => site_url($link_lv_eng . "&output=odt")
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ 'title' => '',
+ 'children' => [
+ [
+ 'title' => $title_ff,
+ 'action' => [
+ 'url' => site_url($archive_url),
+ 'post' => $archive_post_ff,
+ 'response' => $archive_response
+ ]
+ ],
+ [
+ 'title' => $title_lv,
+ 'children' => [
+ [
+ 'title' => $title_ger,
+ 'action' => [
+ 'url' => site_url($archive_url),
+ 'post' => $archive_post_lv_ger,
+ 'response' => $archive_response
+ ]
+ ],
+ [
+ 'title' => $title_eng,
+ 'action' => [
+ 'url' => site_url($archive_url),
+ 'post' => $archive_post_lv_eng,
+ 'response' => $archive_response
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ return $list;
+}
diff --git a/application/models/education/Lvgesamtnote_model.php b/application/models/education/Lvgesamtnote_model.php
index c30045ff0..0a7638869 100644
--- a/application/models/education/Lvgesamtnote_model.php
+++ b/application/models/education/Lvgesamtnote_model.php
@@ -29,10 +29,14 @@ class Lvgesamtnote_model extends DB_Model
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
$this->addSelect("lv.studiengang_kz");
$this->addSelect("UPPER(stg.typ || stg.kurzbz) AS studiengang");
+ $this->addSelect("person.vorname");
+ $this->addSelect("person.nachname");
$this->addJoin("lehre.tbl_note n", "note");
$this->addJoin("lehre.tbl_lehrveranstaltung lv", "lehrveranstaltung_id");
$this->addJoin("public.tbl_studiengang stg", "studiengang_kz");
+ $this->addJoin("public.tbl_benutzer benutzer", "uid = student_uid", "LEFT");
+ $this->addJoin("public.tbl_person person", "person_id", "LEFT");
$this->db->where($this->dbTable . ".freigabedatum <", "NOW()", false);
diff --git a/application/models/education/Zeugnisnote_model.php b/application/models/education/Zeugnisnote_model.php
index f32713dec..694c5d5c0 100644
--- a/application/models/education/Zeugnisnote_model.php
+++ b/application/models/education/Zeugnisnote_model.php
@@ -148,7 +148,7 @@ class Zeugnisnote_model extends DB_Model
*
* @return object
*/
- public function getZeugnisnoten($student_uid, $studiensemester_kurzbz)
+ public function getZeugnisnoten($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id = null)
{
$params = array();
$where='';
@@ -163,6 +163,11 @@ class Zeugnisnote_model extends DB_Model
$where.=" AND vw_student_lehrveranstaltung.studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
+ if($lehrveranstaltung_id != null)
+ {
+ $where .= " AND vw_student_lehrveranstaltung.lehrveranstaltung_id = ?";
+ $params[] = $lehrveranstaltung_id;
+ }
$where2='';
@@ -176,6 +181,11 @@ class Zeugnisnote_model extends DB_Model
$where2 .= " AND studiensemester_kurzbz= ?";
$params[] = $studiensemester_kurzbz;
}
+ if($lehrveranstaltung_id != null)
+ {
+ $where2 .=" AND lehrveranstaltung_id = ?";
+ $params[] = $lehrveranstaltung_id;
+ }
$qry = "SELECT
a.*,
@@ -188,7 +198,10 @@ class Zeugnisnote_model extends DB_Model
lv.semester AS semester_lv,
lv.ects AS ects_lv,
lv.zeugnis,
- lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english
+ lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english,
+ s.verband,
+ person.vorname,
+ person.nachname
FROM (
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
@@ -231,6 +244,8 @@ class Zeugnisnote_model extends DB_Model
ORDER BY sort
) a
LEFT JOIN public.tbl_student s ON (a.uid = s.student_uid)
+ LEFT JOIN public.tbl_benutzer benutzer ON benutzer.uid = s.student_uid
+ LEFT JOIN public.tbl_person person ON benutzer.person_id = person.person_id
LEFT JOIN public.tbl_studiengang stg1 ON (s.studiengang_kz = stg1.studiengang_kz)
LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
diff --git a/public/js/api/lehrveranstaltung/noten.js b/public/js/api/lehrveranstaltung/noten.js
new file mode 100644
index 000000000..fdcbb6f1e
--- /dev/null
+++ b/public/js/api/lehrveranstaltung/noten.js
@@ -0,0 +1,25 @@
+import Grades from '../factory/stv/grades.js';
+
+export default {
+ ...Grades,
+ getCertificate(lv_id, studiensemester_kurzbz) {
+ let url = 'api/frontend/v1/lv/noten/getCertificate/' + encodeURIComponent(lv_id);
+ if (!!studiensemester_kurzbz) {
+ url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
+ }
+ return {
+ method: 'get',
+ url: url
+ };
+ },
+ getTeacherProposal(lv_id, studiensemester_kurzbz) {
+ let url = 'api/frontend/v1/lv/noten/getTeacherProposal/' + encodeURIComponent(lv_id);
+ if (!!studiensemester_kurzbz) {
+ url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
+ }
+ return {
+ method: 'get',
+ url: url
+ };
+ },
+};
\ No newline at end of file
diff --git a/public/js/components/LVVerwaltung/Setup/Tabs.js b/public/js/components/LVVerwaltung/Setup/Tabs.js
index 5481a79af..5425b5169 100644
--- a/public/js/components/LVVerwaltung/Setup/Tabs.js
+++ b/public/js/components/LVVerwaltung/Setup/Tabs.js
@@ -53,9 +53,11 @@ export default {