mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
Merge branch 'feature-12987/Sonderbeitrag_versicherung_trennen' into feature-10450/DVUH_requestMatrikelnummer
This commit is contained in:
@@ -23,6 +23,14 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 10,
|
||||
'requiredPermissions' => 'basis/vilesci:r'
|
||||
),
|
||||
'oehbeitragsverwaltung' => array(
|
||||
'link' => site_url('codex/Oehbeitrag'),
|
||||
'icon' => '',
|
||||
'description' => 'Öhbeitragsverwaltung',
|
||||
'expand' => true,
|
||||
'sort' => 20,
|
||||
'requiredPermissions' => 'admin:w'
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
<?php
|
||||
|
||||
if (! defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class Oehbeitrag extends Auth_Controller
|
||||
{
|
||||
const STUDIENSEMESTER_START = 'WS2020';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'admin:r',// TODO which Berechtigung?
|
||||
'getValidStudiensemester' => 'admin:r',
|
||||
'addOehbeitrag' => 'admin:rw',
|
||||
'updateOehbeitrag' => 'admin:rw',
|
||||
'deleteOehbeitrag' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
$this->load->library('WidgetLib');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$oehbeitraege = array();
|
||||
|
||||
$oehbeitragRes = $this->_loadOehbeitraege();
|
||||
|
||||
if (isError($oehbeitragRes))
|
||||
show_error(getError($oehbeitragRes));
|
||||
|
||||
if (hasData($oehbeitragRes))
|
||||
$oehbeitraege = getData($oehbeitragRes);
|
||||
|
||||
$this->load->view("codex/oehbeitrag.php", array('oehbeitraege' => $oehbeitraege));
|
||||
}
|
||||
|
||||
public function getValidStudiensemester()
|
||||
{
|
||||
$oehbeitrag_id = $this->input->get('oehbeitrag_id');
|
||||
$oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null;
|
||||
|
||||
$studiensemester = array();
|
||||
|
||||
$studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START, $oehbeitrag_id_arr);
|
||||
if (isError($studiensemesterres))
|
||||
{
|
||||
$this->outputJsonError(getError($studiensemesterres));
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasData($studiensemesterres))
|
||||
$studiensemester = getData($studiensemesterres);
|
||||
|
||||
$this->outputJsonSuccess($studiensemester);
|
||||
}
|
||||
|
||||
public function addOehbeitrag()
|
||||
{
|
||||
$studierendenbeitrag = $this->input->post('studierendenbeitrag');
|
||||
$versicherung = $this->input->post('versicherung');
|
||||
$von_studiensemester_kurzbz = $this->input->post('von_studiensemester_kurzbz');
|
||||
$bis_studiensemester_kurzbz = $this->input->post('bis_studiensemester_kurzbz');
|
||||
if ($bis_studiensemester_kurzbz == 'null')
|
||||
$bis_studiensemester_kurzbz = null;
|
||||
|
||||
if (!$this->_checkAmount($studierendenbeitrag))
|
||||
$this->outputJsonError('Ungültiger Studierendenbeitrag');
|
||||
elseif (!$this->_checkAmount($versicherung))
|
||||
$this->outputJsonError('Ungültige Versicherung');
|
||||
else
|
||||
{
|
||||
$vonBisCheck = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz);
|
||||
|
||||
if (isError($vonBisCheck))
|
||||
$this->outputJsonError(getError($vonBisCheck));
|
||||
else
|
||||
{
|
||||
$data = array(
|
||||
'studierendenbeitrag' => $studierendenbeitrag,
|
||||
'versicherung' => $versicherung,
|
||||
'von_studiensemester_kurzbz' => $von_studiensemester_kurzbz,
|
||||
'bis_studiensemester_kurzbz' => $bis_studiensemester_kurzbz
|
||||
);
|
||||
|
||||
$this->outputJson($this->OehbeitragModel->insert($data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function updateOehbeitrag()
|
||||
{
|
||||
$oehbeitrag_id = $this->input->post("oehbeitrag_id");
|
||||
$data = $this->input->post("data");
|
||||
|
||||
if (!is_numeric($oehbeitrag_id) || isEmptyArray($data))
|
||||
{
|
||||
$this->outputJsonError("Ungültige Parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($data as $idx => $value)
|
||||
{
|
||||
if ($idx == 'studierendenbeitrag' || $idx == 'versicherung')
|
||||
{
|
||||
if (!$this->_checkAmount($value))
|
||||
{
|
||||
$this->outputJsonError("Ungültige(r) $idx");
|
||||
return;
|
||||
}
|
||||
}
|
||||
elseif ($idx == 'von_studiensemester_kurzbz' || $idx == 'bis_studiensemester_kurzbz')
|
||||
{
|
||||
$this->OehbeitragModel->addSelect('von_studiensemester_kurzbz, bis_studiensemester_kurzbz');
|
||||
$vonBisStudiensemesterRes = $this->OehbeitragModel->load($oehbeitrag_id);
|
||||
|
||||
if (!hasData($vonBisStudiensemesterRes))
|
||||
{
|
||||
$this->outputJsonError("Fehler beim Holen des Öhbeitrags");
|
||||
return;
|
||||
}
|
||||
|
||||
$vonBisStudiensemester = getData($vonBisStudiensemesterRes);
|
||||
|
||||
$von_studiensemester_kurzbz = $idx == 'von_studiensemester_kurzbz' ? $value : $vonBisStudiensemester[0]->von_studiensemester_kurzbz;
|
||||
|
||||
if ($idx == 'bis_studiensemester_kurzbz')
|
||||
$bis_studiensemester_kurzbz = $data[$idx] = $value == 'null' ? null : $value;
|
||||
else
|
||||
$bis_studiensemester_kurzbz = $vonBisStudiensemester[0]->bis_studiensemester_kurzbz;
|
||||
|
||||
$checkStudiensemester = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id);
|
||||
|
||||
if (isError($checkStudiensemester))
|
||||
{
|
||||
$this->outputJsonError(getError($checkStudiensemester));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->outputJson($this->OehbeitragModel->update($oehbeitrag_id, $data));
|
||||
}
|
||||
|
||||
public function deleteOehbeitrag()
|
||||
{
|
||||
$oehbeitrag_id = $this->input->post("oehbeitrag_id");
|
||||
|
||||
$this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id));
|
||||
}
|
||||
|
||||
private function _loadOehbeitraege()
|
||||
{
|
||||
$this->OehbeitragModel->addSelect('oehbeitrag_id, von_studiensemester_kurzbz, bis_studiensemester_kurzbz, studierendenbeitrag, versicherung, sem_von.start as von_datum, sem_bis.ende as bis_datum');
|
||||
$this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_von', 'tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz');
|
||||
$this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_bis', 'tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz', 'LEFT');
|
||||
$this->OehbeitragModel->addOrder('sem_von.start', 'DESC');
|
||||
return $this->OehbeitragModel->load();
|
||||
}
|
||||
|
||||
private function _checkAmount($amount)
|
||||
{
|
||||
return is_numeric($amount) && (float) $amount <= 99999.99;
|
||||
}
|
||||
|
||||
private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null)
|
||||
{
|
||||
$regex = "/^(WS|SS)\d{4}$/";
|
||||
if (!preg_match($regex, $von_studiensemester_kurzbz))
|
||||
return error("Ungültiges Von-Studiensemester");
|
||||
|
||||
if (!preg_match($regex, $bis_studiensemester_kurzbz) && $bis_studiensemester_kurzbz != null)
|
||||
return error("Ungültiges Bis-Studiensemester");
|
||||
|
||||
$this->StudiensemesterModel->addSelect("start");
|
||||
$vonStudiensemesterRes = $this->StudiensemesterModel->load($von_studiensemester_kurzbz);
|
||||
|
||||
if (!hasData($vonStudiensemesterRes))
|
||||
return error("Fehler beim Holen von Von-Studiensemester");
|
||||
|
||||
$this->StudiensemesterModel->addSelect("start");
|
||||
$bisStudiensemesterRes = $this->StudiensemesterModel->load($bis_studiensemester_kurzbz);
|
||||
|
||||
if (!hasData($bisStudiensemesterRes))
|
||||
return error("Fehler beim Holen von Bis-Studiensemester");
|
||||
|
||||
$vonStudiensemester = getData($vonStudiensemesterRes)[0]->start;
|
||||
$bisStudiensemester = getData($bisStudiensemesterRes)[0]->start;
|
||||
|
||||
if ($bis_studiensemester_kurzbz != null && new DateTime($vonStudiensemester) > new DateTime($bisStudiensemester))
|
||||
return error("Von-Studiensemester größer als Bis-Studiensemester");
|
||||
|
||||
$oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null;
|
||||
|
||||
$assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable(
|
||||
$von_studiensemester_kurzbz,
|
||||
$bis_studiensemester_kurzbz,
|
||||
$oehbeitrag_id_arr
|
||||
);
|
||||
|
||||
if (isError($assignableRes))
|
||||
return $assignableRes;
|
||||
|
||||
if (hasData($assignableRes))
|
||||
{
|
||||
$assignable = getData($assignableRes)[0];
|
||||
|
||||
if (!$assignable)
|
||||
return error("Keine Zuweisung möglich, Semesterüberschneidung");
|
||||
}
|
||||
|
||||
return success("Studiensemester gültig");
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,76 @@ class Oehbeitrag_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, array($studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Studiensemester for which no Oehbeitrag value assignment exists.
|
||||
* @param string $start_studiensemester_kurzbz semester before the given semester are ignored
|
||||
* @param array $excluded_oehbeitrag_id oehbeitraege to be ignored, i.e. which are assigned
|
||||
* @return object
|
||||
*/
|
||||
public function getUnassignedStudiensemester($start_studiensemester_kurzbz, $excluded_oehbeitrag_id = array())
|
||||
{
|
||||
$params = array($start_studiensemester_kurzbz);
|
||||
|
||||
$qry = "SELECT * FROM public.tbl_studiensemester sem
|
||||
WHERE sem.start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)
|
||||
AND NOT EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag oeh
|
||||
JOIN public.tbl_studiensemester oeh_von ON oeh.von_studiensemester_kurzbz = oeh_von.studiensemester_kurzbz
|
||||
LEFT JOIN public.tbl_studiensemester oeh_bis ON oeh.bis_studiensemester_kurzbz = oeh_bis.studiensemester_kurzbz
|
||||
WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)";
|
||||
|
||||
if (!isEmptyArray($excluded_oehbeitrag_id))
|
||||
{
|
||||
$qry .= " AND oehbeitrag_id NOT IN ?";
|
||||
$params[] = $excluded_oehbeitrag_id;
|
||||
}
|
||||
|
||||
$qry .= ") ORDER BY sem.start";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a Öhbeitrag can be assigned for a Studiensemester range.
|
||||
* @param string $von_studiensemester_kurzbz
|
||||
* @param string $bis_studiensemester_kurzbz
|
||||
* @param array $excluded_oehbeitrag_id oehbeitraege to ignore, i.e. which are assignable
|
||||
* @return object array with true if assignable, with false if not
|
||||
*/
|
||||
public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null, $excluded_oehbeitrag_id = array())
|
||||
{
|
||||
$params = array($von_studiensemester_kurzbz);
|
||||
|
||||
$allStdSemSpanQry = "SELECT count(studiensemester_kurzbz) as number_assigned FROM public.tbl_studiensemester sem
|
||||
WHERE start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)";
|
||||
|
||||
if ($bis_studiensemester_kurzbz != null)
|
||||
{
|
||||
$allStdSemSpanQry .= " AND (start <= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?))";
|
||||
$params[] = $bis_studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$allStdSemSpanQry .= " AND EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag
|
||||
JOIN public.tbl_studiensemester sem_von ON tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz
|
||||
LEFT JOIN public.tbl_studiensemester sem_bis ON tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz
|
||||
WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL)";
|
||||
|
||||
if (!isEmptyArray($excluded_oehbeitrag_id))
|
||||
{
|
||||
$allStdSemSpanQry .= " AND oehbeitrag_id NOT IN ?";
|
||||
$params[] = $excluded_oehbeitrag_id;
|
||||
}
|
||||
|
||||
$allStdSemSpanQry .= ")";
|
||||
|
||||
$nrAssigned = $this->execQuery($allStdSemSpanQry, $params);
|
||||
|
||||
if (isError($nrAssigned))
|
||||
return $nrAssigned;
|
||||
|
||||
if (!hasData($nrAssigned))
|
||||
return error("Fehler bei Überprüfung der Möglichkeit der Semesterzuweisung");
|
||||
|
||||
return success(array(getData($nrAssigned)[0]->number_assigned == 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'ÖH-Beitragsverwaltung',
|
||||
'jquery' => true,
|
||||
'jqueryui' => true,
|
||||
'bootstrap' => true,
|
||||
'fontawesome' => true,
|
||||
'sbadmintemplate' => true,
|
||||
'tablesorter' => true,
|
||||
'dialoglib' => true,
|
||||
'ajaxlib' => true,
|
||||
'navigationwidget' => true,
|
||||
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/codex/oehbeitrag.css'),
|
||||
'customJSs' => array('public/js/tablesort/tablesort.js', 'public/js/codex/oehbeitrag.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
Öhbeitragsverwaltung
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<button class="btn btn-default" id="addNewOeh">Neuen Öhbeitrag hinzufügen</button>
|
||||
<br />
|
||||
<br />
|
||||
<table class="table table-bordered table-condensed" id="oehbeitraegeTbl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Gültig von</th>
|
||||
<th>Gültig bis</th>
|
||||
<th>Studierendenbetrag</th>
|
||||
<th>Versicherungsbetrag</th>
|
||||
<th id="actionHeading">Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($oehbeitraege as $oehbeitrag): ?>
|
||||
<tr>
|
||||
<td><?php echo date_format(date_create($oehbeitrag->von_datum), 'd.m.Y') . '/' . $oehbeitrag->von_studiensemester_kurzbz ?>
|
||||
<i class="fa fa-edit editVonStudiensemester" id="edit_von_studiensemester_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
|
||||
</td>
|
||||
<td><?php echo $oehbeitrag->bis_studiensemester_kurzbz == null ? 'unbeschränkt' : (date_format(date_create($oehbeitrag->bis_datum), 'd.m.Y') . '/' . $oehbeitrag->bis_studiensemester_kurzbz) ?>
|
||||
<i class="fa fa-edit editBisStudiensemester" id="edit_bis_studiensemester_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
|
||||
</td>
|
||||
<td><?php echo number_format($oehbeitrag->studierendenbeitrag, 2, ',', '.') ?>
|
||||
<i class="fa fa-edit editStudierendenbeitrag" id="edit_studierendenbeitrag_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
|
||||
</td>
|
||||
<td><?php echo number_format($oehbeitrag->versicherung, 2, ',', '.') ?>
|
||||
<i class="fa fa-edit editVersicherung" id="edit_versicherung_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
|
||||
</td>
|
||||
<td><button class="btn btn-default deleteBtn" id="delete_<?php echo $oehbeitrag->oehbeitrag_id ?>">Löschen</button></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
Reference in New Issue
Block a user