renamed unrulyPerson api to checkPerson; built in logic into infoCenterDetails to trigger a number of checks about any changed data in the info center (in this case unruly) and update the page accordingly; Also fixed a bug when saving stammdaten without kontakt entries;

This commit is contained in:
Johann Hoffmann
2024-09-17 14:09:49 +02:00
parent 27c312d7d3
commit 79ea8c4521
12 changed files with 235 additions and 115 deletions
@@ -18,13 +18,15 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
class UnrulyPerson extends FHCAPI_Controller
class CheckPerson extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'updatePersonUnrulyStatus' => array('basis/mitarbeiter:rw', 'student/antragfreigabe:rw', 'student/studierendenantrag:rw'),
'filterPerson' => array('basis/mitarbeiter:rw', 'student/antragfreigabe:rw', 'student/studierendenantrag:rw')
'filterPerson' => array('basis/mitarbeiter:rw', 'student/antragfreigabe:rw', 'student/studierendenantrag:rw'),
'checkUnruly' => array('basis/mitarbeiter:r', 'student/antragfreigabe:r', 'student/studierendenantrag:r', 'infocenter:r'),
'checkDuplicate' => array('infocenter:r'),
]);
$this->_ci =& get_instance();
@@ -48,13 +50,42 @@ class UnrulyPerson extends FHCAPI_Controller
}
public function checkDuplicate() {
$person_id = $this->input->post('person_id');
$result = $this->_ci->PersonModel->checkDuplicate($person_id);
if (isSuccess($result))
$this->terminateWithSuccess($result);
else
$this->terminateWithError('Error when searching for person');
}
// performs strict check over vorname, nachname, gebdatum
public function checkUnruly() {
$vorname = $this->input->post('vorname');
$nachname = $this->input->post('nachname');
$gebdatum = $this->input->post('gebdatum');
$result = $this->_ci->PersonModel->checkUnruly($vorname, $nachname, $gebdatum);
if (isSuccess($result))
$this->terminateWithSuccess($result);
else
$this->terminateWithError('Error when searching for person');
}
// filters nachname on similarity and vorname/gebdatum are optional
public function filterPerson() {
$payload = json_decode($this->input->raw_input_stream, TRUE);
$nachnameString = '';
$vornameString = '';
$filterUnruly = true;
$birthdateString = null;
$birthdateString = '';
if(array_key_exists( 'nachname', $payload) ) {
$nachnameString = $payload['nachname'];
@@ -80,16 +111,16 @@ class UnrulyPerson extends FHCAPI_Controller
$where = "p.nachname=? ";
}
if(isset($vorname) && $vorname != '')
if(isset($vornameString) && $vornameString != '')
{
$where.= " AND p.vorname~*?";
$parametersArray[] = $vorname;
$parametersArray[] = $vornameString;
}
if(isset($birthdate) && $birthdate != '')
if(isset($birthdateString) && $birthdateString != '')
{
$where.=" AND p.gebdatum=?";
$parametersArray[] = $birthdate;
$parametersArray[] = $birthdateString;
}
if(isset($filterUnruly))
@@ -342,7 +342,7 @@ class InfoCenter extends Auth_Controller
$checkUnruly = $this->PersonModel->checkUnruly($persondata['stammdaten']->vorname, $persondata['stammdaten']->nachname, $persondata['stammdaten']->gebdatum);
if (isError($checkUnruly)) show_error(getError($checkUnruly));
$duplicate = array('duplicated' => getData($checkPerson));
$duplicate = array('duplicate' => getData($checkPerson));
$unruly = array('unruly' => getData($checkUnruly));
$prestudentdata = $this->_loadPrestudentData($person_id);
@@ -1289,67 +1289,28 @@ class InfoCenter extends Auth_Controller
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
$kontakte = $this->input->post('kontakt');
foreach ($kontakte as $kontakt)
{
$kontaktExists = $this->KontaktModel->loadWhere(array(
'kontakt_id' => $kontakt['id'],
'person_id' => $person_id,
));
if($kontakte) {
if (hasData($kontaktExists))
{
$kontaktExists = getData($kontaktExists)[0];
foreach ($kontakte as $kontakt) {
$kontaktExists = $this->KontaktModel->loadWhere(array(
'kontakt_id' => $kontakt['id'],
'person_id' => $person_id,
));
if ($kontaktExists->kontakt === $kontakt['value'])
continue;
if (hasData($kontaktExists)) {
$kontaktExists = getData($kontaktExists)[0];
$update = $this->KontaktModel->update(
array
(
'kontakt_id' => $kontakt['id']
),
array
(
'kontakt' => isEmptyString($kontakt['value']) ? null : $kontakt['value'],
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
if ($kontaktExists->kontakt === $kontakt['value'])
continue;
if (isError($update))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
}
}
$adressen = $this->input->post('adresse');
foreach ($adressen as $adresse)
{
$adresseExists = $this->AdresseModel->loadWhere(array(
'adresse_id' => $adresse['id'],
'person_id' => $person_id,
));
if (hasData($adresseExists))
{
$adresse = $adresse['value'];
$adresseExists = getData($adresseExists)[0];
if ($adresseExists->strasse !== $adresse['strasse'] ||
$adresseExists->plz !== $adresse['plz'] ||
$adresseExists->ort !== $adresse['ort'] ||
$adresseExists->nation !== $adresse['nation'])
{
$update = $this->AdresseModel->update(
$update = $this->KontaktModel->update(
array
(
'adresse_id' => $adresseExists->adresse_id
'kontakt_id' => $kontakt['id']
),
array
(
'strasse' => isEmptyString($adresse['strasse']) ? null : $adresse['strasse'],
'plz' => isEmptyString($adresse['plz']) ? null : $adresse['plz'],
'ort' => isEmptyString($adresse['ort']) ? null : $adresse['ort'],
'nation' => isEmptyString($adresse['nation']) ? null : $adresse['nation'],
'kontakt' => isEmptyString($kontakt['value']) ? null : $kontakt['value'],
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
@@ -1358,7 +1319,48 @@ class InfoCenter extends Auth_Controller
if (isError($update))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
}
}
}
$adressen = $this->input->post('adresse');
if($adressen) {
foreach ($adressen as $adresse) {
$adresseExists = $this->AdresseModel->loadWhere(array(
'adresse_id' => $adresse['id'],
'person_id' => $person_id,
));
if (hasData($adresseExists)) {
$adresse = $adresse['value'];
$adresseExists = getData($adresseExists)[0];
if ($adresseExists->strasse !== $adresse['strasse'] ||
$adresseExists->plz !== $adresse['plz'] ||
$adresseExists->ort !== $adresse['ort'] ||
$adresseExists->nation !== $adresse['nation']) {
$update = $this->AdresseModel->update(
array
(
'adresse_id' => $adresseExists->adresse_id
),
array
(
'strasse' => isEmptyString($adresse['strasse']) ? null : $adresse['strasse'],
'plz' => isEmptyString($adresse['plz']) ? null : $adresse['plz'],
'ort' => isEmptyString($adresse['ort']) ? null : $adresse['ort'],
'nation' => isEmptyString($adresse['nation']) ? null : $adresse['nation'],
'updateamum' => date('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
if (isError($update))
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
}
}
}
}
+7 -7
View File
@@ -294,15 +294,15 @@ class Person_model extends DB_Model
{
$qry = "SELECT person_id
FROM public.tbl_prestudent p
JOIN
JOIN
(
SELECT DISTINCT ON(prestudent_id) *
FROM public.tbl_prestudentstatus
WHERE prestudent_id IN
WHERE prestudent_id IN
(
SELECT prestudent_id
FROM public.tbl_prestudent
WHERE person_id IN
SELECT prestudent_id
FROM public.tbl_prestudent
WHERE person_id IN
(
SELECT p2.person_id
FROM public.tbl_person p
@@ -316,8 +316,8 @@ class Person_model extends DB_Model
ORDER BY prestudent_id, datum DESC, insertamum DESC
) ps USING(prestudent_id)
JOIN public.tbl_status USING(status_kurzbz)
WHERE status_kurzbz = 'Interessent'
AND studiengang_kz IN
WHERE status_kurzbz = 'Interessent'
AND studiengang_kz IN
(
SELECT studiengang_kz
FROM public.tbl_prestudent p
@@ -27,7 +27,8 @@
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js',
'public/js/infocenter/stammdaten.js'
'public/js/infocenter/stammdaten.js',
'public/js/infocenter/personcheck.js'
),
'phrases' => array(
'infocenter',
@@ -38,6 +39,14 @@
$this->load->view('templates/FHC-Header', $includesArray);
?>
<script>
// Embed PHP data into JS as JSON to access from script files
const viewData = {
checkPerson: <?php echo json_encode(array('unruly' => $unruly, 'duplicate' => $duplicate)); ?>,
};
</script>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
@@ -74,38 +83,8 @@
</div>
</div>
</div>
<?php if (!is_null($unruly)): ?>
<div class="row alert-info">
<h3 class="header col-lg-12">
<?php echo $this->p->t('infocenter', 'unrulyPersonFound') . ':'; ?>
</h3>
<div class="text-left col-lg-12">
<?php
foreach ($unruly as $unruled)
{
echo 'Person ID: ' . $unruled->person_id . '<br />';
}
?>
</div>
</div>
<?php endif; ?>
<?php if (!is_null($duplicated)): ?>
<div class="row alert-warning">
<h3 class="header col-lg-12">
<?php echo $this->p->t('global', 'bewerberVorhanden') . ':'; ?>
</h3>
<div class="text-left col-lg-12">
<?php
foreach ($duplicated as $duplicate)
{
echo 'Person ID: ' . $duplicate->person_id . '<br />';
}
?>
</div>
</div>
<?php endif; ?>
<br/>
<?php $this->load->view('system/infocenter/personCheck.php', array('unruly' => $unruly, 'duplicate' => $duplicate)); ?>
<br/>
<section>
<div class="row">
@@ -0,0 +1,34 @@
<div class="row alert-info" id="unruly" style="display: none;">
<h3 class="header col-lg-12">
<?php echo $this->p->t('infocenter', 'unrulyPersonFound') . ':'; ?>
</h3>
<div class="text-left col-lg-12" id="unrulylist">
<?php
if($unruly) {
foreach ($unruly as $unruled)
{
echo '<a>Person ID: ' . $unruled->person_id . '<a/><br />';
}
}
?>
</div>
</div>
<div class="row alert-warning" id="duplicate" style="display: none;">
<h3 class="header col-lg-12">
<?php echo $this->p->t('global', 'bewerberVorhanden') . ':'; ?>
</h3>
<div class="text-left col-lg-12" id="duplicatelist">
<?php
if($duplicate) {
foreach ($duplicate as $dupe)
{
echo '<a>Person ID: ' . $dupe->person_id . '<a/><br />';
}
}
?>
</div>
</div>