diff --git a/application/config/issueList.php b/application/config/issueList.php new file mode 100644 index 000000000..e4e4f278c --- /dev/null +++ b/application/config/issueList.php @@ -0,0 +1,11 @@ +terminateWithJsonError("Bitte füllen Sie alle Felder aus"); - foreach($personen as $person) + if ($studiengang === 'all' && $abgeschickt === 'all') { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); + foreach($personen as $person) + { + $prestudenten = $this->PrestudentModel->getByPersonWithoutLehrgang($person, $studienSemester); - if (!hasData($prestudent)) - continue; + if (!hasData($prestudenten)) + continue; - $prestudentData = getData($prestudent); + $prestudentenData = getData($prestudenten); + + foreach ($prestudentenData as $prestudent) + { + $this->saveAbsage($prestudent->prestudent_id, $statusgrund); + } + } + } + else + { + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + + $this->StudienplanModel->addSelect('1'); + $this->StudienplanModel->addJoin('lehre.tbl_studienordnung so', 'studienordnung_id'); + $escaped = $this->StudienplanModel->db->escape(strtoupper($studiengang)); + $this->StudienplanModel->db->where("UPPER(so.studiengangkurzbzlang || ':' || tbl_studienplan.orgform_kurzbz) = $escaped"); + $this->StudienplanModel->addLimit(1); + $studiengangResult = $this->StudienplanModel->load(); + + if (hasData($studiengangResult)) + { + foreach($personen as $person) + { + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $abgeschickt === 'all'); + + if (!hasData($prestudent)) + continue; + + $prestudentData = getData($prestudent); + $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); + } + } + else + $this->terminateWithJsonError("Falschen Studiengang übergeben!"); - $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); } $this->outputJsonSuccess("Success"); diff --git a/application/controllers/system/infocenter/Rueckstellung.php b/application/controllers/system/infocenter/Rueckstellung.php index 62af633ca..b1f2b60b7 100644 --- a/application/controllers/system/infocenter/Rueckstellung.php +++ b/application/controllers/system/infocenter/Rueckstellung.php @@ -14,7 +14,8 @@ class Rueckstellung extends Auth_Controller 'get' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'set' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'), - 'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw') + 'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), + 'setForPersonen' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), ) ); @@ -79,7 +80,34 @@ class Rueckstellung extends Auth_Controller $this->outputJson($result); } - + + public function setForPersonen() + { + $personen = $this->input->post('personen'); + $datum_bis = $this->input->post('datum_bis'); + $status_kurzbz = $this->input->post('status_kurzbz'); + + foreach ($personen as $person) + { + $rueckstellung = $this->_ci->RueckstellungModel->loadWhere(array('person_id' => $person)); + if (hasData($rueckstellung)) + continue; + + $result = $this->_ci->RueckstellungModel->insert( + array('person_id' => $person, + 'status_kurzbz' => $status_kurzbz, + 'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'), + 'insertvon' => $this->_uid + ) + ); + + if (isError($result)) + $this->terminateWithJsonError(getError($result)); + $this->_log($person, $status_kurzbz); + } + $this->outputJsonSuccess("Erfolgreich gespeichert!"); + } + public function delete() { $person_id = $this->input->post('person_id'); diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index 44c2ff5d3..27a928fb4 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -6,7 +6,6 @@ class Issues extends Auth_Controller { private $_uid; - const FUNKTION_KURZBZ = 'ass'; // user having this funktion can see issues for oes assigned with this funktion const BERECHTIGUNG_KURZBZ = 'system/issues_verwalten'; // user having this permission can see issues for oes assigned with this permission public function __construct() @@ -28,6 +27,9 @@ class Issues extends Auth_Controller $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); $this->load->model('system/Sprache_model', 'SpracheModel'); + // load config + $this->load->config('issueList'); + $this->loadPhrases( array( 'global', @@ -47,10 +49,12 @@ class Issues extends Auth_Controller { $oes_for_issues = $this->_getOesForIssues(); $language_index = $this->_getLanguageIndex(); + $apps = $this->config->item('issues_list_apps'); + $status = $this->config->item('issues_list_status'); $this->load->view( 'system/issues/issues', - array_merge($oes_for_issues, array('language_index' => $language_index)) + array_merge($oes_for_issues, array('language_index' => $language_index, 'apps' => $apps, 'status' => $status)) ); } @@ -121,6 +125,8 @@ class Issues extends Auth_Controller $oe_kurzbz_for_funktion = array(); $benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid($this->_uid, null, date('Y-m-d'), date('Y-m-d')); + $functions = $this->config->item('issues_list_functions'); + if (isError($benutzerfunktionRes)) show_error(getError($benutzerfunktionRes)); @@ -130,8 +136,8 @@ class Issues extends Auth_Controller { $all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz; - // separate oes for the additional funktion which enables displaying issues - if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ) + // separate oes for the additional functions which enables displaying issues + if (in_array($benutzerfunktion->funktion_kurzbz, $functions)) { $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz; diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 242c26518..ff56c3268 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -677,7 +677,7 @@ class Prestudent_model extends DB_Model )); } - public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt) + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $ignoreAbgeschickt = false) { $query = "SELECT ps.prestudent_id FROM public.tbl_prestudentstatus pss @@ -687,22 +687,42 @@ class Prestudent_model extends DB_Model JOIN lehre.tbl_studienordnung so USING(studienordnung_id) WHERE ps.person_id = ? AND UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz) = ? - AND pss.studiensemester_kurzbz = ? - AND"; + AND pss.studiensemester_kurzbz = ?"; - if ($abgeschickt === 'true') - $query .= " EXISTS"; - else - $query .= " NOT EXISTS"; + if (!$ignoreAbgeschickt) + { + $query .= "AND"; - $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss + if ($abgeschickt === 'true') + $query .= " EXISTS"; + else + $query .= " NOT EXISTS"; + + $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss JOIN public.tbl_prestudent sps USING(prestudent_id) WHERE sps.prestudent_id = ps.prestudent_id AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; + } return $this->execQuery($query, array($person, $studiengang, $studienSemester)); } + public function getByPersonWithoutLehrgang($person, $studienSemester) + { + $query = "SELECT DISTINCT(ps.prestudent_id) + 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) + JOIN lehre.tbl_studienordnung so USING(studienordnung_id) + WHERE ps.person_id = ? + AND (sg.typ = 'b' OR sg.typ = 'm') + AND pss.studiensemester_kurzbz = ?"; + + return $this->execQuery($query, array($person, $studienSemester)); + } + + /** * Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang * @param int $prestudent_id diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 0b7a20c2c..157f98bf1 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -14,12 +14,13 @@ 'navigationwidget' => true, 'dialoglib' => true, 'phrases' => array( + 'infocenter' => array('statusAuswahl'), 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ); $this->load->view('templates/FHC-Header', $includesArray); diff --git a/application/views/system/infocenter/infocenterAbgewiesen.php b/application/views/system/infocenter/infocenterAbgewiesen.php index 921d9f224..7129a3250 100644 --- a/application/views/system/infocenter/infocenterAbgewiesen.php +++ b/application/views/system/infocenter/infocenterAbgewiesen.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterAufgenommen.php b/application/views/system/infocenter/infocenterAufgenommen.php index 680d66a8a..d57f31d6b 100644 --- a/application/views/system/infocenter/infocenterAufgenommen.php +++ b/application/views/system/infocenter/infocenterAufgenommen.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php index a240a0b5c..d843cc5c9 100644 --- a/application/views/system/infocenter/infocenterFreigegeben.php +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php index a86e0df97..eef2a214a 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index c60b03a74..edaee9058 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -1,11 +1,21 @@ db->escape($string); }, array_keys($all_funktionen_oe_kurzbz))) . ")"; + // all oes for which logged user has issues permissions, including permissions for "special" issue funktion -$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')"; -$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')"; +$ALL_OE_KURZBZ_BERECHTIGT = isEmptyArray($all_oe_kurzbz_berechtigt) ? "(NULL)" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $all_oe_kurzbz_berechtigt)) . ")"; + +// app apps for which issues should be displayed +$APPS = isEmptyArray($apps) ? "" : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $apps)) . ")"; + +// all prestudent status for which issues should be displayed +$RELEVANT_PRESTUDENT_STATUS = isEmptyArray($status) ? "" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $status)) . ")"; // get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes $query = "WITH zustaendigkeiten AS ( @@ -37,8 +47,8 @@ $query .= " SELECT issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", - ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\", - stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\", + ftyp.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlertyp\", + stat.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlerstatus\", verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", @@ -118,44 +128,48 @@ $query .= " JOIN system.tbl_issue_status stat USING (status_kurzbz) LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id WHERE - fr.app IN ('core', 'dvuh') - AND ( + ( EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ SELECT 1 FROM zustaendigkeiten WHERE fehlercode = iss.fehlercode AND zustaendig = TRUE)"; // show issue if it is assigend to oe of logged in user or to student of oe of logged in user -if (!isEmptyArray($all_oe_kurzbz_berechtigt)) -{ - $query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; +$query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; + +$query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ + SELECT 1 FROM public.tbl_prestudent ps + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE person_id = iss.person_id + AND stg.oe_kurzbz IN ".$ALL_OE_KURZBZ_BERECHTIGT; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND pss.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= " AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ + FROM public.tbl_prestudentstatus ps_finished + JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') + AND datum::date + interval '2 months' < NOW() + AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ + JOIN public.tbl_prestudentstatus USING (prestudent_id) + JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) + WHERE person_id = ps.person_id + AND prestudent_id <> ps_finished.prestudent_id + AND tbl_studiensemester.start::date > sem_finished.start::date"; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND tbl_prestudentstatus.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= ") + ) + ) + )"; - $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ - SELECT 1 FROM public.tbl_prestudent ps - JOIN public.tbl_prestudentstatus pss USING (prestudent_id) - JOIN public.tbl_studiengang stg USING (studiengang_kz) - WHERE person_id = iss.person_id - AND stg.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT - AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ - FROM public.tbl_prestudentstatus ps_finished - JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) - WHERE prestudent_id = ps.prestudent_id - AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') - AND datum::date + interval '2 months' < NOW() - AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ - JOIN public.tbl_prestudentstatus USING (prestudent_id) - JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) - WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND person_id = ps.person_id - AND prestudent_id <> ps_finished.prestudent_id - AND tbl_studiensemester.start::date > sem_finished.start::date) - ) - ) - )"; -} $query .= ") "; +if (!isEmptyString($APPS)) $query .= " AND fr.app IN ".$APPS; + $query .= " ORDER BY CASE WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0 diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 32c45c06a..69e803655 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -384,17 +384,6 @@ for ($i = 0; $i < count($ztaufdata); $i++) } } - //worktime with no break greater 6 -> compulsory break of half an hour - if ($pauseSubtracted < 0.5 && !$lehreExternExists) - { - if ($projektlines[$day]->arbeitszeit >= 6.5) - $projektlines[$day]->arbeitszeit -= 0.5; - - //ensure that no worktime gets smaller than 6 hours because of compulsory break - elseif ($projektlines[$day]->arbeitszeit > 6) - $projektlines[$day]->arbeitszeit -= $projektlines[$day]->arbeitszeit - 6; - } - $projektlines[$day]->arbeitszeit = round($projektlines[$day]->arbeitszeit, 2); //calculate sums diff --git a/include/ampel.class.php b/include/ampel.class.php index 40f8a503d..bc23ac7e9 100644 --- a/include/ampel.class.php +++ b/include/ampel.class.php @@ -575,5 +575,47 @@ class ampel extends basis_db } } + + /** + * Zählt die Anzahl der UIDs, welche mit einer Ampel adressiert werden + * @param $ampel_id integer ID der Ampel, die geladen werden soll + */ + public function getAnzahlUserAmpel($ampel_id) + { + // Ampel laden + $qry_ampel = "SELECT benutzer_select FROM public.tbl_ampel WHERE ampel_id=".$this->db_add_param($ampel_id, FHC_INTEGER); + + if($result_ampel = $this->db_query($qry_ampel)) + { + // Anzahl User laden + if ($row_ampel = $this->db_fetch_object($result_ampel)) + { + $qry_user = "SELECT count(*) AS anzahl FROM (SELECT uid FROM public.tbl_benutzer WHERE uid IN (".$row_ampel->benutzer_select."))subquery"; + } + + if ($result = $this->db_query($qry_user)) + { + if ($row = $this->db_fetch_object($result)) + { + return $row->anzahl; + } + else + { + $this->errormsg = 'Anzahl UIDs konnte nicht geladen werden'; + return false; + } + } + else + { + $this->errormsg = 'Anzahl UIDs konnte nicht geladen werden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Ampel'; + return false; + } + } } ?> diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index b7334d265..14fba0779 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -50,12 +50,21 @@ var InfocenterPersonDataset = { '' + '' + ' Bewerbung abgeschickt? ' + + ' Beide ' + ' Ja ' + ' Nein ' + '' + ' Absage '; + let rueckstellung = '' + + '' + + '' + FHC_PhrasesLib.t('infocenter', 'statusAuswahl') + '' + + '' + + '' + + ' Zurückstellen '; + InfocenterPersonDataset.getAbsageData(); + Rueckstellung.getStatus() var studienSemesterHtml = '' + '' + @@ -98,10 +107,22 @@ var InfocenterPersonDataset = { ""+ ""+auswahlAbsageToggle+""+ ""+auswahlAbsage+""+ + ""+rueckstellung+""+ "" + "" + "" ) + + let rueckstelldate = new Date(); + + rueckstelldate.setDate(rueckstelldate.getDate() + 14); + $('#rueckstellungdate').attr("value", $.datepicker.formatDate("dd.mm.yy", rueckstelldate)); + + $("#rueckstellungdate").datepicker({ + "dateFormat": "dd.mm.yy", + "minDate": 1 + }); + $("button.incStudiensemester").click(function() { InfocenterPersonDataset.changeStudiensemesterUservar(1); }); @@ -123,6 +144,29 @@ var InfocenterPersonDataset = { $(".absageModalForAll").modal("show"); }); + $('button.rueckstellBtn').click(function() + { + let idsel = $("#filterTableDataset input:checked[name=PersonId\\[\\]]"); + + if(idsel.length <= 0) + return FHC_DialogLib.alertInfo("Bitte wählen Sie die Personen aus."); + + let type = $('#rueckstellungtype').val() + + if (type === null) + return FHC_DialogLib.alertInfo("Bitte ein Rückstellgrund auswählen."); + + let personen = []; + + for (let i = 0; i < idsel.length; i++) + { + personen.push($(idsel[i]).val()); + } + + let date = $("#rueckstellungdate").val(); + Rueckstellung.setForPersons(personen, type, date) + }); + $('#saveAbsageForAll').click(function() { InfocenterPersonDataset.saveAbsageForAll(); @@ -131,6 +175,7 @@ var InfocenterPersonDataset = { $('a.absageToggle').click(function() { $('#absagePunkte').toggle(); + $('#rueckstellung').toggle(); }) var personcount = 0; @@ -356,6 +401,11 @@ var InfocenterPersonDataset = { text: value.bezeichnung_mehrsprachig[0] })) }) + + $('.auswahlAbsageStg').append($("", { + value: 'all', + text: 'Alle' + })) $.each(data.studiengaenge, function(key, value){ $('.auswahlAbsageStg').append($("", { value: value.studiengang, diff --git a/public/js/infocenter/rueckstellung.js b/public/js/infocenter/rueckstellung.js index adc99f439..553478115 100644 --- a/public/js/infocenter/rueckstellung.js +++ b/public/js/infocenter/rueckstellung.js @@ -87,6 +87,33 @@ var Rueckstellung = { } ); }, + setForPersons: function(personen, type, date) + { + if (type === null) + return false; + + FHC_AjaxClient.ajaxCallPost( + CONTROLLER_RUECKSTELLUNG_URL + '/setForPersonen', + { + "personen": personen, + "datum_bis": date, + "status_kurzbz": type, + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + + if (FHC_AjaxClient.hasData(data)) + FHC_DialogLib.alertSuccess("Erfolgreich gespeichert.") + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + }, + veilTimeout: 0 + } + ); + }, delete: function(personid, status = null) { FHC_AjaxClient.ajaxCallPost( diff --git a/rdf/zeugnis.rdf.php b/rdf/zeugnis.rdf.php index 2021c8335..c468301d5 100644 --- a/rdf/zeugnis.rdf.php +++ b/rdf/zeugnis.rdf.php @@ -35,6 +35,7 @@ require_once('../include/studiengang.class.php'); require_once('../include/mitarbeiter.class.php'); require_once('../include/anrechnung.class.php'); require_once('../include/prestudent.class.php'); +require_once('../include/nation.class.php'); $datum = new datum(); $db = new basis_db(); @@ -107,7 +108,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") tbl_studiengang.bezeichnung, tbl_studiengang.english, tbl_studentlehrverband.semester, tbl_person.vorname, tbl_person.vornamen, tbl_person.nachname,tbl_person.gebdatum,tbl_person.titelpre, tbl_person.titelpost, tbl_person.anrede, tbl_studiensemester.bezeichnung as sembezeichnung, - tbl_studiensemester.studiensemester_kurzbz as stsem, tbl_student.prestudent_id, tbl_studiengang.max_semester + tbl_studiensemester.studiensemester_kurzbz as stsem, tbl_student.prestudent_id, tbl_studiengang.max_semester, tbl_person.gebort, tbl_person.geburtsnation, tbl_person.geschlecht FROM tbl_person, tbl_student, tbl_studiengang, tbl_benutzer, tbl_studentlehrverband, tbl_studiensemester WHERE tbl_student.studiengang_kz = tbl_studiengang.studiengang_kz AND tbl_student.student_uid = tbl_benutzer.uid AND tbl_benutzer.person_id = tbl_person.person_id @@ -187,6 +188,10 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") else $studiengang_kz = sprintf("%04s", abs($row->studiengang_kz)); + + $nation = new nation($row->geburtsnation); + $geburtsnation = $nation->kurztext; + $xml .= " "; $xml .= " "; $xml .= "\n anrede."]]>"; @@ -195,6 +200,9 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") $xml .= " titelpre.' '.trim($row->vorname.' '.$row->vornamen).' '.$row->nachname.($row->titelpost!=''?', '.$row->titelpost:''))."]]>"; $gebdatum = date('d.m.Y',strtotime($row->gebdatum)); $xml .= " "; + $xml .= " gebort."]]>"; + $xml .= " "; + $xml .= " geschlecht."]]>"; $xml .= " matrikelnr)."]]>"; $xml .= " "; $datum_aktuell = date('d.m.Y'); @@ -267,6 +275,15 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") if ($lastPrestudentStatus) $showAllNoten = $prestudent->status_kurzbz === 'Incoming'; + $lastBenotungsdatum = ''; + + $dates = array_column($obj->result, 'benotungsdatum'); + if (!empty($dates)) + { + $lastBenotungsdatum = max($dates); + $xml .= ""; + } + foreach ($obj->result as $row) { if($showAllNoten || $row->zeugnis) @@ -390,12 +407,15 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") } } $xml .= "\n "; + $xml .= " benotungsdatum))."]]>"; $xml .= " "; $xml .= " "; $xml .= " note_positiv."]]>"; $xml .= " "; $xml .= " semesterstunden==0?'':number_format(sprintf('%.1F',$row->semesterstunden/$wochen),1))."]]>"; $xml .= " sws==0?'':number_format(sprintf('%.1F',$row->sws),1))."]]>"; + $xml .= " lehrveranstaltung_id."]]>"; + $ectspunkte=''; $anrechnung = new anrechnung(); diff --git a/vilesci/stammdaten/ampel_details.php b/vilesci/stammdaten/ampel_details.php index 74c3af829..277329e55 100644 --- a/vilesci/stammdaten/ampel_details.php +++ b/vilesci/stammdaten/ampel_details.php @@ -192,6 +192,15 @@ $datum_obj = new datum(); die('Invalid Action'); break; } + if(isset($ampel_id) && $ampel->benutzer_select != '') + { + $anzahlUser = $ampel->getAnzahlUserAmpel($ampel_id); + } + else + { + $anzahlUser = 0; + } + echo ' @@ -207,8 +216,11 @@ $datum_obj = new datum(); - Benutzer Select - '.htmlspecialchars($ampel->benutzer_select).' + Benutzer*innen Select + + '.htmlspecialchars($ampel->benutzer_select).' + Anzahl Benutzer*innen: '.$anzahlUser.' + Vorlaufzeit (in Tagen)