Merge branch 'master' into feature-29133/einzelne_studiengaenge_aus_issues_check_ausnehmen

This commit is contained in:
KarpAlex
2023-05-21 17:38:49 +02:00
31 changed files with 1057 additions and 642 deletions
@@ -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)) {
@@ -0,0 +1,135 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Rueckstellung extends Auth_Controller
{
private $_ci; // Code igniter instance
private $_uid;
public function __construct()
{
parent::__construct(
array(
'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')
)
);
$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
);
}
}
-165
View File
@@ -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
+75
View File
@@ -0,0 +1,75 @@
<?php
/**
* Copyright (C) 2022 fhcomplete.net
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
*/
require_once(dirname(__FILE__).'/../../vendor/nategood/httpful/bootstrap.php');
/**
* Simple client to call the signature server
*/
class SignatureLib
{
// -------------------------------------------------------------------------------------------------
// Public static methods
/**
* Returns the list of signature inside the given file
*/
public static function list($inputFileName)
{
try
{
// Get the content of the given file
$inputFileContent = file_get_contents($inputFileName);
if ($inputFileContent === false) // if failed
{
error_log('An error occurred while getting the content from: '.$inputFileName);
}
else
{
// Posts the given file content + file name and expects a response in JSON format
$resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
->sendsJson()
->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
->expectsJson()
->send();
}
}
catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
{
error_log($cee->getMessage());
}
catch (Exception $e) // any other exception
{
error_log($e->getMessage());
}
// If the response is fine
if (isset($resultPost->body) && is_object($resultPost->body)
&& isset($resultPost->body->retval) && is_array($resultPost->body->retval))
{
return $resultPost->body->retval;
}
// Otherwise return a null as error
return null;
}
}
@@ -0,0 +1,14 @@
<?php
class RueckstellungStatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung_status';
$this->pk = 'status_kurzbz';
}
}
@@ -0,0 +1,33 @@
<?php
class Rueckstellung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->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);
}
}
@@ -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;
}
@@ -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;
}
@@ -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'
)
);
@@ -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;
},
@@ -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) {
@@ -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(
@@ -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
';
+59 -6
View File
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
if (!$db = new basis_db())
$db=false;
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n";
$htmlstr .= "<input type='hidden' name='command' value='update'>\n";
$htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n";
if(!$row->abgabedatum)
$uploadedDocumentSigned = null;
if (!$row->abgabedatum)
{
if ($row->datum<date('Y-m-d'))
{
@@ -626,8 +629,7 @@ while ($row=@$db->db_fetch_object($result))
$fcol='#000000';
}
}
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked=\"checked\"':'')." >";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
if($row->fixtermin=='t')
{
$htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>";
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= " </select></td>\n";
$htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n";
$htmlstr .= " <td>".($row->abgabedatum==''?'&nbsp;':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n";
if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
{
$htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>";
if(!$row->abgabedatum)
if (!$row->abgabedatum)
{
$htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>";
}
@@ -692,6 +695,56 @@ while ($row=@$db->db_fetch_object($result))
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
{
$signaturVorhanden = false;
if ($row->paabgabetyp_kurzbz == 'end')
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
$signaturVorhanden = true;
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
}
}
}
if ($uploadedDocumentSigned != null)
{
$htmlstr .= '
<td>
<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$uploadedDocumentSigned.'</b>
</div>
</td>';
}
elseif($signaturVorhanden)
{
$htmlstr .= '
<td>
<div style="color: #198754; background-color: #d1e7dd; border-color: #a3cfbb; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$p->t('abgabetool/uploadedDocumentSigned').'</b>
</div>
</td>';
}
}
else
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
$htmlstr .= " </tr>\n";
@@ -710,7 +763,7 @@ $htmlstr .= '<tr id="'.$db->convert_html_chars($projektarbeit_id).'">'."\n";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>";
$htmlstr .= "<td>&nbsp;&nbsp;</td>";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n";
$qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'";
+76 -6
View File
@@ -36,6 +36,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
$anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache);
@@ -93,6 +94,7 @@ else
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
$abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1');
$seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1');
$signaturVorhanden = (isset($_POST['signaturVorhanden']) && $_POST['signaturVorhanden']=='true'?true:false);
}
$user = get_uid();
@@ -111,6 +113,7 @@ $titel = $projektarbeit_obj->titel;
$person = new person();
$person->load($bid);
$betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost;
$uploadedDocumentSigned = null;
if($uid!=$user)
{
@@ -258,6 +261,35 @@ if($command=='add')
echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br>&nbsp;";
$command='';
}
if ($signaturVorhanden === false)
{
// Mail an Studiengang wenn keine Signatur gefunden wurde
$student = new student();
if(!$student->load($projektarbeit_obj->student_uid))
die($p->t('global/userNichtGefunden'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
$subject = 'Abgabe ohne Signatur';
$tomail = $stg_obj->email;
$data = array(
'vorname' => $student->vorname,
'nachname' => $student->nachname,
'studiengang' => $stg_obj->bezeichnung
);
$mailres = sendSanchoMail(
'ParbeitsbeurteilungSiganturFehlt',
$data,
$tomail,
$subject,
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
}
else
{
@@ -280,11 +312,11 @@ if($command=="update" && $error!=true)
$extensions = explode(".", $_FILES['datei']['name']);
if(strtoupper(end($extensions))=='PDF')
{
if($paabgabetyp_kurzbz!='end')
if ($paabgabetyp_kurzbz != 'end')
{
//"normaler" Upload
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"');
@@ -299,18 +331,40 @@ if($command=="update" && $error!=true)
else
{
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
}
}$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
}
else
else // endupload type
{
//Upload der Endabgabe - Eingabe der Zusatzdaten
$command='add';
if(!$error)
if (!$error)
{
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
}
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
$signaturVorhanden = true;
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$signaturVorhanden = false;
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSignedStudent');
}
}
/*$qry="UPDATE campus.tbl_paabgabe SET
abgabedatum = now(),
updatevon = '".$user."',
@@ -339,6 +393,7 @@ if($command=="update" && $error!=true)
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
$htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n";
$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
$htmlstr .= '<input type="hidden" name="signaturVorhanden" value="'.($signaturVorhanden?'true':'false').'">'."\n";
$htmlstr .= "<tr>\n";
$htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>";
$sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache");
@@ -372,6 +427,21 @@ if($command=="update" && $error!=true)
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td>
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n";
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
// If there are info about the signed document
if ($uploadedDocumentSigned != null)
{
$htmlstr .= "<tr>\n";
$htmlstr .= "<td colspan='2' style='text-align: center;'>";
$htmlstr .= '<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 15px; border: 1px solid; border-radius: 4px;">
<b>'.$uploadedDocumentSigned.'</b></td>
</div>';
$htmlstr .= "</td>";
$htmlstr .= "</tr>\n";
}
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
$htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n";
$htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>";
$htmlstr .="<tr></tr><td>&nbsp;</td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr>
+2 -1
View File
@@ -353,7 +353,8 @@ function writePruefungsTable(e, data, anmeldung)
var time = termin[1].substring(0,5);
termin = termin[0].split("-");
// Studierende dürfen sich 2 Monate vor Prüfungen anmelden
// Studierende dürfen sich 2 Monate vor Prüfungen anmelden
var minimumFrist = new Date(termin[0], termin[1]-1,termin[2]);
minimumFrist.setMonth(minimumFrist.getMonth() - 2);
+20
View File
@@ -207,6 +207,26 @@ define('TABLE_ID','_id');
define('TABLE_BEGIN','tbl_');
define('VIEW_BEGIN','vw_');
/**
* Signatur
* DEFAULT: https://signatur.example.com/api/sign
*/
// Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
//Gibt an, ob das Studienbuchblatt im CIS gedruckt werden kann
define('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN',true);
+11 -3
View File
@@ -188,14 +188,22 @@ define('FHC_REST_PASSWORD', 'password');
* Signatur
* DEFAULT: https://signatur.example.com/api/sign
*/
define('SIGNATUR_URL', 'https://signatur.example.com/api/sign');
// Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'username');
define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'password');
define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
/**
* Datenverbund Anbindung
*/
+15 -3
View File
@@ -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(":");
}
}
+8 -7
View File
@@ -557,7 +557,7 @@ class dokument_export
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL);
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL.'/'.SIGNATUR_SIGN_API);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete");
@@ -589,18 +589,19 @@ class dokument_export
curl_close($ch);
$resultdata = json_decode($result);
if (isset($resultdata->success) && $resultdata->success == 'true')
// If it is success
if (isset($resultdata->error) && $resultdata->error == 0)
{
$this->signed_filename = $this->temp_folder .'/signed.pdf';
file_put_contents($this->signed_filename, base64_decode($resultdata->document));
file_put_contents($this->signed_filename, base64_decode($resultdata->retval));
return true;
}
else
else // otherwise if it is an error
{
if(isset($resultdata->errormsg))
$this->errormsg = $resultdata->errormsg;
if(isset($resultdata->retval))
$this->errormsg = $resultdata->retval;
else
$this->errormsg = 'Unknown Error:'.print_r($resultdata,true);
$this->errormsg = 'Unknown Error:'.print_r($resultdata, true);
return false;
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/sprache.class.php');
class rueckstellung extends basis_db
{
public function __construct()
{
parent::__construct();
}
/**
* Löscht alle Einträge mit dem Status "parked" von der übergebenen Person_id, die in der Zukunft liegen.
* @param $person_id
* @return bool
*/
public function deleteParked($person_id)
{
$qry = "DELETE
FROM public.tbl_rueckstellung
WHERE person_id = ".$this->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;
}
}
}
?>
+3
View File
@@ -91,6 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung heru
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='Es konnte keine gültige digitale Signatur erkannt werden. Bitte wenden Sie sich an Ihren Studiengang ob Ihre Endabgabe erfolgreich war und die Arbeit zur Benotung vorgelegt werden kann.';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signatur fehlt';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signatur vorhanden';
$this->phrasen['abgabetool/senatsMitglied']='Mitglied Prüfungssenat';
$this->phrasen['abgabetool/abgegeben']='Abgegeben, in Beurteilung';
?>
+3
View File
@@ -91,6 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment downl
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='The document does not contain an electronic signature. Please inform your Dregree Programm to verify the upload';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signature not found';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signature found';
$this->phrasen['abgabetool/senatsMitglied']='Examiner';
$this->phrasen['abgabetool/abgegeben']='handed in, in assessment';
?>
+1 -245
View File
@@ -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(
'<div class="form-group form-inline">'+
'<button class="btn btn-default" id="parklink" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberParken') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="onholdlink" type="button""><i class="fa fa-anchor"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberOnHold') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<label id="postponedatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="postponedate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="postponemsg"></span>'+
'</div>');
$("#postponedate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 1
});
$("#parklink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.parkPerson(personid, date);
}
);
$("#onholdlink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.setPersonOnHold(personid, date);
}
);
}
else
{
//info if parked/on hold and possibility to undo parking/on hold
var postponedate = $.datepicker.parseDate("yy-mm-dd", postponeobj.date);
var gerpostponedate = $.datepicker.formatDate("dd.mm.yy", postponedate);
//var postponehtml = "";
var callbackforundo = null;
var removePhrase = "";
var postponedPhrase = "";
var postponedtext = "";
if (postponeobj.type === PARKEDNAME)
{
removePhrase = 'bewerberAusparken';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberGeparktBis')+'&nbsp;&nbsp;'+gerpostponedate;
callbackforundo = function ()
{
InfocenterDetails.unparkPerson(personid);
}
}
else if (postponeobj.type === ONHOLDNAME)
{
removePhrase = 'bewerberOnHoldEntfernen';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberOnHoldBis')+'&nbsp;&nbsp;'+gerpostponedate;
var currdate = new Date();
if (currdate > postponedate)
postponedtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'rueckstelldatumUeberschritten')+"'>"+postponedtext+"</span>";
callbackforundo = function ()
{
InfocenterDetails.removePersonOnHold(personid);
}
}
var postponehtml = postponedtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unpostponelink"><i class="fa fa-sign-out"></i>&nbsp;'+FHC_PhrasesLib.t('infocenter', removePhrase)+'</button>&nbsp;'+
'<span id="unpostponemsg"></span>';
$("#postponing").html(
postponehtml
);
$("#unpostponelink").click(
callbackforundo
);
}
},
_formatMessageTable: function()
{
Tablesort.addTablesorter("msgtable", [[0, 1], [2, 0]], ["zebra", "filter"], 2);
+185
View File
@@ -0,0 +1,185 @@
const CONTROLLER_RUECKSTELLUNG_URL = "system/infocenter/Rueckstellung";
var Rueckstellung = {
get: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/get/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var rueckstellungobj = FHC_AjaxClient.getData(data);
Rueckstellung._refreshRueckstellung(rueckstellungobj);
}
else
{
Rueckstellung._addRueckstellungButtons();
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
getStatus: function()
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/getStatus",
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
let status = FHC_AjaxClient.getData(data);
$.each(status, function(key, value)
{
$('#rueckstellungtype').append($("<option/>")
.val(value.status_kurzbz)
.text(value.bezeichnung_mehrsprachig[0])
)
});
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
set: function(personid, date, type)
{
if (type === null)
return false;
var onRueckstellungError = function(){
$("#rueckstellungmsg").text(" Fehler beim Setzen auf " + type + "!");
};
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/set',
{
"person_id": personid,
"datum_bis": date,
"status_kurzbz": type,
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
InfocenterDetails._refreshLog()
}
else
{
onRueckstellungError();
}
},
errorCallback: onRueckstellungError,
veilTimeout: 0
}
);
},
delete: function(personid, status = null)
{
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/delete',
{
"person_id": personid,
"status": status
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
}
else
$("#unrueckstellungmsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unrueckstellungmsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
);
},
_refreshRueckstellung: function(rueckstellungobj)
{
var personid = $("#hiddenpersonid").val();
var rueckstellungdate = $.datepicker.parseDate("yy-mm-dd", rueckstellungobj.bis);
var gerrueckstellungdate = $.datepicker.formatDate("dd.mm.yy", rueckstellungdate);
var removetext = FHC_PhrasesLib.t('infocenter', 'statusZuruecksetzen');
var rueckstellungdtext = FHC_PhrasesLib.t('global', 'status') + ": '" + rueckstellungobj.bezeichnung + "' " + FHC_PhrasesLib.t('global', 'bis') + ": " + gerrueckstellungdate +
" " + FHC_PhrasesLib.t('ui', 'von') + ": " + rueckstellungobj.von;
var currdate = new Date();
if (currdate > rueckstellungdate)
rueckstellungdtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'datumuberschritten')+"'>"+rueckstellungdtext+"</span>";
var callbackforundo = function ()
{
Rueckstellung.delete(personid, rueckstellungobj.status_kurzbz);
}
var rueckstellunghtml = rueckstellungdtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unrueckstellunglink"><i class="fa fa-sign-out"></i>&nbsp;' + removetext +'</button>&nbsp;'+
'<span id="unrueckstellungmsg"></span>';
$("#postponing").html(
rueckstellunghtml
);
$("#unrueckstellunglink").click(
callbackforundo
);
},
_addRueckstellungButtons: function()
{
var personid = $("#hiddenpersonid").val();
$("#postponing").html(
'<div class="form-group form-inline">'+
'<div class="form-group">' +
'<select id="rueckstellungtype" class="form-control">' +
'<option disabled selected>' + FHC_PhrasesLib.t('infocenter', 'statusAuswahl') + '</option>' +
'</select>' + '&nbsp;&nbsp;' +
'<button class="btn btn-default" id="addRueckstellung" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'statusSetzen') + '</button>&nbsp;'+
'<label id="rueckstellungdatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="rueckstellungdate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="rueckstellungmsg"></span>'+
'</div>' +
'</div>');
Rueckstellung.getStatus();
var 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
});
$("#addRueckstellung").click(
function ()
{
var date = $("#rueckstellungdate").val();
var type = $("#rueckstellungtype").val();
Rueckstellung.set(personid, date, type);
}
);
},
}
+2 -2
View File
@@ -140,7 +140,7 @@ var zgvUeberpruefung = {
var datum = new Date();
datum.setDate(datum.getDate() + 14);
var formatedDate = $.datepicker.formatDate("mm/dd/yy", datum);
InfocenterDetails.setPersonOnHold(response.person_id, formatedDate);
Rueckstellung.set(response.person_id, formatedDate, 'onhold_zgv');
}
InfocenterDetails._refreshLog();
@@ -171,7 +171,7 @@ var zgvUeberpruefung = {
var response = FHC_AjaxClient.getData(data)
if (response.openZgv === false)
InfocenterDetails.removePersonOnHold(response.person_id);
Rueckstellung.delete(response.person_id, 'onhold_zgv');
FHC_DialogLib.alertSuccess(response.msg);
} else if (FHC_AjaxClient.isError(data))
+1 -1
View File
@@ -33,7 +33,7 @@ require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
require_once('dbupdate_3.4/17512_fehlercode_constraints.php');
require_once('dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php');
require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php');
require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php');
require_once('dbupdate_3.4/27949_infocenter_zurueckstellen_mit_grund.php');
require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php');
require_once('dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php');
@@ -0,0 +1,85 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add table tbl_rueckstellung_status
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung_status LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung_status
(
status_kurzbz character varying(32),
bezeichnung_mehrsprachig character varying(256)[],
sort integer,
aktiv boolean default true
);
ALTER TABLE public.tbl_rueckstellung_status ADD CONSTRAINT pk_tbl_postpone_status_status_kurzbz PRIMARY KEY (status_kurzbz);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('parked', '{Parken, Park}', 1);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_bmi', '{Bundesministerium, Federal Ministry}', 2);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_zgv', '{ZGV Prüfung, ZGV examination}', 3);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_drittstaat', '{Drittstaat, Third country}', 4);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remone', '{Reminder 1, Reminder 1}', 5);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remtwo', '{Reminder 2, Reminder 2}', 6);
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung_status TO vilesci;
GRANT SELECT ON public.tbl_rueckstellung_status TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung_status: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung_status: Tabelle hinzugefuegt<br>';
}
// Add table tbl_rueckstellung
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung
(
rueckstellung_id integer NOT NULL,
person_id integer NOT NULL,
status_kurzbz character varying(32) NOT NULL,
datum_bis timestamp NOT NULL,
insertamum timestamp without time zone default now(),
insertvon character varying(32)
);
CREATE SEQUENCE public.tbl_rueckstellung_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT pk_tbl_rueckstellung PRIMARY KEY (rueckstellung_id);
ALTER TABLE public.tbl_rueckstellung ALTER COLUMN rueckstellung_id SET DEFAULT nextval('tbl_rueckstellung_id_seq');
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_status_kurzbz FOREIGN KEY (status_kurzbz) REFERENCES public.tbl_rueckstellung_status(status_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO vilesci;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung TO vilesci;
GRANT SELECT, UPDATE, DELETE ON public.tbl_rueckstellung TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Tabelle hinzugefuegt<br>';
//Übernahme von "zurückgestellten" und "geparkten" Personen
$qry = "
INSERT INTO public.tbl_rueckstellung (person_id, status_kurzbz, datum_bis, insertvon)
SELECT person_id,
CASE WHEN
(lower(l.logdata->>'name') = 'onhold')
THEN 'onhold_remone'
ELSE lower(l.logdata->>'name')
END,
zeitpunkt, insertvon
FROM system.tbl_log l
WHERE (l.logdata->>'name' = 'Onhold' OR l.logdata->>'name' = 'Parked') AND zeitpunkt >= NOW();";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Bestehene Eintraege uebernommen<br>';
}
+6 -3
View File
@@ -40,7 +40,9 @@ $filters = array(
{"name": "User/Operator"},
{"name": "InfoCenterMitarbeiter"},
{"name": "LockUser"},
{"name": "OnholdDate"}
{"name": "HoldDate"},
{"name": "Rueckstellgrund"},
{"name": "Kaution"}
],
"filters": [
{
@@ -511,13 +513,14 @@ $filters = array(
{
"name": "Abgewiesen - Alle",
"columns": [
{"name": "PersonID"},
{"name": "PersonId"},
{"name": "PreStudentID"},
{"name": "Vorname"},
{"name": "Nachname"},
{"name": "Studiengang"},
{"name": "AbgewiesenAm"},
{"name": "Nachricht"}
{"name": "Nachricht"},
{"name": "Kaution"}
],
"filters": []
}
+122 -2
View File
@@ -3747,8 +3747,8 @@ $phrases = array(
)
),
array(
'app' => 'core',
'category' => 'global',
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'rueckstelldatum',
'insertvon' => 'system',
'phrases' => array(
@@ -3766,6 +3766,26 @@ $phrases = array(
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'rueckstellgrund',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Rückstellgrund',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'onHold reason',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
@@ -4114,6 +4134,26 @@ When on hold, the date is only a reminder.',
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'kaution',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Kaution',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Deposit',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'password',
@@ -17703,6 +17743,86 @@ array(
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusSetzen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status setzen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Set state',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'abgewiesenam',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abgewiesen am',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Rejected on',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusAuswahl',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status ausw&auml;hlen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Select status',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusZuruecksetzen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status zur&uuml;cksetzen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Reset status',
'description' => '',
'insertvon' => 'system'
)
)
),
);
+3 -1
View File
@@ -160,8 +160,10 @@ $tage_imJahr = $ende_imJahr->diff($beginn_imJahr)->days + 1;
$wochen_imJahr = $tage_imJahr / 7;
// Sommer- und Wintersemester im BIS Meldungsjahr
$ss_kurzbz = $studiensemester->getBeforePrevious();
//$ss_kurzbz = $studiensemester->getBeforePrevious();
$ws_kurzbz = $studiensemester->getStudienjahrStudiensemester($stsem);
$ss_kurzbz = $studiensemester->getPreviousFrom($ws_kurzbz);
$ss = new studiensemester($ss_kurzbz);
$ws = new studiensemester($ws_kurzbz);