From 11926ca9b2df1bc53349c6c591fa0809fab24cfe Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 20 Nov 2023 09:19:32 +0100 Subject: [PATCH] refactor creation of benutzerfunktiondata, add check for already used benutzerfunktionen in another vb --- .../VertragsbestandteilFunktion.php | 51 +++++++++++++++---- .../VertragsbestandteilFunktion_model.php | 17 +++++++ .../Vertragsbestandteil_model.php | 5 +- 3 files changed, 62 insertions(+), 11 deletions(-) diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php index 70e24bf8c..e51b498f4 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilFunktion.php @@ -1,6 +1,7 @@ CI = get_instance(); $this->CI->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel'); + $this->CI->load->model('vertragsbestandteil/VertragsbestandteilFunktion_model', + 'VertragsbestandteilFunktionModel'); $this->CI->load->library('vertragsbestandteil/VertragsbestandteilLib', null, 'VertragsbestandteilLib'); } @@ -136,7 +139,7 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil 'orget' => $bf->oe_kurzbz ); $this->createBenutzerfunktionData($data); - $bfid = $this->insertBenutzerfunktion($this->benutzerfunktiondata); + $bfid = $this->insertBenutzerfunktion($this->getBenutzerfunktionData4Insert()); $this->setBenutzerfunktion_id($bfid); } elseif( $this->isBefore($bf->datum_von, $this->getVon()) && @@ -148,7 +151,7 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil 'orget' => $bf->oe_kurzbz ); $this->createBenutzerfunktionData($data); - $bfid = $this->insertBenutzerfunktion($this->benutzerfunktiondata); + $bfid = $this->insertBenutzerfunktion($this->getBenutzerfunktionData4Insert()); $this->setBenutzerfunktion_id($bfid); } } @@ -211,7 +214,7 @@ class VertragsbestandteilFunktion extends Vertragsbestandteil return; } - $bfid = $this->insertBenutzerfunktion($this->benutzerfunktiondata); + $bfid = $this->insertBenutzerfunktion($this->getBenutzerfunktionData4Insert()); $this->setBenutzerfunktion_id($bfid); } @@ -275,6 +278,25 @@ EOTXT; return $this; } + protected function getBenutzerfunktionData4Insert() + { + if( null === $this->benutzerfunktiondata ) { + return null; + } + + $benutzerfunktiondata = (object) array( + 'funktion_kurzbz' => $this->benutzerfunktiondata->funktion_kurzbz, + 'oe_kurzbz' => $this->benutzerfunktiondata->oe_kurzbz, + 'uid' => $this->benutzerfunktiondata->uid, + 'datum_von' => $this->getVon(), + 'datum_bis' => $this->getBis(), + 'insertamum' => strftime('%Y-%m-%d %H:%M:%S'), + 'insertvon' => getAuthUID() + ); + + return $benutzerfunktiondata; + } + protected function createBenutzerfunktionData($data) { if( empty($data->funktion) || empty($data->orget) ) @@ -285,11 +307,7 @@ EOTXT; $this->benutzerfunktiondata = (object) array( 'funktion_kurzbz' => $data->funktion, 'oe_kurzbz' => $data->orget, - 'uid' => $data->mitarbeiter_uid, - 'datum_von' => $this->getVon(), - 'datum_bis' => $this->getBis(), - 'insertamum' => strftime('%Y-%m-%d %H:%M:%S'), - 'insertvon' => getAuthUID() + 'uid' => $data->mitarbeiter_uid ); } @@ -307,7 +325,8 @@ EOTXT; 'oe_bezeichnung' => $data->oe_bezeichnung, 'oe_kurzbz_sap' => $data->oe_kurzbz_sap, 'oe_typ_kurzbz' => $data->oe_typ_kurzbz, - 'oe_typ_bezeichnung' => $data->oe_typ_bezeichnung + 'oe_typ_bezeichnung' => $data->oe_typ_bezeichnung, + 'uid' => $data->mitarbeiter_uid ); } @@ -319,6 +338,20 @@ EOTXT; . 'Funktion und eine Organisationseinheit müssen ausgewählt sein.'; } + // TODO check if Benutzerfunktion is assigned to another vb + if( intval($this->benutzerfunktion_id) > 0 ) + { + if ( $this->CI->VertragsbestandteilFunktionModel + ->isBenutzerfunktionAlreadyAttachedToAnotherVB( + $this->benutzerfunktion_id, + $this->getVertragsbestandteil_id()) ) + { + $this->validationerrors[] = 'Die Benutzerfunktion ist bereits ' + . 'mit einem anderen Vertragsbestandteil verknüpft und kann ' + . 'nicht mehrfach verknüft werden.'; + } + } + return parent::validate(); } } diff --git a/application/models/vertragsbestandteil/VertragsbestandteilFunktion_model.php b/application/models/vertragsbestandteil/VertragsbestandteilFunktion_model.php index 23bffed7b..7263ac893 100644 --- a/application/models/vertragsbestandteil/VertragsbestandteilFunktion_model.php +++ b/application/models/vertragsbestandteil/VertragsbestandteilFunktion_model.php @@ -15,4 +15,21 @@ class VertragsbestandteilFunktion_model extends DB_Model $this->dbTable = 'hr.tbl_vertragsbestandteil_funktion'; $this->pk = 'vertragsbestandteil_id'; } + + public function isBenutzerfunktionAlreadyAttachedToAnotherVB($benutzerfunktion_id, $vertragsbestandteil_id) + { + $where = array('benutzerfunktion_id' => $benutzerfunktion_id); + if( intval($vertragsbestandteil_id) > 0 ) + { + $where['vertragsbestandteil_id != '] = $vertragsbestandteil_id; + } + $this->addSelect('count(*) AS vbscount'); + $res = $this->loadWhere($where); + if(isError($res)) + { + throw new Exception('failed to check if benutzerfunktionid is already attached to another vertragsbestanteil'); + } + $count = (getData($res))[0]->vbscount; + return $count > 0; + } } diff --git a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php index fae728fd9..6d8c18859 100644 --- a/application/models/vertragsbestandteil/Vertragsbestandteil_model.php +++ b/application/models/vertragsbestandteil/Vertragsbestandteil_model.php @@ -22,8 +22,9 @@ class Vertragsbestandteil_model extends DB_Model $sql = <<