diff --git a/application/controllers/crm/Statusgrund.php b/application/controllers/crm/Statusgrund.php index 344ac06dc..3c7e43736 100644 --- a/application/controllers/crm/Statusgrund.php +++ b/application/controllers/crm/Statusgrund.php @@ -129,6 +129,7 @@ class Statusgrund extends Auth_Controller $aktiv = $this->input->post("aktiv") != null && $this->input->post("aktiv") == "on" ? true : false; $bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig"); $beschreibung = $this->input->post("beschreibung"); + $statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz"); for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++) { @@ -177,7 +178,8 @@ class Statusgrund extends Auth_Controller $data = array( "aktiv" => $aktiv, "bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig, - "beschreibung" => $beschreibung + "beschreibung" => $beschreibung, + "statusgrund_kurzbz" => $statusgrund_kurzbz ); $statusgrund = $this->StatusgrundModel->update($statusgrund_id, $data); @@ -196,6 +198,7 @@ class Statusgrund extends Auth_Controller $bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig"); $beschreibung = $this->input->post("beschreibung"); $status_kurzbz = $this->input->post("status_kurzbz"); + $statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz"); for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++) { @@ -245,7 +248,8 @@ class Statusgrund extends Auth_Controller "status_kurzbz" => $status_kurzbz, "aktiv" => $aktiv, "bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig, - "beschreibung" => $beschreibung + "beschreibung" => $beschreibung, + "statusgrund_kurzbz" => $statusgrund_kurzbz ); $statusgrund = $this->StatusgrundModel->insert($data); diff --git a/application/controllers/jobs/AnrechnungJob.php b/application/controllers/jobs/AnrechnungJob.php index 09fe9a8af..f92410dbc 100644 --- a/application/controllers/jobs/AnrechnungJob.php +++ b/application/controllers/jobs/AnrechnungJob.php @@ -16,7 +16,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class AnrechnungJob extends JOB_Controller { const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht'; - + const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL'; @@ -30,7 +30,7 @@ class AnrechnungJob extends JOB_Controller $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); - + $this->load->helper('url'); $this->load->helper('hlp_sancho_helper'); } @@ -94,7 +94,7 @@ class AnrechnungJob extends JOB_Controller } $this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt)); } - + /** * Deletes Zeugnisnoten 'angerechnet', when Anrechnung is rejected afterwards. * E.g., when STGL first accepts, then withdraws and finally rejects the approvement. @@ -102,7 +102,7 @@ class AnrechnungJob extends JOB_Controller public function deleteAnrechnungGrades() { $this->logInfo('Start AnrechnungJob to delete Grades'); - + // Get all Zeungisnoten, // WHERE note is angerechnet // AND Anrechnung was rejected AFTER the Zeugnisnote was created @@ -127,15 +127,15 @@ class AnrechnungJob extends JOB_Controller AND status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ' ORDER BY status.anrechnung_id, status.insertamum DESC '; - + $db = new DB_Model(); $result = $db->execReadOnlyQuery($qry); $cnt = 0; - + if (hasData($result)) { $this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel'); - + foreach (getData($result) as $row) { // Delete Zeugnisnote @@ -144,20 +144,20 @@ class AnrechnungJob extends JOB_Controller 'student_uid' => $row->student_uid, 'studiensemester_kurzbz' => $row->studiensemester_kurzbz )); - + // Count up $cnt++; } } - + $this->logInfo('End AnrechnungJob to delete Grades', array('Number of Grades deleted: ' => $cnt)); } - + // Send Sancho mail to STGL with yesterdays new Anrechnungen public function sendMailToSTGL() { $this->logInfo('Start AnrechnungJob to send emails to STGL about yesterdays new Anrechnungen.'); - + // Get all yesterdays Anrechnungen, that did not process further than first status // (If Anrechnung is new, but STGL already started the process yesterday, // he does not need to be informed about this new Anrechnung anymore) @@ -167,38 +167,38 @@ class AnrechnungJob extends JOB_Controller $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); $this->AnrechnungModel->addOrder('lv.studiengang_kz, lv.bezeichnung'); - + $result = $this->AnrechnungModel->loadWhere( '(lehre.tbl_anrechnung.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND 1 = (SELECT COUNT(*) FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE status.anrechnung_id = tbl_anrechnung.anrechnung_id)' ); - + // Exit if there are no Anrechnungen if (!$anrechnungen = getData($result)) { $this->logInfo('ABORTED: Sending emails to STGL about yesterdays new Anrechnungen aborted - No new Anrechnungen found.'); exit; } - + $unique_studiengang_kz_arr = array_unique(array_column($anrechnungen, 'studiengang_kz')); - + foreach ($unique_studiengang_kz_arr as $studiengang_kz) { // Get STG bezeichnung $this->StudiengangModel->addSelect('UPPER( typ || kurzbz ) AS "stg_bezeichnung"'); $studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung; - + // Get STGL mail address list ($to, $vorname) = self::_getSTGLMailAddress($studiengang_kz); - + // Get HTML table with new Anrechnungen of that STG plus amount of them list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen); - + // Link to Antrag genehmigen dashboard $url = CIS_ROOT. 'cis/index.php?menu='. CIS_ROOT. 'cis/menu.php?content_id=&content='. CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI; - + // Prepare mail content $body_fields = array( 'vorname' => $vorname, @@ -207,7 +207,7 @@ class AnrechnungJob extends JOB_Controller 'datentabelle' => $anrechnungen_table, 'link' => anchor($url, 'Anrechnungsanträge Übersicht') ); - + // Send mail sendSanchoMail( 'AnrechnungAntragStellen', @@ -216,17 +216,17 @@ class AnrechnungJob extends JOB_Controller 'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt' ); } - + $this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.'); } - + /** * Send Sancho mail to students, whose Anrechnungen were approved 24 hours ago. */ public function sendMailApproved(){ - + $this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were approved.'); - + // Get all yesterdays approvements $this->AnrechnungModel->addSelect('student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung'); $this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus status', 'anrechnung_id'); @@ -234,35 +234,35 @@ class AnrechnungJob extends JOB_Controller $this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id'); $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); - + $result = $this->AnrechnungModel->loadWhere( '(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_APPROVED) ); - + // Exit if there are no approved Anrechnungen if (!hasData($result)) { $this->logInfo('ABORTED sending emails to students, whose Anrechnungen were approved. No new approvements found.'); exit; } - + // Loop through students foreach ($result->retval as $student) { $to = $student->student_uid. '@'. DOMAIN; - + $anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; - + $text = 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'. $student->bezeichnung. '" wurde stattgegeben.'; - + // Prepare mail content $body_fields = array( 'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname, 'text' => $text ); - + // Send mail sendSanchoMail( 'AnrechnungGenehmigen', @@ -272,33 +272,35 @@ class AnrechnungJob extends JOB_Controller ); } } - + /** * Send Sancho mail to students, whose Anrechnungen were rejected 24 hours ago. */ public function sendMailRejected(){ - + $this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were rejected.'); - - // Get all yesterdays rejections - $this->AnrechnungModel->addSelect('student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung, notiz.text'); - $this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus status', 'anrechnung_id'); - $this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); - $this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id'); - $this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)'); - $this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id'); - $this->AnrechnungModel->addJoin('public.tbl_notizzuordnung', 'anrechnung_id'); - $this->AnrechnungModel->addJoin('public.tbl_notiz notiz', 'notiz_id'); - - $this->AnrechnungModel->addOrder('notiz.insertamum', 'DESC'); - $this->AnrechnungModel->addLimit(1); - - - $result = $this->AnrechnungModel->loadWhere( - '(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND - status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ' AND - notiz.titel = '. $this->db->escape(self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL) - ); + + $qry = ' + SELECT + student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung, + (SELECT text FROM public.tbl_notizzuordnung JOIN public.tbl_notiz USING(notiz_id) + WHERE tbl_notizzuordnung.anrechnung_id=tbl_anrechnung.anrechnung_id + AND tbl_notiz.titel='. $this->db->escape(self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL).' + ORDER BY tbl_notiz.insertamum DESC LIMIT 1) as text + FROM lehre.tbl_anrechnung + JOIN lehre.tbl_lehrveranstaltung lv USING(lehrveranstaltung_id) + JOIN public.tbl_student student USING(prestudent_id) + JOIN public.tbl_benutzer benutzer ON (benutzer.uid = student.student_uid) + JOIN public.tbl_person person USING(person_id) + + WHERE EXISTS(SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE + anrechnung_id=tbl_anrechnung.anrechnung_id AND + (status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND + status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ') + '; + + $db = new DB_Model(); + $result = $db->execReadOnlyQuery($qry); // Exit if there are no rejected Anrechnungen if (!hasData($result)) @@ -306,26 +308,26 @@ class AnrechnungJob extends JOB_Controller $this->logInfo('ABORTED sending emails to students, whose Anrechnungen were rejected. No new rejectments found.'); exit; } - + // Loop through students foreach ($result->retval as $student) { $to = $student->student_uid. '@'. DOMAIN; - + $anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr '; - + $text = <<bezeichnung" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.

