Merge branch 'master' into feature-20696/pausenfehler_wird_nicht_angezeigt

This commit is contained in:
ma0068
2022-09-06 09:20:57 +02:00
31 changed files with 2188 additions and 254 deletions
@@ -16,9 +16,11 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungJob extends JOB_Controller
{
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
/**
@@ -33,6 +35,8 @@ class AnrechnungJob extends JOB_Controller
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
$this->load->library('AnrechnungLib');
}
/**
@@ -342,6 +346,79 @@ html;
}
/**
* Send Sancho mail to remind lecturers to provide their recommendation if not done until one week after request.
*/
public function sendMailRemindRecommendation(){
$this->logInfo('Start AnrechnungJob sendMailRemindRecommendation to remind lecturers to provide their recommendation.');
// Get Anrechnungen with pending recommendations, that were requested 1 week before today.
// Restrict query for Anrechnungen of actual semester.
$this->AnrechnungModel->addSelect('astat.anrechnung_id, astat.datum, astat.insertamum');
$this->AnrechnungModel->addDistinct('astat.anrechnung_id');
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus astat', 'anrechnung_id');
$result = $this->AnrechnungModel->loadWhere('
studiensemester_kurzbz = (
SELECT studiensemester_kurzbz FROM tbl_studiensemester WHERE now()::date BETWEEN start AND ende)
)
AND genehmigt_von IS NULL
AND empfehlung_anrechnung IS NULL
AND status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) .' -- in Bearbeitung durch Lektor
AND NOW()::date = (astat.datum + interval \'1 week\') -- eine Woche nach Empfehlungsanfrage
ORDER BY astat.anrechnung_id, astat.datum DESC, astat.insertamum DESC -- nur letzten status dabei prüfen
');
// Exit if there are no pending recommendations
if (!hasData($result))
{
$this->logInfo('End AnrechnungJob sendMailRemindRecommendation, because no recommendations to be done.');
exit;
}
$anrechnung_id_arr = array_column(getData($result), 'anrechnung_id');
$arr_lvLector_arr = array();
foreach ($anrechnung_id_arr as $anrechnung_id)
{
$arr_lvLector_arr[]= $this->anrechnunglib->getLectors($anrechnung_id); // Returns LV Leitung. If not present, then all lectors of LV.
}
// Unique lector array to send only one mail per lector
$arr_lvLector_arr = array_unique($arr_lvLector_arr, SORT_REGULAR);
// Link to 'Anrechnungen prüfen' dashboard
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
foreach ($arr_lvLector_arr as $lvLector_arr)
{
foreach ($lvLector_arr as $lector)
{
// Prepare mail content
$fields = array(
'vorname' => $lector->vorname,
'stgl_name' => 'Die Studiengangsleitung',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Send mail
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$fields,
$lector->uid. '@'. DOMAIN,
'Erinnerung: Deine Empfehlung wird benötigt zur Anerkennung nachgewiesener Kenntnisse'
);
}
}
$this->logInfo('SUCCEDED AnrechnungJob sendMailRemindRecommendation');
}
// Get STGL mail address
private function _getSTGLMailAddress($studiengang_kz)
{
@@ -108,21 +108,29 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
$json = array(
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED),
'prestudenten' => []
);
// Approve Anrechnung
foreach ($data as $item)
{
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
// Get Prestudent
$this->AnrechnungModel->addSelect('prestudent_id');
$result = $this->AnrechnungModel->load($item['anrechnung_id']);
$prestudent_id = getData($result)[0]->prestudent_id;
// Approve
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED)
);
$json['prestudenten'][$prestudent_id][] = $item['anrechnung_id'];
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
if (isset($json) && !isEmptyArray($json['prestudenten']))
{
return $this->outputJsonSuccess($json);
}
+47 -7
View File
@@ -22,11 +22,16 @@ class DB_Model extends CI_Model
const PGSQL_BOOLEAN_FALSE = 'f';
const PGSQL_BOOLEAN_TYPE = 'bool';
const PGSQL_BOOLEAN_ARRAY_TYPE = '_bool';
const PGSQL_INT2_TYPE = 'int2';
const PGSQL_INT4_TYPE = 'int4';
const PGSQL_INT8_TYPE = 'int8';
const PGSQL_FLOAT4_TYPE = 'float4';
const PGSQL_FLOAT8_TYPE = 'float8';
protected $dbTable; // Name of the DB-Table for CI-Insert, -Update, ...
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
protected $pk; // Name of the PrimaryKey for DB-Update, Load, ...
protected $hasSequence; // False if this table has a composite primary key that is not using a sequence
// True if this table has a primary key that uses a sequence
// True if this table has a primary key that uses a sequence
private $executedQueryMetaData;
private $executedQueryListFields;
@@ -271,11 +276,6 @@ class DB_Model extends CI_Model
/**
* Load data and convert a record into a list of data from the main table,
* and linked to every element, the data from the side tables
*
* TODO:
* - Adding support for composed primary key
* - Adding support for cascading side tables (useful?)
*
* NOTE: sub queries are not supported in the from clause
*
* @return array
@@ -598,6 +598,28 @@ class DB_Model extends CI_Model
return $val;
}
/**
* Convert PG-Int* to PHP-Integer
*/
public function pgIntPhp($val)
{
// If it is null, let it be null
if ($val == null) return $val;
return intval($val);
}
/**
* Convert PG-Float* to PHP-Float
*/
public function pgFloatPhp($val)
{
// If it is null, let it be null
if ($val == null) return $val;
return floatval($val);
}
/**
* Converts from PostgreSQL array to php array
* It also takes care about array of booleans
@@ -892,6 +914,11 @@ class DB_Model extends CI_Model
// If array type, boolean type OR a UDF
if (strpos($eqmd->type, DB_Model::PGSQL_ARRAY_TYPE) !== false
|| $eqmd->type == DB_Model::PGSQL_BOOLEAN_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT2_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT4_TYPE
|| $eqmd->type == DB_Model::PGSQL_INT8_TYPE
|| $eqmd->type == DB_Model::PGSQL_FLOAT4_TYPE
|| $eqmd->type == DB_Model::PGSQL_FLOAT8_TYPE
|| $this->udflib->isUDFColumn($eqmd->name, $eqmd->type))
{
// If UDFs are inside this result set
@@ -941,6 +968,19 @@ class DB_Model extends CI_Model
{
$resultElement->{$toBeConverted->name} = $this->pgBoolPhp($resultElement->{$toBeConverted->name});
}
// Integer type
elseif ($toBeConverted->type == DB_Model::PGSQL_INT2_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_INT4_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_INT8_TYPE)
{
$resultElement->{$toBeConverted->name} = $this->pgIntPhp($resultElement->{$toBeConverted->name});
}
// Float type
elseif ($toBeConverted->type == DB_Model::PGSQL_FLOAT4_TYPE
|| $toBeConverted->type == DB_Model::PGSQL_FLOAT8_TYPE)
{
$resultElement->{$toBeConverted->name} = $this->pgFloatPhp($resultElement->{$toBeConverted->name});
}
}
}
}
+121 -1
View File
@@ -80,14 +80,24 @@ class AnrechnungLib
// Get latest ZGV
$result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id);
$latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : '';
// Get Sum of berufliche and schulische ECTS
$result = $this->ci->LehrveranstaltungModel->getEctsSumSchulisch($uid, $prestudent_id, $lv->studiengang_kz);
$sumEctsSchulisch = getData($result)[0]->ectssumschulisch;
$result = $this->ci->LehrveranstaltungModel->getEctsSumBeruflich($uid);
$sumEctsBeruflich = getData($result)[0]->ectssumberuflich;
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
$antrag_data->ects = $lv->ects;
$antrag_data->sumEctsSchulisch = $sumEctsSchulisch;
$antrag_data->sumEctsBeruflich = $sumEctsBeruflich;
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
$antrag_data->vorname = $person->vorname;
$antrag_data->nachname = $person->nachname;
$antrag_data->student_uid = $uid;
$antrag_data->matrikelnr = $student->matrikelnr;
$antrag_data->studiengang_kz = $studiengang->studiengang_kz;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
@@ -112,6 +122,7 @@ class AnrechnungLib
$anrechnung_data = new StdClass();
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
@@ -145,6 +156,7 @@ class AnrechnungLib
$anrechnung_data->prestudent_id = '';
$anrechnung_data->lehrveranstaltung = '';
$anrechnung_data->begruendung_id = '';
$anrechnung_data->begruendung = '';
$anrechnung_data->anmerkung = '';
$anrechnung_data->dms_id = '';
$anrechnung_data->insertamum = '';
@@ -155,6 +167,7 @@ class AnrechnungLib
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
$anrechnung_data->dokumentname = '';
$this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id');
$result = $this->ci->AnrechnungModel->loadWhere(
array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
@@ -800,6 +813,7 @@ class AnrechnungLib
$anrechnung_data->prestudent_id = $anrechnung->prestudent_id;
$anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id;
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
$anrechnung_data->begruendung = $anrechnung->bezeichnung;
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
$anrechnung_data->dms_id = $anrechnung->dms_id;
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
@@ -823,4 +837,110 @@ class AnrechnungLib
return $anrechnung_data;
}
/**
* If Student is a Quereinsteiger, get ECTS Summe of all angerechnete Studiensemester.
*
* @param $prestudent_id
* @param $studiengang_kz Studiengang_kz der LV
* @return int|mixed
*/
public function getQuereinsteigerEctsSumme($prestudent_id, $studiengang_kz)
{
$sumEctsQuereinsteiger = 0;
// Check, if student is Quereinsteiger
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$result = $this->ci->PrestudentstatusModel->getFirstStatus($prestudent_id, 'Student');
$prestudentFirstStudentStatus = getData($result)[0];
// If Prestudent is not a Quereinsteiger
if ($prestudentFirstStudentStatus->ausbildungssemester == 1)
{
return $sumEctsQuereinsteiger; // return 0
}
$anzahlAngerechneteStudiensemester = $prestudentFirstStudentStatus->ausbildungssemester - 1;
// If Prestudent is a Quereinsteiger
if ($prestudentFirstStudentStatus->ausbildungssemester > 1)
{
// Get the 'angerechnete Studiensemester'
$this->ci->load->model('organisations/Studiensemester_model', 'StudiensemesterModel');
$result = $this->ci->StudiensemesterModel->getPreviousFrom(
$prestudentFirstStudentStatus->studiensemester_kurzbz,
$anzahlAngerechneteStudiensemester
);
// Get ECTS Summe of each 'angerechnetes Studiensemester'
foreach (getData($result) as $studiensemester)
{
$result = $this->ci->LehrveranstaltungModel->getSumQuereinstiegsECTSProSemester(
$studiengang_kz,
$studiensemester->studiensemester_kurzbz,
$anzahlAngerechneteStudiensemester--,
$prestudentFirstStudentStatus->orgform_kurzbz
);
if (hasData($result))
{
$sumEctsQuereinsteiger = $sumEctsQuereinsteiger + getData($result)[0]->sum_ects;
}
}
}
return $sumEctsQuereinsteiger; // return sum of ects of all 'angerechnete Studiensemester'
}
/**
* Get ECTS Summe of all Anrechnungen based on schulische Kenntnisse.
*
* @param $student_uid
* @return int|mixed
*/
public function getSchulischeAnrechnungenEctsSumme($student_uid)
{
$sumEctsSchule = 0;
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
if (hasData($result))
{
foreach (getData($result) as $ects)
{
if ($ects->begruendung_id != 4)
{
$sumEctsSchule = $sumEctsSchule + $ects->sum;
}
}
}
return $sumEctsSchule;
}
/**
* Get ECTS Summe of all Anrechnungen based on berufliche Kenntnisse.
*
* @param $student_uid
* @return int
*/
public function getBeruflicheAnrechnungenEctsSumme($student_uid)
{
$sumEctsBeruflich = 0;
$result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid);
if (hasData($result))
{
foreach (getData($result) as $ects)
{
if ($ects->begruendung_id == 4)
{
$sumEctsBeruflich = $ects->sum;
}
}
}
return $sumEctsBeruflich;
}
}
+4 -3
View File
@@ -74,10 +74,11 @@ class Konto_model extends DB_Model
}
}
public function getLastStudienbeitrag($uid, $buchungstypen)
public function getStudienbeitraege($uid, $buchungstypen)
{
$query = 'SELECT konto.studiensemester_kurzbz
FROM public.tbl_konto konto,
FROM public.tbl_konto konto
JOIN public.tbl_studiensemester studiensemester ON konto.studiensemester_kurzbz = studiensemester.studiensemester_kurzbz,
public.tbl_benutzer,
public.tbl_student
WHERE tbl_benutzer.uid = \'' . $uid . '\'
@@ -91,7 +92,7 @@ class Konto_model extends DB_Model
WHERE skonto.buchungsnr = konto.buchungsnr_verweis
OR skonto.buchungsnr_verweis = konto.buchungsnr_verweis
)
ORDER BY buchungsnr DESC LIMIT 1;
ORDER BY studiensemester.start DESC;
';
return $this->execQuery($query);
@@ -52,6 +52,24 @@ class Prestudentstatus_model extends DB_Model
return $this->execQuery($query, $parametersArray);
}
/**
* Liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung.
*
* @param $prestudent_id
* @param $status_kurzbz
* @return array
*/
public function getFirstStatus($prestudent_id, $status_kurzbz)
{
$this->addOrder('datum, insertamum, ext_id');
$this->addLimit(1);
return $this->loadWhere(array(
'prestudent_id' => $prestudent_id,
'status_kurzbz' => $status_kurzbz
));
}
/**
* updateStufe
*/
+16
View File
@@ -66,4 +66,20 @@ class Student_model extends DB_Model
return $result->retval[0]->student_uid;
}
public function searchStudent($filter)
{
$this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid');
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
$this->addJoin('public.tbl_person person', 'person_id');
$result = $this->loadWhere(
"lower(student_uid) like ".$this->db->escape('%'.$filter.'%')."
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.'%'));
return $result;
}
}
@@ -313,7 +313,7 @@ class Lehrveranstaltung_model extends DB_Model
/**
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
* Diese funktion ist für autocomplete gedacht
*
*
* @param string $filter Suchfilter
* @return \stdClass A return object
*/
@@ -337,7 +337,7 @@ class Lehrveranstaltung_model extends DB_Model
/**
* Lädt Template und gibt Id und Label ("bezeichnung [kurzbz]") zurück
* Diese funktion ist für autocomplete gedacht
*
*
* @param string $name
* @return \stdClass A return object
*/
@@ -355,4 +355,120 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($qry);
}
/**
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
*
* @param $studiengang_kz
* @param $studiensemester_kurzbz
* @param $ausbildungssemester
* @param $orgform_kurzbz
* @return array|stdClass|null
*/
public function getSumQuereinstiegsECTSProSemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz)
{
$qry = '
SELECT
sum(tbl_lehrveranstaltung.ects) as "sum_ects"
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
WHERE
tbl_studienplan.studienplan_id = (
SELECT
studienplan_id
FROM
lehre.tbl_studienordnung
JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
WHERE tbl_studienordnung.studiengang_kz = ?
AND tbl_studienplan_semester.semester = ?
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
AND tbl_studienplan.orgform_kurzbz = ?
LIMIT 1
)
AND tbl_studienplan_lehrveranstaltung.semester = ?
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
AND tbl_studienplan_lehrveranstaltung.export = TRUE
';
return $this->execQuery($qry, array(
$studiengang_kz, $ausbildungssemester, $studiensemester_kurzbz, $orgform_kurzbz, $ausbildungssemester)
);
}
/**
* Get ECTS Summe aller bisher angerechneten LVs.
* Wenn keine explizite Begruendung angegeben ist, wird eine schulische Begruendung angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getSumAngerechneteECTSByBegruendung($student_uid)
{
$qry = '
SELECT sum(ects), begruendung_id FROM (
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, COALESCE(begruendung_id, 1) as begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_zeugnisnote
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
WHERE
tbl_zeugnisnote.note = 6
AND student_uid = ?
AND (lehre.tbl_anrechnung.prestudent_id = tbl_student.prestudent_id
OR lehre.tbl_anrechnung.prestudent_id is null)
UNION
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects, begruendung_id -- fallback auf externes Zeugnis
FROM
lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND student_uid = ?
) lvsangerechnet
GROUP BY begruendung_id
';
return $this->execQuery($qry, array($student_uid, $student_uid));
}
/**
* Get ECTS Summe aller bisher schulisch begruendeten angerechneten LVs.
* Derzeit wird auch jede Anrechnung, die nicht beruflich ist, als schulisch angenommen.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumSchulisch($student_uid, $prestudent_id, $studiengang_kz)
{
$qry = '
SELECT get_ects_summe_schulisch(?, ?, ?) AS ectsSumSchulisch
';
return $this->execQuery($qry, array($student_uid, $prestudent_id, $studiengang_kz));
}
/**
* Get ECTS Summe aller bisher beruflich angerechneten LVs.
*
* @param $student_uid
* @return array|stdClass|null
*/
public function getEctsSumBeruflich($student_uid)
{
$qry = '
SELECT get_ects_summe_beruflich(?) AS ectsSumBeruflich
';
return $this->execQuery($qry, array($student_uid));
}
}
@@ -105,7 +105,7 @@ class Studiensemester_model extends DB_Model
/**
* getPreviousFrom
*/
public function getPreviousFrom($studiensemester_kurzbz)
public function getPreviousFrom($studiensemester_kurzbz, $limit = 1)
{
$query = 'SELECT studiensemester_kurzbz,
start,
@@ -117,9 +117,9 @@ class Studiensemester_model extends DB_Model
WHERE studiensemester_kurzbz = ?
)
ORDER BY start DESC
LIMIT 1';
LIMIT ?';
return $this->execQuery($query, array($studiensemester_kurzbz));
return $this->execQuery($query, array($studiensemester_kurzbz, $limit));
}
/**
@@ -72,4 +72,28 @@ class Betriebsmittelperson_model extends DB_Model
return $this->loadWhere($where);
}
public function getBetriebsmittelByUid($uid, $betriebsmitteltyp = null, $isRetourniert = false)
{
$this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id');
$condition = ' wawi.tbl_betriebsmittelperson.uid = '. $this->escape($uid);
if (is_string($betriebsmitteltyp))
{
$condition .= ' AND betriebsmitteltyp = ' . $this->escape($betriebsmitteltyp);
}
if ($isRetourniert === true) {
$condition .= ' AND retouram IS NOT NULL';
}
elseif ($isRetourniert === false)
{
$condition .= ' AND retouram IS NULL';
}
$this->addOrder('ausgegebenam', 'DESC');
return $this->loadWhere($condition);
}
}
@@ -44,7 +44,8 @@ $this->load->view(
'empfehlungsanforderungWirklichZuruecknehmen',
'erfolgreichZurueckgenommen',
'empfehlungPositivConfirmed',
'empfehlungNegativConfirmed'
'empfehlungNegativConfirmed',
'anrechnungEctsTooltipTextBeiUeberschreitung'
)
),
'customCSSs' => array(
@@ -59,7 +60,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- header -->
@@ -124,11 +124,27 @@ $this->load->view(
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
<td colspan="3"><span id="ects"><?php echo $antragData->ects ?></span></td>
</tr>
<tr>
<th class="col-xs-4">
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
<span class="approveAnrechnungDetail-anrechnungEctsTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</th>
<td colspan="3">
Total: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
[Schulisch: <span id="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>"><?php echo $antragData->sumEctsSchulisch ?></span> /
Beruflich: <span id="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>"><?php echo $antragData->sumEctsBeruflich ?></span> ]
<span id="sumEctsMsg"></span>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
<td>
<td colspan="3">
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
@@ -138,19 +154,23 @@ $this->load->view(
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
<td><?php echo $antragData->zgv ?></td>
<td colspan="3"><?php echo $antragData->zgv ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
<td><?php echo $anrechnungData->anmerkung ?></td>
<td colspan="3"><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
<td>
<td colspan="3">
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
<td colspan="3"><span id="begruendung_id" data-begruendung_id="<?php echo $anrechnungData->begruendung_id ?>" ><?php echo $anrechnungData->begruendung ?></span></td>
</tr>
</tbody>
</table>
</div>
@@ -178,8 +198,10 @@ $this->load->view(
<div class="row">
<div class="col-lg-6">
<form id="form-empfehlung">
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
@@ -291,38 +313,44 @@ $this->load->view(
<div style="display: none" id="approveAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungNegativQuestion'); ?></h4>
<b>&nbsp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea" data-toggle="tooltip"
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
@@ -399,6 +427,5 @@ $this->load->view(
</div><!--end container-fluid-->
</div><!--end page-wrapper-->
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -87,7 +87,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -134,28 +133,34 @@ $this->load->view(
id="approveAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungenNegativQuestion'); ?></h4>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ol>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ol>
<br>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
</span></b>
<br><br>
<ol class="list-group">
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
</ol>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
@@ -249,6 +254,5 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -16,7 +16,7 @@ $query = '
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
stg.bezeichnung AS stg_bezeichnung,
lv.orgform_kurzbz,
(SELECT ausbildungssemester
FROM public.tbl_prestudentstatus press
@@ -26,8 +26,10 @@ $query = '
ORDER BY press.datum DESC
LIMIT 1
),
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
lv.bezeichnung AS lv_bezeichnung,
lv.ects::numeric(4,1),
get_ects_summe_schulisch(student.student_uid, anrechnung.prestudent_id, stg.studiengang_kz) AS ectsSumSchulisch,
get_ects_summe_beruflich(student.student_uid) AS ectsSumBeruflich,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
@@ -49,7 +51,9 @@ $query = '
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
) AS status_kurzbz,
student.student_uid,
anrechnung.prestudent_id
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
@@ -58,44 +62,69 @@ $query = '
LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
JOIN public.tbl_student student USING (prestudent_id)
WHERE anrechnung.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND stg.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
)
SELECT anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT insertamum::date
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC
LIMIT 1)
END "empfehlungsanfrageAm",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren
)
END "empfehlungsanfrageAn"
SELECT anrechnungen.anrechnung_id,
anrechnungen.lehrveranstaltung_id,
anrechnungen.begruendung_id,
anrechnungen.dms_id,
anrechnungen.studiensemester_kurzbz,
anrechnungen.studiengang_kz,
anrechnungen.stg_bezeichnung,
anrechnungen.orgform_kurzbz,
anrechnungen.ausbildungssemester,
anrechnungen.lv_bezeichnung,
anrechnungen.ects::float4 AS ects,
NULL AS "ectsSumBisherUndNeu",
anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch",
anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich",
anrechnungen.begruendung,
anrechnungen.student,
anrechnungen.dokument_bezeichnung,
anrechnungen.anmerkung_student,
anrechnungen.zgv,
anrechnungen.antragsdatum,
anrechnungen.empfehlung_anrechnung,
anrechnungen.status_kurzbz,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung",
anrechnungen.prestudent_id,
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT insertamum::date
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC
LIMIT 1)
END "empfehlungsanfrageAm",
CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE
(SELECT COALESCE(
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE),
STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE)
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND lema.mitarbeiter_uid NOT like \'_Dummy%\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren
)
END "empfehlungsanfrageAn"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
@@ -118,9 +147,12 @@ $filterWidgetArray = array(
ucfirst($this->p->t('lehre', 'organisationsform')),
'Semester',
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
'ECTS (LV)',
'ECTS (LV + Bisher)',
'ECTS (Bisher schulisch)',
'ECTS (Bisher beruflich',
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('global', 'zgv')),
@@ -128,6 +160,7 @@ $filterWidgetArray = array(
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status',
'PrestudentID',
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')),
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn'))
),
@@ -155,8 +188,8 @@ $filterWidgetArray = array(
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
rowSelectionChanged:function(data, rows){
func_rowSelectionChanged(data, rows);
},
tooltips: function(cell){
return func_tooltips(cell);
@@ -174,8 +207,11 @@ $filterWidgetArray = array(
ausbildungssemester: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
ectsSumBisherUndNeu: {formatter: format_ectsSumBisherUndNeu},
ectsSumSchulisch: {visible: false, headerFilter:"input", align:"right"},
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
begruendung: {headerFilter:"input", visible: true},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
@@ -187,6 +223,7 @@ $filterWidgetArray = array(
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false, headerFilter:"input"},
status_bezeichnung: {headerFilter:"input"},
prestudent_id: {visible: false, headerFilter:"input"},
empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate},
empfehlungsanfrageAn: {visible: false, headerFilter:"input"}
}', // col properties
@@ -38,7 +38,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
@@ -170,4 +169,5 @@ $this->load->view(
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -31,7 +31,9 @@ $this->load->view(
),
'anrechnung' => array(
'deadlineUeberschritten',
'benotungDerLV'
'benotungDerLV',
'anrechnungEctsTextBeiUeberschreitung',
'anrechnungEctsTooltipTextBeiUeberschreitung'
),
'person' => array(
'student',
@@ -60,7 +62,6 @@ $this->load->view(
}
</style>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- header -->
@@ -80,9 +81,13 @@ $this->load->view(
<div class="row">
<div class="col-lg-12">
<form id="requestAnrechnung-form">
<input type="hidden" name="anrechnung_id" id="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="lv_id" value="<?php echo $antragData->lv_id ?>">
<input type="hidden" name="studiensemester" value="<?php echo $antragData->studiensemester_kurzbz ?>">
<!-- Antragsdaten -->
<input type="hidden" name="ects" value="<?php echo $antragData->ects ?>">
<input type="hidden" name="sumEctsSchulisch" value="<?php echo $antragData->sumEctsSchulisch ?>">
<input type="hidden" name="sumEctsBeruflich" value="<?php echo $antragData->sumEctsBeruflich ?>">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
@@ -119,8 +124,23 @@ $this->load->view(
</tr>
<tr>
<th><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
<td><span id="ects"><?php echo number_format($antragData->ects, 1) ?> ECTS</span></td>
</tr>
<tr>
<th>
<?php echo $this->p->t('anrechnung', 'bisherAngerechneteEcts'); ?>
<span data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungEctsTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</th>
<td colspan="3">
Total ECTS: <span id="sumEctsTotal"><?php echo number_format($antragData->sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?></span>
[ Schulisch: <span id="sumEctsSchulisch"><?php echo $antragData->sumEctsSchulisch ?></span> |
Beruflich: <span id="sumEctsBeruflich"><?php echo $antragData->sumEctsBeruflich ?></span> ]
<span id="requestAnrechnung-maxEctsUeberschrittenMsg"></span>
</td>
</tr>
<tr>
<th><?php echo ucfirst($this->p->t('lehre', 'lektorInnen')); ?></th>
<td>
@@ -152,6 +172,17 @@ $this->load->view(
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="5" required
<?php echo $anrechnungData->begruendung_id == '5' ? 'checked' : ''; ?> />
<?php echo $this->p->t('anrechnung', 'antragStellenWegenHochschulzeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundHochschulzeugnisTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundZeugnisTooltipText'); ?>" />
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="4" required
@@ -180,7 +211,7 @@ $this->load->view(
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 ?>"
name="uploadfile" accept=".pdf" size="50" data-maxsize="<?php echo (int)ini_get('upload_max_filesize') * 1024 * 1024 ?>"
required>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
@@ -261,6 +292,5 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -52,7 +52,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -225,31 +224,29 @@ $this->load->view(
<div class="panel panel-default panel-body" style="display: none" id="reviewAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungNegativQuestion'); ?></h4>
&ensp;
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
required></textarea>
</div>
<br>
<!-- Button Abbrechen & Bestaetigen-->
@@ -318,6 +315,5 @@ $this->load->view(
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -80,7 +80,6 @@ $this->load->view(
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
@@ -127,30 +126,31 @@ $this->load->view(
id="reviewAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungenNegativQuestion'); ?></h4>
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<span class="text-danger">
<b><span>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></span>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
</span></b>
<br><br>
<ul class="list-group">
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span>
</li>
</ul>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
rows="2"
placeholder="<?php echo $this->p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
@@ -235,7 +235,6 @@ $this->load->view(
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
+1 -1
View File
@@ -496,7 +496,7 @@ if(!$error)
elseif(isset($_POST['stsem_aktuell']))
{
$stsem = new studiensemester();
$studiensemester_kurzbz = $stsem->getakt();
$studiensemester_kurzbz = $stsem->getNearest();
$variable->name = 'semester_aktuell';
$variable->wert = $studiensemester_kurzbz;
+1
View File
@@ -831,6 +831,7 @@ class lehreinheit extends basis_db
}
while($row = $this->db_fetch_object())
{
if(!isset($this->lehreinheiten[$row->unr])) $this->lehreinheiten[$row->unr] = new stdClass();
$this->lehreinheiten[$row->unr]->lehreinheit_id[]=$row->lehreinheit_id;
$this->lehreinheiten[$row->unr]->lvnr[]=$row->lvnr;
$this->lehreinheiten[$row->unr]->unr=$row->unr;
+4 -2
View File
@@ -754,8 +754,9 @@ class wochenplan extends basis_db
if ($lehrstunde->grp!=null && $lehrstunde->grp!='0' && $lehrstunde->grp!='')
$lvb.=$lehrstunde->grp;
}
if (count($lehrstunde->gruppe_kurzbz)>0)
if ($lehrstunde->gruppe_kurzbz != '')
$lvb=$lehrstunde->gruppe_kurzbz;
$lehrverband[]=$lvb;
// Lehrfach
$lf=$lehrstunde->lehrfach;
@@ -1458,8 +1459,9 @@ class wochenplan extends basis_db
if ($lehrstunde->grp!=null && $lehrstunde->grp!='0' && $lehrstunde->grp!='')
$lvb.=$lehrstunde->grp;
}
if (count($lehrstunde->gruppe_kurzbz)>0)
if ($lehrstunde->gruppe_kurzbz != '')
$lvb=$lehrstunde->gruppe_kurzbz;
$lehrverband[]=$lvb;
// Lehrfach
$lf=htmlspecialchars($lehrstunde->lehrfach);
+2 -2
View File
@@ -543,8 +543,8 @@ var InfocenterDetails = {
var prestudentdata = prestudentresponse.retval;
var prestudent_id = freigabedata.prestudent_id;
var statusgrund_id = freigabedata.statusgrund_id;
var prestudent_id = parseInt(freigabedata.prestudent_id);
var statusgrund_id = parseInt(freigabedata.statusgrund_id);
var rtfreigabe = !$.isNumeric(statusgrund_id);//no Statusgrund - RT Freigabe
var rtFreigegeben = false;
@@ -4,8 +4,6 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
$(function(){
const genehmigung_panel = $('#approveAnrechnungDetail-genehmigung-panel');
@@ -36,6 +34,8 @@ $(function(){
// Init tooltips
approveAnrechnungDetail.initTooltips();
approveAnrechnungDetail.alertIfMaxEctsExceeded();
// Ask if Approve Anrechnungen
$("#approveAnrechnungDetail-approve-anrechnung-ask").click(function(){
@@ -91,8 +91,12 @@ $(function(){
approveAnrechnungDetail.formatGenehmigungIsPositiv(
data.retval[0].abgeschlossen_am,
data.retval[0].abgeschlossen_von,
data.retval[0].status_bezeichnung
data.retval[0].status_kurzbz,
data.retval[0].status_bezeichnung,
);
approveAnrechnungDetail.sumUpEcts();
approveAnrechnungDetail.alertIfMaxEctsExceeded();
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
@@ -168,6 +172,7 @@ $(function(){
approveAnrechnungDetail.formatGenehmigungIsNegativ(
data.retval[0].abgeschlossen_am,
data.retval[0].abgeschlossen_von,
data.retval[0].status_kurzbz,
data.retval[0].status_bezeichnung,
begruendung
);
@@ -236,6 +241,7 @@ $(function(){
// Get form data
let form_data = $('form').serializeArray();
var init_status_kurzbz = $('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz');
// Prepare data object for ajax call
let data = {
@@ -248,21 +254,24 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
console.log(data);
if (data.error && data.retval != null)
{
console.log('inside error');
// Print error message
FHC_DialogLib.alertWarning(data.retval);
}
if (!data.error && data.retval != null)
{
console.log('inside success');
approveAnrechnungDetail.formatGenehmigungIsWithdrawed(
data.retval.status_bezeichnung
);
if (init_status_kurzbz == 'approved')
{
approveAnrechnungDetail.substractEcts(ects, sumEctsSchulisch, sumEctsBeruflich);
approveAnrechnungDetail.alertIfMaxEctsExceeded();
}
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen"));
}
@@ -477,12 +486,13 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-withdraw-request-recommedation').removeClass('hidden');
},
formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){
formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung){
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').removeClass('hidden');
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-success');
$('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
@@ -492,12 +502,13 @@ var approveAnrechnungDetail = {
// Show button to withdraw approval
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden');
},
formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){
formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung, begruendung){
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').removeClass('hidden');
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-danger');
$('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
$('#approveAnrechnungDetail-genehmigungDetail-begruendung').text(begruendung);
@@ -544,5 +555,76 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false);
// Hide button to withdraw approval
$('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden');
},
sumUpEcts: function(){
var ects = parseFloat($('#ects').text());
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
var begruendung_id = $('#begruendung_id').data('begruendung_id');
if (begruendung_id == 5)
{
return;
}
if (begruendung_id == 4)
{
$('#sumEctsBeruflich').text(sumEctsBeruflich + ects);
}
else
{
$('#sumEctsSchulisch').text(sumEctsSchulisch + ects);
}
$('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich + ects);
},
substractEcts: function(ects, sumEctsSchulisch, sumEctsBeruflich){
var ects = parseFloat($('#ects').text());
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
var begruendung_id = $('#begruendung_id').data('begruendung_id');
if (begruendung_id == 5)
{
return;
}
if (begruendung_id == 4)
{
$('#sumEctsBeruflich').text(sumEctsBeruflich - ects);
}
else
{
$('#sumEctsSchulisch').text(sumEctsSchulisch - ects);
}
$('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich - ects);
},
alertIfMaxEctsExceeded: function(){
var begruendung_id = $('#begruendung_id').data('begruendung_id');
if (begruendung_id == 5)
{
return;
}
if(
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text())) > 60 ||
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsBeruflich').text())) > 60 ||
(parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90
)
{
$('#sumEctsMsg')
.html("<br><b>ACHTUNG! Bei Anrechnung von LV: Überschreitung der Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz</b><i class=\"fa fa-lg fa-info-circle\"></i></br>")
.addClass('bg-danger text-danger')
.tooltip({
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
placement: 'right',
html: true
});
}
else
{
$('#sumEctsMsg').html('').css('border', 'none');
}
}
}
@@ -8,6 +8,12 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const COLOR_LIGHTGREY = "#f5f5f5";
const COLOR_DANGER = '#f2dede';
var tabulator = null; // Set in tableBuilt function.
// Array with accumulated LV ECTS by Prestudent. Used to find out if max ECTS are exceeded.
var selectedPrestudentWithAccumulatedLvEcts = [];
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
@@ -52,6 +58,10 @@ function hf_filterTrueFalse(headerValue, rowValue){
// Adds column details
// Sets focus on filterbutton, if table starts with stored filter.
function func_tableBuilt(table) {
// Store table in global var
tabulator = table;
table.addColumn(
{
title: "Details",
@@ -66,7 +76,7 @@ function func_tableBuilt(table) {
},
target:"_blank"
}
}, false, "status" // place column after status
}, true // place column on the very left
);
// Set focus on filterbutton
@@ -76,16 +86,74 @@ function func_tableBuilt(table) {
}
}
/**
* Formats column ECTS (LV + Bisher).
*/
var format_ectsSumBisherUndNeu = function(cell, formatterParams, onRendered){
let row = cell.getRow();
let rowData = row.getData();
let begruendung_id = (rowData.begruendung_id);
let ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich);
let ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch;
let ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich;
// If exists, add accumulated LV ECTS to bisherige ECTS
if (selectedPrestudentWithAccumulatedLvEcts.length > 0)
{
let selectedPrestudent = selectedPrestudentWithAccumulatedLvEcts.find(x => x.prestudent_id === rowData.prestudent_id);
if (selectedPrestudent != undefined)
{
ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich) + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch;
ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
}
// Color column if maximum ECTS exceeded
if (begruendung_id != 5 && row.isSelected())
{
if (
(ectsSumBisherUndNeuSchulisch + ectsSumBisherUndNeuBeruflich) > 90 ||
ectsSumBisherUndNeuSchulisch > 60 ||
ectsSumBisherUndNeuBeruflich > 60
)
{
cell.getElement().style["background-color"] = COLOR_DANGER;
}
}
else
{
cell.getElement().style.removeProperty('background-color');
}
}
// If max ECTS is exceeded, format font color / weight
ectsSumBisherUndNeuTotal = (ectsSumBisherUndNeuTotal > 90) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuTotal + "</u></b></span>" : ectsSumBisherUndNeuTotal;
ectsSumBisherUndNeuSchulisch = (ectsSumBisherUndNeuSchulisch > 60) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuSchulisch + "</u></b></span>" : ectsSumBisherUndNeuSchulisch;
ectsSumBisherUndNeuBeruflich = (ectsSumBisherUndNeuBeruflich > 60) ? "<span class='text-danger'><b><u>" + ectsSumBisherUndNeuBeruflich + "</u></b></span>" : ectsSumBisherUndNeuBeruflich;
return "T: " + ectsSumBisherUndNeuTotal + " [ S: " + ectsSumBisherUndNeuSchulisch + " | B: " + ectsSumBisherUndNeuBeruflich + " ]";
}
// Formats the rows
function func_rowFormatter(row){
let status_kurzbz = row.getData().status_kurzbz;
row.getCells().forEach(function(cell){
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
{
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
}
});
// If status is anything else then 'Bearbeitet von STGL-Leitung'
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
{
// Disable new selection of updated rows
row.getElement().style["pointerEvents"] = "none";
// ...but leave url links selectable
row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
// Color background grey
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
}
}
// Formats row selectable/unselectable
@@ -99,18 +167,23 @@ function func_selectableCheck(row){
);
}
// Performes after row was updated
function func_rowUpdated(row){
// Refresh row formatters
row.reformat();
// Calculate dynamically sum of all LV ECTS by Student and display, when maximum ECTS are exceeded.
// data = selected data, rows = selected rows
function func_rowSelectionChanged(data, rows){
// Deselect and disable new selection of updated rows
row.deselect();
row.getElement().style["pointerEvents"] = "none";
// Sum up over all anzurechnenden LV-ECTS by Prestudent
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
// ...but leave url links selectable
row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
// Loop through all active rows
var rowManager = tabulator.rowManager;
for (var i = 0; i < rowManager.activeRows.length; i++) {
// Reinitialize row -> triggers formatters.
rowManager.activeRows[i].reinitialize();
}
// Show number of selected rows.
approveAnrechnung.showNumberSelectedRows(rows);
}
// Returns tooltip
@@ -136,11 +209,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
* (Ignore rows that are approved, rejected or in request for recommendation)
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_STGL
)
.forEach((row => row.select()));
);
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
@@ -275,13 +349,7 @@ $(function(){
e.stopImmediatePropagation();
// Get selected rows data
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
.map(function(data){
// reduce to necessary fields
return {
'anrechnung_id' : data.anrechnung_id,
}
});
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData');
// Alert and exit if no anrechnung is selected
if (selected_data.length == 0)
@@ -304,19 +372,70 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
if (data.error && data.retval != null)
if (FHC_AjaxClient.isError(data))
{
// Print error message
FHC_DialogLib.alertWarning(data.retval);
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
if (!data.error && data.retval != null)
else if (FHC_AjaxClient.hasData(data))
{
// Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
data = FHC_AjaxClient.getData(data);
var prestudenten = Object.keys(data.prestudenten);
// Find intersection of selected and in fact updated Anrechnungen (in case server did not approve all).
var updatedData = selected_data.filter(x => prestudenten.some(prestudent => x.prestudent_id == prestudent));
// Sum up over all anzurechnenden LV-ECTS by Prestudent
var sumLvEctsByPrestudent = approveAnrechnung.getSumLvEctsByPreStudent(updatedData);
// Loop through Prestudenten
// key = Prestudent, value = Approved Anrechnungen of Prestudent
Object.entries(data.prestudenten).forEach(([key, value]) => {
var rowsToDeselect = [];
// Get accumulated sum of all LV ECTS
var sumLvEcts = sumLvEctsByPrestudent.find(x => x.prestudent_id == key);
// Get ALL rows of that Prestudent
var rows = $('#tableWidgetTabulator').tabulator('searchRows', 'prestudent_id', '=', key);
// Loop through the rows
rows.forEach(row => {
var updateData = {};
// If Anrechnung was approved...
if ((value.findIndex(anrechnung_id => row.getData().anrechnung_id == anrechnung_id)) !== -1)
{
// ...update status
updateData.status_kurzbz = data.status_kurzbz;
updateData.status_bezeichnung = data.status_bezeichnung;
// ...and store row to be deselected later on
rowsToDeselect.push(row);
}
// Update 'Bisher schulische ECTS' and 'Bisher berufliche ECTS' with the Sum of new approved ECTS
updateData.ectsSumSchulisch = row.getData().ectsSumSchulisch + sumLvEcts.ectsSumAnzurechnendeLvsSchulisch,
updateData.ectsSumBeruflich = row.getData().ectsSumBeruflich + sumLvEcts.ectsSumAnzurechnendeLvsBeruflich
// Update row
row.update(updateData);
// Reformat row
row.reformat();
})
// Deselect rows
$("#tableWidgetTabulator").tabulator('deselectRow', rowsToDeselect);
})
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
@@ -393,16 +512,21 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
if (data.error && data.retval != null)
if (FHC_AjaxClient.isError(data))
{
// Print error message
FHC_DialogLib.alertWarning(data.retval);
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
if (!data.error && data.retval != null)
else if (FHC_AjaxClient.hasData(data))
{
data = FHC_AjaxClient.getData(data);
// Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenAbgelehnt"));
@@ -457,20 +581,21 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
if (data.error && data.retval != null)
if (FHC_AjaxClient.isError(data))
{
// Print error message
FHC_DialogLib.alertWarning(data.retval);
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
if (!data.error && data.retval != null)
else if (FHC_AjaxClient.hasData(data))
{
data = FHC_AjaxClient.getData(data);
// Print info message, if not all selected recommendations were requested
if (data.retval.length < selected_data.length){
if (data.length < selected_data.length){
FHC_DialogLib.alertInfo(
FHC_PhrasesLib.t(
"ui", "empfehlungWurdeAngefordertAusnahmeWoKeineLektoren",
[selected_data.length, data.retval.length, selected_data.length - data.retval.length])
[selected_data.length, data.length, selected_data.length - data.length])
);
}
else
@@ -481,7 +606,11 @@ $(function(){
}
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
@@ -595,5 +724,47 @@ var approveAnrechnung = {
break;
}
},
getSumLvEctsByPreStudent(data){
var result = [];
// Berechne für jeden Prestudenten die kumulierte Summe aller selektierten LV ECTS
data.reduce((prev, curr) => {
if (!prev[curr.prestudent_id])
{
prev[curr.prestudent_id] = {
prestudent_id: curr.prestudent_id,
ectsSumAnzurechnendeLvsSchulisch: 0,
ectsSumAnzurechnendeLvsBeruflich: 0
};
result.push(prev[curr.prestudent_id])
}
// Kumulierte Summe aller selektierten LVs, die angerechnet werden sollen, getrennt nach
// schulischer und beruflicher Qualifikation.
// Ausgenommen ist die universitäre Qualifikation (5), da diese unbegrenzt möglich sind.
if (curr.begruendung_id != 5)
{
if (curr.begruendung_id == 4)
{
prev[curr.prestudent_id].ectsSumAnzurechnendeLvsBeruflich += curr.ects;
}
else
{
prev[curr.prestudent_id].ectsSumAnzurechnendeLvsSchulisch += curr.ects;
}
}
return prev;
}, {});
return result;
},
showNumberSelectedRows(rows){
$('#number-selected').html("Ausgewählte Zeilen: <strong>" + rows.length + "</strong>");
}
}
@@ -2,9 +2,54 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
const COLOR_DANGER = '#f2dede';
$(function(){
const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte
let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED)
{
var ectsLv = parseFloat($('#ects').text());
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val();
// If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
if (begruendung_id == 5)
{
exit;
}
// If max ECTS is ecceeded
if (begruendung_id == 4)
{
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
(sumEctsBeruflich + ectsLv) > 60
)
{
// Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
// Add to Checkbox text
$('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
}
}
else
{
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
(sumEctsSchulisch + ectsLv) > 60
)
{
// Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
// Add to Checkbox text
$('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
}
}
}
// Set status alert color
requestAnrechnung.setStatusAlertColor();
@@ -17,12 +62,64 @@ $(function(){
// Init tooltips
requestAnrechnung.initTooltips();
// // Alert message, if maximum ECTS exceeded
requestAnrechnung.alertIfMaxEctsExceeded();
// Set chars counter for textarea 'Herkunft der Kenntnisse'
requestAnrechnung.setCharsCounter();
// If Sperregrund exists: display Sperre panel, hide Status panel and disable all form elements
requestAnrechnung.displaySperreIfHasSperregrund();
$('#requestAnrechnung-form :input[name="begruendung"]').click(function(e){
var ectsLv = parseFloat($('#ects').text());
var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
var begruendung_id = $(this).val();
if ($(this).is(':checked'))
{
$('#sumEctsMsg').remove();
// If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
if (begruendung_id == 5)
{
return;
}
// If max ECTS is ecceeded
if (begruendung_id == 4)
{
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
(sumEctsBeruflich + ectsLv) > 60
)
{
// Get ECTS Überschreitungs-message for berufliche Qualifikation
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
// Add to Checkbox text
$(this).closest('label').append(msgBeiEctsUeberschreitung);
}
return;
}
else
{
if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
(sumEctsSchulisch + ectsLv) > 60
)
{
// Get ECTS Überschreitungs-message for schulische Qualifikation
var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
// Add to Checkbox text
$(this).closest('label').append(msgBeiEctsUeberschreitung);
}
}
}
})
$('#requestAnrechnung-form').submit(function(e){
// Avoid form redirecting automatically
@@ -183,5 +280,57 @@ var requestAnrechnung = {
return true;
}
},
sumUpEcts: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
if (begruendung_id == 5)
{
return;
}
if (begruendung_id == 4)
{
$('#sumEctsBeruflich').text(parseFloat(sumEctsBeruflich) + parseFloat(ects));
}
else
{
$('#sumEctsSchulisch').text(parseFloat(sumEctsSchulisch) + parseFloat(ects));
}
$('#sumEctsTotal').text(parseFloat(sumEctsSchulisch) + parseFloat(sumEctsBeruflich) + parseFloat(ects));
},
alertIfMaxEctsExceeded: function(){
if(
(parseFloat($('#sumEctsSchulisch').text())) > 60 ||
(parseFloat($('#sumEctsBeruflich').text())) > 60 ||
(parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90
)
{
$('#requestAnrechnung-maxEctsUeberschrittenMsg')
.html("<br><b>Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz ist überschritten. </b><i class=\"fa fa-lg fa-info-circle\"></i></br>")
.addClass('bg-danger text-danger')
.tooltip({
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
placement: 'right',
html: true
});
}
},
getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
return $('<span id="sumEctsMsg"></span>')
.html(FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTextBeiUeberschreitung",
begruendung_id == 4
? [(sumEctsSchulisch + sumEctsBeruflich + ects), sumEctsSchulisch, (sumEctsBeruflich + ects)] // beruflich
: [(sumEctsSchulisch + sumEctsBeruflich + ects), (sumEctsSchulisch + ects), sumEctsBeruflich])) // schulisch
.append('<i class="fa fa-lg fa-info-circle"></i>')
.addClass('bg-danger text-danger')
.tooltip({
title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
placement: 'right',
html: true
});
}
}
@@ -65,7 +65,7 @@ function func_tableBuilt(table) {
},
target:"_blank"
}
}, false, "status" // place column after status
}, true // place column on the very left
);
}
@@ -127,11 +127,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
* (Ignore rows that are approved, rejected or in request for recommendation)
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
)
.forEach((row => row.select()));
);
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
@@ -274,12 +274,13 @@ function func_renderComplete(table){
* Select all (filtered) rows and ignore rows that are bestellt and erteilt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row => row.getData().bestellt != null && // bestellt
row.getData().erteilt != null && // AND erteilt
row.getData().akzeptiert == null && // AND NOT akzeptiert
row.getData().status != 'Geändert') // AND NOT geändert
.forEach((row => row.select()));
row.getData().status != 'Geändert'); // AND NOT geändert
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
@@ -319,12 +319,13 @@ function func_rowUpdated(row){
* Select all (filtered) rows that are bestellt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row => row.getData().personalnummer >= 0 && // NOT dummies
row.getData().bestellt != null && // AND bestellt
row.getData().erteilt == null && // AND NOT erteilt
row.getData().status != 'Geändert') // AND NOT geaendert
.forEach((row => row.select()));
row.getData().status != 'Geändert'); // AND NOT geaendert
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
@@ -343,7 +343,7 @@ function func_rowUpdated(row){
* Select all (filtered) rows and ignore rows which have status bestellt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row => (
row.getData().personalnummer > 0 || // not dummies
row.getData().personalnummer == null) && // include Projektbetreuer
@@ -355,8 +355,9 @@ function tableWidgetHook_selectAllButton(tableWidgetDiv){
(row.getData().bestellt != null && // OR (bestellt
row.getData().status == 'Geändert') // AND geaendert)
)
)
.forEach((row => row.select()));
);
tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
+8 -3
View File
@@ -32,8 +32,10 @@ if(is_numeric($anrechnung_id))
// Add last Anrechnungstatus
$anrechnungstatus = new Anrechnung();
$anrechnungstatus->getLastAnrechnungstatus($anrechnung_id);
$anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
if(isset($anrechnungstatus->result[0]))
$anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
else
$anrechnung->result[0]->status = '';
}
elseif(is_numeric($prestudent_id))
{
@@ -46,7 +48,10 @@ elseif(is_numeric($prestudent_id))
{
$anrechnungstatus = new Anrechnung();
$status = $anrechnungstatus->getLastAnrechnungstatus($row->anrechnung_id);
$row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
if(isset($anrechnungstatus->result[0]))
$row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
else
$row->status = '';
}
}
}
+222
View File
@@ -5169,6 +5169,19 @@ if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHE
}
}
// Added Bezeichnung 'Hochschulzeugnis' to Anrechnungbegruendung
if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHERE bezeichnung = 'Hochschulzeugnis';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO lehre.tbl_anrechnung_begruendung (bezeichnung) VALUES('Hochschulzeugnis');";
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnung_begruendung '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnung_begruendung: Added bezeichnung "Hochschulzeugnis" <br>';
}
}
// Add permission to apply for Anrechnung
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'student/anrechnung_beantragen';"))
{
@@ -5668,6 +5681,46 @@ if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='dvuh'"))
}
}
if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app = 'international' "))
{
if($db->db_num_rows($result)==0)
{
$qry = "INSERT INTO system.tbl_app(app) VALUES('international');";
if(!$db->db_query($qry))
echo '<strong>App: '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue App international in system.tbl_app hinzugefügt';
}
}
// Add DMS category "international_nachweis"
if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie WHERE kategorie_kurzbz = 'international_nachweis';"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO campus.tbl_dms_kategorie (
kategorie_kurzbz,
bezeichnung,
beschreibung,
parent_kategorie_kurzbz,
oe_kurzbz,
berechtigung_kurzbz
) VALUES(
'international_nachweis',
'International Nachweis',
'Nachweis der Internationalisierungsmaßnahmen',
'fas',
'etw',
NULL
);";
if (!$db->db_query($qry))
echo '<strong>campus.tbl_dms_kategorie '.$db->db_last_error().'</strong><br>';
else
echo ' campus.tbl_dms_kategorie: Added category "international_nachweis"!<br>';
}
}
// Add table issue_status
if(!$result = @$db->db_query("SELECT 1 FROM system.tbl_issue_status LIMIT 1;"))
{
@@ -6259,6 +6312,175 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
// Neue Funktion get_ects_summe_schulisch
if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)"))
{
$qry = 'CREATE FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) RETURNS numeric
LANGUAGE plpgsql
AS $_$
DECLARE var_student_uid ALIAS FOR $1;
DECLARE var_prestudent_id ALIAS FOR $2;
DECLARE var_studiengang_kz ALIAS FOR $3;
DECLARE var_einstiegsausbildungssemester integer;
DECLARE var_einstiegsstudiensemester_kurzbz varchar(32);
DECLARE var_einstiegsorgform_kurzbz varchar(32);
DECLARE rec_quereinstiegs_studiensemester RECORD;
DECLARE sum_quereinstiegs_ects numeric(4, 1) := 0;
DECLARE sum_schulische_ects numeric(4, 1) := 0;
BEGIN
-- IF STUDENT IS QUEREINSTEIGER, GET ECTS SUMME OF ANGERECHNETE SEMESTER
-- Get Einstiegssemester
SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus
WHERE prestudent_id = var_prestudent_id
AND status_kurzbz = \'Student\'
ORDER BY datum, insertamum, ext_id
LIMIT 1;
-- If Einstiegssemester > 1 (= Quereinsteiger)
IF (var_einstiegsausbildungssemester > 1) THEN
-- ...get all Quereinstiegssemester
FOR rec_quereinstiegs_studiensemester IN SELECT studiensemester_kurzbz FROM public.tbl_studiensemester
WHERE ende <= (select start from public.tbl_studiensemester WHERE studiensemester_kurzbz = var_einstiegsstudiensemester_kurzbz )
ORDER BY start DESC
LIMIT (var_einstiegsausbildungssemester -1)
-- ...loop the Quereinstiegssemester
LOOP
-- ...and sum up ECTS of each Quereinstiegssemester
sum_quereinstiegs_ects = sum_quereinstiegs_ects + (SELECT
SUM(tbl_lehrveranstaltung.ects)
FROM
lehre.tbl_studienplan
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
WHERE
tbl_studienplan.studienplan_id = (
SELECT
studienplan_id
FROM
lehre.tbl_studienordnung
JOIN lehre.tbl_studienplan USING (studienordnung_id)
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz
AND tbl_studienplan_semester.semester = var_einstiegsausbildungssemester - 1
AND tbl_studienplan_semester.studiensemester_kurzbz = rec_quereinstiegs_studiensemester.studiensemester_kurzbz
AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz
LIMIT 1
)
AND tbl_studienplan_lehrveranstaltung.semester = var_einstiegsausbildungssemester
AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
AND tbl_studienplan_lehrveranstaltung.export = TRUE);
var_einstiegsausbildungssemester = var_einstiegsausbildungssemester - 1;
END LOOP;
END IF;
-- GET ECTS SUMME OF ALLE BISHER ANGERECHNETEN LEHRVERANSTALTUNGEN. ANRECHNUNGSGRUND: SCHULISCH.
SELECT INTO sum_schulische_ects COALESCE(SUM(ects), 0) FROM (
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
FROM
lehre.tbl_zeugnisnote
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
WHERE
tbl_zeugnisnote.note = 6
AND student_uid = var_student_uid
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
UNION
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
FROM
lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von IS NOT NULL
AND student_uid = var_student_uid
AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
) lvsangerechnet;
-- BUILD ECTS SUMME OF QUEREINSTIEGSSEMESTER- + ANGERECHNETEN LVs-ECTS
-- Summe aller bisher schulisch begründet angerechneten LVs + der Quereinstiegssemester
sum_schulische_ects = sum_schulische_ects + sum_quereinstiegs_ects;
RETURN sum_schulische_ects ;
END;
$_$;
ALTER FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) OWNER TO fhcomplete;';
if(!$db->db_query($qry))
echo '<strong>public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz): '.$db->db_last_error().'</strong><br>';
else
echo '<br>Funktion <b>public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz)</b> hinzugefügt';
}
// Neue Funktion get_ects_summe_beruflich
if(!@$db->db_query("SELECT public.get_ects_summe_beruflich('')"))
{
$qry = 'CREATE FUNCTION public.get_ects_summe_beruflich(character varying) RETURNS numeric
LANGUAGE plpgsql
AS $_$
DECLARE var_student_uid ALIAS FOR $1;
DECLARE sum_berufliche_ects numeric(4, 1) := 0;
BEGIN
SELECT INTO sum_berufliche_ects COALESCE(SUM(ects), 0) FROM (
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
FROM
lehre.tbl_zeugnisnote
LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(student_uid)
WHERE
tbl_zeugnisnote.note = 6
AND student_uid = var_student_uid
AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
AND begruendung_id = 4 -- beruflich
AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
UNION
SELECT
lehrveranstaltung_id, studiensemester_kurzbz, ects
FROM
lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND student_uid = var_student_uid
AND begruendung_id = 4 -- beruflich
) lvsangerechnet;
RETURN sum_berufliche_ects;
END;
$_$;
ALTER FUNCTION public.get_ects_summe_beruflich(character varying) OWNER TO fhcomplete;';
if(!$db->db_query($qry))
echo '<strong>public.get_ects_summe_beruflich(student_uid): '.$db->db_last_error().'</strong><br>';
else
echo '<br>Funktion <b>public.get_ects_summe_beruflich(student_uid)</b> hinzugefügt';
}
// Grant SELECT to bis.tbl_gsprogramm for web-user
if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_gsprogramm' AND table_schema='bis' AND grantee='web' AND privilege_type in ('SELECT')"))
{
+805 -20
View File
@@ -10557,18 +10557,38 @@ Any unusual occurrences
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'eines Zeugnisses (vgl. § 4 Abs. 5 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
'text' => 'eines Zeugnisses (vgl. § 4 Abs. 8 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'a certificate (see § 4 para. 5, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
'text' => 'a certificate (see § 4 para. 8, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragStellenWegenHochschulzeugnis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'eines Hochschulzeugnisses (vgl. § 4 Abs. 8 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'a university certificate (see § 4 para. 8, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -10577,18 +10597,118 @@ Any unusual occurrences
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'der nachgewiesenen beruflichen Praxis ((vgl. § 4 Abs. 6 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
'text' => 'der nachgewiesenen beruflichen Praxis (vgl. § 4 Abs. 9 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'professional practice (see § 4 para. 6, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
'text' => 'professional practice (see § 4 para. 9, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'bisherAngerechneteEcts',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bisher angerechnete ECTS',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'All previous recognized ECTS',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungEctsTooltipText',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anzeige der Summe der bisher angerechneten ECTS. Für Quereinsteiger in ein höheres Semester werden die ECTS der angerechneten Semester berücksichtigt.<br><br>Seit Oktober 2021 gelten Höchstgrenzen für Anrechnungen:<br>max. 60 ECTS für schulische Zeugnisse (anrechenbar sind nur BHS- und AHS-Zeugnisse!)<br>max. 60 ECTS für berufliche Qualifikationen<br>max. 90 ECTS INSGESAMT für schulische und berufliche Qualifikationen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Sum of previous recognized ECTS. Lateral Entries are considered with ECTS of the recognized semester.<br><br>Maximum ECTS limits are applied since Octobre 2021:<br><br>max. 60 ECTS school qualification (BHS and AHS only)<br>max. 60 ECTS professional qualification<br>max. 90 ECTS OVERALL for school and professional qualification',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungEctsTooltipTextBeiUeberschreitung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Seit Oktober 2021 gelten Höchstgrenzen für Anrechnungen:<br>max. 60 ECTS für schulische Zeugnisse (anrechenbar sind nur BHS- und AHS-Zeugnisse!)<br>max. 60 ECTS für berufliche Qualifikationen<br>max. 90 ECTS INSGESAMT für schulische Zeugnisse und berufliche Qualifikationen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Maximum ECTS limits are applied since Octobre 2021:<br>max. 60 ECTS school qualification (BHS and AHS only)<br>max. 60 ECTS professional qualification<br>max. 90 ECTS OVERALL for school and professional qualification',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungEctsTextBeiUeberschreitung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => '<br>Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz wird überschritten.<br><b>Bisherige ECTS + ECTS dieser LV: Total: {0} [ Schulisch: {1} | Beruflich: {2} ]</b> ',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => '<br>Exceedance of maximum limit for exemption (see § 12 para. 3, Regulations of the UASTW).<br><b>Former ECTS + ECTS of this course: Total: {0} [ School qualification: {1} | Professional qualification: {2} ]</b> ',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'textUebernehmenOderEigenenBegruendungstext',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Begründungstext aus Liste übernehmen oder eigene Begründung angeben',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Copy reason from list above or write your own reason',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -11609,6 +11729,26 @@ Any unusual occurrences
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'genehmigungNegativEctsHoechstgrenzeUeberschritten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnung wird nicht genehmigt aufgrund einer Überschreitung der Höchstgrenzen für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Recognition and exemption is rejected because of exceedance of maximum limit for exemption (see § 12 para. 3, Regulations of the UASTW).',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -12114,18 +12254,15 @@ Any unusual occurrences
'phrases' => array(
array(
'sprache' => 'German',
'text' => "<h5><u>Beantragung aufgrund nachgewiesener beruflicher Praxis</u></h5>
Soll die Anrechnung auf der Grundlage der beruflichen Praxis erfolgen, laden Sie bitte eine detaillierte
Tätigkeitsbeschreibung hoch. Dies kann durch betriebliche Ausbildungsnachweise und / oder Nachweise von
einschlägigen beruflichen Tätigkeiten mit Zeitangaben (z. B. durch ein qualifiziertes Arbeitszeugnis
oder durch Bestätigungen des Arbeitgebers) erfolgen.",
'text' => "<h5><u>Beantragung aufgrund beruflicher Praxis</u></h5>
Bitte erstellen Sie eine detaillierte Tätigkeitsbeschreibung. Dafür steht im CIS ein Formular zur Verfügung, das in ein PDF-Dokument umzuwandeln und gemeinsam mit dem Lebenslauf hochzuladen ist.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "<h5><u>Application for recognition based on professional practice</u></h5>
If the exemption is to be based on professional practice, please upload a detailed job description. This can be done through proof of company training and / or proof of relevant occupational activities with time information (e.g. through a qualified job reference or through confirmation from the employer).",
Please supply a detailed job description. Therefore a formular is provided in CIS, that should be converted as pdf file and supplied together with your CV.",
'description' => '',
'insertvon' => 'system'
)
@@ -12263,7 +12400,7 @@ array(
Wirtschaftsinformatik
<br>
<h5><u>Bei Anrechnungen von beruflicher Praxis</u></h5>
Bitte geben Sie Unternehmen, Position und Funktion sowie Dauer der Beschäftigung an.",
Bitte erstellen Sie eine detaillierte Tätigkeitsbeschreibung. Dafür steht im CIS ein Formular zur Verfügung, das in ein PDF-Dokument umzuwandeln und gemeinsam mit dem Lebenslauf hochzuladen ist.",
'description' => '',
'insertvon' => 'system'
),
@@ -12273,7 +12410,7 @@ array(
Please indicate where you acquired the knowledge: type of (university) school, location, subject area. Example school: HTL Mödling, vehicle technology; Example university: Vienna University of Technology, Bachelor of Business Informatics
<br>
<h5><u>If professional practice is to be recognized</u></h5>
Please state company, position and function as well as length of employment.",
Please supply a detailed job description. Therefore a formular is provided on CIS, that should be converted as pdf file and supplied together with the CV.",
'description' => '',
'insertvon' => 'system'
)
@@ -12414,10 +12551,8 @@ array(
<li>Zeitlicher Umfang der Lehrveranstaltung (z. B. SWS, ECTS, Unterrichtsstunden…)</li>
</ol>
<br>
<h5><u>Beantragung aufgrund nachgewiesener beruflicher Praxis</u></h5>
Es wird eine detaillierte Tätigkeitsbeschreibung benötigt. Dies kann durch betriebliche Ausbildungsnachweise und / oder Nachweise von
einschlägigen beruflichen Tätigkeiten mit Zeitangaben (z. B. durch ein qualifiziertes Arbeitszeugnis
oder durch Bestätigungen des Arbeitgebers) erfolgen.
<h5><u>Beantragung aufgrund beruflicher Praxis</u></h5>
Es wird eine detaillierte Tätigkeitsbeschreibung benötigt. Dafür steht im CIS ein Formular zur Verfügung, das in ein PDF-Dokument umzuwandeln und gemeinsam mit dem Lebenslauf hochzuladen ist.
<br><br><span class=\"text-danger\">Falls diese Informationen nicht enthalten sind, kann der Antrag nicht geprüft werden und er wird abgelehnt.</span>",
'description' => '',
'insertvon' => 'system'
@@ -12434,7 +12569,7 @@ array(
</ol>
<br>
<h5><u>Application for recognition based on professional practice</u></h5>
If the exemption is to be based on professional practice, an upload of a detailed job description is required. This can be done through proof of company training and / or proof of relevant occupational activities with time information (e.g. through a qualified job reference or through confirmation from the employer).
If the exemption is to be based on professional practice, an upload of a detailed job description is required. Therefore a formular is provided in CIS, that should be converted as pdf file and supplied together with the CV.
<br><br><span class="text-danger">If this information is not included, the application can not be checked adequately and it might need to be rejected.</span>',
'description' => '',
'insertvon' => 'system'
@@ -15041,13 +15176,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Im Rahmen des <b>KVP</b> <i>(Kontinuierlicher Verbesserungsprozess)</i> können Sie hier wichtige Fehler und/oder Verbesserungen einmelden. Diese können sich auf technische, inhaltliche, medien-didaktische oder test- und prüfungsrelevante Aspekte beziehen. Eine mögliche Umsetzung Ihrer Einmeldungen für das folgende Studienjahr wird im KVP geprüft und priorisiert, und ggf. im Anschluss vom Teamlead im Quellkurs entsprechend eingearbeitet.",
'text' => "Im Rahmen der Weiterentwicklung von Lehrveranstaltungen können Sie hier wichtige Ideen für die Weiterentwicklung und/oder Verbesserungen einmelden. Diese können sich auf technische, inhaltliche, medien-didaktische oder test- und prüfungsrelevante Aspekte beziehen. Eine mögliche Umsetzung Ihrer Einmeldungen für das folgende Studienjahr wird im Weiteren Ablauf geprüft und priorisiert, und ggf. im Anschluss vom Teamlead im Quellkurs entsprechend eingearbeitet.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Im Rahmen des <b>KVP</b> <i>(Kontinuierlicher Verbesserungsprozess)</i> können Sie hier wichtige Fehler und/oder Verbesserungen einmelden. Diese können sich auf technische, inhaltliche, medien-didaktische oder test- und prüfungsrelevante Aspekte beziehen. Eine mögliche Umsetzung Ihrer Einmeldungen für das folgende Studienjahr wird im KVP geprüft und priorisiert, und ggf. im Anschluss vom Teamlead im Quellkurs entsprechend eingearbeitet.",
'text' => "Im Rahmen der Weiterentwicklung von Lehrveranstaltungen können Sie hier wichtige Ideen für die Weiterentwicklung und/oder Verbesserungen einmelden. Diese können sich auf technische, inhaltliche, medien-didaktische oder test- und prüfungsrelevante Aspekte beziehen. Eine mögliche Umsetzung Ihrer Einmeldungen für das folgende Studienjahr wird im Weiteren Ablauf geprüft und priorisiert, und ggf. im Anschluss vom Teamlead im Quellkurs entsprechend eingearbeitet.",
'description' => '',
'insertvon' => 'system'
)
@@ -15972,7 +16107,657 @@ array(
'insertvon' => 'system'
)
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'studiensemesterGeplant',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Studiensemester geplant',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Semester planned',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'bestaetigungHochladen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bestätigung hochladen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Upload confirmation',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'massnahmeLoeschen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahme löschen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Delete measure',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'massnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'internationalskills',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'International skills',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'International skills',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'massnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Internationalisierungsmaßnahmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Internationalization measures',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'internationalbeschreibung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ab dem Studienjahr 2022/23 ist der Erwerb von internationalen und interkulturellen Kompetenzen Teil des Curriculums. <br />
Auf der Grundlage der vorliegenden Maßnahmen absolvieren Sie im Laufe ihres Studiums Internationalisierungsaktivitäten, die mit unterschiedlichen ECTS-Punkten hinterlegt sind. <br />
In Summe müssen 5 ECTS erworben werden, die im 6. Semester wirksam werden. <br/>
Das Modul „International skills“ wird mit der Beurteilung „Mit Erfolg teilgenommen“ abgeschlossen. <br />
Bitte wählen Sie die für Sie in Frage kommenden Maßnahmen aus und planen Sie das entsprechende Semester. <br />
Sobald die 5 ECTS erreicht wurden, überprüft der Studiengang die von Ihnen hochgeladenen Dokumente.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Starting with the study year 2022/23, the acquisition of international and intercultural competencies is part of the curriculum.<br />
On the basis of the measures at-hand, you will complete internationalization activities during the course of your studies, which are assigned different ECTS credits.<br />
In total, 5 ECTS must be acquired, which become effective in the 6th semester.<br />
The module “International skills” is completed with the assessment "Successfully participated". <br />
Please select the measures that apply to you and schedule the appropriate semester. <br />
Once the 5 ECTS have been achieved, the degree program will review the documents you have uploaded.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'nurBachelor',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nur für Bachelorstudiengänge.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Only for bachelor programmes.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'bezeichnung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bezeichnung Deutsch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'title german',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'bezeichnungeng',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bezeichnung Englisch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'title english',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'beschreibung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Beschreibung Deutsch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'description german',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'beschreibungeng',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Beschreibung Englisch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'description english',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'massnahmeBearbeiten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Massnahme bearbeiten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Edit measure',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'massnahmeLoeschenConfirm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wollen Sie die ausgewählte Maßnahme wirklich löschen?',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Do you really want to delete the measure?',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'fileLoeschenConfirm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wollen Sie die ausgewählte Bestätigung wirklich löschen?',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Do you really want to delete the confirmation?',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'planAblehnen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wollen Sie die ausgewählte Maßnahme wirklich löschen?',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Do you really want to delete the measure?',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'entbestaetigenConfirm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wollen Sie die Bestätigung wirklich widerrufen?',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Do you really want to cancel the confirmation?',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'entakzeptierenConfirm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wollen Sie die Planbestätigung wirklich widerrufen?',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Do you really want to cancel the plan confirmation?',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'allegeplanten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Alle geplanten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'All planned',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'alleMassnahmenJetzt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Alle Maßnahmen anzeigen die im jetzigen Studiensemester geplant sind',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Show all measures that are planned for the current study semester',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'alleStudierendeJetzt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Alle Studierende anzeigen aus dem jetzigen Studiensemester',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Show all students from the current study semester',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'lastSemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Alle Studierende anzeigen aus dem letzten Semester',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Show all students from the last semester"',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'meinMassnahmeplan',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Mein Maßnahmenplan',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'My action plan',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'ectsBestaetigt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'ECTS bestätigt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'ECTS confirmed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'ectsMassnahme',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'ECTS - Maßnahme',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'ECTS - Measures',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'geplanteMassnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen - geplant',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures - planned',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'akzpetierteMassnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Plan - akzeptiert',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Plan - accepted',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'durchgefuehrteMassnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen - durchgeführt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures - performed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'bestaetigteMassnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'ECTS - bestätigt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'ECTS - confirmed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'abgelehnteMassnahmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Plan - abgelehnt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Plan - declined',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'planAkzeptieren',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Plan akzeptieren',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Accept plan',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'bestaetigungAkzeptieren',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bestätigung akzeptieren',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Accept confirmation',
'description' => '',
'insertvon' => 'system'
)
)
),
);