From 91e43bbc076afde26875db1e48c1ae0632cbd209 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Fri, 10 Mar 2023 09:28:57 +0100 Subject: [PATCH] Documents first draft --- application/controllers/Cis/Documents.php | 134 ++++++++++++++++++ application/models/crm/Konto_model.php | 29 ++++ .../models/crm/Prestudentstatus_model.php | 71 ++++++++++ application/views/Cis/Documents.php | 99 +++++++++++++ system/dbupdate_3.4/dbupdate_dashboard.php | 2 +- system/phrasesupdate.php | 60 ++++++++ 6 files changed, 394 insertions(+), 1 deletion(-) create mode 100644 application/controllers/Cis/Documents.php create mode 100644 application/views/Cis/Documents.php diff --git a/application/controllers/Cis/Documents.php b/application/controllers/Cis/Documents.php new file mode 100644 index 000000000..98327e6f6 --- /dev/null +++ b/application/controllers/Cis/Documents.php @@ -0,0 +1,134 @@ + ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions? + 'Semester' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions? + ]); + + $this->loadPhrases([ + 'global', + 'tools' + ]); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + * @param string $stsem + * @return void + */ + public function index($stsem = null) + { + return $this->Semester($stsem); + } + + /** + * @param string $stsem + * @return void + */ + public function Semester($stsem = null) + { + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('crm/Konto_model', 'KontoModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $uid = getAuthUID(); + $studiengaenge = []; + + $stati = $this->PrestudentstatusModel->loadWhereUid($uid, null, true); + if (isError($stati)) + return $this->view->load('errors/html/error_db.php', [ + 'heading' => 'Database Error', + 'message' => getError($stati) + ]); + $stati = getData($stati); + if (!$stati) + return $this->view->load('errors/html/error_general.php', [ + 'heading' => 'User ist kein Student', + 'message' => 'Es konnten keine Studiensemester gefunden werden in denen der User als Student inskripiert ist' + ]); + + $stsemArray = []; + foreach ($stati as $status) { + if (!isset($studiengaenge[$status->studiengang_kz])) { + $stg = $this->StudiengangModel->load($status->studiengang_kz); + if (isError($stg)) + return $this->view->load('errors/html/error_db.php', [ + 'heading' => 'Database Error', + 'message' => getError($stg) + ]); + $stg = getData($stg); + if (!$stg) + return $this->view->load('errors/html/error_db.php', [ + 'heading' => 'Database Error', + 'message' => 'No Studiengang found for studiengang_kz ' . $status->studiengang_kz + ]); + $studiengaenge[$status->studiengang_kz] = current($stg); + } + if (!isset($stsemArray[$status->studiensemester_kurzbz])) + $stsemArray[$status->studiensemester_kurzbz] = []; + // TODO(chris): maybe just use prestudent_id? + $stsemArray[$status->studiensemester_kurzbz][] = $status; + } + + $hasSemester = true; + $inskriptionsbestaetigungen = []; + + if ($stsem && !isset($stsemArray[$stsem])) { + $hasSemester = false; + } else { + if (!$stsem) + $stsem = end($stsemArray); + + #$stsemArray[$stsem] = array_unique($stsemArray[$stsem]); + + $buchungstypen = implode('\',\'', defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : []); + + foreach ($stsemArray[$stsem] as $status) { + // NOTE(chris): multiple prestudentstatus for prestudent and semester + if (isset($inskriptionsbestaetigungen[$status->studiengang_kz])) + continue; + + $inskriptionsbestaetigungen[$status->studiengang_kz] = (boolean) getData($this->KontoModel->checkStudienbeitragFromPrestudent($status->prestudent_id, $stsem, $buchungstypen)); + } + } + + + // TODO(chris): in array stsem stsemArray: + // TODO(chris): - inskriptionsbestaetigung (konto) + // TODO(chris): - CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN? studienbuchblatt + // TODO(chris): - CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN? studienerfolgsbestaetigung + // TODO(chris): else: msg + + // TODO(chris): CIS_DOKUMENTE_SELFSERVICE?: ...abschlussdokumente (akte) + + $stsemArray = array_keys($stsemArray); + if (!$hasSemester) + array_unshift($stsemArray, $stsem); + + $this->load->view('Cis/Documents', [ + 'uid' => $uid, + 'stsem' => $stsem, + 'stsemArray' => $stsemArray, + 'hasSemester' => $hasSemester, + 'studiengaenge' => $studiengaenge, + 'inskriptionsbestaetigungen' => $inskriptionsbestaetigungen, + 'studienbuchblatt' => defined('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN') && CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN, + 'studienerfolgsbestaetigung' => defined('CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN') && CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN + ]); + } + +} diff --git a/application/models/crm/Konto_model.php b/application/models/crm/Konto_model.php index 4b2a259c9..31cb31551 100644 --- a/application/models/crm/Konto_model.php +++ b/application/models/crm/Konto_model.php @@ -123,4 +123,33 @@ class Konto_model extends DB_Model return $this->execQuery($query); } + + /** + * @param integer $prestudent_id + * @param string $stsem + * @param array $buchungstypen + * + * @return stdClass + */ + public function checkStudienbeitragFromPrestudent($prestudent_id, $stsem, $buchungstypen) + { + $this->addSelect($this->dbTable . '.buchungsnr'); + $this->addSelect($this->dbTable . '.buchungsdatum'); + + $this->addJoin('public.tbl_prestudent s', $this->dbTable . '.person_id=s.person_id AND ' . $this->dbTable . '.studiengang_kz=s.studiengang_kz'); + + $this->db->where_in('buchungstyp_kurzbz', $buchungstypen); + $this->db->where('0 >= ( + SELECT sum(betrag) + FROM ' . $this->dbTable . ' skonto + WHERE skonto.buchungsnr = ' . $this->dbTable . '.buchungsnr_verweis + OR skonto.buchungsnr_verweis = ' . $this->dbTable . '.buchungsnr_verweis + )', null, false); + + return $this->loadWhere([ + 'prestudent_id' => $prestudent_id, + 'studiensemester_kurzbz' => $stsem + ]); + } + } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index f39a41fda..859e9a375 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -13,6 +13,77 @@ class Prestudentstatus_model extends DB_Model $this->hasSequence = false; } + /** + * loadWhereUid + * + * loads all rows for a student_uid + * + * @param string $uid + * @param array $where Optional. Default empty array + * @param boolean $withPrestudent Optional. Default true + * + * @return stdClass + */ + public function loadWhereUid($uid, $where = null, $withPrestudent = false) + { + $this->addSelect($this->dbTable . '.*'); + $this->addJoin('public.tbl_student', 'prestudent_id'); + + if ($withPrestudent) { + $this->addJoin('public.tbl_prestudent s', 'prestudent_id'); + $this->addSelect('s.aufmerksamdurch_kurzbz'); + $this->addSelect('s.person_id'); + $this->addSelect('s.studiengang_kz'); + $this->addSelect('s.berufstaetigkeit_code'); + $this->addSelect('s.ausbildungcode'); + $this->addSelect('s.zgv_code'); + $this->addSelect('s.zgvort'); + $this->addSelect('s.zgvdatum'); + $this->addSelect('s.zgvmas_code'); + $this->addSelect('s.zgvmaort'); + $this->addSelect('s.zgvmadatum'); + $this->addSelect('s.aufnahmeschluessel'); + $this->addSelect('s.facheinschlberuf'); + $this->addSelect('s.reihungstest_id'); + $this->addSelect('s.anmeldungreihungstest'); + $this->addSelect('s.reihungstestangetreten'); + $this->addSelect('s.rt_gesamtpunkte'); + $this->addSelect('s.bismelden'); + $this->addSelect('s.dual'); + $this->addSelect('s.rt_punkte1'); + $this->addSelect('s.rt_punkte2'); + $this->addSelect('s.ausstellungsstaat'); + $this->addSelect('s.rt_punkte3'); + $this->addSelect('s.zgvdoktor_code'); + $this->addSelect('s.zgvdoktorort'); + $this->addSelect('s.zgvdoktordatum'); + $this->addSelect('s.mentor'); + $this->addSelect('s.zgvnation'); + $this->addSelect('s.zgvmanation'); + $this->addSelect('s.zgvdoktornation'); + $this->addSelect('s.gsstudientyp_kurzbz'); + $this->addSelect('s.aufnahmegruppe_kurzbz'); + $this->addSelect('s.udf_values'); + $this->addSelect('s.priorisierung'); + $this->addSelect('s.foerderrelevant'); + $this->addSelect('s.standort_code'); + $this->addSelect('s.zgv_erfuellt'); + $this->addSelect('s.zgvmas_erfuellt'); + $this->addSelect('s.zgvdoktor_erfuellt'); + } + + + $this->addOrder('datum'); + $this->addOrder('insertamum'); + + if (!$where) + $where = []; + + $where['student_uid'] = $uid; + + return $this->loadWhere($where); + } + /** * getLastStatus */ diff --git a/application/views/Cis/Documents.php b/application/views/Cis/Documents.php new file mode 100644 index 000000000..f927bc053 --- /dev/null +++ b/application/views/Cis/Documents.php @@ -0,0 +1,99 @@ +load->view('templates/CISHTML-Header', $includesArray); +?> + +
+

Documents

+
+
+ +
+ + +

p->t('tools', 'inskriptionsbestaetigung'); ?>

+ + +

p->t('tools', 'studienbuchblatt'); ?>

+ + + +

p->t('tools', 'studienerfolgsbestaetigung'); ?>

+ + + + + + TODO(chris): IMPLEMENT! + +
+ +load->view('templates/CISHTML-Footer', $includesArray); ?> diff --git a/system/dbupdate_3.4/dbupdate_dashboard.php b/system/dbupdate_3.4/dbupdate_dashboard.php index 22c2ef4cf..dcd0e6600 100644 --- a/system/dbupdate_3.4/dbupdate_dashboard.php +++ b/system/dbupdate_3.4/dbupdate_dashboard.php @@ -25,7 +25,7 @@ if (! defined('DB_NAME')) exit('No direct script access allowed'); if (($result = $db->db_query("SELECT schema_name FROM information_schema.schemata WHERE schema_name='dashboard'"))) { if ($db->db_num_rows($result) == 0) - { + {// TODO(chris): Rechte "Web"? $qry = << 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'tools', + 'phrase' => 'keinStatusImStudiensemester', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Für das übergebene Studiensemester {stsem} existiert kein Status. Bitte wählen Sie ein gültiges Studiensemester aus dem DropDown.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No status found for {stsem}. Please select a valid semester from the dropdown.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'tools', + 'phrase' => 'inskriptionsbestaetigung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Studienbestätigung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Enrollment Confirmation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'tools', + 'phrase' => 'studienbeitragFuerSSNochNichtBezahlt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Studienbeitrag für das {stsem} noch nicht bezahlt', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'tuition fee for semester {stsem} not yet paid', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) );