dbTable = 'hr.tbl_vertragsbestandteil'; $this->pk = 'vertragsbestandteil_id'; } protected function getVertragsbestandteilSQL() { $sql = <<escape($date) . ' BETWEEN COALESCE(v.von, \'1970-01-01\'::date)' . ' AND COALESCE(v.bis, \'2170-01-01\'::date)'; if( $includefuture ) { $stichtagclause .= ' OR COALESCE(v.von, \'1970-01-01\'::date) > ' . $this->escape($date); } $stichtagclause .= ')'; } $sql = <<getVertragsbestandteilSQL()} WHERE v.dienstverhaeltnis_id = {$this->escape($dienstverhaeltnis_id)} {$stichtagclause} ; EOSQL; // echo $sql . "\n\n"; $query = $this->execReadOnlyQuery($sql); // TODO add decryption $data = getData($query); if ($data == null) { return array(); } $vertragsbestandteile = array(); foreach( $data as $row ) { try { $vertragsbestandteile[] = VertragsbestandteilFactory::getVertragsbestandteil($row, true); } catch (Exception $ex) { echo $ex->getMessage() . "\n"; } } $dummy = json_encode($vertragsbestandteile); return $vertragsbestandteile; } public function getVertragsbestandteil($id) { $sql = <<getVertragsbestandteilSQL()} WHERE v.vertragsbestandteil_id = {$this->escape($id)} ; EOSQL; $query = $this->execReadOnlyQuery($sql); $vertragsbestandteil = null; if( hasData($query) ) { $data = getData($query)[0]; try { $vertragsbestandteil = VertragsbestandteilFactory::getVertragsbestandteil($data, true); // TODO add decryption } catch (Exception $ex) { echo $ex->getMessage() . "\n"; } } return $vertragsbestandteil; } public function countOverlappingVBsOfSameType(vertragsbestandteil\Vertragsbestandteil $vb) { $notselfclause = (intval($vb->getVertragsbestandteil_id()) > 0) ? 'AND v.vertragsbestandteil_id <> ' . $this->escape($vb->getVertragsbestandteil_id()) : ''; $sql = <<= COALESCE(v.von, '1970-01-01'::date) AND ?::date <= COALESCE(v.bis, '2170-12-31') {$notselfclause} EOSQL; $ret = $this->execReadOnlyQuery($sql, array( $vb->getDienstverhaeltnis_id(), $vb->getVertragsbestandteiltyp_kurzbz(), $vb->getBis(), $vb->getVon() )); if( null === ($vbcount = getData($ret)) ) { throw new Exception('failed to fetch overlappingvbs count'); } return $vbcount[0]->overlappingvbs; } }