Compare commits

...

18 Commits

Author SHA1 Message Date
Werner Masik d6c0baa92c removed deleteAbrechnung from delete Gehaltsbestandteil 2025-09-17 12:00:29 +02:00
Werner Masik 468cd2d76d endDienstverhaeltnis: fix date validation (begin date < enddate) 2025-09-05 15:55:27 +02:00
Werner Masik 49ddb0f584 Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-08-06 17:34:59 +02:00
Werner Masik 00a262d270 Merge branch 'werner/gehaelter_permission_fix' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-08-06 17:28:35 +02:00
Werner Masik 4d022208e7 coding styles 2025-08-06 17:25:41 +02:00
Werner Masik fcb1ea6534 check permission for Gehaelter on deleting a Vertragsverhaeltnis 2025-08-06 17:22:21 +02:00
Werner Masik 181580fb55 migrate permission API 2025-07-23 18:13:11 +02:00
Harald Bamberger e968d21d35 Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-07-23 11:30:52 +02:00
Harald Bamberger 4925542c8a Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-04-03 12:30:21 +02:00
Harald Bamberger 0f8afd90fd Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-03-12 15:49:06 +01:00
Harald Bamberger 1e5979fe70 Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-01-23 16:23:02 +01:00
Harald Bamberger 7403c612b0 use basis/gehaelter permission in vertragsbestandteillib 2025-01-23 16:19:15 +01:00
Harald Bamberger bcf6708e31 Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-01-15 09:27:27 +01:00
Harald Bamberger b511e1b15b recht basis/gehaelter anlegen 2025-01-14 18:06:07 +01:00
Harald Bamberger ed579be7d1 Merge remote-tracking branch 'origin/master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2025-01-08 15:49:53 +01:00
Harald Bamberger 8031a7ace8 Merge branch 'master' into feature-53904/Vertragshistorie_valorisierte_Gehaelter_anzeigen 2024-12-10 10:38:46 +01:00
Werner Masik 2d18d1856a make first letter lower case for compatibilty with other fhcapi functions 2024-11-19 14:19:43 +01:00
Harald Bamberger 6e0c399831 add API Endpoint to query permissions in frontend 2024-11-11 19:24:46 +01:00
8 changed files with 234 additions and 26 deletions
@@ -0,0 +1,50 @@
<?php
/**
* Copyright (C) 2024 fhcomplete.org
*
* 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 3 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, see <https://www.gnu.org/licenses/>.
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Permission extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'isBerechtigt' => self::PERM_LOGGED
]);
// Load the library SearchBarLib
$this->load->library('PermissionLib');
}
public function isBerechtigt()
{
$payload = json_decode($this->input->raw_input_stream, TRUE);
if( !isset($payload['berechtigung_kurzbz']) || empty($payload['berechtigung_kurzbz']) )
{
$this->terminateWithError('Missing Parameter "berechtigung_kurzbz"');
}
$berechtigung_kurzbz = $payload['berechtigung_kurzbz'];
$art = isset($payload['art']) ? $payload['art'] : null;
$oe_kurzbz = isset($payload['oe_kurzbz']) ? $payload['oe_kurzbz'] : null;
$kostenstelle_id = isset($payload['kostenstelle_id']) ? $payload['kostenstelle_id'] : null;
$payload['isBerechtigt'] = $this->permissionlib->isBerechtigt(
$berechtigung_kurzbz, $art, $oe_kurzbz, $kostenstelle_id
);
$this->terminateWithSuccess($payload);
}
}
@@ -15,6 +15,13 @@ class GehaltsbestandteilLib
protected $CI;
/** @var Gehaltsbestandteil_model */
protected $GehaltsbestandteilModel;
/** @var Dienstverhaeltnis_model */
protected $DienstverhaeltnisModel;
/**
* @var PermissionLib
*/
protected $PermissionLib;
protected $loggedInUser;
@@ -24,8 +31,25 @@ class GehaltsbestandteilLib
$this->CI = get_instance();
$this->CI->load->model('vertragsbestandteil/Gehaltsbestandteil_model',
'GehaltsbestandteilModel');
$this->CI->load->model('vertragsbestandteil/Dienstverhaeltnis_model',
'DienstverhaeltnisModel');
$this->DienstverhaeltnisModel = $this->CI->DienstverhaeltnisModel;
$this->CI->load->library('extensions/FHC-Core-Personalverwaltung/abrechnung/GehaltsLib');
$this->GehaltsbestandteilModel = $this->CI->GehaltsbestandteilModel;
$this->CI->load->library('PermissionLib', null, 'PermissionLib');
$this->PermissionLib = $this->CI->PermissionLib;
}
public function fetchDienstverhaeltnis($dienstverhaeltnis_id)
{
$result = $this->DienstverhaeltnisModel->load($dienstverhaeltnis_id);
$dv = null;
if(null !== ($row = getData($result)))
{
$dv = new Dienstverhaeltnis();
$dv->hydrateByStdClass($row[0], true);
}
return $dv;
}
public function fetchGehaltsbestandteileValorisiertForChart($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
@@ -121,16 +145,24 @@ class GehaltsbestandteilLib
{
$this->setUIDtoPGSQL();
// delete Gehaltsabrechnung
$ret = $this->CI->gehaltslib->deleteAbrechnung($gehaltsbestandteil);
//
$ret = $this->GehaltsbestandteilModel->delete($gehaltsbestandteil->getGehaltsbestandteil_id());
if (isError($ret))
$dv = $this->fetchDienstverhaeltnis($gehaltsbestandteil->getDienstverhaeltnis_id());
if($dv && $this->PermissionLib->isberechtigt('basis/gehaelter', 'd', $dv->getOe_kurzbz()))
{
throw new Exception('error deleting gehaltsbestandteil');
// delete Gehaltsabrechnung
// $ret = $this->CI->gehaltslib->deleteAbrechnung($gehaltsbestandteil);
//
$ret = $this->GehaltsbestandteilModel->delete($gehaltsbestandteil->getGehaltsbestandteil_id());
if (isError($ret))
{
throw new Exception('error deleting gehaltsbestandteil');
}
} else {
throw new Exception('permission denied for deleting gehaltsbestandteil');
}
}
public function endGehaltsbestandteil(Gehaltsbestandteil $gehaltsbestandteil, $enddate)
@@ -34,6 +34,8 @@ class VertragsbestandteilLib
protected $DienstverhaeltnisModel;
/** @var Vertragsbestandteil_model */
protected $VertragsbestandteilModel;
/** @var GehaltsbestandeilModel */
protected $GehaltbestandteilModel;
/** @var Benutzer_model */
protected $BenutzerModel;
/**
@@ -43,6 +45,11 @@ class VertragsbestandteilLib
protected $loggedInUser;
/**
* @var PermissionLib
*/
protected $PermissionLib;
public function __construct()
{
$this->loggedInUser = getAuthUID();
@@ -53,12 +60,17 @@ class VertragsbestandteilLib
$this->CI->load->model('vertragsbestandteil/Vertragsbestandteil_model',
'VertragsbestandteilModel');
$this->VertragsbestandteilModel = $this->CI->VertragsbestandteilModel;
$this->CI->load->model('vertragsbestandteil/Gehaltsbestandteil_model',
'GehaltbestandteilModel');
$this->GehaltbestandteilModel = $this->CI->GehaltbestandteilModel;
$this->CI->load->model('person/benutzer_model',
'BenutzerModel');
$this->BenutzerModel = $this->CI->BenutzerModel;
$this->CI->load->library('vertragsbestandteil/GehaltsbestandteilLib',
null, 'GehaltsbestandteilLib');
$this->GehaltsbestandteilLib = $this->CI->GehaltsbestandteilLib;
$this->CI->load->library('PermissionLib', null, 'PermissionLib');
$this->PermissionLib = $this->CI->PermissionLib;
}
public function handleGUIData($guidata, $employeeUID, $userUID)
@@ -98,9 +110,14 @@ class VertragsbestandteilLib
$vbs = $this->VertragsbestandteilModel->getVertragsbestandteile(
$dienstverhaeltnis_id, $stichtag, $includefuture
);
$gbs = $this->GehaltsbestandteilLib->fetchGehaltsbestandteile(
$dienstverhaeltnis_id, $stichtag, $includefuture, $withvalorisationhistory
);
$dv = $this->fetchDienstverhaeltnis($dienstverhaeltnis_id);
$gbs = array();
if($dv && $this->PermissionLib->isberechtigt('basis/gehaelter', 's', $dv->getOe_kurzbz()))
{
$gbs = $this->GehaltsbestandteilLib->fetchGehaltsbestandteile(
$dienstverhaeltnis_id, $stichtag, $includefuture, $withvalorisationhistory
);
}
$gbsByVBid = array();
foreach( $gbs as $gb )
@@ -313,6 +330,15 @@ class VertragsbestandteilLib
private function deleteVertragsbestandteilHelper(Vertragsbestandteil $vertragsbestandteil)
{
$dv = $this->fetchDienstverhaeltnis($vertragsbestandteil->getDienstverhaeltnis_id());
$hasGehaltsPermission = $this->PermissionLib->isberechtigt('basis/gehaelter', 's', $dv->getOe_kurzbz());
$vbHasGehaltsbestandteile = $this->GehaltbestandteilModel->existsGehaltsbestandteil($vertragsbestandteil->getVertragsbestandteil_id());
if (!$hasGehaltsPermission && $vbHasGehaltsbestandteile)
{
throw new Exception('delete Gehaltsbestandteil permission denied');
}
$specialisedModel = VertragsbestandteilFactory::getVertragsbestandteilDBModel(
$vertragsbestandteil->getVertragsbestandteiltyp_kurzbz());
@@ -429,19 +455,19 @@ class VertragsbestandteilLib
$result = $this->endDienstverhaeltnis($dv, $enddate);
if ( $result === true)
{
if (!$deactivate) return $result;
if (!$deactivate) return $result;
if(!$this->hasOtherActiveDV($dv, $enddate))
{
$result = $this->BenutzerModel->update(
array('uid' => $dv->getMitarbeiter_uid()),
array(
'aktiv' => false,
'updateaktivam' => date('Y-m-d'),
'updateaktivvon' => $this->loggedInUser
)
);
}
if(!$this->hasOtherActiveDV($dv, $enddate))
{
$result = $this->BenutzerModel->update(
array('uid' => $dv->getMitarbeiter_uid()),
array(
'aktiv' => false,
'updateaktivam' => date('Y-m-d'),
'updateaktivvon' => $this->loggedInUser
)
);
}
}
return $result;
@@ -452,6 +478,10 @@ class VertragsbestandteilLib
if( $dv->getBis() !== null && $dv->getBis() < $enddate )
{
return 'Dienstverhältnis ist bereits beendet.';
}
else if ( $dv->getVon() > $enddate )
{
return 'Dienstverhältnis hat noch nicht begonnen.';
}
$this->CI->db->trans_begin();
@@ -129,6 +129,15 @@ LEFT JOIN
array($dienstverhaeltnis_id),
$this->getEncryptedColumns());
}
public function existsGehaltsbestandteil($vertragsbestandteil_id)
{
$qry = "select count(*) from hr.tbl_gehaltsbestandteil where vertragsbestandteil_id=?";
$ret = $this->execQuery($qry,
array($vertragsbestandteil_id));
$d = getData($ret);
return $d !== null && $d > 0;
}
public function getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null,
$includefuture=false, $withvalorisationhistory=true)
+27
View File
@@ -0,0 +1,27 @@
/**
* Copyright (C) 2025 fhcomplete.org
*
* 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 3 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, see <https://www.gnu.org/licenses/>.
*/
export default {
isBerechtigt(berechtigung_kurzbz, art, oe_kurzbz, kostenstelle_id) {
return {
method: 'post',
url: '/api/frontend/v1/Permission/isBerechtigt',
params: { berechtigung_kurzbz, art, oe_kurzbz, kostenstelle_id }
};
},
};
+5 -3
View File
@@ -39,6 +39,7 @@ import studiengang from "./studiengang.js";
import menu from "./menu.js";
import dashboard from "./dashboard.js";
import authinfo from "./authinfo.js";
import permission from "./permission.js";
import studium from "./studium.js";
import language from "./language.js";
@@ -65,9 +66,10 @@ export default {
messages,
vorlagen,
addons,
studiengang,
menu,
authinfo,
studiengang,
menu,
authinfo,
permission,
studium,
language
};
+17
View File
@@ -0,0 +1,17 @@
export default {
isBerechtigt: function(berechtigung_kurzbz, art, oe_kurzbz, kostenstelle_id) {
var url = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router
+ '/api/frontend/v1/Permission/isBerechtigt';
var payload = {
"berechtigung_kurzbz": berechtigung_kurzbz,
"art": art,
"oe_kurzbz": oe_kurzbz,
"kostenstelle_id": kostenstelle_id
};
return axios.post(url, payload, {
headers: {
'Content-Type': 'application/json'
}
});
}
}
@@ -0,0 +1,41 @@
<?php
/* Copyright (C) 2017 fhcomplete.org
*
* 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.
*
* Authors: Harald Bamberger <harald.bamberger@technikum-wien.at>,
*
* Beschreibung:
* Permissions f. DV erstellen und bearbeiten bzw. korrigieren, Gehaelter
*/
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add permission: basis/gehaelter
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'basis/gehaelter';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('basis/gehaelter', 'Zugriff auf gehaelter');";
if(!$db->db_query($qry))
{
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
}
else
{
echo 'system.tbl_berechtigung: Added permission "basis/gehaelter"<br>';
}
}
}