diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d027e559e..548b071d3 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -142,12 +142,6 @@ class InfoCenter extends Auth_Controller 'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'reloadLogs' => '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' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), - 'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'setNavigationMenuArrayJson' => 'infocenter:r', 'getAbsageData' => 'infocenter:r', 'saveAbsageForAll' => 'infocenter:rw', @@ -164,6 +158,7 @@ class InfoCenter extends Auth_Controller $this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); $this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel'); $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); + $this->load->model('crm/Rueckstellung_model', 'RueckstellungModel'); $this->load->model('person/Notiz_model', 'NotizModel'); $this->load->model('person/Person_model', 'PersonModel'); $this->load->model('system/Message_model', 'MessageModel'); @@ -606,7 +601,7 @@ class InfoCenter extends Auth_Controller } /** - * Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang + * Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang */ private function sendZgvMail($mail, $typ, $person){ $data = array( @@ -697,7 +692,7 @@ class InfoCenter extends Auth_Controller /** * Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden - * Falls es erfolgreich war, sendet er die Mail raus + * Falls es erfolgreich war, wird eine Mail rausgeschickt */ public function zgvRueckfragen() { @@ -751,7 +746,8 @@ class InfoCenter extends Auth_Controller $this->sendZgvMail($mail, $typ, $person); elseif (isError($insert)) $this->terminateWithJsonError('Fehler beim Speichern'); - }else + } + else { $insert = $this->ZGVPruefungModel->insert( array( @@ -781,7 +777,7 @@ class InfoCenter extends Auth_Controller } $hold = false; - if ($this->personloglib->getOnHoldDate($person_id) !== null) + if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv'))) $hold = true; $this->outputJsonSuccess( @@ -1162,107 +1158,7 @@ class InfoCenter extends Auth_Controller ->set_output($aktecontent->retval) ->_display(); } - - /** - * Gets the date until which a person is parked - * @param $person_id - */ - public function getPostponeDate($person_id) - { - $result = array( - 'type' => null, - 'date' => null - ); - - $parkedDate = $this->personloglib->getParkedDate($person_id); - - if (isset($parkedDate)) - { - $result['type'] = 'parked'; - $result['date'] = $parkedDate; - } - else - { - $onholdDate = $this->personloglib->getOnHoldDate($person_id); - - if (isset($onholdDate)) - { - $result['type'] = 'onhold'; - $result['date'] = $onholdDate; - } - } - - $this->outputJsonSuccess($result); - } - - /** - * Initializes parking of a person, i.e. a person is not expected to do any actions while parked - */ - public function park() - { - $person_id = $this->input->post('person_id'); - $date = $this->input->post('parkdate'); - - $result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid); - - $this->outputJson($result); - } - - /** - * Removes parking of a person - */ - public function unPark() - { - $person_id = $this->input->post('person_id'); - - $result = $this->personloglib->unPark($person_id); - - $this->outputJson($result); - } - - /** - * Sets a person on hold ("zurückstellen") - */ - public function setOnHold() - { - $person_id = $this->input->post('person_id'); - $date = $this->input->post('onholddate'); - - $result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid); - - $this->outputJson($result); - } - - /** - * Removed on hold status of a person - */ - public function removeOnHold() - { - $person_id = $this->input->post('person_id'); - - $result = $this->personloglib->removeOnHold($person_id); - - $this->outputJson($result); - } - - /** - * Gets the End date of the current Studienjahr - */ - public function getStudienjahrEnd() - { - $this->load->model('organisation/studienjahr_model', 'StudienjahrModel'); - - $result = $this->StudienjahrModel->getCurrStudienjahr(); - - $json = null; - - if (hasData($result)) - { - $json = $result->retval[0]->ende; - } - - $this->outputJsonSuccess(array($json)); - } + /** * Wrapper for setNavigationMenu, returns JSON message @@ -1484,7 +1380,6 @@ class InfoCenter extends Auth_Controller if($nachreichungAm < $today) $this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit')); - $akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ])); if (hasData($akte)) { diff --git a/application/controllers/system/infocenter/Rueckstellung.php b/application/controllers/system/infocenter/Rueckstellung.php new file mode 100644 index 000000000..62af633ca --- /dev/null +++ b/application/controllers/system/infocenter/Rueckstellung.php @@ -0,0 +1,135 @@ + 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') + ) + ); + + $this->load->model('crm/Rueckstellung_model', 'RueckstellungModel'); + $this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel'); + $this->load->model('person/Person_model', 'PersonModel'); + $this->load->library('PersonLogLib'); + + $this->_setAuthUID(); // sets property uid + + $this->_ci =& get_instance(); // get code igniter instance + } + + public function get($person_id) + { + $result = null; + $rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id); + + if (isError($rueckstellung)) + $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen')); + + if (hasData($rueckstellung)) + { + $rueckstellung = getData($rueckstellung)[0]; + $fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon)); + + $result = array( + 'von' => $fullName, + 'bezeichnung' => $rueckstellung->bezeichnung, + 'bis' => $rueckstellung->datum_bis, + 'status_kurzbz' => $rueckstellung->status_kurzbz + ); + + if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d')) + { + $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked')); + $result = null; + } + } + + $this->outputJsonSuccess($result); + } + + public function set() + { + $person_id = $this->input->post('person_id'); + $datum_bis = $this->input->post('datum_bis'); + $status_kurzbz = $this->input->post('status_kurzbz'); + + $result = $this->_ci->RueckstellungModel->insert( + array('person_id' => $person_id, + '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_id, $status_kurzbz); + + $this->outputJson($result); + } + + public function delete() + { + $person_id = $this->input->post('person_id'); + $status = $this->input->post('status'); + + $result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status)); + + if (isError($result)) + $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern')); + + $this->outputJson($result); + } + + public function getStatus($aktiv = true) + { + $this->_ci->RueckstellungStatusModel->addOrder('sort'); + $result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv)); + + if (isError($result)) + $this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen')); + + $this->outputJsonSuccess(getData($result)); + } + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } + + private function _log($person_id, $status_kurzbz) + { + $message = "Person $person_id set to $status_kurzbz"; + + $this->_ci->personloglib->log( + $person_id, + 'Action', + array( + 'name' => 'Person status set', + 'message' => $message, + 'success' => true + ), + 'bewerbung', + 'infocenter', + null, + $this->_uid + ); + } +} \ No newline at end of file diff --git a/application/libraries/PersonLogLib.php b/application/libraries/PersonLogLib.php index fe9a82504..f4f434fad 100644 --- a/application/libraries/PersonLogLib.php +++ b/application/libraries/PersonLogLib.php @@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); */ class PersonLogLib { - const PARKED_LOGNAME = 'Parked'; - const ONHOLD_LOGNAME = 'Onhold'; - /** * Constructor */ @@ -78,168 +75,6 @@ class PersonLogLib else show_error(getError($result)); } - - /** - * Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent) - * Done by adding a logentry in the future - * @param $person_id - * @param $date - * @param $taetigkeit_kurzbz - * @param string $app - * @param null $oe_kurzbz - * @param null $user - * @return insert object - */ - public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null) - { - $onhold = $this->getOnHoldDate($person_id); - - if (hasData($onhold)) - return error("Person already on hold"); - - $logjson = array( - 'name' => self::PARKED_LOGNAME - ); - - return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user); - } - - /** - * Unparks a person, i.e. removes all log entries in the future with logname for parking - * @param $person_id - * @return array with deleted logids - */ - public function unPark($person_id) - { - $deleted = array(); - - $result = $this->ci->PersonLogModel->getLogsInFuture($person_id); - if (hasData($result)) - { - foreach ($result->retval as $log) - { - $logdata = json_decode($log->logdata); - if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME) - { - $delresult = $this->ci->PersonLogModel->deleteLog($log->log_id); - if (isSuccess($delresult)) - { - $deleted[] = $log->log_id; - } - } - } - } - - return success($deleted); - } - - /** - * Gets date until which a person is parked - * @param $person_id - * @return the date if person is parked, null otherwise - */ - public function getParkedDate($person_id) - { - $result = $this->ci->PersonLogModel->getLogsInFuture($person_id); - - $parkeddate = null; - - if (hasData($result)) - { - foreach ($result->retval as $log) - { - $logdata = json_decode($log->logdata); - if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME) - { - $parkeddate = $log->zeitpunkt; - break; - } - } - } - - return $parkeddate; - } - - /** - * Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent). - * Done by adding a logentry with a special name. can be undone only manually by clicking button. - * @param $person_id - * @param $date - * @param $taetigkeit_kurzbz - * @param string $app - * @param null $oe_kurzbz - * @param null $user - * @return array - */ - public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null) - { - $parked = $this->getParkedDate($person_id); - - if (hasData($parked)) - return error("Person already parked"); - - $logjson = array( - 'name' => self::ONHOLD_LOGNAME - ); - - return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user); - } - - /** - * Removes on hold status, i.e. removes all log entries with logname for on hold - * @param $person_id - * @return array - */ - public function removeOnHold($person_id) - { - $deleted = array(); - - $result = $this->ci->PersonLogModel->filterLog($person_id); - if (hasData($result)) - { - foreach ($result->retval as $log) - { - $logdata = json_decode($log->logdata); - if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME) - { - $delresult = $this->ci->PersonLogModel->deleteLog($log->log_id); - if (isSuccess($delresult)) - { - $deleted[] = $log->log_id; - } - } - } - } - return success($deleted); - } - - /** - * Gets date until which a person is on hold - * @param $person_id - * @return the date if person is on hold, null otherwise - */ - public function getOnHoldDate($person_id) - { - $result = $this->ci->PersonLogModel->filterLog($person_id); - - $onholddate = null; - - if (hasData($result)) - { - foreach ($result->retval as $log) - { - $logdata = json_decode($log->logdata); - if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME) - { - $onholddate = $log->zeitpunkt; - break; - } - } - } - - return $onholddate; - } - /** * Saves a processstate log with specified parameters, including a specified log date. * @param $person_id diff --git a/application/models/crm/RueckstellungStatus_model.php b/application/models/crm/RueckstellungStatus_model.php new file mode 100644 index 000000000..a4cb391f1 --- /dev/null +++ b/application/models/crm/RueckstellungStatus_model.php @@ -0,0 +1,14 @@ +dbTable = 'public.tbl_rueckstellung_status'; + $this->pk = 'status_kurzbz'; + } +} \ No newline at end of file diff --git a/application/models/crm/Rueckstellung_model.php b/application/models/crm/Rueckstellung_model.php new file mode 100644 index 000000000..d2c39ffde --- /dev/null +++ b/application/models/crm/Rueckstellung_model.php @@ -0,0 +1,33 @@ +dbTable = 'public.tbl_rueckstellung'; + $this->pk = 'rueckstellung_id'; + $this->hasSequence = true; + } + + public function getByPersonId($person_id, $status = null) + { + $language_index = getUserLanguage() == 'German' ? 0 : 1; + + $this->addLimit(1); + $this->addJoin('tbl_rueckstellung_status', 'status_kurzbz'); + $this->addSelect('*, + array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung'); + $this->addOrder('datum_bis', 'DESC'); + + $where['person_id'] = $person_id; + + if (!isEmptyString($status)) + $where['status_kurzbz'] = $status; + + return $this->loadWhere($where); + } +} \ No newline at end of file diff --git a/application/views/system/infocenter/infocenterAbgewiesenData.php b/application/views/system/infocenter/infocenterAbgewiesenData.php index 40582a668..d09f0f41e 100644 --- a/application/views/system/infocenter/infocenterAbgewiesenData.php +++ b/application/views/system/infocenter/infocenterAbgewiesenData.php @@ -7,10 +7,11 @@ $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $LOGDATA_NAME = '\'Message sent\''; $LOGDATA_VON = '\'online\''; + $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; $query = ' SELECT - p.person_id AS "PersonID", + p.person_id AS "PersonId", ps.prestudent_id AS "PreStudentID", p.vorname AS "Vorname", p.nachname AS "Nachname", @@ -37,7 +38,15 @@ $query = ' AND l.zeitpunkt >= pss.insertamum ORDER BY l.log_id DESC LIMIT 1 - ) AS "Nachricht" + ) AS "Nachricht", + ( + SELECT SUM(konto.betrag) + FROM public.tbl_konto konto + LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr) + WHERE konto.person_id = p.person_id + AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' + AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + ) AS "Kaution" FROM public.tbl_prestudentstatus pss JOIN public.tbl_prestudent ps USING(prestudent_id) @@ -60,14 +69,16 @@ $query = ' 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', 'datasetRepresentation' => 'tablesorter', + 'checkboxes' => 'PersonId', 'columnsAliases' => array( - 'PersonID', + 'PersonId', 'PreStudentID', - 'Vorname', - 'Nachname', - 'Studiengang', - 'Abgewiesen am', - 'Nachricht' + ucfirst($this->p->t('person', 'vorname')) , + ucfirst($this->p->t('person', 'nachname')), + ucfirst($this->p->t('lehre', 'studiengang')), + ucfirst($this->p->t('infocenter', 'abgewiesenam')), + ucfirst($this->p->t('global', 'nachricht')), + ucfirst($this->p->t('infocenter', 'kaution')) ), 'formatRow' => function($datasetRaw) { @@ -80,6 +91,19 @@ $query = ' $datasetRaw->{'Nachricht'} = 'Ja'; } + if ($datasetRaw->{'Kaution'} === null) + { + $datasetRaw->{'Kaution'} = '-'; + } + else if ($datasetRaw->{'Kaution'} === '0.00') + { + $datasetRaw->{'Kaution'} = 'Bezahlt'; + } + else + { + $datasetRaw->{'Kaution'} = 'Offen'; + } + $datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i'); return $datasetRaw; } diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index de2bd1bca..bb5b84479 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -7,13 +7,12 @@ $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\''; - $LOGDATA_NAME_PARKED = '\'Parked\''; - $LOGDATA_NAME_ONHOLD = '\'Onhold\''; - $LOGTYPE_KURZBZ = '\'Processstate\''; + $POSTPONE_STATUS_PARKED = '\'parked\''; $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; $ORG_NAME = '\'InfoCenter\''; $ONLINE = '\'online\''; @@ -27,8 +26,6 @@ p.staatsbuergerschaft AS "Nation", pl.zeitpunkt AS "LockDate", pl.lockuser AS "LockUser", - pd.parkdate AS "ParkDate", - ohd.onholddate AS "OnholdDate", ( SELECT l.zeitpunkt FROM system.tbl_log l @@ -276,9 +273,9 @@ ) AS "ZGVMNationGruppe", ( SELECT tbl_organisationseinheit.bezeichnung - FROM public.tbl_benutzerfunktion + FROM public.tbl_benutzerfunktion JOIN public.tbl_organisationseinheit USING(oe_kurzbz) - WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) + WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( @@ -290,8 +287,18 @@ ORDER BY l.log_id DESC LIMIT 1 ) - LIMIT 1 - ) AS "InfoCenterMitarbeiter" + LIMIT 1 + ) AS "InfoCenterMitarbeiter", + rueck.datum_bis AS "HoldDate", + rueck.bezeichnung AS "Rueckstellgrund", + ( + SELECT SUM(konto.betrag) + FROM public.tbl_konto konto + LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr) + WHERE konto.person_id = p.person_id + AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' + AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -302,22 +309,24 @@ JOIN public.tbl_person sp ON sb.person_id = sp.person_id WHERE tpl.app = '.$APP.' ) pl USING(person_id) - LEFT JOIN ( - SELECT l.person_id, - l.zeitpunkt AS parkdate - FROM system.tbl_log l - WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' - AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.' - AND l.zeitpunkt >= NOW() - ) pd USING(person_id) LEFT JOIN ( - SELECT l.person_id, - l.zeitpunkt AS onholddate - FROM system.tbl_log l - WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' - AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.' - AND l.zeitpunkt >= NOW() - ) ohd USING(person_id) + SELECT + tbl_rueckstellung.person_id, + tbl_rueckstellung.datum_bis, + tbl_rueckstellung.status_kurzbz, + array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung + FROM public.tbl_rueckstellung + JOIN public.tbl_rueckstellung_status USING(status_kurzbz) + JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id + WHERE tbl_rueckstellung.rueckstellung_id = + ( + SELECT srueck.rueckstellung_id + FROM public.tbl_rueckstellung srueck + WHERE srueck.person_id = tbl_rueckstellung.person_id + AND datum_bis >= NOW() + ORDER BY srueck.datum_bis DESC LIMIT 1 + ) + ) rueck ON rueck.person_id = p.person_id WHERE EXISTS ( SELECT 1 @@ -344,7 +353,12 @@ AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.' ) ) - ORDER BY "LastAction" ASC'; + ORDER BY CASE + WHEN rueck.status_kurzbz IS NULL THEN 1 + WHEN rueck.status_kurzbz = ' .$POSTPONE_STATUS_PARKED .' THEN 2 + WHEN rueck.status_kurzbz != '. $POSTPONE_STATUS_PARKED .' THEN 3 + END, + rueck.datum_bis NULLS LAST, "LastAction" ASC'; $filterWidgetArray = array( 'query' => $query, @@ -366,8 +380,6 @@ ucfirst($this->p->t('person', 'nation')), ucfirst($this->p->t('global', 'sperrdatum')), ucfirst($this->p->t('global', 'gesperrtVon')), - ucfirst($this->p->t('global', 'parkdatum')), - ucfirst($this->p->t('global', 'rueckstelldatum')), ucfirst($this->p->t('global', 'letzteAktion')), 'Aktionstyp', 'AnzahlAktePflicht', @@ -383,7 +395,10 @@ 'ZGV Nation MA', 'ZGV Gruppe BA', 'ZGV Gruppe MA', - 'InfoCenter Mitarbeiter' + 'InfoCenter Mitarbeiter', + ucfirst($this->p->t('infocenter', 'rueckstelldatum')), + ucfirst($this->p->t('infocenter', 'rueckstellgrund')), + ucfirst($this->p->t('infocenter', 'kaution')) ), 'formatRow' => function($datasetRaw) { @@ -430,18 +445,13 @@ $datasetRaw->{'LockUser'} = '-'; } - if ($datasetRaw->{'ParkDate'} == null) + if ($datasetRaw->{'HoldDate'} == null) { - $datasetRaw->{'ParkDate'} = '-'; - } - - if ($datasetRaw->{'OnholdDate'} == null) - { - $datasetRaw->{'OnholdDate'} = '-'; + $datasetRaw->{'HoldDate'} = '-'; } else { - $datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i'); + $datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i'); } if ($datasetRaw->{'StgAbgeschickt'} == null) @@ -493,6 +503,24 @@ $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } + if ($datasetRaw->{'Rueckstellgrund'} === null) + { + $datasetRaw->{'Rueckstellgrund'} = '-'; + } + + if ($datasetRaw->{'Kaution'} === null) + { + $datasetRaw->{'Kaution'} = '-'; + } + else if ($datasetRaw->{'Kaution'} === '0.00') + { + $datasetRaw->{'Kaution'} = 'Bezahlt'; + } + else + { + $datasetRaw->{'Kaution'} = 'Offen'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { @@ -504,16 +532,12 @@ $mark = FilterWidget::DEFAULT_MARK_ROW_CLASS; } - if ($datasetRaw->OnholdDate != null) - { + if ($datasetRaw->Rueckstellgrund != null && $datasetRaw->Rueckstellgrund !== 'Parken') $mark = "onhold"; - } // Parking has priority over locking - if ($datasetRaw->ParkDate != null) - { + if ($datasetRaw->Rueckstellgrund === 'Parken') $mark = "text-info"; - } return $mark; } diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 066e5cff6..401e34099 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -24,42 +24,15 @@ 'public/js/tablesort/tablesort.js', 'public/js/infocenter/messageList.js', 'public/js/infocenter/infocenterDetails.js', + 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/zgvUeberpruefung.js', 'public/js/infocenter/docUeberpruefung.js', 'public/js/infocenter/stammdaten.js' ), 'phrases' => array( - 'infocenter' => array( - 'notizHinzufuegen', - 'notizAendern', - 'bewerberParken', - 'bewerberAusparken', - 'nichtsZumAusparken', - 'fehlerBeimAusparken', - 'fehlerBeimParken', - 'bewerberGeparktBis', - 'bewerberOnHold', - 'bewerberOnHoldEntfernen', - 'bewerberOnHoldBis', - 'nichtsZumEntfernen', - 'fehlerBeimEntfernen', - 'rueckstelldatumUeberschritten', - 'parkenZurueckstellenInfo', - 'zgvInPruefung', - 'zgvErfuellt', - 'zgvNichtErfuellt', - 'zgvErfuelltPruefung', - 'datumUngueltig', - 'nachreichDatumNichtVergangenheit' - ), - 'ui' => array( - 'gespeichert', - 'fehlerBeimSpeichern' - ), - 'global' => array( - 'bis', - 'zeilen' - ) + 'infocenter', + 'ui', + 'global' ) ); diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 13e1d5549..32315c145 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -13,6 +13,7 @@ $ORG_NAME = '\'InfoCenter\''; $IDENTITY = '\'identity\''; $ONLINE = '\'online\''; + $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; $query = ' SELECT @@ -264,7 +265,15 @@ $query = ' WHERE akte.person_id = p.person_id AND dokument_kurzbz = '. $IDENTITY .' LIMIT 1 - ) AS "AktenId" + ) AS "AktenId", + ( + SELECT SUM(konto.betrag) + FROM public.tbl_konto konto + LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr) + WHERE konto.person_id = p.person_id + AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' + AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -337,7 +346,8 @@ $query = ' 'ZGV Nation BA', 'ZGV Nation MA', 'InfoCenter Mitarbeiter', - 'Identitätsnachweis' + 'Identitätsnachweis', + ucfirst($this->p->t('infocenter', 'kaution')) ), 'formatRow' => function($datasetRaw) { @@ -453,6 +463,18 @@ $query = ' $datasetRaw->{'AktenId'} = '-'; } + if ($datasetRaw->{'Kaution'} === null) + { + $datasetRaw->{'Kaution'} = '-'; + } + else if ($datasetRaw->{'Kaution'} === '0.00') + { + $datasetRaw->{'Kaution'} = 'Bezahlt'; + } + else + { + $datasetRaw->{'Kaution'} = 'Offen'; + } return $datasetRaw; }, diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index ea1fab83c..e6b6d2495 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -9,6 +9,7 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $ORG_NAME = '\'InfoCenter\''; + $STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\''; $query = ' SELECT @@ -195,7 +196,14 @@ $query = ' LIMIT 1 ) LIMIT 1 - ) AS "InfoCenterMitarbeiter" + ) AS "InfoCenterMitarbeiter", + ( + SELECT SUM(konto.betrag) + FROM public.tbl_konto konto + WHERE konto.person_id = p.person_id + AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' + AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .' + ) AS "Kaution" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -256,7 +264,8 @@ $query = ' 'Reihungstest Datum', 'ZGV Nation BA', 'ZGV Nation MA', - 'InfoCenter Mitarbeiter' + 'InfoCenter Mitarbeiter', + ucfirst($this->p->t('infocenter', 'kaution')) ), 'formatRow' => function($datasetRaw) { @@ -359,6 +368,19 @@ $query = ' $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } + if ($datasetRaw->{'Kaution'} === null) + { + $datasetRaw->{'Kaution'} = '-'; + } + else if ($datasetRaw->{'Kaution'} === '0.00') + { + $datasetRaw->{'Kaution'} = 'Bezahlt'; + } + else + { + $datasetRaw->{'Kaution'} = 'Offen'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/infocenterZgvDetails.php b/application/views/system/infocenter/infocenterZgvDetails.php index cf3ffad8b..7636647ab 100644 --- a/application/views/system/infocenter/infocenterZgvDetails.php +++ b/application/views/system/infocenter/infocenterZgvDetails.php @@ -26,6 +26,7 @@ 'public/js/tablesort/tablesort.js', 'public/js/infocenter/messageList.js', 'public/js/infocenter/infocenterDetails.js', + 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/zgvUeberpruefung.js' ), 'phrases' => array( diff --git a/application/views/system/infocenter/infocenterZgvUeberpruefungData.php b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php index 5bfa5b078..d088d6b51 100644 --- a/application/views/system/infocenter/infocenterZgvUeberpruefungData.php +++ b/application/views/system/infocenter/infocenterZgvUeberpruefungData.php @@ -5,6 +5,7 @@ $INTERESSENT_STATUS = '\'Interessent\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; $oeKurz = '\''. implode('\',\'', $oeKurz) . '\''; +$ABGEWIESENER_STATUS = '\'Abgewiesener\''; $query = ' SELECT @@ -22,6 +23,7 @@ $query = ' AND zgvstatus.datum IN ( SELECT MAX(zgvstatus.datum) FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id) + AND get_rolle_prestudent(prestudent_id, NULL) != '. $ABGEWIESENER_STATUS .' ORDER BY ps.prestudent_id '; diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php index 6357b4b52..731469957 100644 --- a/content/student/studentoverlay.js.php +++ b/content/student/studentoverlay.js.php @@ -2191,14 +2191,26 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_ // Convert bewerbung_abgeschicktamum to ISO-Date if(bewerbung_abgeschicktamum != '') { - if(bewerbung_abgeschicktamum.length != 19) + if(bewerbung_abgeschicktamum.length < 10) { - bewerbung_abgeschicktamum = ''; + alert('Abgeschicktdatum ist ungueltig'); + return false; } else { datepart = bewerbung_abgeschicktamum.substring(0, 10); timepart = bewerbung_abgeschicktamum.substring(11); + + timepart_arr = timepart.split(':'); + + for (i = 0; i <= 2; i++) + { + if (typeof timepart_arr[i] === 'undefined' || timepart_arr[i].length !== 2) + { + timepart_arr[i] = '00'; + } + } + arr = datepart.split('.'); if(arr[0].length==1) @@ -2207,7 +2219,7 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_ if(arr[1].length==1) arr[1]='0'+arr[1]; - bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart; + bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart_arr.join(":"); } } diff --git a/include/rueckstellung.class.php b/include/rueckstellung.class.php new file mode 100644 index 000000000..82662f8bf --- /dev/null +++ b/include/rueckstellung.class.php @@ -0,0 +1,38 @@ +db_add_param($person_id)." + AND status_kurzbz = 'parked' + AND datum_bis >= now();"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Löschen des geparkten Eintrages'; + return false; + } + } +} +?> diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 7e6742fda..186479a8f 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -15,15 +15,11 @@ const STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER = "InfocenterSTGfreigegebenSe //Statusgründe for which no Studiengang Freigabe Message should be sent const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027]; -const PARKEDNAME = 'parked'; -const ONHOLDNAME = 'onhold'; - /** * javascript file for infocenterDetails page */ $(document).ready(function () { - InfocenterDetails._formatMessageTable(); InfocenterDetails._formatNotizTable(); InfocenterDetails._formatLogTable(); @@ -88,7 +84,7 @@ $(document).ready(function () ); //check if person is postponed (parked, on hold...) and display it - InfocenterDetails.getPostponeDate(personid); + Rueckstellung.get(personid); if ($(document).scrollTop() > 20) $("#scrollToTop").show(); @@ -374,155 +370,6 @@ var InfocenterDetails = { } ); }, - getStudienjahrEnd: function() - { - FHC_AjaxClient.ajaxCallGet( - CALLED_PATH + "/getStudienjahrEnd", - null, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - { - var engdate = $.datepicker.parseDate("yy-mm-dd", FHC_AjaxClient.getData(data)[0]); - - if (engdate.getDate() === 31) - engdate.setDate(engdate.getDate() - 1); - engdate.setMonth(engdate.getMonth() + 3); - - var gerdate = $.datepicker.formatDate("dd.mm.yy", engdate); - $("#postponedate").val(gerdate); - } - }, - errorCallback: function() - { - FHC_DialogLib.alertError("error when getting Studienjahr end"); - }, - veilTimeout: 0 - } - ); - }, - getPostponeDate: function(personid) - { - FHC_AjaxClient.ajaxCallGet( - CALLED_PATH + "/getPostponeDate/"+encodeURIComponent(personid), - null, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - { - var postponeobj = FHC_AjaxClient.getData(data); - InfocenterDetails._refreshPostpone(postponeobj); - InfocenterDetails._refreshLog(); - if (postponeobj === null || postponeobj.type === null) - InfocenterDetails.getStudienjahrEnd(); - } - }, - errorCallback: function() - { - FHC_DialogLib.alertError("error when getting parked status"); - }, - veilTimeout: 0 - } - ); - }, - parkPerson: function(personid, date) - { - var parkError = function(){ - $("#postponemsg").text(" Fehler beim Parken!"); - }; - - FHC_AjaxClient.ajaxCallPost( - CALLED_PATH + '/park', - { - "person_id": personid, - "parkdate": date - }, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - InfocenterDetails.getPostponeDate(personid); - else - { - parkError(); - } - }, - errorCallback: parkError, - veilTimeout: 0 - } - ); - }, - unparkPerson: function(personid) - { - FHC_AjaxClient.ajaxCallPost( - CALLED_PATH + '/unpark', - { - "person_id": personid - }, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - { - InfocenterDetails.getPostponeDate(personid); - } - else - $("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumAusparken')); - }, - errorCallback: function(){ - $("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimAusparken')); - }, - veilTimeout: 0 - } - ); - }, - setPersonOnHold: function(personid, date) - { - var onHoldError = function(){ - $("#postponemsg").text(" Fehler beim Setzen auf On Hold!"); - }; - - FHC_AjaxClient.ajaxCallPost( - CALLED_PATH + '/setOnHold', - { - "person_id": personid, - "onholddate": date - }, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - InfocenterDetails.getPostponeDate(personid); - else - { - onHoldError(); - } - }, - errorCallback: onHoldError, - veilTimeout: 0 - } - ); - }, - removePersonOnHold: function(personid) - { - FHC_AjaxClient.ajaxCallPost( - CALLED_PATH + '/removeOnHold', - { - "person_id": personid - }, - { - successCallback: function(data, textStatus, jqXHR) { - if (FHC_AjaxClient.hasData(data)) - { - InfocenterDetails.getPostponeDate(personid); - } - else - $("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen')); - }, - errorCallback: function(){ - $("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen')); - }, - veilTimeout: 0 - } - ); - }, getPrestudentData: function(personid, callback) { FHC_AjaxClient.ajaxCallGet( @@ -943,97 +790,6 @@ var InfocenterDetails = { } ); }, - _refreshPostpone: function(postponeobj) - { - var personid = $("#hiddenpersonid").val(); - if (postponeobj === null || postponeobj.date === null || postponeobj.type === null) - { - //show both park and on hold buttons if not parked and not on hold - $("#postponing").html( - '