added Parking feauture to infocenter

This commit is contained in:
alex
2018-05-16 20:00:19 +02:00
parent 24d4c316e4
commit 6a67183738
8 changed files with 400 additions and 33 deletions
@@ -6,7 +6,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
* Also shows infocenter-related data for a person and its prestudents, enables document and zgv checks,
* displays and saves Notizen for a person, logs infocenter-related actions for a person
*/
class InfoCenter extends VileSci_Controller
class InfoCenter extends FHC_Controller
{
// App and Verarbeitungstaetigkeit name for logging
const APP = 'infocenter';
@@ -21,12 +21,14 @@ class InfoCenter extends VileSci_Controller
'saveformalgep' => array(
'logtype' => 'Action',
'name' => 'Document formally checked',
'message' => 'Document %s formally checked, set to %s'
'message' => 'Document %s formally checked, set to %s',
'success' => null
),
'savezgv' => array(
'logtype' => 'Action',
'name' => 'ZGV saved',
'message' => 'ZGV saved for degree program %s, prestudentid %s'
'message' => 'ZGV saved for degree program %s, prestudentid %s',
'success' => null
),
'abgewiesen' => array(
'logtype' => 'Processstate',
@@ -41,12 +43,14 @@ class InfoCenter extends VileSci_Controller
'savenotiz' => array(
'logtype' => 'Action',
'name' => 'Note added',
'message' => 'Note with title %s was added'
'message' => 'Note with title %s was added',
'success' => null
),
'updatenotiz' => array(
'logtype' => 'Action',
'name' => 'Note updated',
'message' => 'Note with title %s was updated'
'message' => 'Note with title %s was updated',
'success' => null
)
);
private $uid; // contains the UID of the logged user
@@ -473,12 +477,11 @@ class InfoCenter extends VileSci_Controller
)
);
$json = FALSE;
$json = false;
if (isSuccess($result))
{
$json = TRUE;
$json = true;
//set log "Notiz updated"
$this->_log($person_id, 'updatenotiz', array($titel));
@@ -543,6 +546,61 @@ class InfoCenter extends VileSci_Controller
->_display();
}
/**
* Gets the date until which a person is parked
* @param $person_id
*/
public function getParkedDate($person_id)
{
$result = $this->personloglib->getParkedDate($person_id);
$this->output
->set_content_type('application/json')
->set_output(json_encode($result));
}
/**
* Initializes parking of a person, i.e. a person is not expected to do any actions while it is parked
*/
public function park()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('parkdate');
$this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->uid);
}
/**
* Removes parking of a person
*/
public function unPark()
{
$person_id = $this->input->post('person_id');
$this->personloglib->unPark($person_id);
}
/**
* Gets the End date of the current Studienjahr
*/
public function getStudienjahrEnd()
{
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
$result = $this->StudienjahrModel->getCurrStudienjahr();
$json = false;
if (hasData($result))
{
$json = $result->retval[0]->ende;
}
$this->output
->set_content_type('application/json')
->set_output(json_encode($json));
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
@@ -762,7 +820,7 @@ class InfoCenter extends VileSci_Controller
show_error($user_person->retval);
}
$messagelink = base_url('/index.ci.php/system/Messages/write/'.$user_person->retval[0]->person_id);
$messagelink = site_url('/system/Messages/write/'.$user_person->retval[0]->person_id);
$data = array (
'lockedby' => $lockedby,
@@ -898,15 +956,20 @@ class InfoCenter extends VileSci_Controller
{
$logdata = $this->logparams[$logname];
$datatolog = array(
'name' => $logdata['name']
);
if (isset($logdata['message']))
$datatolog['message'] = vsprintf($logdata['message'], $messageparams);
if (array_key_exists('success', $logdata))
$datatolog['success'] = true;
$this->personloglib->log(
$person_id,
$logdata['logtype'],
array(
'name' => $logdata['name'],
'message' => vsprintf($logdata['message'],
$messageparams),
'success' => 'true'
),
$datatolog,
self::TAETIGKEIT,
self::APP,
null,
+99
View File
@@ -7,6 +7,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class PersonLogLib
{
const PARKED_LOGNAME = 'Parked';
/**
* Constructor
*/
@@ -79,4 +81,101 @@ class PersonLogLib
else
show_error($result->retval);
}
/**
* 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 bool wether parking was successfull
*/
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$logdata = array(
'name' => self::PARKED_LOGNAME
);
$data = array(
'person_id' => $person_id,
'zeitpunkt' => $date,
'taetigkeit_kurzbz' => $taetigkeit_kurzbz,
'app' => $app,
'oe_kurzbz' => $oe_kurzbz,
'logtype_kurzbz' => 'Processstate',
'logdata' => json_encode($logdata),
'insertvon' => $user
);
$result = $this->ci->PersonLogModel->insert($data);
if (isSuccess($result))
return true;
else
show_error($result->retval);
}
/**
* Unparks a person, i.e. removes all log entries in the future
* @param $person_id
*/
public function unPark($person_id)
{
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
$deleted = array();
if (isSuccess($result))
{
if (count($result->retval) > 0)
{
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;
}
}
}
}
else
show_error($result->retval);
}
/**
* 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 (isSuccess($result))
{
if (count($result->retval) > 0)
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$parkeddate = $log->zeitpunkt;
break;
}
}
}
}
else
show_error($result->retval);
return $parkeddate;
}
}
@@ -12,4 +12,21 @@ class Studienjahr_model extends DB_Model
$this->pk = 'studienjahr_kurzbz';
$this->hasSequence = false;
}
/**
* Gets current Studienjahr, as determined by its start and enddate
* @return array|null
*/
public function getCurrStudienjahr()
{
$query = 'SELECT *
FROM public.tbl_studienjahr
JOIN public.tbl_studiensemester using(studienjahr_kurzbz)
WHERE start <= now()
AND ende >= now()
ORDER by start DESC
LIMIT 1';
return $this->execQuery($query);
}
}
@@ -90,4 +90,36 @@ class PersonLog_model extends CI_Model
return success($result->result());
}
/**
* Gets all logs with zeitpunkt > today
* @param $person_id
* @return array
*/
public function getLogsInFuture($person_id)
{
$this->db->order_by('zeitpunkt', 'DESC');
$this->db->order_by('log_id', 'DESC');
$result = $this->db->get_where($this->dbTable, "person_id=".$this->db->escape($person_id)." AND zeitpunkt > now()");
return success($result->result());
}
/**
* Deletes a log
* @param $log_id
* @return array
*/
public function deleteLog($log_id)
{
$this->load->library('PermissionLib');
if(!$this->permissionlib->isEntitled('system.tbl_log', PermissionLib::DELETE_RIGHT))
show_error('Permission denied - You need Access to system.tbl_log');
$this->db->where('log_id', $log_id);
$result = $this->db->delete($this->dbTable);
return success($result);
}
}
@@ -151,9 +151,16 @@
),\', \'
) AS "StgAktiv",
pl.zeitpunkt AS "LockDate",
pl.lockuser as "LockUser"
pl.lockuser as "LockUser",
pd.parkdate AS "ParkDate"
FROM public.tbl_person p
LEFT JOIN (SELECT person_id, zeitpunkt, uid as lockuser FROM system.tbl_person_lock WHERE app = \''.$APP.'\') pl USING(person_id)
LEFT JOIN (
SELECT person_id, zeitpunkt as parkdate
FROM system.tbl_log
WHERE logdata->>\'name\' = \'Parked\'
AND zeitpunkt > now()
) pd USING(person_id)
WHERE
EXISTS(
SELECT 1
@@ -204,7 +211,9 @@
ucfirst($this->p->t('lehre','studiengang')) . ' (' . $this->p->t('global','nichtGesendet') . ')',
ucfirst($this->p->t('lehre','studiengang')) . ' (' . $this->p->t('global','aktiv') . ')',
ucfirst($this->p->t('global','sperrdatum')),
ucfirst($this->p->t('global','gesperrtVon'))),
ucfirst($this->p->t('global','gesperrtVon')),
"ParkedDate"
),
'formatRaw' => function($datasetRaw) {
$datasetRaw->{'Details'} = sprintf(
@@ -267,10 +276,20 @@
},
'markRow' => function($datasetRaw) {
$mark = '';
if ($datasetRaw->LockDate != null)
{
return FilterWidget::DEFAULT_MARK_ROW_CLASS;
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
}
if ($datasetRaw->ParkDate != null)
{
//parking has prio over locking
$mark = "text-info";
}
return $mark;
}
);
@@ -131,8 +131,11 @@
<?php $this->load->view('system/infocenter/notizen.php'); ?>
</div>
</div>
<div class="col-lg-6" id="logs">
<div class="col-lg-6">
<div id="parking"></div>
<div id="logs">
<?php $this->load->view('system/infocenter/logs.php'); ?>
</div>
</div> <!-- ./column -->
</div> <!-- ./row -->
</div> <!-- ./panel-body -->
+138 -10
View File
@@ -20,6 +20,7 @@ function getUrlParameter(sParam)
}
var fhc_controller_id = getUrlParameter("fhc_controller_id");
const CONTROLLER_URL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + "/"+FHC_JS_DATA_STORAGE_OBJECT.called_path;
/**
* javascript file for infocenterDetails page
@@ -42,6 +43,8 @@ $(document).ready(
"dateFormat": "dd.mm.yy"
});
var personid = $("#hiddenpersonid").val();
//add submit event to message send link
$("#sendmsglink").click(
function ()
@@ -54,7 +57,6 @@ $(document).ready(
$(".prchbox").click(function ()
{
var boxid = this.id;
var personid = $("#hiddenpersonid").val();
var akteid = boxid.substr(boxid.indexOf("_") + 1);
var checked = this.checked;
saveFormalGeprueft(personid, akteid, checked)
@@ -64,7 +66,6 @@ $(document).ready(
$(".zgvUebernehmen").click(function ()
{
var btn = $(this);
var personid = $("#hiddenpersonid").val();
var prestudentid = this.id.substr(this.id.indexOf("_") + 1);
$('#zgvUebernehmenNotice').remove();
zgvUebernehmen(personid, prestudentid, btn)
@@ -118,11 +119,11 @@ $(document).ready(
if (notizId !== '')
{
updateNotiz(notizId, personId, data);
updateNotiz(notizId, personid, data);
}
else
{
saveNotiz(personId, data);
saveNotiz(personid, data);
}
}
);
@@ -150,6 +151,9 @@ $(document).ready(
}
);
//check if person is parked and display it
getParkedDateAjax(personid);
});
function openZgvInfoForPrestudent(prestudent_id)
@@ -169,7 +173,7 @@ function saveFormalGeprueft(personid, akteid, checked)
$.ajax({
type: "POST",
dataType: "json",
url: "../saveFormalGeprueft/" + personid + '?fhc_controller_id=' + fhc_controller_id,
url: CONTROLLER_URL+"/saveFormalGeprueft/" + personid + '?fhc_controller_id=' + fhc_controller_id,
data: {"akte_id": akteid, "formal_geprueft": checked},
success: function (data, textStatus, jqXHR)
{
@@ -197,9 +201,9 @@ function saveFormalGeprueft(personid, akteid, checked)
function zgvUebernehmen(personid, prestudentid, btn)
{
$.ajax({
type: "POST",
type: "GET",
dataType: "json",
url: "../getLastPrestudentWithZgvJson/" + personid + '?fhc_controller_id=' + fhc_controller_id,
url: CONTROLLER_URL+"/getLastPrestudentWithZgvJson/" + personid + '?fhc_controller_id=' + fhc_controller_id,
success: function (data, textStatus, jqXHR)
{
if (data !== null)
@@ -239,7 +243,7 @@ function saveZgv(data)
type: "POST",
dataType: "json",
data: data,
url: "../saveZgvPruefung/" + prestudentid + '?fhc_controller_id=' + fhc_controller_id,
url: CONTROLLER_URL+"/saveZgvPruefung/" + prestudentid + '?fhc_controller_id=' + fhc_controller_id,
success: function (data, textStatus, jqXHR)
{
if (data === prestudentid)
@@ -265,7 +269,7 @@ function saveNotiz(personid, data)
type: "POST",
dataType: "json",
data: data,
url: "../saveNotiz/" + personid + '?fhc_controller_id=' + fhc_controller_id,
url: CONTROLLER_URL+"/saveNotiz/" + personid + '?fhc_controller_id=' + fhc_controller_id,
success: function (data, textStatus, jqXHR)
{
refreshNotizen();
@@ -284,7 +288,7 @@ function updateNotiz(notizId, personId, data)
type: "POST",
dataType: "json",
data: data,
url: "../updateNotiz/" + notizId + "/" + personId + '?fhc_controller_id=' + fhc_controller_id,
url: CONTROLLER_URL+"/updateNotiz/" + notizId + "/" + personId + '?fhc_controller_id=' + fhc_controller_id,
success: function (data, textStatus, jqXHR)
{
if (data)
@@ -301,6 +305,86 @@ function updateNotiz(notizId, personId, data)
});
}
function getStudienjahrEndAjax()
{
$.ajax({
url: CONTROLLER_URL+"/getStudienjahrEnd?fhc_controller_id="+getUrlParameter("fhc_controller_id"),
method: "GET",
success: function(data, textStatus, jqXHR)
{
console.log(data);
//var gerdate = data.substring(8, 10) + "."+data.substring(5, 7) + "." + data.substring(0, 4);
var engdate = $.datepicker.parseDate("yy-mm-dd", data);
var gerdate = $.datepicker.formatDate("dd.mm.yy", engdate);
$("#parkdate").val(gerdate);
},
error: function (jqXHR, textStatus, errorThrown)
{
alert(textStatus);
}
});
}
function getParkedDateAjax(personid)
{
$.ajax({
url: CONTROLLER_URL+"/getParkedDate/"+personid+"?fhc_controller_id="+getUrlParameter("fhc_controller_id"),
method: "GET",
success: function(data, textStatus, jqXHR)
{
console.log(data);
refreshParking(data);
refreshLog();
getStudienjahrEndAjax();
},
error: function (jqXHR, textStatus, errorThrown)
{
alert(textStatus);
}
});
}
function parkPersonAjax(personid, date)
{
$.ajax({
url: CONTROLLER_URL+"/park?fhc_controller_id="+getUrlParameter("fhc_controller_id"),
method: "POST",
data:
{
"person_id": personid,
"parkdate": date
},
success: function(data, textStatus, jqXHR)
{
getParkedDateAjax(personid);
},
error: function (jqXHR, textStatus, errorThrown)
{
alert(textStatus);
}
});
}
function unparkPersonAjax(personid)
{
$.ajax({
url: CONTROLLER_URL+"/unpark?fhc_controller_id="+getUrlParameter("fhc_controller_id"),
method: "POST",
data:
{
"person_id": personid
},
success: function(data, textStatus, jqXHR)
{
getParkedDateAjax(personid);
},
error: function (jqXHR, textStatus, errorThrown)
{
alert(textStatus);
}
});
}
// -----------------------------------------------------------------------------------------------------------------
// methods executed after ajax (refreshers)
@@ -336,6 +420,50 @@ function refreshNotizen()
);
}
function refreshParking(date)
{
if (date === null)
{
$("#parking").html(
'<div class="form-group form-inline">'+
'<button class="btn btn-default" id="parklink" type="button""><i class="fa fa-clock-o"></i>&nbsp;BewerberIn parken</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'bis&nbsp;&nbsp;'+
'<input id="parkdate" type="text" class="form-control" placeholder="Parkdatum" style="height: 25px; width: 99px">'+
'</div>');
$("#parkdate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 0
});
$("#parklink").click(
function ()
{
var personid = $("#hiddenpersonid").val();
var date = $("#parkdate").val();
parkPersonAjax(personid, date);
}
);
}
else
{
var parkdate = $.datepicker.parseDate("yy-mm-dd", date);
var gerparkdate = $.datepicker.formatDate("dd.mm.yy", parkdate);
$("#parking").html(
'BewerberIn geparkt bis '+gerparkdate+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unparklink"><i class="fa fa-sign-out"></i>&nbsp;BewerberIn ausparken</button>&nbsp;');
$("#unparklink").click(
function ()
{
var personid = $("#hiddenpersonid").val();
unparkPersonAjax(personid, date);
}
);
}
}
function formatNotizTable()
{
addTablesorter("notiztable", [[0, 1]], ["filter"], 2);
@@ -25,10 +25,13 @@ function appendTableActionsHtml()
'<a href="javascript:void(0)" class="unselectAll">' +
'<i class="fa fa-times"></i>&nbsp;Keinen</a>&nbsp;&nbsp;&nbsp;&nbsp;';
var messageHtml = 'Mit Ausgew&auml;hlten:&nbsp;&nbsp;' +
var actionHtml = 'Mit Ausgew&auml;hlten:&nbsp;&nbsp;' +
'<a href="javascript:void(0)" class="sendMsgsLink">' +
'<i class="fa fa-envelope"></i>&nbsp;Nachricht senden</a>';
var legendHtml = '<i class="fa fa-circle text-danger"></i> Gesperrt&nbsp;&nbsp;&nbsp;&nbsp;' +
'<i class="fa fa-circle text-info"></i> Geparkt';
var personcount = 0;
$.ajax({
@@ -51,9 +54,12 @@ function appendTableActionsHtml()
var countHtml = personcount + " " + persontext;
$("#datasetActionsTop, #datasetActionsBottom").append(
"<div class='pull-left'>" + selectAllHtml + "&nbsp;&nbsp;" + messageHtml + "</div>"+
"<div class='pull-right'>" + countHtml + "</div>"+
"<div class='clearfix'></div>"
"<div class='row'>"+
"<div class='col-xs-4'>" + selectAllHtml + "&nbsp;&nbsp;" + actionHtml + "</div>"+
"<div class='col-xs-4 text-center'>" + legendHtml + "</div>"+
"<div class='col-xs-4 text-right'>" + countHtml + "</div>"+
"<div class='clearfix'></div>"+
"</div>"
);
$("#datasetActionsBottom").append("<br><br>");
}