mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 18:02:18 +00:00
Merge branch 'master' into feature-39161/PV21_Valorisierung
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
class Bismeldestichtag_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@@ -12,6 +11,88 @@ class Bismeldestichtag_model extends DB_Model
|
||||
$this->pk = 'meldestichtag_id';
|
||||
}
|
||||
|
||||
public function getLastReachedMeldestichtag($studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->addSelect('meldestichtag_id');
|
||||
$this->addSelect('meldestichtag');
|
||||
$this->addSelect('studiensemester_kurzbz');
|
||||
$this->addSelect('insertamum');
|
||||
$this->addSelect('insertvon');
|
||||
$this->addSelect('updateamum');
|
||||
$this->addSelect('updatevon');
|
||||
|
||||
if ($studiensemester_kurzbz) {
|
||||
$this->db->where('studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
}
|
||||
|
||||
$this->addOrder('meldestichtag', 'DESC');
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere([
|
||||
'meldestichtag < NOW()' => null
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob Meldestichtag für ein bestimmtes Statusdatum und Studiensemester erreicht ist.
|
||||
*
|
||||
* @param $status_datum
|
||||
* @return boolean true wenn erreicht, oder false
|
||||
*/
|
||||
public function checkIfMeldestichtagErreicht($status_datum, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$erreicht = false;
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
// Studiensemesterende holen
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$result = $this->StudiensemesterModel->loadWhere(
|
||||
array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
)
|
||||
);
|
||||
if(isError($result))
|
||||
{
|
||||
return $result;
|
||||
}
|
||||
$result = current(getData($result));
|
||||
|
||||
$studiensemester_ende = new DateTime($result->ende);
|
||||
}
|
||||
|
||||
// letztes erreichtes Bismeldedatum holen
|
||||
$result = $this->getLastReachedMeldestichtag();
|
||||
if (isError($result))
|
||||
{
|
||||
return $result;
|
||||
}
|
||||
if (!hasData($result)) {
|
||||
return success("0",'No Statusdata vorhanden');
|
||||
}
|
||||
$stichtag = current(getData($result));
|
||||
$stichtag = new DateTime($stichtag->meldestichtag);
|
||||
|
||||
$statusDatum = new DateTime($status_datum);
|
||||
|
||||
// Prüfen, ob Studentstatusdatum oder Studiensemester vor dem Stichtagsdatum liegen
|
||||
if (isset($statusDatum))
|
||||
{
|
||||
if (isset($stichtag))
|
||||
$erreicht = $statusDatum < $stichtag;
|
||||
}
|
||||
|
||||
if (isset($studiensemester_ende))
|
||||
{
|
||||
$erreicht = $erreicht || $studiensemester_ende < $stichtag;
|
||||
}
|
||||
|
||||
if ($erreicht)
|
||||
return success("1", "Studentstatus mit Datum oder Semesterende vor erreichtem Meldestichtag können nicht hinzugefügt werden");
|
||||
|
||||
return success("0", "Meldestatus nicht erreicht");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets last Bismeldestichtag for a Studiensemester.
|
||||
* @param $studiensemester_kurzbz
|
||||
|
||||
@@ -19,4 +19,13 @@ class Gemeinde_model extends DB_Model
|
||||
|
||||
return $this->loadWhere(array("plz" => $plz));
|
||||
}
|
||||
|
||||
public function checkLocation($plz, $gemeinde, $ort)
|
||||
{
|
||||
$this->db->where('ortschaftsname', $ort);
|
||||
$this->db->where('name', $gemeinde);
|
||||
$this->db->where('plz', $plz);
|
||||
|
||||
return (boolean)$this->db->count_all_results($this->dbTable);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
<?php
|
||||
|
||||
use CI3_Events as Events;
|
||||
|
||||
class Konto_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -12,6 +15,218 @@ class Konto_model extends DB_Model
|
||||
$this->pk = 'buchungsnr';
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert Data into DB-Table
|
||||
*
|
||||
* @param array $data DataArray for Insert
|
||||
* @return stdClass
|
||||
*/
|
||||
public function insert($data, $encryptedColumns = null)
|
||||
{
|
||||
if (isset($data['buchungsnr_verweis']) && $data['buchungsnr_verweis'])
|
||||
return parent::insert($data, $encryptedColumns);
|
||||
|
||||
$this->db->trans_begin();
|
||||
|
||||
$result = parent::insert($data, $encryptedColumns);
|
||||
if (isError($result)) {
|
||||
$this->db->trans_rollback();
|
||||
return $result;
|
||||
}
|
||||
|
||||
$buchungsnr = $result->retval;
|
||||
// If studiengang_kz is not present in $data it will fail above since it is a not null field
|
||||
$studiengang_kz = $data['studiengang_kz'];
|
||||
|
||||
|
||||
$zahlungsreferenz = false;
|
||||
Events::trigger('generate_zahlungsreferenz', $buchungsnr, $data, function ($value) use ($zahlungsreferenz) {
|
||||
$zahlungsreferenz = $value;
|
||||
});
|
||||
|
||||
if ($zahlungsreferenz === false) {
|
||||
$result = $this->execQuery('SELECT UPPER(oe_kurzbz) || ? as zahlungsreferenz
|
||||
FROM public.tbl_studiengang
|
||||
WHERE studiengang_kz=?', [$buchungsnr, $studiengang_kz]);
|
||||
if (isError($result)) {
|
||||
$this->db->trans_rollback();
|
||||
return $result;
|
||||
}
|
||||
$zahlungsreferenz = current(getData($result))->zahlungsreferenz;
|
||||
} elseif (isError($zahlungsreferenz)) {
|
||||
$this->db->trans_rollback();
|
||||
return $zahlungsreferenz;
|
||||
}
|
||||
|
||||
|
||||
$result = $this->update($buchungsnr, [
|
||||
'zahlungsreferenz' => $zahlungsreferenz
|
||||
]);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->db->trans_rollback();
|
||||
return $result;
|
||||
}
|
||||
|
||||
$this->db->trans_commit();
|
||||
|
||||
return success($buchungsnr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete data from DB-Table
|
||||
*
|
||||
* @param string $id Primary Key for DELETE
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
$this->db->where('buchungsnr_verweis', $id);
|
||||
if ($this->db->count_all_results($this->dbTable))
|
||||
return error('Bitte zuerst die zugeordneten Buchungen loeschen', 42);
|
||||
return parent::delete($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds additional fields to the Query
|
||||
*
|
||||
* @return Konto_model
|
||||
*/
|
||||
public function withAdditionalInfo()
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addSelect('UPPER(typ::varchar(1) || kurzbz) AS kuerzel');
|
||||
$this->addSelect('person.anrede');
|
||||
$this->addSelect('person.titelpost');
|
||||
$this->addSelect('person.titelpre');
|
||||
$this->addSelect('person.vorname');
|
||||
$this->addSelect('person.vornamen');
|
||||
$this->addSelect('person.nachname');
|
||||
|
||||
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||
$this->addJoin('public.tbl_person person', 'person_id', 'LEFT');
|
||||
|
||||
Events::trigger('konto_query');
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all accounting entries for a person optionally filtered by Studiengang
|
||||
*
|
||||
* @param integer|array $person_id
|
||||
* @param string (optional) $studiengang_kz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getAlleBuchungen($person_id, $studiengang_kz = '')
|
||||
{
|
||||
$this->withAdditionalInfo();
|
||||
|
||||
$this->addOrder('buchungsdatum');
|
||||
|
||||
if (is_array($person_id))
|
||||
$this->db->where_in('person_id', $person_id);
|
||||
else
|
||||
$this->db->where('person_id', $person_id);
|
||||
|
||||
if ($studiengang_kz)
|
||||
return $this->loadWhere([
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
]);
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all open accounting entries for a person optionally filtered by Studiengang
|
||||
*
|
||||
* @param integer|array $person_id
|
||||
* @param string (optional) $studiengang_kz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getOffeneBuchungen($person_id, $studiengang_kz = '')
|
||||
{
|
||||
$this->addSelect('buchungsnr');
|
||||
$this->db->where('(betrag + (
|
||||
SELECT CASE WHEN sum(betrag) is null THEN 0 ELSE sum(betrag) END
|
||||
FROM ' . $this->dbTable . '
|
||||
WHERE buchungsnr_verweis=konto_a.buchungsnr
|
||||
)) !=', 0, false);
|
||||
if (is_array($person_id))
|
||||
$this->db->where_in('person_id', $person_id);
|
||||
else
|
||||
$this->db->where('person_id', $person_id);
|
||||
$sql = $this->db->get_compiled_select($this->dbTable . ' konto_a');
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->where_in('buchungsnr', $sql, false);
|
||||
$this->db->or_where_in('buchungsnr_verweis', $sql, false);
|
||||
$this->db->group_end();
|
||||
|
||||
return $this->getAlleBuchungen($person_id, $studiengang_kz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check double Buchungen
|
||||
*
|
||||
* @param array $person_ids
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param array $buchungstyp_kurzbzs
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function checkDoubleBuchung($person_ids, $studiensemester_kurzbz, $buchungstyp_kurzbzs)
|
||||
{
|
||||
$this->addSelect('vorname');
|
||||
$this->addSelect('nachname');
|
||||
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
|
||||
$this->db->where_in('person_id', $person_ids);
|
||||
$this->db->where_in('buchungstyp_kurzbz', $buchungstyp_kurzbzs);
|
||||
|
||||
$this->addGroupBy('vorname, nachname');
|
||||
$this->addOrder('nachname');
|
||||
$this->addOrder('vorname');
|
||||
|
||||
return $this->loadWhere([
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Berechnet den offenen Betrag einer Buchung
|
||||
*
|
||||
* @param integer $buchungsnr
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getDifferenz($buchungsnr)
|
||||
{
|
||||
$this->addSelect('buchungsnr_verweis');
|
||||
$this->db->where('buchungsnr', $buchungsnr);
|
||||
$sql = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$this->addSelect('buchungsnr_verweis');
|
||||
$this->db->where('buchungsnr', $buchungsnr);
|
||||
$this->db->or_where('buchungsnr_verweis', '(' . $sql . ')', false);
|
||||
$sql = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$this->addSelect('sum(betrag) differenz');
|
||||
$this->db->where('buchungsnr', $buchungsnr);
|
||||
$this->db->or_where('buchungsnr_verweis', $buchungsnr);
|
||||
$this->db->or_where('buchungsnr', '(' . $sql . ')', false);
|
||||
|
||||
$result = $this->load();
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return success(null);
|
||||
return success(current(getData($result))->differenz * -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a Payment as paid
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,39 @@ class Prestudent_model extends DB_Model
|
||||
$this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Data in DB-Table
|
||||
*
|
||||
* @param string $id PK for DB-Table
|
||||
* @param array $data DataArray for Insert
|
||||
* @return array
|
||||
*/
|
||||
public function update($id, $data, $encryptedColumns = null)
|
||||
{
|
||||
if (isset($data['zgvmas_code'])
|
||||
|| isset($data['zgvmanation'])
|
||||
|| isset($data['zgv_code'])
|
||||
|| isset($data['zgvnation'])
|
||||
) {
|
||||
/**
|
||||
* Falls ZGV vorhanden, setze Ausstellungsstaat (für BIS-Meldung)
|
||||
* auf Nation der höchsten angegebenen ZGV
|
||||
*/
|
||||
$case = '(CASE
|
||||
WHEN zgvmas_code IS NOT NULL AND zgvmanation IS NOT NULL THEN zgvmanation
|
||||
WHEN zgv_code IS NOT NULL AND zgvnation IS NOT NULL THEN zgvnation
|
||||
ELSE NULL END)';
|
||||
|
||||
foreach (['zgvmas_code', 'zgvmanation', 'zgv_code', 'zgvnation'] as $key)
|
||||
if (isset($data[$key]))
|
||||
$case = str_replace($key, $this->escape($data[$key]), $case);
|
||||
|
||||
$this->db->set('ausstellungsstaat', $case, false);
|
||||
}
|
||||
|
||||
return parent::update($id, $data, $encryptedColumns);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLastStatuses
|
||||
*/
|
||||
@@ -700,4 +733,33 @@ class Prestudent_model extends DB_Model
|
||||
return $this->execQuery($query, array($prestudent_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets history of all prestudents, person_id given
|
||||
* @param int $person_id
|
||||
* @return object
|
||||
*/
|
||||
public function getHistoryPrestudents($person_id)
|
||||
{
|
||||
|
||||
$query = "
|
||||
SELECT ps.studiensemester_kurzbz, p.priorisierung, p.studiengang_kz, sg.kurzbzlang, ps.orgform_kurzbz,
|
||||
ps.status_kurzbz, s.student_uid, sp.bezeichnung, ps.ausbildungssemester,
|
||||
CONCAT(ps.status_kurzbz, ' (', ps.ausbildungssemester, '. Semester)') as status, p.prestudent_id
|
||||
FROM public.tbl_prestudent p
|
||||
JOIN (
|
||||
SELECT DISTINCT ON(prestudent_id) *
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE prestudent_id IN (SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id = ?)
|
||||
ORDER BY prestudent_id, datum desc, insertamum desc
|
||||
) ps USING(prestudent_id)
|
||||
JOIN public.tbl_status USING(status_kurzbz)
|
||||
LEFT JOIN public.tbl_status_grund g USING (statusgrund_id)
|
||||
JOIN public.tbl_studiengang sg USING(studiengang_kz)
|
||||
LEFT JOIN lehre.tbl_studienplan sp USING (studienplan_id)
|
||||
LEFT JOIN public.tbl_student s USING (prestudent_id)
|
||||
ORDER BY p.priorisierung
|
||||
";
|
||||
|
||||
return $this->execQuery($query, array($person_id));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,15 @@ class Prestudentstatus_model extends DB_Model
|
||||
|
||||
const STATUS_ABBRECHER = 'Abbrecher';
|
||||
const STATUS_UNTERBRECHER = 'Unterbrecher';
|
||||
const STATUS_STUDENT = 'Student';
|
||||
const STATUS_DIPLOMAND = 'Diplomand';
|
||||
const STATUS_ABSOLVENT = 'Absolvent';
|
||||
const STATUS_BEWERBER = 'Bewerber';
|
||||
const STATUS_AUFGENOMMENER = 'Aufgenommener';
|
||||
const STATUS_WARTENDER = 'Wartender';
|
||||
const STATUS_ABGEWIESENER = 'Abgewiesener';
|
||||
const STATUS_INTERESSENT = 'Interessent';
|
||||
const STATUS_INCOMING = 'Incoming';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
@@ -330,13 +339,252 @@ class Prestudentstatus_model extends DB_Model
|
||||
*/
|
||||
public function withGrund($statusgrund_kurzbz)
|
||||
{
|
||||
if($statusgrund_kurzbz)
|
||||
if ($statusgrund_kurzbz)
|
||||
$this->db->set(
|
||||
'statusgrund_id',
|
||||
'(SELECT statusgrund_id FROM public.tbl_status_grund WHERE statusgrund_kurzbz =' . $this->db->escape($statusgrund_kurzbz) .')',
|
||||
'(SELECT statusgrund_id FROM public.tbl_status_grund WHERE statusgrund_kurzbz=' . $this->db->escape($statusgrund_kurzbz) . ')',
|
||||
false
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if there is only one prestudentstatus left
|
||||
*
|
||||
* @param integer $prestudent_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function checkIfLastStatusEntry($prestudent_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->addSelect('COUNT(*) AS anzahl', false);
|
||||
|
||||
if ($studiensemester_kurzbz)
|
||||
$this->db->where('studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||
|
||||
$result = $this->loadWhere([
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$resultObject = current($result->retval);
|
||||
|
||||
$anzahl = (int)$resultObject->anzahl;
|
||||
|
||||
if ($anzahl <= 1)
|
||||
return success(true, $this->p->t('lehre', 'error_lastRole'));
|
||||
|
||||
return success(false, $this->p->t('lehre', 'anzahl_existingRoles', ['anzahl' => $anzahl]));
|
||||
}
|
||||
|
||||
public function getAllPrestudentstatiWithStudiensemester($prestudent_id)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
tbl_prestudentstatus.status_kurzbz,
|
||||
tbl_prestudentstatus.studiensemester_kurzbz,
|
||||
tbl_prestudentstatus.ausbildungssemester,
|
||||
tbl_prestudentstatus.datum,
|
||||
s.start AS studiensemester_start,
|
||||
pl.orgform_kurzbz AS studienplan_orgform_kurzbz,
|
||||
stud.matrikelnr,
|
||||
pers.vorname,
|
||||
pers.nachname
|
||||
FROM
|
||||
public.tbl_prestudentstatus
|
||||
JOIN public.tbl_studiensemester s USING (studiensemester_kurzbz)
|
||||
JOIN public.tbl_prestudent USING (prestudent_id)
|
||||
JOIN public.tbl_person pers USING (person_id)
|
||||
LEFT JOIN public.tbl_student stud USING (prestudent_id)
|
||||
LEFT JOIN lehre.tbl_studienplan pl USING (studienplan_id)
|
||||
WHERE
|
||||
prestudent_id = ?
|
||||
ORDER BY
|
||||
public.tbl_prestudentstatus.datum DESC,
|
||||
public.tbl_prestudentstatus.insertamum DESC,
|
||||
public.tbl_prestudentstatus.ext_id DESC
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array($prestudent_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets status history of a prestudent
|
||||
* This function uses the language of the logged in user to
|
||||
* translate the given statusgrund
|
||||
*
|
||||
* @param integer $prestudent_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getHistoryPrestudent($prestudent_id)
|
||||
{
|
||||
$lang= getUserLanguage();
|
||||
$this->addSelect('tbl_prestudentstatus.prestudent_id');
|
||||
$this->addSelect('tbl_prestudentstatus.status_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.studiensemester_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.ausbildungssemester');
|
||||
$this->addSelect('tbl_prestudentstatus.datum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->addSelect('tbl_prestudentstatus.insertamum');
|
||||
$this->addSelect('tbl_prestudentstatus.insertvon');
|
||||
$this->addSelect('tbl_prestudentstatus.updateamum');
|
||||
$this->addSelect('tbl_prestudentstatus.updatevon');
|
||||
$this->addSelect('tbl_prestudentstatus.orgform_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtam');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bestaetigtam::timestamp, 'DD.MM.YYYY') AS format_bestaetigtam");
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtvon');
|
||||
$this->addSelect('tbl_prestudentstatus.bewerbung_abgeschicktamum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bewerbung_abgeschicktamum::timestamp, 'DD.MM.YYYY') AS format_bewerbung_abgeschicktamum");
|
||||
$this->addSelect('tbl_prestudentstatus.anmerkung');
|
||||
$this->addSelect('plan.studienplan_id');
|
||||
$this->addSelect('plan.bezeichnung');
|
||||
|
||||
$this->addSelect('grund.beschreibung[(
|
||||
SELECT index
|
||||
FROM public.tbl_sprache
|
||||
WHERE sprache=' . $this->escape($lang) . '
|
||||
)] AS statusgrund_bezeichnung', false);
|
||||
$this->addSelect("CASE
|
||||
WHEN s.student_uid IS NOT NULL
|
||||
AND tbl_prestudentstatus.status_kurzbz IN (" . implode(",", $this->escape([
|
||||
'Student',
|
||||
'Diplomand',
|
||||
'Abbrecher',
|
||||
'Absolvent',
|
||||
'Ausserodentlicher',
|
||||
'Incoming',
|
||||
'Outgoing',
|
||||
'Unterbrecher'
|
||||
])) . ")
|
||||
THEN lv.semester || lv.verband || lv.gruppe
|
||||
ELSE '-'
|
||||
END AS lehrverband", false);
|
||||
|
||||
|
||||
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
|
||||
$this->addJoin('public.tbl_status_grund grund', 'statusgrund_id', 'LEFT');
|
||||
$this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
||||
$this->addJoin(
|
||||
'public.tbl_studentlehrverband lv',
|
||||
's.student_uid IS NOT NULL AND s.student_uid=lv.student_uid AND tbl_prestudentstatus.studiensemester_kurzbz=lv.studiensemester_kurzbz',
|
||||
'LEFT'
|
||||
);
|
||||
|
||||
$this->addOrder('tbl_prestudentstatus.datum', 'DESC');
|
||||
$this->addOrder('tbl_prestudentstatus.insertamum', 'DESC');
|
||||
$this->addOrder('tbl_prestudentstatus.ext_id', 'DESC');
|
||||
|
||||
return $this->loadWhere([
|
||||
'tbl_prestudentstatus.prestudent_id' => $prestudent_id
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets status history of a prestudent for checking purposes.
|
||||
* This function adds the new state or replaces the edited.
|
||||
*
|
||||
* @param integer $prestudent_id
|
||||
* @param string $status_kurzbz
|
||||
* @param DateTime $new_date
|
||||
* @param string $new_studiensemester_kurzbz
|
||||
* @param integer $new_ausbildungssemester
|
||||
* @param string $old_studiensemester_kurzbz
|
||||
* @param integer $old_ausbildungssemester
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getHistoryWithNewOrEditedState(
|
||||
$prestudent_id,
|
||||
$status_kurzbz,
|
||||
$new_date,
|
||||
$new_studiensemester_kurzbz,
|
||||
$new_ausbildungssemester,
|
||||
$old_studiensemester_kurzbz,
|
||||
$old_ausbildungssemester
|
||||
) {
|
||||
$new_date = $new_date->format('Y-m-d');
|
||||
|
||||
$this->addSelect('status_kurzbz');
|
||||
$this->addSelect('studiensemester_kurzbz');
|
||||
$this->addSelect('ausbildungssemester');
|
||||
$this->addSelect('datum');
|
||||
$this->addSelect('insertamum');
|
||||
$this->addSelect('ext_id');
|
||||
|
||||
if ($old_studiensemester_kurzbz || $old_ausbildungssemester) {
|
||||
$this->db->not_group_start();
|
||||
$this->db->where('status_kurzbz', $status_kurzbz);
|
||||
$this->db->where('studiensemester_kurzbz', $old_studiensemester_kurzbz);
|
||||
$this->db->where('ausbildungssemester', $old_ausbildungssemester);
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
$this->db->where('prestudent_id', $prestudent_id);
|
||||
|
||||
$tmpTable = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$tmpTable .= "UNION
|
||||
SELECT " .
|
||||
$this->escape($status_kurzbz) . " AS status_kurzbz, " .
|
||||
$this->escape($new_studiensemester_kurzbz) . " AS studiensemester_kurzbz, " .
|
||||
$this->escape($new_ausbildungssemester) . " AS ausbildungssemester, " .
|
||||
$this->escape($new_date) . "::date AS datum," .
|
||||
$this->escape(date('c')) . "::date AS insertamum," .
|
||||
"NULL AS ext_id";
|
||||
|
||||
$this->addJoin('public.tbl_studiensemester sem', 'studiensemester_kurzbz');
|
||||
|
||||
$this->addOrder('s.datum', 'DESC');
|
||||
$this->addOrder('s.insertamum', 'DESC');
|
||||
$this->addOrder('s.ext_id', 'DESC');
|
||||
|
||||
$dbTable = $this->dbTable;
|
||||
$this->dbTable = "(" . $tmpTable . ") s";
|
||||
|
||||
$result = $this->load();
|
||||
|
||||
$this->dbTable = $dbTable;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* For checks if Orgform of Student status and Bewerber status match.
|
||||
* Returns any Bewerber status that does not match the first Student
|
||||
* status' Orgform.
|
||||
*
|
||||
* @param integer $prestudent_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getBewerberWhereOrgformNotStudent($prestudent_id)
|
||||
{
|
||||
$this->addSelect('plan.orgform_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
|
||||
|
||||
$this->addOrder('tbl_prestudentstatus.datum', 'DESC');
|
||||
$this->addOrder('tbl_prestudentstatus.insertamum', 'DESC');
|
||||
$this->addOrder('tbl_prestudentstatus.ext_id', 'DESC');
|
||||
|
||||
$this->addLimit(1);
|
||||
|
||||
$this->db->where('prestudent_id', $prestudent_id);
|
||||
$this->db->where('status_kurzbz', self::STATUS_STUDENT);
|
||||
|
||||
$sql = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$this->addJoin('lehre.tbl_studienplan plan', 'studienplan_id', 'LEFT');
|
||||
|
||||
$this->db->where('plan.orgform_kurzbz !=', '(' . $sql . ')', false);
|
||||
return $this->loadWhere([
|
||||
'prestudent_id' => $prestudent_id,
|
||||
'status_kurzbz' => self::STATUS_BEWERBER
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,21 @@ class Status_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_status';
|
||||
$this->pk = 'status_kurzbz';
|
||||
}
|
||||
|
||||
public function getAllStatiWithStatusgruende()
|
||||
{
|
||||
$lang = '[(SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage()) . ' LIMIT 1)]';
|
||||
|
||||
$this->addSelect('sg.status_kurzbz');
|
||||
|
||||
$this->addSelect('statusgrund_id');
|
||||
$this->addSelect('sg.bezeichnung_mehrsprachig' . $lang . ' AS bezeichnung');
|
||||
$this->addSelect('sg.beschreibung' . $lang . ' AS beschreibung');
|
||||
|
||||
$this->addJoin('public.tbl_status_grund sg', 'ON (sg.status_kurzbz = public.tbl_status.status_kurzbz)', 'LEFT');
|
||||
|
||||
return $this->loadWhere([
|
||||
'aktiv'=> true,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,4 +27,19 @@ class Statusgrund_model extends DB_Model
|
||||
|
||||
return success($status->retval);
|
||||
}
|
||||
|
||||
public function getAktiveGruende()
|
||||
{
|
||||
$lang = '[(SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage()) . ' LIMIT 1)]';
|
||||
|
||||
$this->addSelect('tbl_status_grund.*');
|
||||
$this->addSelect('bezeichnung_mehrsprachig' . $lang . ' AS bezeichnung');
|
||||
$this->addSelect('beschreibung' . $lang . ' AS beschreibung');
|
||||
|
||||
$this->addOrder('bezeichnung_mehrsprachig' . $lang);
|
||||
|
||||
return $this->loadWhere([
|
||||
'aktiv' => true
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<?php
|
||||
|
||||
use \InvalidArgumentException as InvalidArgumentException;
|
||||
use \CI3_Events as Events;
|
||||
|
||||
class Student_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -43,9 +47,169 @@ class Student_model extends DB_Model
|
||||
$max = 0;
|
||||
|
||||
$max += 1;
|
||||
|
||||
return $matrikelnummer.sprintf("%03d", $max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert die Matrikelnummer
|
||||
* FORMAT: 0710254001
|
||||
* 07 = Jahr
|
||||
* 1/2/0 = WS/SS/incoming
|
||||
* 0254 = Studiengangskennzahl vierstellig
|
||||
* 001 = Laufende Nummer
|
||||
* copy of generateMatrikelnummer plus
|
||||
* logic FH Burgenland
|
||||
*
|
||||
* TODO(chris): replace function above with this?
|
||||
* TODO(chris): rename to generatePersonenkennzeichen?
|
||||
*
|
||||
* @param integer $studiengang_kz
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string $typ
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function generateMatrikelnummer2($studiengang_kz, $studiensemester_kurzbz, $typ = null)
|
||||
{
|
||||
$personenkennzeichen = false;
|
||||
|
||||
Events::trigger(
|
||||
'generate_personenkennzeichen',
|
||||
function ($value) use ($personenkennzeichen) {
|
||||
$personenkennzeichen = $value;
|
||||
},
|
||||
$studiengang_kz,
|
||||
$studiensemester_kurzbz,
|
||||
$typ
|
||||
);
|
||||
|
||||
if ($personenkennzeichen !== false)
|
||||
return success($personenkennzeichen);
|
||||
|
||||
// Validierung der Eingabewerte
|
||||
if (strlen($studiensemester_kurzbz) < 6) {
|
||||
throw new InvalidArgumentException("Ungültiges studiensemester_kurzbz Format.");
|
||||
}
|
||||
|
||||
$jahr = mb_substr($studiensemester_kurzbz, 4);
|
||||
$art = substr($studiensemester_kurzbz, 0, 2);
|
||||
|
||||
if (($studiengang_kz < 0) || (isset($typ) && ($typ == 'l')))
|
||||
{
|
||||
$studiengang_kz=abs($studiengang_kz);
|
||||
//Lehrgang
|
||||
switch($art)
|
||||
{
|
||||
case 'WS':
|
||||
$art = '3';
|
||||
break;
|
||||
case 'SS':
|
||||
$art = '4';
|
||||
break;
|
||||
default:
|
||||
$art = '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Studiengang
|
||||
switch($art)
|
||||
{
|
||||
case 'WS':
|
||||
$art = '1';
|
||||
break;
|
||||
case 'SS':
|
||||
$art = '2';
|
||||
break;
|
||||
default:
|
||||
$art = '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
if($art=='2' || $art=='4')
|
||||
$jahr = $jahr-1;
|
||||
|
||||
//FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind
|
||||
//(AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt)
|
||||
if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019)
|
||||
{
|
||||
$matrikelnummer = sprintf("%02d", $jahr).$art.substr($studiengang_kz, 0, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
$matrikelnummer = sprintf("%02d", $jahr).$art.sprintf("%04d", $studiengang_kz);
|
||||
}
|
||||
|
||||
$qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE ? ORDER BY matrikelnr DESC LIMIT 1";
|
||||
$matrikelnrres = $this->execQuery($qry, array($matrikelnummer.'%'));
|
||||
|
||||
$max = 0;
|
||||
if ($matrikelnrres && hasData($matrikelnrres)) {
|
||||
$max = mb_substr($matrikelnrres->retval[0]->matrikelnr, 7);
|
||||
if (!is_numeric($max)) {
|
||||
$max = (int)$max;
|
||||
}
|
||||
}
|
||||
|
||||
$max += 1;
|
||||
return success($matrikelnummer.sprintf("%03d", $max));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generiert die UID
|
||||
* FORMAT: el07b001
|
||||
* $stgkzl: el = studiengangskuerzel
|
||||
* $jahr: 07 = Jahr
|
||||
* $stgtyp: b/m/d/x = Bachelor/Master/Diplom/Incoming
|
||||
* $matrikelnummer
|
||||
* 001 = Laufende Nummer Wenn StSem==SS dann wird zur Nummer 500 dazugezaehlt
|
||||
* Bei Incoming im Masterstudiengang wird auch 500 dazugezaehlt
|
||||
*
|
||||
* @param string $stgkzl
|
||||
* @param string $jahr
|
||||
* @param string $stgtyp
|
||||
* @param string $matrikelnummer
|
||||
* @param string $vorname
|
||||
* @param string $nachname
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function generateUID($stgkzl, $jahr, $stgtyp, $matrikelnummer, $vorname, $nachname)
|
||||
{
|
||||
$uid = false;
|
||||
|
||||
Events::trigger(
|
||||
'generate_student_uid',
|
||||
function ($value) use ($uid) {
|
||||
$uid = $value;
|
||||
},
|
||||
$stgkzl,
|
||||
$jahr,
|
||||
$stgtyp,
|
||||
$matrikelnummer,
|
||||
$vorname,
|
||||
$nachname
|
||||
);
|
||||
|
||||
if ($uid !== false)
|
||||
return success($uid);
|
||||
|
||||
$art = mb_substr($matrikelnummer, 2, 1);
|
||||
$nr = mb_substr($matrikelnummer, mb_strlen(trim($matrikelnummer))-3);
|
||||
if($art=='2') //Sommersemester
|
||||
$nr = $nr+500;
|
||||
elseif($art=='0' && $stgtyp=='m') //Incoming im Masterstudiengang
|
||||
$nr = $nr+500;
|
||||
elseif($art=='4' && $stgtyp=='l') // Lehrgangsteilnehmer im Sommersemester
|
||||
$nr = $nr+500;
|
||||
|
||||
|
||||
return success(mb_strtolower($stgkzl.$jahr.($art!='0'?$stgtyp:'x').$nr));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get students UID by PrestudentID.
|
||||
* @param $prestudent_id
|
||||
@@ -78,7 +242,8 @@ class Student_model extends DB_Model
|
||||
OR lower(person.nachname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.vorname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.nachname || ' ' || person.vorname) like ".$this->db->escape('%'.$filter.'%')."
|
||||
OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%'));
|
||||
OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%')
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Gsstudientyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_gsstudientyp';
|
||||
$this->pk = 'gsstudientyp_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -493,4 +493,11 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, array($student_uid));
|
||||
}
|
||||
|
||||
public function getStg($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect('stg.*');
|
||||
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz');
|
||||
return $this->load($lehrveranstaltung_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,7 @@ class Studentlehrverband_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_studentlehrverband';
|
||||
$this->pk = array('studiensemester_kurzbz', 'student_uid');
|
||||
$this->hasSequence = false;
|
||||
|
||||
$this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,34 @@ class Lehrverband_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_lehrverband';
|
||||
$this->pk = array('gruppe', 'verband', 'semester', 'studiengang_kz');
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the maximum possible semester for one or more Studiengaenge.
|
||||
* If there are more than one Studiengang each maximum is calculated and
|
||||
* the smallest result is returned.
|
||||
*
|
||||
* @param array $studiengang_kzs
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getMaxSemester($studiengang_kzs)
|
||||
{
|
||||
$sqls = [];
|
||||
foreach ($studiengang_kzs as $studiengang_kz) {
|
||||
$this->addSelect('MAX(semester) AS maxsem');
|
||||
$this->db->where('studiengang_kz', $studiengang_kz);
|
||||
$sqls[] = $this->db->get_compiled_select($this->dbTable);
|
||||
}
|
||||
|
||||
$this->addSelect('MIN(a.maxsem) AS maxsem');
|
||||
|
||||
$dbTable = $this->dbTable;
|
||||
$this->dbTable = '(' . implode(' UNION ', $sqls) . ') AS a';
|
||||
|
||||
$result = $this->load();
|
||||
|
||||
$this->dbTable = $dbTable;
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,29 @@ class Standort_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_standort';
|
||||
$this->pk = 'standort_id';
|
||||
}
|
||||
|
||||
public function searchStandorte($filter)
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
$qry = "
|
||||
SELECT
|
||||
s.kurzbz, s.standort_id
|
||||
FROM
|
||||
public.tbl_standort s
|
||||
WHERE
|
||||
lower (s.kurzbz) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
lower (s.bezeichnung) LIKE '%". $this->db->escape_like_str($filter)."%'";
|
||||
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
public function getStandorteByFirma($firma_id)
|
||||
{
|
||||
$this->addSelect("DISTINCT ON (standort_id) bezeichnung, standort_id");
|
||||
|
||||
return $this->loadWhere(array("firma_id" => $firma_id));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -106,4 +106,32 @@ class Studienplan_model extends DB_Model
|
||||
'tbl_studienplan_lehrveranstaltung.semester' => $semester
|
||||
));
|
||||
}
|
||||
|
||||
public function getAllOesForLv($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addDistinct('oe_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_studienplan_lehrveranstaltung lv', 'studienplan_id');
|
||||
$this->addJoin('lehre.tbl_studienordnung', 'studienordnung_id');
|
||||
$this->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
|
||||
return $this->loadWhere([
|
||||
'lv.lehrveranstaltung_id' => $lehrveranstaltung_id
|
||||
]);
|
||||
}
|
||||
|
||||
public function getStudienplaeneByPrestudents($prestudent_id)
|
||||
{
|
||||
$this->addDistinct();
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addSelect('sem.start AS start_stsem');
|
||||
$this->addJoin('lehre.tbl_studienordnung o', 'studienordnung_id');
|
||||
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
|
||||
$this->addJoin('public.tbl_studiensemester sem', 'sem.studiensemester_kurzbz = o.gueltigvon', 'LEFT');
|
||||
$this->addOrder('sem.start');
|
||||
|
||||
return $this->loadWhere([
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,35 +13,35 @@ class Studiensemester_model extends DB_Model
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get actual Studiensemester.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAkt()
|
||||
{
|
||||
return $this->loadWhere(array(
|
||||
'start <= ' => 'NOW()',
|
||||
'ende >= ' => 'NOW()'
|
||||
)
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Get actual Studiensemester.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAkt()
|
||||
{
|
||||
return $this->loadWhere(array(
|
||||
'start <= ' => 'NOW()',
|
||||
'ende >= ' => 'NOW()'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Get next study semester
|
||||
public function getNext()
|
||||
{
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
start > now()
|
||||
ORDER BY start
|
||||
LIMIT 1;
|
||||
';
|
||||
{
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
start > now()
|
||||
ORDER BY start
|
||||
LIMIT 1;
|
||||
';
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLastOrAktSemester
|
||||
@@ -182,10 +182,10 @@ class Studiensemester_model extends DB_Model
|
||||
return success(array());
|
||||
|
||||
$query = "
|
||||
SELECT *
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE ( ?::date < ende AND ?::date > start )
|
||||
ORDER BY start DESC";
|
||||
SELECT *
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE ( ?::date < ende AND ?::date > start )
|
||||
ORDER BY start DESC";
|
||||
|
||||
return $this->execQuery($query, array($from, $to));
|
||||
}
|
||||
@@ -200,7 +200,7 @@ class Studiensemester_model extends DB_Model
|
||||
{
|
||||
$query = "SELECT studiensemester_kurzbz, start, ende FROM public.vw_studiensemester
|
||||
WHERE studiensemester_kurzbz <> ?
|
||||
ORDER BY delta, start LIMIT 1";
|
||||
ORDER BY delta, start LIMIT 1";
|
||||
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
@@ -211,7 +211,46 @@ class Studiensemester_model extends DB_Model
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE start >= NOW() OR (start <= NOW() AND ende >= NOW())
|
||||
ORDER BY start';
|
||||
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert ausgehend von heutigen Datum $plus studiensemester in die Zukunft und $minus Studiensemester in die Vergangenheit
|
||||
*
|
||||
* @param integer $plus Optional. Wieviele Studiensemester in die Zukunft sollen ausgegeben werden. Wenn NULL werden alle zukuenftigen geliefert.
|
||||
* @param integer $minus Optional. Wieviele Studiensemester in die Vergangenheit sollen ausgegeben werden. Wenn NULL werden alle vergangenen geliefert.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function addPlusMinus($plus = null, $minus = null)
|
||||
{
|
||||
$this->addSelect($this->pk);
|
||||
$this->addOrder('ende');
|
||||
if ($plus)
|
||||
$this->addLimit($plus);
|
||||
$this->db->where('start >= NOW()', null, false);
|
||||
$plus = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$this->addSelect($this->pk);
|
||||
$this->addOrder('start', 'DESC');
|
||||
if ($minus)
|
||||
$this->addLimit($minus);
|
||||
$this->db->where('start <= NOW()', null, false);
|
||||
$minus = $this->db->get_compiled_select($this->dbTable);
|
||||
|
||||
$this->db->where_in($this->pk, '(' . $plus . ') UNION (' . $minus . ')', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt letzen zwei Ziffern des Studienjahres von Studiensemester, z.B. 24 für WS2024 und SS2025
|
||||
* @param studiensemester_kurzbz
|
||||
* @return string Studienjahr Nummer
|
||||
*/
|
||||
public function getStudienjahrNumberFromStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
$studienjahrNumber = mb_substr($studiensemester_kurzbz, 4, 2);
|
||||
if (is_numeric($studienjahrNumber) && mb_substr($studiensemester_kurzbz, 0, 2) == 'SS') (int)$studienjahrNumber -= 1;
|
||||
return $studienjahrNumber;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,4 +24,4 @@ class Adresse_model extends DB_Model
|
||||
$this->addSelect($select);
|
||||
return $this->loadWhere(array('person_id' => $person_id, 'zustelladresse'=> true));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
<?php
|
||||
|
||||
use \CI3_Events as Events;
|
||||
|
||||
class Benutzer_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -74,22 +77,88 @@ class Benutzer_model extends DB_Model
|
||||
*/
|
||||
public function generateAlias($uid)
|
||||
{
|
||||
$aliasres = '';
|
||||
$this->addLimit(1);
|
||||
$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 (isError($nameresult))
|
||||
return $nameresult;
|
||||
|
||||
if (hasData($aliasexists) && !getData($aliasexists)[0])
|
||||
$aliasres = $alias;
|
||||
}
|
||||
return success($aliasres);
|
||||
if (!hasData($nameresult))
|
||||
return success('');
|
||||
|
||||
$aliasdata = current(getData($nameresult));
|
||||
|
||||
return $this->generateAliasFromName($aliasdata->vorname, $aliasdata->nachname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates alias for a vor- and nachname.
|
||||
*
|
||||
* @param string $vorname
|
||||
* @param string $nachname
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function generateAliasFromName($vorname, $nachname)
|
||||
{
|
||||
$alias = $this->_sanitizeAliasName($vorname . '.' . $nachname);
|
||||
|
||||
$result = $this->aliasExists($alias);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
if (current(getData($result)))
|
||||
return success('');
|
||||
|
||||
return success($alias);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a matrikelnummer
|
||||
*
|
||||
* @param string $oe_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function generateMatrikelnummer($oe_kurzbz)
|
||||
{
|
||||
$matrikelnummer = false;
|
||||
|
||||
Events::trigger(
|
||||
'generate_matrikelnummer',
|
||||
function ($value) use ($matrikelnummer) {
|
||||
$matrikelnummer = $value;
|
||||
},
|
||||
$oe_kurzbz
|
||||
);
|
||||
|
||||
if ($matrikelnummer !== false)
|
||||
return success($matrikelnummer);
|
||||
|
||||
return success(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates an activation key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateActivationkey()
|
||||
{
|
||||
$this->load->library('CryptLib');
|
||||
|
||||
$key = '';
|
||||
for ($i=0; $i<32; $i++)
|
||||
$key .= ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'][mt_rand(0, 15)];
|
||||
|
||||
$value = uniqid(mt_rand(), true);
|
||||
$length = strlen($value);
|
||||
$value = str_pad($value, $length + 32 - ($length % 32), chr(0));
|
||||
|
||||
return md5($this->cryptlib->RIJNDAEL_256_ECB($value, $key, true));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------------
|
||||
@@ -100,9 +169,10 @@ class Benutzer_model extends DB_Model
|
||||
* @param string $str
|
||||
* @return string
|
||||
*/
|
||||
|
||||
private function _sanitizeAliasName($str)
|
||||
{
|
||||
$str = sanitizeProblemChars($str);
|
||||
return mb_strtolower(str_replace(' ','_', $str));
|
||||
return mb_strtolower(str_replace(' ', '_', $str));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,12 +139,51 @@ class Notiz_model extends DB_Model
|
||||
*/
|
||||
public function getNotiz($person_id)
|
||||
{
|
||||
// Join with the table public.tbl_notizzuordnung using notiz_id
|
||||
$this->addSelect('public.tbl_notiz.*');
|
||||
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
|
||||
|
||||
return $this->loadWhere(array('person_id' => $person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* gets all Notizen with Documententries for a certain type and type_id
|
||||
* @param String type of id eg. person_id, prestudent_id, mitarbeiter_uid, projekt_kurzbz, projektphase_id, projekttask_id,
|
||||
* bestellung_id, lehreinheit_id, anrechnung_id, uid)
|
||||
* @param $id the corresponding id, part of public.tbl_notizzuordnung
|
||||
*/
|
||||
public function getNotizWithDocEntries($id, $type)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
n.*, count(dms_id) as countDoc, z.notizzuordnung_id,
|
||||
TO_CHAR (CASE
|
||||
WHEN n.updateamum >= n.insertamum THEN n.updateamum
|
||||
ELSE n.insertamum
|
||||
END::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS lastUpdate,
|
||||
regexp_replace(n.text, '<[^>]*>', '', 'g') as text_stripped,
|
||||
TO_CHAR(n.start::timestamp, 'DD.MM.YYYY') AS start_format,
|
||||
TO_CHAR(n.ende::timestamp, 'DD.MM.YYYY') AS ende_format,
|
||||
z.notiz_id, z.person_id as id, ? as type_id
|
||||
|
||||
FROM
|
||||
public.tbl_notiz n
|
||||
JOIN
|
||||
public.tbl_notizzuordnung z USING (notiz_id)
|
||||
LEFT JOIN
|
||||
public.tbl_notiz_dokument dok USING (notiz_id)
|
||||
LEFT JOIN
|
||||
campus.tbl_dms_version USING (dms_id)
|
||||
WHERE
|
||||
z.$type = ?
|
||||
GROUP BY
|
||||
notiz_id, z.notizzuordnung_id
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array($type, $id));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gets all Notizen for a person with a specific title
|
||||
* @param $person_id
|
||||
@@ -231,6 +270,4 @@ class Notiz_model extends DB_Model
|
||||
|
||||
return $this->loadWhere(array('anrechnung_id' => $anrechnung_id));
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Notizdokument_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_notiz_dokument';
|
||||
$this->pk= array('notiz_id' , 'dms_id');
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,38 @@ class Notizzuordnung_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_notizzuordnung';
|
||||
$this->pk = 'notizzuordnung_id';
|
||||
}
|
||||
|
||||
public function isValidType($type)
|
||||
{
|
||||
$validTypes = [];
|
||||
|
||||
$qry = "
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'tbl_notizzuordnung'
|
||||
AND column_name not in ('notizzuordnung_id', 'notiz_id')
|
||||
";
|
||||
|
||||
$type_arr = $this->execQuery($qry);
|
||||
$type_arr = $type_arr->retval;
|
||||
|
||||
foreach ($type_arr as $t)
|
||||
{
|
||||
$validTypes[] = $t->column_name;
|
||||
}
|
||||
|
||||
//TODO(manu) param id
|
||||
if (in_array($type, $validTypes) )
|
||||
//if (in_array($type, $validTypes) ||($type == 'software_id')) //Just for testing
|
||||
{
|
||||
return success("Type " . $type . " is valid");
|
||||
// $result = success('Type of Id is valid');
|
||||
}
|
||||
else
|
||||
{
|
||||
return error("Type " . $type . " is NOT valid");
|
||||
}
|
||||
//return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,18 @@ class Firma_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_firma';
|
||||
$this->pk = 'firma_id';
|
||||
}
|
||||
|
||||
public function searchFirmen($filter)
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
$qry = "
|
||||
SELECT
|
||||
f.name, f.firma_id
|
||||
FROM
|
||||
public.tbl_firma f
|
||||
WHERE
|
||||
lower (f.name) LIKE '%". $this->db->escape_like_str($filter)."%'";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,4 +216,26 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
return success($kurzbz);
|
||||
}
|
||||
|
||||
public function searchMitarbeiter($filter)
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
$qry = "
|
||||
SELECT
|
||||
ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter
|
||||
FROM
|
||||
public.tbl_mitarbeiter ma
|
||||
JOIN
|
||||
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
||||
JOIN
|
||||
public.tbl_person p on (p.person_id = b.person_id)
|
||||
WHERE
|
||||
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user