Begründung: $student->text html; - + // Prepare mail content $body_fields = array( 'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname, 'text' => $text ); - + // Send mail sendSanchoMail( 'AnrechnungGenehmigen', @@ -334,14 +336,14 @@ html; 'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen' ); } - + } - + // Get STGL mail address private function _getSTGLMailAddress($studiengang_kz) { $result = $this->StudiengangModel->getLeitung($studiengang_kz); - + // Get STGL mail address if (hasData($result)) { @@ -354,7 +356,7 @@ html; else { $result = $this->StudiengangModel->load($studiengang_kz); - + if (hasData($result)) { return array( @@ -364,7 +366,7 @@ html; } } } - + // Build HTML table with yesterdays new Anrechnungen of the given STG private function _getSTGLMailDataTable($studiengang_kz, $anrechnungen) { @@ -377,7 +379,7 @@ html; function ($anrechnung) use (&$studiengang_kz) { return $anrechnung->studiengang_kz == $studiengang_kz; }); - + // Amount of Anrechnungen $amount = count($anrechnungen); @@ -386,7 +388,7 @@ html; '; - + foreach ($anrechnungen as $anrechnung) { // Head line for each LV bezeichnung @@ -394,18 +396,18 @@ html; { $html .= ''; } - + $lv_bezeichnung = $anrechnung->bezeichnung; - + // Row for each Anrechnung / student $html .= ''; } - + $html .= '
' . $anrechnung->bezeichnung . '
'. $anrechnung->vorname. ' '. $anrechnung->nachname. '
'; - + return array($amount, $html); } } diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 44a1cf327..cd88f814a 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -124,20 +124,20 @@ class InfoCenter extends Auth_Controller 'saveAbsage' => 'infocenter:rw', 'saveFreigabe' => 'infocenter:rw', 'getNotiz' => 'infocenter:r', - 'saveNotiz' => 'infocenter:rw', + 'saveNotiz' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), 'updateNotiz' => 'infocenter:rw', 'reloadZgvPruefungen' => 'infocenter:r', 'reloadMessages' => 'infocenter:r', 'reloadDoks' => 'infocenter:r', - 'reloadNotizen' => 'infocenter:r', + 'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'reloadLogs' => 'infocenter:r', - 'outputAkteContent' => 'infocenter:r', - 'getPostponeDate' => 'infocenter:r', + 'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'), + 'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'park' => 'infocenter:rw', 'unpark' => 'infocenter:rw', 'setOnHold' => 'infocenter:rw', - 'removeOnHold' => 'infocenter:rw', - 'getStudienjahrEnd' => 'infocenter:r', + 'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), + 'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'setNavigationMenuArrayJson' => 'infocenter:r', 'getAbsageData' => 'infocenter:r', 'saveAbsageForAll' => 'infocenter:rw' diff --git a/application/controllers/widgets/Filters.php b/application/controllers/widgets/Filters.php index 748272f09..e87b2d331 100644 --- a/application/controllers/widgets/Filters.php +++ b/application/controllers/widgets/Filters.php @@ -211,7 +211,7 @@ class Filters extends FHC_Controller public function setNavigationMenu() { // Generates the filters structure array - $filterMenu = $this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE)); + $this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE)); $this->outputJsonSuccess('Success'); } @@ -271,3 +271,4 @@ class Filters extends FHC_Controller } } } + diff --git a/application/libraries/FilterWidgetLib.php b/application/libraries/FilterWidgetLib.php index 0a4526680..cdf0cac3c 100644 --- a/application/libraries/FilterWidgetLib.php +++ b/application/libraries/FilterWidgetLib.php @@ -266,6 +266,7 @@ class FilterWidgetLib $whereParameters = array( 'app' => $app, 'dataset_name' => $datasetName, + 'person_id' => null, 'default_filter' => true ); @@ -738,8 +739,10 @@ class FilterWidgetLib $this->_ci->load->model('system/Filters_model', 'FiltersModel'); // Loads all the filters related to this page (same dataset_name and same app name) - $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetName( - $session[self::APP], $session[self::DATASET_NAME] + $filters = $this->_ci->FiltersModel->getFiltersByAppDatasetNamePersonId( + $session[self::APP], + $session[self::DATASET_NAME], + getAuthPersonId() ); // If filters were loaded @@ -813,9 +816,6 @@ class FilterWidgetLib } } - //------------------------------------------------------------------------------------------------------------------ - // Private methods - /** * Return an unique string that identify this filter widget * NOTE: The default value is the URI where the FilterWidget is called @@ -857,6 +857,9 @@ class FilterWidgetLib $this->_filterUniqueId = $filterUniqueId; } + //------------------------------------------------------------------------------------------------------------------ + // Private methods + /** * Generates a condition for a SQL where clause using the given applied filter definition. * By default an empty string is returned. @@ -972,3 +975,4 @@ class FilterWidgetLib return $pos; } } + diff --git a/application/models/crm/Statusgrund_model.php b/application/models/crm/Statusgrund_model.php index 7ab17a45b..d488e12d1 100644 --- a/application/models/crm/Statusgrund_model.php +++ b/application/models/crm/Statusgrund_model.php @@ -12,7 +12,7 @@ class Statusgrund_model extends DB_Model $this->pk = "statusgrund_id"; } - public function getStatus($status_kurzbz = null, $aktiv = null) + public function getStatus($status_kurzbz = null, $aktiv = null, $statusgrund_kurzbz = null) { $this->addOrder('bezeichnung_mehrsprachig'); $where = array(); @@ -20,6 +20,8 @@ class Statusgrund_model extends DB_Model $where['status_kurzbz'] = $status_kurzbz; if (!is_null($aktiv)) $where['aktiv'] = $aktiv; + if (!is_null($statusgrund_kurzbz)) + $where['statusgrund_kurzbz'] = $statusgrund_kurzbz; $status = $this->loadWhere($where); diff --git a/application/models/person/Notiz_model.php b/application/models/person/Notiz_model.php index fd08cc384..bfd8aa258 100644 --- a/application/models/person/Notiz_model.php +++ b/application/models/person/Notiz_model.php @@ -152,6 +152,7 @@ class Notiz_model extends DB_Model */ public function getNotizByTitel($person_id, $titel) { + $this->addSelect('public.tbl_notiz.insertamum as insertnotiz, *'); // Join with the table public.tbl_notizzuordnung using notiz_id $this->addJoin('public.tbl_notizzuordnung', 'notiz_id'); $this->addJoin('public.tbl_prestudent', 'prestudent_id', 'LEFT'); diff --git a/application/models/system/Filters_model.php b/application/models/system/Filters_model.php index 20394b36d..581be65e1 100644 --- a/application/models/system/Filters_model.php +++ b/application/models/system/Filters_model.php @@ -57,19 +57,34 @@ class Filters_model extends DB_Model /** * Loads all filters by their app and dataset_name */ - public function getFiltersByAppDatasetName($app, $dataset_name) + public function getFiltersByAppDatasetNamePersonId($app, $dataset_name, $person_id) { - $this->resetQuery(); // reset any previous built query + $query = ' + ( + -- Global filters + SELECT gs.filter_id, + gs.person_id, + gs.description + FROM system.tbl_filters gs + WHERE gs.app = ? + AND gs.dataset_name = ? + AND gs.person_id IS NULL + ORDER BY gs.person_id DESC, gs.sort ASC + ) + UNION ALL + ( + -- Personal filters + SELECT ps.filter_id, + ps.person_id, + ps.description + FROM system.tbl_filters ps + WHERE ps.app = ? + AND ps.dataset_name = ? + AND ps.person_id = ? + ORDER BY ps.person_id DESC, ps.sort ASC + )'; - $this->addSelect('filter_id, person_id, description'); - $this->addOrder('person_id', 'DESC'); // sort descending on column person_id - $this->addOrder('sort', 'ASC'); // sort on column sort - - $filterParametersArray = array( - 'app' => $app, - 'dataset_name' => $dataset_name - ); - - return $this->loadWhere($filterParametersArray); + return $this->execQuery($query, array($app, $dataset_name, $app, $dataset_name, $person_id)); } } + diff --git a/application/views/crm/statusGrundList.php b/application/views/crm/statusGrundList.php index e128856d3..ab8f096bb 100644 --- a/application/views/crm/statusGrundList.php +++ b/application/views/crm/statusGrundList.php @@ -15,6 +15,7 @@ Aktiv Bezeichnung mehrsprachig Beschreibung + Statusgrund @@ -25,6 +26,7 @@ aktiv); ?> bezeichnung_mehrsprachig); ?> beschreibung); ?> + statusgrund_kurzbz); ?> Edit @@ -33,4 +35,4 @@ - \ No newline at end of file + diff --git a/application/views/crm/statusgrundEdit.php b/application/views/crm/statusgrundEdit.php index 9fa91b6d5..fc001d92a 100644 --- a/application/views/crm/statusgrundEdit.php +++ b/application/views/crm/statusgrundEdit.php @@ -81,6 +81,21 @@   + + + StatusGrund: + + + + +
+ + + + +   + + diff --git a/application/views/crm/statusgrundNew.php b/application/views/crm/statusgrundNew.php index ffcd18429..1c3a5f9e0 100644 --- a/application/views/crm/statusgrundNew.php +++ b/application/views/crm/statusgrundNew.php @@ -51,6 +51,16 @@   + + + StatusGrund: + + + + +
+ + diff --git a/application/views/system/infocenter/anmerkungenZurBewerbung.php b/application/views/system/infocenter/anmerkungenZurBewerbung.php index 508f041de..ca012ff3e 100644 --- a/application/views/system/infocenter/anmerkungenZurBewerbung.php +++ b/application/views/system/infocenter/anmerkungenZurBewerbung.php @@ -12,7 +12,7 @@ - insertamum), 'd.m.Y H:i:s') ?> + insertnotiz), 'd.m.Y H:i:s') ?> kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?> diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 4dd897f7f..d0e0a7126 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -184,6 +184,32 @@ ) LIMIT 1 ) AS "StgNichtAbgeschickt", + ( + SELECT COUNT(*) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NULL + AND pss.bestaetigtam IS NULL + AND ps.person_id = p.person_id + AND (sg.typ IN ('.$STUDIENGANG_TYP.') + OR + sg.studiengang_kz in('.$ADDITIONAL_STG.') + ) + AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.' + + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = pss.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende > + (SELECT start FROM public.tbl_studiensemester sss WHERE studiensemester_kurzbz = '.$STUDIENSEMESTER.')) + ) + LIMIT 1 + ) AS "AnzahlStgNichtAbgeschickt", ( SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \') FROM public.tbl_prestudentstatus pss @@ -322,6 +348,7 @@ ucfirst($this->p->t('global', 'abgeschickt')).' ('.$this->p->t('global', 'anzahl').')', ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'gesendet').')', ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'nichtGesendet').')', + ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'anzahlNichtGesendet').')', ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')', 'ZGV Nation BA', 'ZGV Nation MA', diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 05c94c384..a2b2f8da8 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -414,7 +414,7 @@ selected="selected">p->t('ui', 'freigabeart')) . '...' ?> - + diff --git a/cis/private/lehre/anwesenheitsliste.pdf.php b/cis/private/lehre/anwesenheitsliste.pdf.php index eef40ff3f..01ec1c93f 100644 --- a/cis/private/lehre/anwesenheitsliste.pdf.php +++ b/cis/private/lehre/anwesenheitsliste.pdf.php @@ -166,13 +166,14 @@ $qry = 'SELECT tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student, - tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang + tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid) LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) + LEFT JOIN lehre.tbl_note USING (note) LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz) WHERE @@ -213,8 +214,8 @@ if($result = $db->db_query($qry)) if($row->bisio_id!='' && $row->status!='Incoming' && ($row->bis > $stsemdatumvon || $row->bis=='') && $row->von < $stsemdatumbis) //Outgoing $zusatz.='(o)(ab '.$datum->formatDatum($row->von,'d.m.Y').')'; - if($row->note==6) //angerechnet - $zusatz.='(ar)'; + if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen + $zusatz.= '('. $row->anmerkung. ')'; if($row->mitarbeiter_uid!='') //mitarbeiter $zusatz.='(ma)'; diff --git a/content/fasoverlay.js.php b/content/fasoverlay.js.php index 9504285ce..db26a9180 100644 --- a/content/fasoverlay.js.php +++ b/content/fasoverlay.js.php @@ -907,8 +907,10 @@ function StatistikPrintLVPlanungExcel() col = tree.columns ? tree.columns["stg_kz"] : "stg_kz"; var studiengang_kz=tree.view.getCellText(tree.currentIndex,col); col = tree.columns ? tree.columns["sem"] : "sem"; - var semester=tree.view.getCellText(tree.currentIndex,col); - var url = 'content/statistik/lvplanung.xls.php?studiengang_kz='+studiengang_kz+'&semester='+semester+'&studiensemester_kurzbz='+studiensemester; + var semester = tree.view.getCellText(tree.currentIndex,col); + col = tree.columns ? tree.columns["tree-verband-col-orgform"] : "tree-verband-col-orgform"; + var orgform = tree.view.getCellText(tree.currentIndex,col); + var url = 'content/statistik/lvplanung.xls.php?studiengang_kz='+studiengang_kz+'&semester='+semester+'&studiensemester_kurzbz='+studiensemester+'&orgform_kurzbz='+orgform; } else if(document.getElementById('menu-content-tabs').selectedItem == document.getElementById('tab-organisationseinheit')) { diff --git a/content/funktionen.js.php b/content/funktionen.js.php index e77c47548..ae9edd2af 100644 --- a/content/funktionen.js.php +++ b/content/funktionen.js.php @@ -270,7 +270,7 @@ function FunktionDelete() // **** // * Speichert die Daten // **** -function FunktionDetailSpeichern() +function FunktionDetailSpeichern(kopie) { var funktion_kurzbz = document.getElementById('funktion-menulist-funktion').value; var oe_kurzbz = document.getElementById('funktion-menulist-oe_kurzbz').value; @@ -283,6 +283,9 @@ function FunktionDetailSpeichern() var bezeichnung = document.getElementById('funktion-textbox-bezeichnung').value; var wochenstunden = document.getElementById('funktion-textbox-wochenstunden').value; + if(kopie == true) + var neu = true; + //Bei Mitarbeitern wird kein Studiengang mitgeschickt if(window.parent.document.getElementById('main-content-tabs').selectedItem==window.parent.document.getElementById('tab-mitarbeiter')) studiengang_kz_berecht=''; @@ -412,6 +415,7 @@ function FunktionDetailDisableFields(val) document.getElementById('funktion-menulist-semester').disabled=val; document.getElementById('funktion-menulist-funktion').disabled=val; document.getElementById('funktion-button-speichern').disabled=val; + document.getElementById('funktion-button-kopiespeichern').disabled=val; document.getElementById('funktion-box-datum_von').disabled=val; document.getElementById('funktion-box-datum_bis').disabled=val; document.getElementById('funktion-textbox-bezeichnung').disabled=val; diff --git a/content/funktionen.xul.php b/content/funktionen.xul.php index 9bbe10686..b80cdd455 100644 --- a/content/funktionen.xul.php +++ b/content/funktionen.xul.php @@ -289,7 +289,8 @@ else - '; + } + else + { + echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; + } + + echo ''; } - echo ""; - if($rechte->isBerechtigt('lehre/studienordnung', null, 'suid')) - { - echo ''; - } - else - { - echo ' Keine Berechtigung zum Vorrücken von Studienplänen'; - } - - echo ''; } } diff --git a/vilesci/personen/student_vorrueckung.php b/vilesci/personen/student_vorrueckung.php index 960413c2a..8eb858f30 100644 --- a/vilesci/personen/student_vorrueckung.php +++ b/vilesci/personen/student_vorrueckung.php @@ -19,6 +19,7 @@ * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > * Rudolf Hangl < rudolf.hangl@technikum-wien.at > * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + * Manuela Thamer < manuela.thamer@technikum-wien.at > */ /** * Vorrückung aller AKTIVEN Studenten. @@ -32,6 +33,7 @@ require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/lehrverband.class.php'); require_once('../../include/studienordnung.class.php'); require_once('../../include/studienplan.class.php'); +require_once('../../include/statusgrund.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -301,6 +303,16 @@ if (isset($_POST['vorr'])) } } + //auf statusgrund_kurzbz abfragen + $statusgrundObj = new statusgrund($row_status->statusgrund_id); + $statusgrundId = null; + if ($statusgrundObj->statusgrund_kurzbz === "prewiederholer" && $row_status->ausbildungssemester > 1) + { + $s = $row->semester_stlv - 1; + $ausbildungssemester = $row_status->ausbildungssemester - 1; + $statusgrundId = $statusgrundObj->getByStatusgrundKurzbz('wiederholer')->statusgrund_id; + } + $lvb = new lehrverband(); //Lehrverbandgruppe anlegen, wenn noch nicht vorhanden @@ -364,14 +376,15 @@ if (isset($_POST['vorr'])) //Eintragen des neuen Status $sql .= "INSERT INTO public.tbl_prestudentstatus (prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, insertamum, - insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id) + insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id, statusgrund_id) VALUES (".$db->db_add_param($row->prestudent_id).", ". $db->db_add_param($row_status->status_kurzbz).", ". $db->db_add_param($next_ss).", ". $db->db_add_param($ausbildungssemester).", now(), now(), ". $db->db_add_param($user).", NULL, NULL, NULL, ". $db->db_add_param($row_status->orgform_kurzbz).", ". - $db->db_add_param($studienplan_id).");"; + $db->db_add_param($studienplan_id).", ". + $db->db_add_param($statusgrundId).");"; } if ($sql != '') { @@ -408,7 +421,7 @@ $outp .= ' Studiengang: - '; //Auswahl Studiengang foreach ($studiengang as $stg) @@ -420,7 +433,7 @@ foreach ($studiengang as $stg) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; if (!isset($s[$stg->studiengang_kz])) $s[$stg->studiengang_kz] = new stdClass(); @@ -435,17 +448,12 @@ $outp .= ' $outp .= " Angezeigtes Studiensemester: - \n"; if (isset($ss_arr) && is_array($ss_arr)) { foreach ($ss_arr as $sts) { - if ($studiensemester_kurzbz == $sts) - $sel = " selected "; - else - $sel = ''; - $url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz"; $url .= "&semester=$semester"; $url .= "&semesterv=$semesterv"; @@ -453,7 +461,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; + $outp .= ""; } } $outp .= " @@ -493,17 +501,12 @@ $outp .= ' Ausgangs-Studiensemester: - '; if (isset($ss_arr) && is_array($ss_arr)) { foreach ($ss_arr as $sts2) { - if ($studiensemester_kurzbz_akt == $sts2) - $sel2 = " selected "; - else - $sel2 = ''; - $url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz"; $url .= "&semester=$semester"; $url .= "&semesterv=$semesterv"; @@ -511,7 +514,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$sts2"; $url .= "&studiensemester_kurzb_zk=$studiensemester_kurzbz_zk"; - $outp .= ""; + $outp .= ""; } } $outp .= " @@ -547,7 +550,7 @@ $outp .= 'alle -- $outp .= " Ziel-Studiensemester: - \n"; if (isset($ss_arr) && is_array($ss_arr)) { @@ -565,7 +568,7 @@ if (isset($ss_arr) && is_array($ss_arr)) $url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt"; $url .= "&studiensemester_kurzbz_zk=$sts3"; - $outp .= ""; + $outp .= ""; } } $outp .= " \n @@ -617,11 +620,12 @@ if ($result_std != 0) $row = $db->db_fetch_object($result_std, $i); $qry_status = " SELECT - status_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung + tbl_prestudentstatus.status_kurzbz, statusgrund_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung FROM public.tbl_prestudentstatus JOIN public.tbl_prestudent USING(prestudent_id) LEFT JOIN lehre.tbl_studienplan USING(studienplan_id) + LEFT JOIN public.tbl_status_grund USING (statusgrund_id) WHERE person_id=".$db->db_add_param($row->person_id, FHC_INTEGER)." AND studiengang_kz=".$db->db_add_param($row->studiengang_kz, FHC_INTEGER)." @@ -638,6 +642,7 @@ if ($result_std != 0) if ($row_status = $db->db_fetch_object($result_status)) { $status_kurzbz = $row_status->status_kurzbz; + $statusgrund_kurzbz = $row_status->statusgrund_kurzbz; $ausbildungssemester = $row_status->ausbildungssemester; $studienplan_id = $row_status->studienplan_id; $studienplan_bezeichnung = $row_status->bezeichnung; diff --git a/vilesci/personen/urlaubsverwaltung.php b/vilesci/personen/urlaubsverwaltung.php index 3a2b774d2..9291837ad 100644 --- a/vilesci/personen/urlaubsverwaltung.php +++ b/vilesci/personen/urlaubsverwaltung.php @@ -65,16 +65,14 @@ echo ' Zeitsperren (Urlaube) der MitarbeiterInnen - - - - - - - + '; + + include('../../include/meta/jquery.php'); + include('../../include/meta/jquery-tablesorter.php'); + +echo ' -