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 '