diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index a21811bb4..2c65003dd 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -33,4 +33,97 @@ class Benutzer_model extends DB_Model return $this->execQuery($sql, array($person_id, $oe_kurzbz)); } + + /** + * Checks if alias exists + * @param $alias + */ + public function aliasExists($alias) + { + $this->addSelect('1'); + $result = $this->loadWhere(array('alias' => $alias)); + + if (!isError($result)) + { + if (hasData($result)) + { + $result = success(array(true)); + } + else if (!hasData($result)) + { + $result = success(array(false)); + } + } + + return $result; + } + + /** + * Generates alias for a uid. + * @param $uid + * @return array the alias + */ + public function generateAlias($uid) + { + $aliasres = ''; + $this->addSelect('vorname, nachname'); + $this->addJoin('public.tbl_person', 'person_id'); + $nameresult = $this->loadWhere(array('uid' => $uid)); + + if (hasData($nameresult)) + { + $aliasdata = getData($nameresult); + $alias = $this->_sanitizeAliasName($aliasdata[0]->vorname).'.'.$this->_sanitizeAliasName($aliasdata[0]->nachname); + $aliasexists = $this->aliasExists($alias); + + if (hasData($aliasexists) && !getData($aliasexists)[0]) + $aliasres = $alias; + + } + return success($aliasres); + } + + // -------------------------------------------------------------------------------------------- + // Private methods + + /** + * Sanitizes a string used for alias. Replaces special characters, spaces, upper case. + * @param string $str + * @return string + */ + private function _sanitizeAliasName($str) + { + $enc = 'UTF-8'; + + $acentos = array( + 'A' => '/À|Á|Â|Ã|Å/', + 'Ae' => '/Ä/', + 'a' => '/à|á|â|ã|å/', + 'ae'=> '/ä/', + 'C' => '/Ç/', + 'c' => '/ç/', + 'E' => '/È|É|Ê|Ë/', + 'e' => '/è|é|ê|ë/', + 'I' => '/Ì|Í|Î|Ï/', + 'i' => '/ì|í|î|ï/', + 'N' => '/Ñ/', + 'n' => '/ñ/', + 'O' => '/Ò|Ó|Ô|Õ/', + 'Oe' => '/Ö/', + 'o' => '/ò|ó|ô|õ/', + 'oe' => '/ö/', + 'U' => '/Ù|Ú|Û/', + 'Ue' => '/Ü/', + 'u' => '/ù|ú|û/', + 'ue' => '/ü/', + 'Y' => '/Ý/', + 'y' => '/ý|ÿ/', + 'a.' => '/ª/', + 'o.' => '/º/', + 'ss' => '/ß/', + ); + + $str = preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc)); + return mb_strtolower(str_replace(' ','_', $str)); + } } diff --git a/application/models/person/Kontakt_model.php b/application/models/person/Kontakt_model.php index 3f27604e8..33dc66c86 100644 --- a/application/models/person/Kontakt_model.php +++ b/application/models/person/Kontakt_model.php @@ -10,6 +10,7 @@ class Kontakt_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_kontakt'; $this->pk = 'kontakt_id'; + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); } public function getWholeKontakt($kontakt_id, $person_id = null, $kontakttyp = null) @@ -59,4 +60,63 @@ class Kontakt_model extends DB_Model return $this->execQuery($sql, array($person_id, $kontakttyp)); } + + /** + * Laedt einen Kontakt eines Standortes + * Es wird nur der erste Eintrag zurueckgeliefert! + * @param $standort_id + * @param $kontakttyp + */ + public function getFirmaKontakttyp($standort_id, $kontakttyp) + { + if (!is_numeric($standort_id)) + { + return error('StandortID ist ungueltig'); + } + + $qry = "SELECT kontakt, kontakt_id FROM public.tbl_kontakt WHERE standort_id=? AND kontakttyp=? ORDER BY kontakt_id LIMIT 1;"; + + return $this->execQuery($qry, array('standort_id' => $standort_id, 'kontakttyp' => $kontakttyp)); + } + + /** + * Gets Firmentelefon for a uid, can be Vorwahl with Telefonklappe or Firmenhandy + * @param $uid + */ + public function getFirmentelefon($uid) + { + $firmentelefon = success(array()); + + $this->MitarbeiterModel->addSelect('standort_id, telefonklappe, person_id'); + $this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid'); + $mitarbeiter = $this->MitarbeiterModel->load(array('uid' => $uid)); + + if (hasData($mitarbeiter)) + { + $mitarbeiter = getData($mitarbeiter); + if (isEmptyString($mitarbeiter[0]->telefonklappe)) + { + $this->addSelect('kontakt'); + $this->addOrder('updateamum, insertamum', 'DESC'); + $this->addLimit(1); + $firmenhandy = $this->loadWhere(array('person_id' => $mitarbeiter[0]->person_id, 'kontakttyp' => 'firmenhandy')); + if (hasData($firmenhandy)) + { + $firmenhandy = getData($firmenhandy); + $firmentelefon = success(array('kontakt' => $firmenhandy[0]->kontakt, 'telefonklappe' => '')); + } + } + else + { + $firmaKontakttyp = $this->getFirmaKontakttyp($mitarbeiter[0]->standort_id, 'telefon'); + if (hasData($firmaKontakttyp)) + { + $vorwahl = getData($firmaKontakttyp); + $vorwahl = $vorwahl[0]->kontakt; + $firmentelefon = success(array('kontakt' => $vorwahl, 'telefonklappe' => $mitarbeiter[0]->telefonklappe)); + } + } + } + return $firmentelefon; + } } diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index ccaeacd0d..3b0bd2479 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -40,4 +40,47 @@ class Mitarbeiter_model extends DB_Model return success(false); } } + + /** + * Laedt das Personal + * + * @param $fix wenn true werden nur fixangestellte geladen + * @param $aktiv wenn true werden nur aktive geladen, wenn false dann nur inaktve, wenn null dann alle + * @param $verwendung wenn true werden alle geladen die eine BIS-Verwendung eingetragen haben + * @return array + */ + public function getPersonal($aktiv, $fix, $verwendung) + { + $qry = "SELECT DISTINCT ON(mitarbeiter_uid) *, + tbl_benutzer.aktiv as aktiv, + tbl_mitarbeiter.insertamum, + tbl_mitarbeiter.insertvon, + tbl_mitarbeiter.updateamum, + tbl_mitarbeiter.updatevon + FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)) + JOIN public.tbl_person USING(person_id)) + LEFT JOIN public.tbl_benutzerfunktion USING(uid) + WHERE true"; + + if ($fix === true) + $qry .= " AND fixangestellt=true"; + elseif ($fix === false) + $qry .= " AND fixangestellt=false"; + + if ($aktiv === true) + $qry .= " AND tbl_benutzer.aktiv=true"; + elseif ($aktiv === false) + $qry .= " AND tbl_benutzer.aktiv=false"; + + if ($verwendung === true) + { + $qry.=" AND EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; + } + elseif ($verwendung === false) + { + $qry.=" AND NOT EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; + } + + return $this->execQuery($qry); + } } diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 743f29cc5..33499621d 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4389,6 +4389,18 @@ if(!$result = @$db->db_query("SELECT sort FROM lehre.tbl_abschlussbeurteilung LI echo '
lehre.tbl_abschlussbeurteilung: Spalte sort hinzugefuegt!
'; } +// Add column iso3166_1_a3 to tbl_nation +if(!$result = @$db->db_query("SELECT iso3166_1_a3 FROM bis.tbl_nation LIMIT 1")) +{ + $qry = "ALTER table bis.tbl_nation ADD COLUMN iso3166_1_a3 VARCHAR(3); + COMMENT ON COLUMN bis.tbl_nation.iso3166_1_a3 IS 'ISO 3166-1 alpha-3 country code';"; + + if(!$db->db_query($qry)) + echo 'bis.tbl_nation: '.$db->db_last_error().'
'; + else + echo '
bis.tbl_nation: Spalte iso3166_1_a3 hinzugefuegt'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -4418,7 +4430,7 @@ $tabellen=array( "bis.tbl_mobilitaet" => array("mobilitaet_id","prestudent_id","mobilitaetstyp_kurzbz","studiensemester_kurzbz","mobilitaetsprogramm_code","gsprogramm_id","firma_id","status_kurzbz","ausbildungssemester","insertvon","insertamum","updatevon","updateamum"), "bis.tbl_mobilitaetstyp" => array("mobilitaetstyp_kurzbz","bezeichnung","aktiv"), "bis.tbl_mobilitaetsprogramm" => array("mobilitaetsprogramm_code","kurzbz","beschreibung","sichtbar","sichtbar_outgoing"), - "bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz", "iso3166_1_a2"), + "bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz", "iso3166_1_a2","iso3166_1_a3"), "bis.tbl_nationengruppe" => array("nationengruppe_kurzbz","nationengruppe_bezeichnung","aktiv"), "bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"), "bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),