diff --git a/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php b/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php index 1aaafa471..9551e0f51 100644 --- a/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/GehaltsbestandteilLib.php @@ -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) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index 88507a484..101b90171 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -34,6 +34,8 @@ class VertragsbestandteilLib protected $DienstverhaeltnisModel; /** @var Vertragsbestandteil_model */ protected $VertragsbestandteilModel; + /** @var GehaltsbestandeilModel */ + protected $GehaltbestandteilModel; /** @var Benutzer_model */ protected $BenutzerModel; /** @@ -58,6 +60,9 @@ 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; @@ -325,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()); diff --git a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php index c50627697..fa74f1395 100644 --- a/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Gehaltsbestandteil_model.php @@ -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)