diff --git a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php index d47b89342..535a9f137 100644 --- a/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php +++ b/application/libraries/vertragsbestandteil/VertragsbestandteilLib.php @@ -254,7 +254,8 @@ class VertragsbestandteilLib $dv->getMitarbeiter_uid(), $dv->getOe_kurzbz(), $dv->getVon(), - $dv->getBis() + $dv->getBis(), + $dv->getDienstverhaeltnis_id() ); } } diff --git a/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php b/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php index 5544aa6d9..97d6c9b94 100644 --- a/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php +++ b/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php @@ -80,8 +80,10 @@ class Dienstverhaeltnis_model extends DB_Model return $this->execQuery($qry, array($uid, $datestring, $datestring)); } - public function isOverlappingExistingDV($mitarbeiter_uid, $oe_kurzbz, $von, $bis) + public function isOverlappingExistingDV($mitarbeiter_uid, $oe_kurzbz, $von, $bis, $dvid=null) { + $dvidclause = (intval($dvid) > 0) ? 'AND dv.dienstverhaeltnis_id != ' . $dvid : ''; + $query = <<= dv.von + COALESCE(?::date, '2170-12-31'::date) >= dv.von + AND ( + SELECT + COUNT(*) AS karenzen + FROM + hr.tbl_vertragsbestandteil vb + WHERE + vb.dienstverhaeltnis_id = dv.dienstverhaeltnis_id + AND + vb.vertragsbestandteiltyp_kurzbz = 'karenz' + AND + ?::date >= COALESCE(vb.von, '1970-01-01'::date) + AND + COALESCE(?::date, '2170-12-31'::date) <= COALESCE(vb.bis, '2170-12-31') + ) = 0 + {$dvidclause} EOSQL; $ret = $this->execReadOnlyQuery($query, - array($mitarbeiter_uid, $oe_kurzbz, $von, $bis)); + array($mitarbeiter_uid, $oe_kurzbz, $von, $bis, $von, $bis)); if( ($dvcount = getData($ret)) && ($dvcount[0]->dvcount > 0) ) { return true;