Merge branch 'master' into FHBGLD-set_gemeinde_skript

This commit is contained in:
Andreas Österreicher
2021-09-15 12:13:15 +02:00
75 changed files with 5606 additions and 2366 deletions
+22
View File
@@ -0,0 +1,22 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
// Deadline for Application given as Time-Interval after Semesterstart.
$config['interval_blocking_application'] = 'P1M';
// Application submission period given by start- and enddate.
$config['submit_application_start'] = '01.02.2021';
$config['submit_application_end'] = '22.02.2021';
// Lehrveranstaltungen with these grades will be blocked for application
$config['grades_blocking_application'] = array(
5, // nicht genügend
6, // angerechnet
9, // noch nicht eingetragen
13, // nicht erfolgreich absolviert
14, // nicht bestanden,
15, // nicht teilgenommen
18 // unentschuldigt
);
+6 -2
View File
@@ -129,6 +129,7 @@ class Statusgrund extends Auth_Controller
$aktiv = $this->input->post("aktiv") != null && $this->input->post("aktiv") == "on" ? true : false;
$bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig");
$beschreibung = $this->input->post("beschreibung");
$statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz");
for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++)
{
@@ -177,7 +178,8 @@ class Statusgrund extends Auth_Controller
$data = array(
"aktiv" => $aktiv,
"bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig,
"beschreibung" => $beschreibung
"beschreibung" => $beschreibung,
"statusgrund_kurzbz" => $statusgrund_kurzbz
);
$statusgrund = $this->StatusgrundModel->update($statusgrund_id, $data);
@@ -196,6 +198,7 @@ class Statusgrund extends Auth_Controller
$bezeichnung_mehrsprachig = $this->input->post("bezeichnung_mehrsprachig");
$beschreibung = $this->input->post("beschreibung");
$status_kurzbz = $this->input->post("status_kurzbz");
$statusgrund_kurzbz = $this->input->post("statusgrund_kurzbz");
for ($i = 0; $i < count($bezeichnung_mehrsprachig); $i++)
{
@@ -245,7 +248,8 @@ class Statusgrund extends Auth_Controller
"status_kurzbz" => $status_kurzbz,
"aktiv" => $aktiv,
"bezeichnung_mehrsprachig" => $bezeichnung_mehrsprachig,
"beschreibung" => $beschreibung
"beschreibung" => $beschreibung,
"statusgrund_kurzbz" => $statusgrund_kurzbz
);
$statusgrund = $this->StatusgrundModel->insert($data);
@@ -15,6 +15,11 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungJob extends JOB_Controller
{
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
/**
* Constructor
@@ -23,6 +28,11 @@ class AnrechnungJob extends JOB_Controller
{
parent::__construct();
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
}
/**
@@ -84,4 +94,320 @@ class AnrechnungJob extends JOB_Controller
}
$this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt));
}
/**
* Deletes Zeugnisnoten 'angerechnet', when Anrechnung is rejected afterwards.
* E.g., when STGL first accepts, then withdraws and finally rejects the approvement.
*/
public function deleteAnrechnungGrades()
{
$this->logInfo('Start AnrechnungJob to delete Grades');
// Get all Zeungisnoten,
// WHERE note is angerechnet
// AND Anrechnung was rejected AFTER the Zeugnisnote was created
$qry = '
SELECT DISTINCT ON (status.anrechnung_id) anrechnung_id,
status.status_kurzbz AS "last_anrechnungstatus",
status.insertamum AS "last_anrechnungstatus_insertamum",
zeugnisnote.insertamum AS "zeugnisdatum_insertamum",
student.student_uid,
zeugnisnote.lehrveranstaltung_id,
zeugnisnote.studiensemester_kurzbz,
note
FROM lehre.tbl_zeugnisnote zeugnisnote
JOIN public.tbl_student student USING (student_uid)
JOIN lehre.tbl_anrechnung anrechnung
ON (zeugnisnote.lehrveranstaltung_id = anrechnung.lehrveranstaltung_id)
AND (student.prestudent_id = anrechnung.prestudent_id)
AND (zeugnisnote.studiensemester_kurzbz = anrechnung.studiensemester_kurzbz)
JOIN lehre.tbl_anrechnung_anrechnungstatus status USING (anrechnung_id)
WHERE note = 6
AND status.insertamum > zeugnisnote.insertamum
AND status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). '
ORDER BY status.anrechnung_id, status.insertamum DESC
';
$db = new DB_Model();
$result = $db->execReadOnlyQuery($qry);
$cnt = 0;
if (hasData($result))
{
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
foreach (getData($result) as $row)
{
// Delete Zeugnisnote
$this->ZeugnisnoteModel->delete(array(
'lehrveranstaltung_id' => $row->lehrveranstaltung_id,
'student_uid' => $row->student_uid,
'studiensemester_kurzbz' => $row->studiensemester_kurzbz
));
// Count up
$cnt++;
}
}
$this->logInfo('End AnrechnungJob to delete Grades', array('Number of Grades deleted: ' => $cnt));
}
// Send Sancho mail to STGL with yesterdays new Anrechnungen
public function sendMailToSTGL()
{
$this->logInfo('Start AnrechnungJob to send emails to STGL about yesterdays new Anrechnungen.');
// Get all yesterdays Anrechnungen, that did not process further than first status
// (If Anrechnung is new, but STGL already started the process yesterday,
// he does not need to be informed about this new Anrechnung anymore)
$this->AnrechnungModel->addSelect('anrechnung_id, studiensemester_kurzbz, lv.studiengang_kz, lv.bezeichnung, vorname, nachname');
$this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id');
$this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)');
$this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id');
$this->AnrechnungModel->addOrder('lv.studiengang_kz, lv.bezeichnung');
$result = $this->AnrechnungModel->loadWhere(
'(lehre.tbl_anrechnung.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE
AND 1 = (SELECT COUNT(*) FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE status.anrechnung_id = tbl_anrechnung.anrechnung_id)'
);
// Exit if there are no Anrechnungen
if (!$anrechnungen = getData($result)) {
$this->logInfo('ABORTED: Sending emails to STGL about yesterdays new Anrechnungen aborted - No new Anrechnungen found.');
exit;
}
$unique_studiengang_kz_arr = array_unique(array_column($anrechnungen, 'studiengang_kz'));
foreach ($unique_studiengang_kz_arr as $studiengang_kz)
{
// Get STG bezeichnung
$this->StudiengangModel->addSelect('UPPER( typ || kurzbz ) AS "stg_bezeichnung"');
$studiengang_bezeichnung = $this->StudiengangModel->load($studiengang_kz)->retval[0]->stg_bezeichnung;
// Get STGL mail address
list ($to, $vorname) = self::_getSTGLMailAddress($studiengang_kz);
// Get HTML table with new Anrechnungen of that STG plus amount of them
list ($anrechnungen_amount, $anrechnungen_table) = self::_getSTGLMailDataTable($studiengang_kz, $anrechnungen);
// Link to Antrag genehmigen dashboard
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'studiengang' => $studiengang_bezeichnung,
'anzahl' => $anrechnungen_amount,
'datentabelle' => $anrechnungen_table,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Send mail
sendSanchoMail(
'AnrechnungAntragStellen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt'
);
}
$this->logInfo('SUCCEDED: Sending emails to STGL about yesterdays new Anrechnungen succeded.');
}
/**
* Send Sancho mail to students, whose Anrechnungen were approved 24 hours ago.
*/
public function sendMailApproved(){
$this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were approved.');
// Get all yesterdays approvements
$this->AnrechnungModel->addSelect('student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung');
$this->AnrechnungModel->addJoin('lehre.tbl_anrechnung_anrechnungstatus status', 'anrechnung_id');
$this->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->AnrechnungModel->addJoin('public.tbl_student student', 'prestudent_id');
$this->AnrechnungModel->addJoin('public.tbl_benutzer benutzer', 'ON (benutzer.uid = student.student_uid)');
$this->AnrechnungModel->addJoin('public.tbl_person person', 'person_id');
$result = $this->AnrechnungModel->loadWhere(
'(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND
status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_APPROVED)
);
// Exit if there are no approved Anrechnungen
if (!hasData($result))
{
$this->logInfo('ABORTED sending emails to students, whose Anrechnungen were approved. No new approvements found.');
exit;
}
// Loop through students
foreach ($result->retval as $student)
{
$to = $student->student_uid. '@'. DOMAIN;
$anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$student->bezeichnung. '" wurde stattgegeben.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname,
'text' => $text
);
// Send mail
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
}
}
/**
* Send Sancho mail to students, whose Anrechnungen were rejected 24 hours ago.
*/
public function sendMailRejected(){
$this->logInfo('Start AnrechnungJob to send emails to students, whose Anrechnungen were rejected.');
$qry = '
SELECT
student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung,
(SELECT text FROM public.tbl_notizzuordnung JOIN public.tbl_notiz USING(notiz_id)
WHERE tbl_notizzuordnung.anrechnung_id=tbl_anrechnung.anrechnung_id
AND tbl_notiz.titel='. $this->db->escape(self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL).'
ORDER BY tbl_notiz.insertamum DESC LIMIT 1) as text
FROM lehre.tbl_anrechnung
JOIN lehre.tbl_lehrveranstaltung lv USING(lehrveranstaltung_id)
JOIN public.tbl_student student USING(prestudent_id)
JOIN public.tbl_benutzer benutzer ON (benutzer.uid = student.student_uid)
JOIN public.tbl_person person USING(person_id)
WHERE EXISTS(SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus status WHERE
anrechnung_id=tbl_anrechnung.anrechnung_id AND
(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND
status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ')
';
$db = new DB_Model();
$result = $db->execReadOnlyQuery($qry);
// Exit if there are no rejected Anrechnungen
if (!hasData($result))
{
$this->logInfo('ABORTED sending emails to students, whose Anrechnungen were rejected. No new rejectments found.');
exit;
}
// Loop through students
foreach ($result->retval as $student)
{
$to = $student->student_uid. '@'. DOMAIN;
$anrede = $student->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = <<<html
wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung
"$student->bezeichnung" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.<br><br>
Begründung: $student->text
html;
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $student->vorname. ' '. $student->nachname,
'text' => $text
);
// Send mail
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
}
}
// Get STGL mail address
private function _getSTGLMailAddress($studiengang_kz)
{
$result = $this->StudiengangModel->getLeitung($studiengang_kz);
// Get STGL mail address
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// If not available, get assistance mail address
else
{
$result = $this->StudiengangModel->load($studiengang_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
// Build HTML table with yesterdays new Anrechnungen of the given STG
private function _getSTGLMailDataTable($studiengang_kz, $anrechnungen)
{
$html = '';
$lv_bezeichnung = '';
// Filter Anrechnungen of given STG
$anrechnungen = array_filter(
$anrechnungen,
function ($anrechnung) use (&$studiengang_kz) {
return $anrechnung->studiengang_kz == $studiengang_kz;
});
// Amount of Anrechnungen
$amount = count($anrechnungen);
// HTML table body
$html .= '
<table style="width: 60%; border-collapse: collapse;" border="1" cellpadding="5">
<tbody>
';
foreach ($anrechnungen as $anrechnung)
{
// Head line for each LV bezeichnung
if ($anrechnung->bezeichnung != $lv_bezeichnung)
{
$html .= '<tr><td><span><strong>' . $anrechnung->bezeichnung . '</strong></span></td></tr>';
}
$lv_bezeichnung = $anrechnung->bezeichnung;
// Row for each Anrechnung / student
$html .= '<tr><td><span>'. $anrechnung->vorname. ' '. $anrechnung->nachname. '</span></td></tr>';
}
$html .= '
</tbody>
</table>
';
return array($amount, $html);
}
}
@@ -1,6 +1,6 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
if (! defined('BASEPATH')) exit('No direct script access allowed');
class approveAnrechnungDetail extends Auth_Controller
{
@@ -15,6 +15,7 @@ class approveAnrechnungDetail extends Auth_Controller
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
const ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL = 'AnrechnungEmpfehlungsnotizSTGL';
public function __construct()
{
@@ -25,7 +26,10 @@ class approveAnrechnungDetail extends Auth_Controller
'download' => 'lehre/anrechnung_genehmigen:rw',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw',
'withdraw' => 'lehre/anrechnung_genehmigen:rw',
'withdrawRequestRecommendation' => 'lehre/anrechnung_genehmigen:rw',
'saveEmpfehlungsNotiz' => 'lehre/anrechnung_genehmigen:rw'
)
);
@@ -80,29 +84,23 @@ class approveAnrechnungDetail extends Auth_Controller
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
$anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id);
// Get Antrag data
$antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
);
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id);
// Get Genehmigung data
if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id);
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData,
'genehmigungData' => $genehmigungData
@@ -118,40 +116,30 @@ class approveAnrechnungDetail extends Auth_Controller
{
$data = $this->input->post('data');
if(isEmptyArray($data))
// Validate data
if (isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
// Get STGLs person data
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
// Approve Anrechnung
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved,
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED),
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
@@ -173,40 +161,30 @@ class approveAnrechnungDetail extends Auth_Controller
{
$data = $this->input->post('data');
if(isEmptyArray($data))
// Validate data
if (isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
// Get STGLs person data
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
// Reject Anrechnung
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED),
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
@@ -217,7 +195,7 @@ class approveAnrechnungDetail extends Auth_Controller
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -232,48 +210,166 @@ class approveAnrechnungDetail extends Auth_Controller
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
$retval = array();
$counter = 0;
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
// Check if Anrechnungs-LV has lector
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id']))
{
$json[]= array(
// Count up LV with no lector
$counter++;
// Break, if LV has no lector
break;
}
// Get full name of LV Leitung.
// If LV Leitung is not present, get full name of LV lectors.
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
// Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
{
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
'empfehlung_anrechnung' => null,
'empfehlung_angefordert_am' => (new DateTime())->format('d.m.Y')
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
);
}
}
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!isEmptyArray($retval))
{
self::_sendSanchoMailToLectors($retval);
// Output json to ajax
return $this->outputJsonSuccess($retval);
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
if (isEmptyArray($retval) && $counter > 0)
{
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonError(
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
);
}
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
/**
* Withdraw approved / rejected Anrechnung and reset to 'inProgressDP'.
*/
public function withdraw()
{
$anrechnung_id = $this->input->post('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
// Delete last status approved / rejected.
// If last status is 'approved', Genehmigung is resetted.
$result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id);
return $this->outputJsonSuccess($json);
}
else
if (isError($result))
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
$this->terminateWithJsonError(getError($result));
}
// Success output to AJAX
$this->outputJsonSuccess(array(
'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id))
);
}
/**
* Withdraw request for reommendation and reset to 'inProgressDP'.
* This is only possible if the lector has not provided a recommendation yet.
*/
public function withdrawRequestRecommendation()
{
$anrechnung_id = $this->input->post('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
show_error('Wrong parameter.');
}
// Get boolean empfehlung of given Anrechnung
if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
$empfehlung = $result->empfehlung_anrechnung;
// Get last Anrechnungstatus
if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error('Failed loading last Anrechnungstatus');
}
$last_status = $result->status_kurzbz;
$anrechnungstatus_id = $result->anrechnungstatus_id;
// Return if Anrechnung was not waiting for recommendation or if Anrechnung has already been recommended
if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && !is_null($empfehlung))
{
return $this->outputJsonError('No recommendation to withdraw.');
}
// Reset status to 'inProgressDP'
$result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id);
if (isError($result))
{
return $this->outputJsonError('Could not withdraw this application.');
}
// Success output to AJAX
return $this->outputJsonSuccess(array(
'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id))
);
}
public function saveEmpfehlungsNotiz()
{
$anrechnung_id = $this->input->post('anrechnung_id');
$notiz_id = $this->input->post('notiz_id');
$empfehlungstext = $this->input->post('empfehlung_text');
// Validate data
if (isEmptyString($anrechnung_id))
{
$this->terminateWithJsonError($this->p->t('ui', 'systemFehler'));
}
// Save Empfehlungstext
$result = self::_saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id);
if (isError($result))
{
$this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern'));
}
// Output success message
$this->outputJsonSuccess($this->p->t('ui', 'gespeichert'));
}
/**
@@ -290,8 +386,12 @@ class approveAnrechnungDetail extends Auth_Controller
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Download file
$this->dmslib->download($dms_id, $filename);
}
/**
@@ -375,42 +475,7 @@ class approveAnrechnungDetail extends Auth_Controller
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
@@ -438,6 +503,8 @@ class approveAnrechnungDetail extends Auth_Controller
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/
$lector_arr = $this->_getLectors($anrechnung_arr);
// Send mail to lectors
foreach ($lector_arr as $lector)
@@ -476,8 +543,8 @@ class approveAnrechnungDetail extends Auth_Controller
}
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* Get unique array of LV lectors.
* Only get LV Leitung if present, otherwise all lectors of LV.
* @param $anrechnung_arr
* @return array
*/
@@ -521,11 +588,37 @@ class approveAnrechnungDetail extends Auth_Controller
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
// Make the lector array unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id)
{
$this->load->model('person/Notiz_model', 'NotizModel');
if (!isEmptyString($notiz_id))
{
return $this->NotizModel->update(
$notiz_id,
array(
'text' => $empfehlungstext,
'updateamum' => (new DateTime())->format('Y-m-d H:i:s'),
'updatevon' => $this->_uid
)
);
}
return $this->NotizModel->addNotizForAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL,
trim($empfehlungstext),
$this->_uid
);
}
}
@@ -62,27 +62,21 @@ class approveAnrechnungUebersicht extends Auth_Controller
public function index()
{
// Get study semester
$studiensemester_kurzbz = $this->input->get('studiensemester');
// Retrieve studiengaenge the user is entitled for
if (isEmptyString($studiensemester_kurzbz))
{
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
// Get studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
show_error(getError($studiengang_kz_arr));
}
if (!is_string($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr
@@ -98,33 +92,22 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
$data = $this->input->post('data');
if(isEmptyArray($data))
// Validate data
if (isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
// Approve Anrechnung
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
if ($this->anrechnunglib->approveAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_APPROVED)
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
@@ -146,33 +129,22 @@ class approveAnrechnungUebersicht extends Auth_Controller
{
$data = $this->input->post('data');
if(isEmptyArray($data))
// Validate data
if (isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
// Reject Anrechnung
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
if ($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_REJECTED)
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
@@ -199,46 +171,59 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
$retval = array();
$counter = 0;
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
// Check if Anrechnungs-LV has lector
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id']))
{
$json[]= array(
// Count up LV with no lector
$counter++;
// Continue loop, if LV has no lector
continue;
}
// Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
{
// Get full name of LV Leitung.
// If LV Leitung is not present, get full name of LV lectors.
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'empfehlung_anrechnung' => null
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
'empfehlung_anrechnung' => null,
'empfehlungsanfrageAm' => (new DateTime())->format('Y-m-d H:i:s'),
'empfehlungsanfrageAn' => $empfehlungsanfrage_an
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!isEmptyArray($retval))
{
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
self::_sendSanchoMailToLectors($retval);
}
else
// Output json to ajax
if (isEmptyArray($retval) && $counter == 0)
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
return $this->outputJsonSuccess($retval);
}
/**
@@ -256,7 +241,11 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Download file
$this->dmslib->download($dms_id, $filename);
}
@@ -307,41 +296,6 @@ class approveAnrechnungUebersicht extends Auth_Controller
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
@@ -456,6 +410,5 @@ class approveAnrechnungUebersicht extends Auth_Controller
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
@@ -0,0 +1,271 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class CreateAnrechnung extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_ANLEGEN = 'lehre/anrechnung_anlegen';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_anlegen:r',
'getLVsByStudent' => 'lehre/anrechnung_anlegen:r',
'create' => 'lehre/anrechnung_anlegen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre'
)
);
// Load configs
$this->load->config('anrechnung');
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
// Get Studiensemester
$studiensemester_kurzbz = $this->input->get('studiensemester');
// If no Studiensemester is given
if (isEmptyString($studiensemester_kurzbz))
{
//...use the nearest Studiensemester
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
// Get Studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_ANLEGEN))
{
show_error('Failed retrieving Studiengaenge');
}
// Get Anrechnungsbegruendungen
$this->load->model('education/Anrechnungbegruendung_model', 'AnrechnungbegruendungModel');
$begruendung_arr = getData($this->AnrechnungbegruendungModel->load());
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr,
'begruendungen' => $begruendung_arr
);
$this->load->view('lehre/anrechnung/createAnrechnung.php', $viewData);
}
/**
* Get Lehrveranstaltungen from Student.
*/
public function getLVsByStudent()
{
$prestudent_id = $this->input->post('prestudent_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
// Get Student UID
$student_uid = $this->StudentModel->getUID($prestudent_id);
// Retrieve Lehrveranstaltungen from student
$result = $this->LehrveranstaltungModel->getLvsByStudent($student_uid, $studiensemester_kurzbz);
// Exit, if student has no Lehrveranstaltungen
if (!hasData($result))
{
$this->terminateWithJsonError($this->p->t('ui', 'keineLVzugeteilt'));
}
// Success response to AJAX
$this->outputJsonSuccess(getData($result));
}
/**
* Create Anrechnungsantrag.
*
* Saves Anrechnung and Anrechnungstatus.
* Also saves Nachweisdokument to DMS.
*/
public function create()
{
$prestudent_id = $this->input->post('prestudent_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$lehrveranstaltung_id = $this->input->post('lehrveranstaltung_id');
$begruendung_id = $this->input->post('begruendung_id');
$herkunftKenntnisse = $this->input->post('herkunftKenntnisse');
// Validate upload file
if (empty($_FILES['uploadfile']['name']))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorUploadFehlt'));
}
// Validate required data
if (isEmptyString($begruendung_id) || isEmptyString($lehrveranstaltung_id))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
// Exit if application already exists
if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id))
{
$this->terminateWithJsonError($this->p->t('global', 'antragBereitsGestellt'));
}
// Exit if Lehrveranstaltung was already graded with application blocking grades
if (self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id))
{
$this->terminateWithJsonError($this->p->t('anrechnung', 'antragBenotungBlockiert'));
}
// Upload document
$result = self::_uploadFile();
if (isError($result))
{
$this->terminateWithJsonError($result->retval);
}
// Hold just inserted DMS ID
$lastInsert_dms_id = $result->retval['dms_id'];
// Save Anrechnung and Anrechnungstatus
$result = $this->AnrechnungModel->createAnrechnungsantrag(
$prestudent_id,
$studiensemester_kurzbz,
$lehrveranstaltung_id,
$begruendung_id,
$lastInsert_dms_id,
$herkunftKenntnisse
);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
$lastInsert_anrechnung_id = getData($result);
// Success response to AJAX
$this->outputJsonSuccess(array(
'anrechnung_id' => $lastInsert_anrechnung_id,
'msg' => $this->p->t('global', 'antragWurdeAngelegt')
));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if application already exists.
*
* @param $lehrveranstaltung_id
* @param $studiensemester_kurzbz
* @param $prestudent_id
* @return bool
*/
private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return hasData($result);
}
/**
* Upload file via DMS library.
*
* @return mixed
* @throws Exception
*/
private function _uploadFile()
{
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
// Upload document
return $this->dmslib->upload($dms, 'uploadfile', array('pdf'));
}
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id, $prestudent_id)
{
// Get Student UID
$student_uid = $this->StudentModel->getUID($prestudent_id);
// Get Note of Lehrveranstaltung
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
$result = $this->LvgesamtnoteModel->load(array(
'student_uid' => $student_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
)
);
// If Lehrveranstaltung has Note
if (hasData($result))
{
$note = getData($result)[0]->note;
// Check if Note is a blocking grade
if (in_array($note, $this->config->item('grades_blocking_application')))
{
return true;
}
}
return false;
}
}
@@ -6,15 +6,13 @@ class requestAnrechnung extends Auth_Controller
{
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application
public function __construct()
{
// Set required permissions
@@ -25,22 +23,25 @@ class requestAnrechnung extends Auth_Controller
'download' => 'student/anrechnung_beantragen:rw',
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load configs
$this->load->config('anrechnung');
// Load language phrases
$this->loadPhrases(
array(
@@ -51,63 +52,59 @@ class requestAnrechnung extends Auth_Controller
'lehre'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
$lehrveranstaltung_id = $this->input->get('lv_id');
if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
if (isEmptyString($lehrveranstaltung_id) || isEmptyString($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
// Exit if user is not a student
$result = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (!hasData($result))
{
show_error('Cant load user');
}
// Get Prestudent ID
$prestudent_id = getData($result)[0]->prestudent_id;
// Check if application deadline is expired
// $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz);
$is_expired = false; // Set to false until Deadline is defined
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
{
$prestudent_id = getData($student)[0]->prestudent_id;
}
else
show_error('Cant load User');
$is_expired = self::_checkAntragDeadline(
$this->config->item('submit_application_start'),
$this->config->item('submit_application_end'),
$studiensemester_kurzbz
);
// Check if Lehrveranstaltung was already graded with application blocking grades
$is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id);
// Get Anrechung data
$result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (!$anrechnungData = getData($result))
{
show_error(getError($anrechnungData));
}
// Dont show who is progressing the application to the student
if ($anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_KF)
{
$anrechnungData->status = getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process';
}
$antragData = $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id);
$anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
// Get Antrag data
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id);
$viewData = array(
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'is_expired' => $is_expired,
'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id)
? 'disabled'
: ''
'is_blocked' => $is_blocked
);
$this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData);
}
/**
* Apply Anrechnungsantrag and send to STGL
*/
@@ -117,104 +114,82 @@ class requestAnrechnung extends Auth_Controller
$begruendung_id = $this->input->post('begruendung');
$lehrveranstaltung_id = $this->input->post('lv_id');
$studiensemester_kurzbz = $this->input->post('studiensemester');
$bestaetigung = $this->input->post('bestaetigung');
// Validate data
if (empty($_FILES['uploadfile']['name']))
{
show_error('Missing upload file');
return $this->outputJsonError($this->p->t('ui', 'errorUploadFehlt'));
}
if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
if (isEmptyString($begruendung_id) ||
isEmptyString($anmerkung) ||
isEmptyString($lehrveranstaltung_id) ||
isEmptyString($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
return $this->outputJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
if (isEmptyString($bestaetigung))
{
$prestudent_id = getData($student)[0]->prestudent_id;
return $this->outputJsonError($this->p->t('ui', 'errorBestaetigungFehlt'));
}
else
show_error('Cant load User');
$result = $this->_getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (hasData($result))
// Exit if user is not a student
$result = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (!hasData($result))
{
show_error('Der Antrag wurde bereits gestellt');
return $this->outputJsonError('Cant load user');
}
// Start DB transaction
$this->db->trans_start(false);
// Get Prestudent ID
$prestudent_id = getData($result)[0]->prestudent_id;
// Exit if application already exists
if (self::_applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id))
{
return $this->outputJsonError($this->p->t('anrechnung', 'antragBereitsGestellt'));
}
// Exit if application is not for actual studysemester
if (!self::_applicationIsForActualSS($studiensemester_kurzbz))
{
return $this->outputJsonError($this->p->t('anrechnung', 'antragNurImAktSS'));
}
// Upload document
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
$result = self::_uploadFile();
if (isError($result))
{
return $this->outputJsonError($result->retval);
}
// Hold just inserted DMS ID
$lastInsert_dms_id = $result->retval['dms_id'];
// Save Anrechnung and Anrechnungstatus
$result = $this->AnrechnungModel->createAnrechnungsantrag(
$prestudent_id,
$studiensemester_kurzbz,
$lehrveranstaltung_id,
$begruendung_id,
$lastInsert_dms_id,
$anmerkung
);
if(isError($uploaddata = $this->dmslib->upload($dms, array('pdf'))))
if (isError($result))
{
show_error(getError($uploaddata));
$this->terminateWithJsonError(getError($result));
}
// Get PrestudentID
$result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz);
if (!$prestudent = getData($result)[0])
{
show_error('Failed retrieving prestudent');
}
// Save Anrechnung
$result = $this->AnrechnungModel->insert(array(
'prestudent_id' => $prestudent->prestudent_id,
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'begruendung_id' => $begruendung_id,
'dms_id' => $uploaddata->retval['dms_id'],
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anmerkung_student' => $anmerkung,
'insertvon' => $this->_uid
// Output to AJAX
$this->outputJsonSuccess(array(
'antragdatum' => (new DateTime())->format('d.m.Y'),
'dms_id' => $lastInsert_dms_id,
'filename' => $_FILES['uploadfile']['name']
));
if (isError($result))
{
show_error('Failed inserting Anrechnung');
}
// Save Anrechnungstatus 'inProgressSTGL'
$result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
if (isError($result))
{
show_error('Failed saving Anrechnungstatus');
}
// Transaction complete!
$this->db->trans_complete();
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
show_error($result->msg, EXIT_ERROR);
}
// Send mail to STGL
$mail_params = array(
'studiengang_kz' => $prestudent->studiengang_kz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
);
if(!$this->_sendSanchoMail($mail_params))
{
show_error('Failed sending mail');
}
else
{
redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id);
}
}
/**
@@ -241,53 +216,50 @@ class requestAnrechnung extends Auth_Controller
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Load Prestudent by uid and Studiensemester.
* @param $uid
* @param $studiensemester_kurzbz
* @return mixed
*/
private function _loadPrestudent($uid, $studiensemester_kurzbz)
{
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id');
return $this->PrestudentstatusModel->loadWhere(array(
'student_uid' => $uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
)
);
}
/**
* Check if application deadline is expired.
*
* @param $start Start date for application submission.
* @param $ende End date for application submission.
* @param $studiensemester_kurzbz
* @return bool True if semester start is more then 1 week ago
* @return bool True if today is not during the start- and ending deadlines (= if is expired)
* @throws Exception
*/
private function _checkAntragDeadline($studiensemester_kurzbz)
private function _checkAntragDeadline($start, $ende, $studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addSelect('start');
if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz)))
// If start is not given, set to Semesterstart.
if (!isset($start) || isEmptyString($start))
{
show_error(getError($start));
$this->StudiensemesterModel->addSelect('start');
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$start = getData($result)[0]->start;
}
$start = new DateTime($start[0]->start);
// If ende is not given, set to Semesterende.
if (!isset($ende) || isEmptyString($ende))
{
$this->StudiensemesterModel->addSelect('ende');
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$ende = getData($result)[0]->ende;
}
$today = new DateTime('today midnight');
// True if today > application deadline
return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART))));
$start = new DateTime($start);
$ende = new DateTime($ende);
// True if today is not during the start- and ending deadlines (= if is expired)
return ($today <= $start || $today >= $ende);
}
/**
* Check if user is entitled to read dms doc
* Check if user is entitled to read dms doc.
*
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
@@ -298,7 +270,7 @@ class requestAnrechnung extends Auth_Controller
}
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if($result = getData($result)[0])
{
if ($result->prestudent_id == $student->prestudent_id)
@@ -306,104 +278,92 @@ class requestAnrechnung extends Auth_Controller
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Get Anrechnung by Lehrveranstaltung
* Check if application already exists.
*
* @param $lehrveranstaltung_id
* @return mixed
* @param $studiensemester_kurzbz
* @param $prestudent_id
* @return bool
*/
private function _getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
private function _applicationExists($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return $result;
return hasData($result);
}
/**
* Send mail to STGL (if not available, send to STGL assistance)
* @param $mail_params
* Check if applications' study semester is actual study semester.
*
* @param $studiensemester_kurzbz
* @return bool
*/
private function _sendSanchoMail($mail_params)
private function _applicationIsForActualSS($studiensemester_kurzbz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($mail_params['studiengang_kz']);
// Get full name of student
$this->load->model('person/Person_model', 'PersonModel');
if (!$student_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Get lehrveranstaltung bezeichnung
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
if (!$lehrveranstaltung = getData($this->LehrveranstaltungModel->load($mail_params['lehrveranstaltung_id']))[0])
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'student_name' => $student_name,
'lehrveranstaltung_bezeichnung' => $lehrveranstaltung->bezeichnung,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungAntragStellen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt'
);
return true;
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$result = $this->StudiensemesterModel->getNearest();
$actual_ss = getData($result)[0]->studiensemester_kurzbz;
return $studiensemester_kurzbz == $actual_ss;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
private function _LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
// Get Note of Lehrveranstaltung
$this->load->model('education/Lvgesamtnote_model', 'LvgesamtnoteModel');
$result = $this->LvgesamtnoteModel->load(array(
'student_uid' => $this->_uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
)
);
// If Lehrveranstaltung has Note
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
$note = getData($result)[0]->note;
// Check if Note is a blocking grade
if (in_array($note, $this->config->item('grades_blocking_application')))
{
return array(
$result->retval[0]->email,
''
);
return true;
}
}
return false;
}
}
/**
* Upload file via DMS library.
*
* @return mixed
* @throws Exception
*/
private function _uploadFile()
{
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
// Upload document
return $this->dmslib->upload($dms, 'uploadfile', array('pdf'));
}
}
@@ -1,6 +1,6 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
if (! defined('BASEPATH')) exit('No direct script access allowed');
class reviewAnrechnungDetail extends Auth_Controller
{
@@ -78,23 +78,20 @@ class reviewAnrechnungDetail extends Auth_Controller
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
$anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id);
// Get Antrag data
$antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
);
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id);
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData
);
@@ -113,29 +110,23 @@ class reviewAnrechnungDetail extends Auth_Controller
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
// Get lectors person data
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
return $this->outputJsonError('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
@@ -151,14 +142,14 @@ class reviewAnrechnungDetail extends Auth_Controller
* */
if (!$this->_sendSanchoMails($json, true))
{
show_error('Failed sending emails');
return $this->outputJsonError('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -174,29 +165,23 @@ class reviewAnrechnungDetail extends Auth_Controller
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
// Get lectors person data
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
return $this->outputJsonError('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'empfehlumg_am' => (new DateTime())->format('d.m.Y'),
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL),
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
@@ -208,14 +193,14 @@ class reviewAnrechnungDetail extends Auth_Controller
// Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false))
{
show_error('Failed sending emails');
return $this->outputJsonError('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -233,8 +218,12 @@ class reviewAnrechnungDetail extends Auth_Controller
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Download file
$this->dmslib->download($dms_id, $filename);
}
@@ -62,19 +62,13 @@ class reviewAnrechnungUebersicht extends Auth_Controller
public function index()
{
// Get study semester
$studiensemester_kurzbz = $this->input->get('studiensemester');
if (!is_string($studiensemester_kurzbz))
if (isEmptyString($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
}
$viewData = array(
@@ -95,24 +89,17 @@ class reviewAnrechnungUebersicht extends Auth_Controller
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
if($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
}
}
@@ -133,7 +120,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -149,24 +136,16 @@ class reviewAnrechnungUebersicht extends Auth_Controller
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib
->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
if($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung']))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
);
}
}
@@ -184,7 +163,7 @@ class reviewAnrechnungUebersicht extends Auth_Controller
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
}
}
@@ -203,7 +182,11 @@ class reviewAnrechnungUebersicht extends Auth_Controller
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
// Set filename to be used on downlaod
$filename = $this->anrechnunglib->setFilenameOnDownload($dms_id);
// Download file
$this->dmslib->download($dms_id, $filename);
}
+2 -1
View File
@@ -211,7 +211,7 @@ class Filters extends FHC_Controller
public function setNavigationMenu()
{
// Generates the filters structure array
$filterMenu = $this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE));
$this->filterwidgetlib->generateFilterMenu($this->input->get(FilterWidgetLib::NAVIGATION_PAGE));
$this->outputJsonSuccess('Success');
}
@@ -271,3 +271,4 @@ class Filters extends FHC_Controller
}
}
}
+26
View File
@@ -132,6 +132,32 @@ abstract class FHC_Controller extends CI_Controller
{
$this->output->set_content_type('application/json')->set_output(json_encode($mixed));
}
protected function outputFile($fileObj)
{
if (file_exists($fileObj->file))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '. $finfo->file($fileObj->file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileObj->file));
if (isset($fileObj->disposition) && ($fileObj->disposition == 'inline' || $fileObj->disposition == 'attachment'))
{
header('Content-Disposition: '. $fileObj->disposition. '; filename="'. $fileObj->name. '"');
}
readfile($fileObj->file);
exit;
}
return false;
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
+228 -46
View File
@@ -12,6 +12,7 @@ class AnrechnungLib
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
const ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL = 'AnrechnungEmpfehlungsnotizSTGL';
public function __construct()
{
@@ -23,6 +24,10 @@ class AnrechnungLib
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->ci->load->model('crm/Student_model', 'StudentModel');
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->ci->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$this->ci->load->library('DmsLib');
}
/**
@@ -32,16 +37,19 @@ class AnrechnungLib
* @param $lv_id
* @return StdClass
*/
public function getAntragData($uid, $studiensemester_kurzbz, $lv_id)
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id)
{
$antrag_data = new StdClass();
// Get students UID.
$uid = $this->ci->StudentModel->getUID($prestudent_id);
// Get lehrveranstaltung data. Break, if course is not assigned to student.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
{
show_error('You are not assigned to this course yet.');
}
// Get the students personal data
if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0])
{
@@ -61,12 +69,18 @@ class AnrechnungLib
}
// Get lectors of lehrveranstaltung
$antrag_data->lektoren = array();
if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id)))
$result = $this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id);
if (isError($result))
{
show_error('Failed loading course lectors.');
}
$lv_lektoren_arr = hasData($result) ? getData($result) : array();
// Get latest ZGV
$result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id);
$latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : '';
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
@@ -76,7 +90,8 @@ class AnrechnungLib
$antrag_data->nachname = $person->nachname;
$antrag_data->matrikelnr = $student->matrikelnr;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
$antrag_data->lektoren = $lv_lektoren;
$antrag_data->lektoren = $lv_lektoren_arr;
$antrag_data->zgv = $latest_zgv_bezeichnung;
return $antrag_data;
}
@@ -107,8 +122,12 @@ class AnrechnungLib
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
else
{
show_error('No Anrechnung with this anrechnung_id.');
}
return success($anrechnung_data);
return $anrechnung_data;
}
@@ -153,7 +172,7 @@ class AnrechnungLib
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
return $anrechnung_data;
}
/**
@@ -171,8 +190,8 @@ class AnrechnungLib
$this->ci->AnrechnungModel->addSelect('tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id, tbl_anrechnung.studiensemester_kurzbz, vorname, nachname, geschlecht, tbl_lehrveranstaltung.bezeichnung AS "lv_bezeichnung"');
$this->ci->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_student', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid=student_uid');
$this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid = student_uid');
$this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id = tbl_person.person_id');
$this->ci->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
@@ -207,28 +226,53 @@ class AnrechnungLib
$empfehlung_data->empfehlung = null;
$empfehlung_data->empfehlung_von = '-';
$empfehlung_data->empfehlung_am = '-';
$empfehlung_data->empfehlung_angefordert_am = '-';
$empfehlung_data->notiz = ''; // Begruendung, if not recommended
$empfehlung_data->empfehlungsanfrageAm = '-';
$empfehlung_data->empfehlungsanfrageAn = '-';
$empfehlung_data->begruendung = '-'; // Begruendung, if not recommended
$empfehlung_data->notiz_id = ''; // Empfehlungsnotiz from STGL
$empfehlung_data->notiz = ''; // Empfehlungsnotiz from STGL
if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
// Get Empfehlungsnotiz
$result = $this->ci->NotizModel->getNotizByAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL
);
if ($notiz = getData($result)[0])
{
$empfehlung_data->notiz_id = $notiz->notiz_id;
$empfehlung_data->notiz = $notiz->text;
}
// Get date, where recommendation was last requested
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus(
$anrechnung_id,
self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR // when STLG asks for recommendation, status is set to in progress lektor
);
if ($result = getData($result)[0])
// If request for recommendation exists
if (hasData($result))
{
$empfehlung_data->empfehlung_angefordert_am = (new DateTime($result->insertamum))->format('d.m.Y');
$empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y');
// Get lectors who received request for recommendation
$lector_arr = self::getLectors($anrechnung_id);
if (!isEmptyArray($lector_arr))
{
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($lector_arr, 'fullname'));
}
}
if (is_null($anrechnung->empfehlung_anrechnung))
{
return success($empfehlung_data);
return $empfehlung_data;
}
// If Empfehlung is true or false
@@ -260,15 +304,14 @@ class AnrechnungLib
if (!$anrechnung->empfehlung_anrechnung)
{
// Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet)
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR);
if ($notiz = getData($result)[0])
{
$empfehlung_data->notiz = $notiz->text;
$empfehlung_data->begruendung = $notiz->text;
}
}
return success($empfehlung_data);
return $empfehlung_data;
}
@@ -300,9 +343,10 @@ class AnrechnungLib
// Get date of approvement or rejection
$result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id);
// If no approved or rejected Anrechnung exist, return basic genehmigung data object
if (!$result = getData($result)[0])
{
return success($genehmigung_data);
return $genehmigung_data;
}
@@ -331,9 +375,30 @@ class AnrechnungLib
}
}
return success($genehmigung_data);
return $genehmigung_data;
}
/**
* Get Anrechnungstatusbezeichnung of given status_kurzbz in users language.
*
* @param $status_kurzbz
* @return mixed
*/
public function getStatusbezeichnung ($status_kurzbz)
{
$this->ci->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$result = $this->ci->AnrechnungstatusModel->load($status_kurzbz);
if (!hasData($result))
{
show_error('Failed retrieving Anrechnungstatusbezeichung');
}
return getUserLanguage() == 'German'
? $result->retval[0]->bezeichnung_mehrsprachig[0]
: $result->retval[0]->bezeichnung_mehrsprachig[1];
}
/**
* Get last Anrechnungstatusbezeichnung in users language.
@@ -370,7 +435,7 @@ class AnrechnungLib
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
return false; // dont approve
}
// Start DB transaction
@@ -395,10 +460,10 @@ class AnrechnungLib
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
return false;
}
return success(true); // approved
return true; // approved
}
/**
@@ -419,16 +484,14 @@ class AnrechnungLib
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont reject
return false; // dont reject
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status rejected
$result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED);
if (isError($result))
{
show_error(getError($result));
}
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED);
// Add begruendung as notiz
$this->ci->load->model('person/Notiz_model', 'NotizModel');
@@ -438,8 +501,17 @@ class AnrechnungLib
$begruendung,
getAuthUID()
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return false;
}
return success(true); // rejected
return true; // rejected
}
/**
@@ -462,7 +534,7 @@ class AnrechnungLib
|| $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED
|| $status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR)
{
return success(false); // dont ask for recommendation
return false; // dont ask for recommendation
}
// Start DB transaction
@@ -492,7 +564,7 @@ class AnrechnungLib
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
return true; // recommended
}
/**
@@ -537,10 +609,10 @@ class AnrechnungLib
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
return false;
}
return success(true); // recommended
return true; // recommended
}
/**
@@ -562,7 +634,7 @@ class AnrechnungLib
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
return false; // dont approve
}
// Start DB transaction
@@ -596,10 +668,125 @@ class AnrechnungLib
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
return false;
}
return success(true); // recommended
return true; // recommended
}
/**
* Set Filename that should be used on download
* @param $dms_id
* @return string|null
*/
public function setFilenameOnDownload($dms_id)
{
// Load Anrechnung
$result = $this->ci->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
// Return null if no data found
if (!hasData($result))
{
return null;
}
$prestudent_id = $result->retval[0]->prestudent_id;
$lehrveranstaltung_id = $result->retval[0]->lehrveranstaltung_id;
// Get LV OrgForm
$this->ci->LehrveranstaltungModel->addSelect('stg.orgform_kurzbz');
$this->ci->LehrveranstaltungModel->addJoin('public.tbl_studiengang AS stg', 'studiengang_kz');
$result = $this->ci->LehrveranstaltungModel->load($lehrveranstaltung_id);
$orgform_kurzbz = hasData($result) ? '_'. $result->retval[0]->orgform_kurzbz : '';
// Get full name of student
$this->ci->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->ci->PrestudentModel->addSelect('vorname, nachname');
$this->ci->PrestudentModel->addJoin('public.tbl_person', 'person_id');
$result = $this->ci->PrestudentModel->load($prestudent_id);
$fullname = hasData($result) ? $result->retval[0]->vorname. $result->retval[0]->nachname : '';
// Return filename
return 'Anrechnungsantrag'. $orgform_kurzbz .'_LV-'. $lehrveranstaltung_id. '_'. $fullname;
}
public function LVhasLector($anrechnung_id)
{
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (!hasData($result))
{
showError('Anrechnung existiert nicht');
}
// Get lectors of lehrveranstaltung
$result = $this->ci->LehrveranstaltungModel->getLecturersByLv(
$result->retval[0]->studiensemester_kurzbz,
$result->retval[0]->lehrveranstaltung_id
);
// Continue, if LV has no lector (there is no one to ask for recommendation)
return hasData($result) ? true : false;
}
/**
* Get LV Leitung. If not present, get all LV lectors.
*
* @param $anrechnung_id
* @return array|bool
*/
public function getLectors($anrechnung_id)
{
$this->ci->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (!hasData($result))
{
return false;
}
$lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id;
$studiensemester_kurzbz = getData($result)[0]->studiensemester_kurzbz;
// Get lectors
$lector_arr = array();
$this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id);
if (!$result = getData($result))
{
return false;
}
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one
if ($key !== false)
{
$lector_arr[]= $result[$key];
}
// ...otherwise keep all lectors
else
{
$lector_arr = array_merge($lector_arr, $result);
}
/**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
* But we wish to send only one email by to that one person)
* **/
foreach ($lector_arr as $lector)
{
unset($lector->lvleiter);
$lector->fullname = $lector->vorname. ' '. $lector->nachname;
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
// Return an object with Anrechnungdata
@@ -631,12 +818,7 @@ class AnrechnungLib
$this->ci->DmsVersionModel->addSelect('name');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id));
if (isError($result))
{
show_error(getError($result));
}
$anrechnung_data->dokumentname = $result->retval[0]->name;
$anrechnung_data->dokumentname = hasData($result) ? getData($result)[0]->name : '';
return $anrechnung_data;
}
+96 -34
View File
@@ -2,11 +2,10 @@
if (! defined('BASEPATH')) exit('No direct script access allowed');
class DmsLib
class DmsLib extends FHC_Controller
{
const FILE_CONTENT_PROPERTY = 'file_content';
const FILE_INPUT_NAME = 'uploadfile'; // name of the HTML input tag containing the uploaded file
private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file
/**
@@ -21,6 +20,34 @@ class DmsLib
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->ci->load->model('content/DmsFS_model', 'DmsFSModel');
}
/**
* Load a DMS Document.
* If no version is particularly given, the latest version is loaded.
*
* @param $dms_id
* @param integer $version
* @return array
*/
public function load($dms_id, $version = null)
{
if (is_numeric($dms_id))
{
$this->ci->DmsModel->addJoin('campus.tbl_dms_version', 'dms_id');
$this->ci->DmsModel->addOrder('version', 'DESC');
$this->ci->DmsModel->addLimit(1);
if (!is_numeric($version))
{
return $this->ci->DmsModel->load($dms_id);
}
else
{
return $this->ci->DmsModel->loadWhere(array('dms_id' => $dms_id, 'version' => $version));
}
}
return error('The parameter DMS ID must be a number');
}
/**
* Read a DMS Document from the Filesystem
@@ -95,19 +122,20 @@ class DmsLib
return $result;
}
/**
* Uploads a document and saves it to DMS
* @param $dms DMS assoc array
* @param array $allowed_types Default: all. Param example: array(jpg, pdf)
* @param $field_name Name of the HTML uploadfile input name attribute
* @param array $allowed_types Default: all. Param example: array(jpg, pdf)
* @return array
*/
public function upload($dms, $allowed_types = array('*'))
public function upload($dms, $field_name, $allowed_types = array('*'))
{
// Init upload configs
$this->_loadUploadLibrary($allowed_types);
if (!$this->ci->upload->do_upload(DmsLib::FILE_INPUT_NAME))
if (!$this->ci->upload->do_upload($field_name))
{
return error($this->ci->upload->display_errors());
}
@@ -132,46 +160,80 @@ class DmsLib
// return result of uploaded data
return success($upload_data); // data about the uploaded file
}
/**
* Download a document
* Download a document.
*
* @param $dms_id
* @param string $filename $filename If String is given, it will be used as filename on download
* @param string $disposition [inline | attachment]
* Inline opens doc in new tab. Attachment displays download dialog box.
*/
public function download($dms_id)
public function download($dms_id, $filename = null, $disposition = 'inline')
{
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
$this->ci->DmsVersionModel->addSelect('filename');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
$result = $this->getFileInfo($dms_id);
if (isError($result))
{
show_error(getError($result));
return error(getError($result));
}
$filename = $result->retval[0]->filename;
$file = DMS_PATH. $filename;
if (file_exists($file))
$fileObj = getData($result);
// Change filename, if filename is provided
if (is_string($filename))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '.$finfo->file($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
$fileObj->name = $filename;
}
// Add file disposition
if ($disposition == 'attachment')
{
$fileObj->disposition = 'attachment';
}
else
{
show_error('File does not exist');
$fileObj->disposition = 'inline';
}
// Output file
if(!$this->outputFile($fileObj))
{
return error('Error on file output');
}
}
/**
* Get file information.
*
* @param $dms_id
* @param integer $version
* @return array with File Object.
*/
public function getFileInfo($dms_id, $version = null)
{
if (!is_numeric($dms_id))
{
return error('Wrong parameter');
}
// Load file
$result = $this->load($dms_id, $version);
if (isError($result))
{
return error(getError($result));
}
// Store file information in fileObj
$fileObj = new StdClass();
$fileObj->filename = getData($result)[0]->filename;
$fileObj->file = DMS_PATH. getData($result)[0]->filename;
$fileObj->name = DMS_PATH. getData($result)[0]->name; // original users filename
$fileObj->mimetype = DMS_PATH. getData($result)[0]->mimetype;
return success($fileObj);
}
/**
+9 -5
View File
@@ -266,6 +266,7 @@ class FilterWidgetLib
$whereParameters = array(
'app' => $app,
'dataset_name' => $datasetName,
'person_id' => null,
'default_filter' => true
);
@@ -738,8 +739,10 @@ class FilterWidgetLib
$this->_ci->load->model('system/Filters_model', 'FiltersModel');
// Loads all the filters related to this page (same dataset_name and same app name)
$filters = $this->_ci->FiltersModel->getFiltersByAppDatasetName(
$session[self::APP], $session[self::DATASET_NAME]
$filters = $this->_ci->FiltersModel->getFiltersByAppDatasetNamePersonId(
$session[self::APP],
$session[self::DATASET_NAME],
getAuthPersonId()
);
// If filters were loaded
@@ -813,9 +816,6 @@ class FilterWidgetLib
}
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Return an unique string that identify this filter widget
* NOTE: The default value is the URI where the FilterWidget is called
@@ -857,6 +857,9 @@ class FilterWidgetLib
$this->_filterUniqueId = $filterUniqueId;
}
//------------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Generates a condition for a SQL where clause using the given applied filter definition.
* By default an empty string is returned.
@@ -972,3 +975,4 @@ class FilterWidgetLib
return $pos;
}
}
@@ -581,6 +581,35 @@ class Prestudent_model extends DB_Model
return $this->execQuery($query, array($person_id));
}
/**
* Get latest ZGV Bezeichnung of Prestudent.
*
* @param $prestudent_id
*/
public function getLatestZGVBezeichnung($prestudent_id)
{
if (!is_numeric($prestudent_id))
{
show_error('Prestudent_id is not numeric.');
}
$language_index = getUserLanguage() == 'German' ? 0 : 1;
$this->addSelect('
COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $language_index . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $language_index . '
) AS bezeichnung'
);
$this->addJoin('bis.tbl_zgv zgv', 'zgv_code', 'LEFT');
$this->addJoin('bis.tbl_zgvmaster zgvmaster', 'zgvmas_code', 'LEFT');
return $this->loadWhere(array(
'prestudent_id' => $prestudent_id
));
}
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester)
{
+3 -1
View File
@@ -12,7 +12,7 @@ class Statusgrund_model extends DB_Model
$this->pk = "statusgrund_id";
}
public function getStatus($status_kurzbz = null, $aktiv = null)
public function getStatus($status_kurzbz = null, $aktiv = null, $statusgrund_kurzbz = null)
{
$this->addOrder('bezeichnung_mehrsprachig');
$where = array();
@@ -20,6 +20,8 @@ class Statusgrund_model extends DB_Model
$where['status_kurzbz'] = $status_kurzbz;
if (!is_null($aktiv))
$where['aktiv'] = $aktiv;
if (!is_null($statusgrund_kurzbz))
$where['statusgrund_kurzbz'] = $statusgrund_kurzbz;
$status = $this->loadWhere($where);
@@ -1,7 +1,11 @@
<?php
class Anrechnung_model extends DB_Model
{
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
/**
* Constructor
*/
@@ -12,6 +16,55 @@ class Anrechnung_model extends DB_Model
$this->pk = 'anrechnung_id';
}
/**
* Creates new Anrechnungsantrag.
* Saves new Anrechnung and sets Anrechnungstatus for the new Anrechnung.
*
* @param $prestudent_id
* @param $studiensemester_kurzbz
* @param $lehrveranstaltung_id
* @param $begruendung_id
* @param $dms_id DMS ID of uploaded Nachweisdokument
* @param null $anmerkung_student = Herkunft der Kenntnisse
* @return array
*/
public function createAnrechnungsantrag(
$prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id,
$begruendung_id, $dms_id, $anmerkung_student = null
)
{
// Start DB transaction
$this->db->trans_start(false);
// Save Anrechnung
$result = $this->AnrechnungModel->insert(array(
'prestudent_id' => $prestudent_id,
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'begruendung_id' => $begruendung_id,
'dms_id' => $dms_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anmerkung_student' => $anmerkung_student,
'insertvon' => $this->_uid
));
// Store just inserted Anrechnung ID
$lastInsert_anrechnung_id = $result->retval;
// Save Anrechnungstatus
$this->AnrechnungModel->saveAnrechnungstatus($lastInsert_anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
// Transaction complete
$this->db->trans_complete();
if ($this->db->trans_status() === false)
{
$this->db->trans_rollback();
return error('Failed inserting Anrechnung', EXIT_ERROR);
}
return success($lastInsert_anrechnung_id);
}
/**
* Save Anrechnungstatus.
* @param $anrechnung_id
@@ -83,4 +136,68 @@ class Anrechnung_model extends DB_Model
return $this->execQuery($qry, array($anrechnung_id));
}
/**
* Delete Anrechnungstatus.
*
* @param $anrechnungstatus_id
*/
public function deleteAnrechnungstatus($anrechnungstatus_id){
$qry = '
DELETE FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnungstatus_id = ?
';
return $this->execQuery($qry, array($anrechnungstatus_id));
}
/**
* Delete last status approved / rejected.
* If last status is 'approved', Genehmigung is resetted.
*
* @param $anrechnung_id
* @return array
*/
public function withdrawApprovement($anrechnung_id)
{
// Get last Anrechnungstatus
if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
return error('Failed loading Anrechnung');
}
$last_status = $result->status_kurzbz;
$anrechnungstatus_id = $result->anrechnungstatus_id;
// Exit, if last status is not approved / rejected
if ($last_status != self::ANRECHNUNGSTATUS_APPROVED && $last_status != self::ANRECHNUNGSTATUS_REJECTED)
{
return error('Nothing to withdraw. Application is still in progress');
}
// Start DB transaction
$this->db->trans_start(false);
// If Anrechnung was approved
if ($last_status == self::ANRECHNUNGSTATUS_APPROVED)
{
// Reset Genehmigung
$this->AnrechnungModel->update($anrechnung_id, array('genehmigt_von' => NULL));
}
// Delete last status approved / rejected
$this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id);
// Transaction complete
$this->db->trans_complete();
if ($this->db->trans_status() === false)
{
$this->db->trans_rollback();
return error('Failed withdrawing Genehmigung', EXIT_ERROR);
}
return success();
}
}
@@ -0,0 +1,15 @@
<?php
class Anrechnungbegruendung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnung_begruendung';
$this->pk = 'begruendung_id';
}
}
@@ -475,7 +475,7 @@ class Studiengang_model extends DB_Model
funktion_kurzbz = \'Leitung\'
AND ( datum_von <= NOW() OR datum_von IS NULL )
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
AND studiengang_kz = ' . $this->db->escape($studiengang_kz, FHC_INTEGER)
AND studiengang_kz = ' . $this->db->escape($studiengang_kz)
;
}
+27 -12
View File
@@ -57,19 +57,34 @@ class Filters_model extends DB_Model
/**
* Loads all filters by their app and dataset_name
*/
public function getFiltersByAppDatasetName($app, $dataset_name)
public function getFiltersByAppDatasetNamePersonId($app, $dataset_name, $person_id)
{
$this->resetQuery(); // reset any previous built query
$query = '
(
-- Global filters
SELECT gs.filter_id,
gs.person_id,
gs.description
FROM system.tbl_filters gs
WHERE gs.app = ?
AND gs.dataset_name = ?
AND gs.person_id IS NULL
ORDER BY gs.person_id DESC, gs.sort ASC
)
UNION ALL
(
-- Personal filters
SELECT ps.filter_id,
ps.person_id,
ps.description
FROM system.tbl_filters ps
WHERE ps.app = ?
AND ps.dataset_name = ?
AND ps.person_id = ?
ORDER BY ps.person_id DESC, ps.sort ASC
)';
$this->addSelect('filter_id, person_id, description');
$this->addOrder('person_id', 'DESC'); // sort descending on column person_id
$this->addOrder('sort', 'ASC'); // sort on column sort
$filterParametersArray = array(
'app' => $app,
'dataset_name' => $dataset_name
);
return $this->loadWhere($filterParametersArray);
return $this->execQuery($query, array($app, $dataset_name, $app, $dataset_name, $person_id));
}
}
+3 -1
View File
@@ -15,6 +15,7 @@
<th>Aktiv</th>
<th>Bezeichnung mehrsprachig</th>
<th>Beschreibung</th>
<th>Statusgrund</th>
<th></th>
</tr>
</thead>
@@ -25,6 +26,7 @@
<td><?php echo json_encode($s->aktiv); ?></td>
<td><?php echo json_encode($s->bezeichnung_mehrsprachig); ?></td>
<td><?php echo json_encode($s->beschreibung); ?></td>
<td><?php echo json_encode($s->statusgrund_kurzbz); ?></td>
<td><a href="../editGrund/<?php echo $s->statusgrund_id; ?>" target="StatusgrundBottom">Edit</a></td>
</tr>
<?php endforeach ?>
@@ -33,4 +35,4 @@
</div>
</div>
</body>
</html>
</html>
+15
View File
@@ -81,6 +81,21 @@
&nbsp;
</td>
</tr>
<tr>
<td>
StatusGrund:
</td>
<tr>
</tr>
<td>
<input type="text" name="statusgrund_kurzbz" value="<?php echo $sg->statusgrund_kurzbz; ?>" /><br/>
</td>
</tr>
<tr>
<td colspan="2">
&nbsp;
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit">Save</button>
+10
View File
@@ -51,6 +51,16 @@
&nbsp;
</td>
</tr>
<tr>
<td>
StatusGrund:
</td>
<tr>
</tr>
<td>
<input type="text" name="statusgrund_kurzbz" value="" /><br/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit">Save</button>
@@ -12,7 +12,8 @@ $this->load->view(
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
'antragStellen',
'begruendung'
),
'ui' => array(
'hilfeZuDieserSeite',
@@ -36,7 +37,14 @@ $this->load->view(
'lehrveranstaltung',
'ects',
'lektor',
)
),
'anrechnung' => array(
'genehmigungAblehnungWirklichZuruecknehmen',
'empfehlungsanforderungWirklichZuruecknehmen',
'erfolgreichZurueckgenommen',
'empfehlungPositivConfirmed',
'empfehlungNegativConfirmed'
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
@@ -53,7 +61,7 @@ $this->load->view(
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<!-- header -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
@@ -62,298 +70,334 @@ $this->load->view(
</h3>
</div>
</div>
<!--end header -->
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="approveAnrechnungDetail-anrechnungInfoTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="approveAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default" id="test">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-empfehlungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'empfehlungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="approveAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="approveAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz != 'inProgressLektor' ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'keineEmpfehlungAngefordert'); ?>
</div>
<div class="panel panel-default panel-body <?php echo
is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressLektor'
? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsAngefordert">
<?php echo $this->p->t('anrechnung', 'empfehlungAngefordertNochKeineEmpfehlung'); ?>
<span id="approveAnrechnungDetail-empfehlungDetail-empfehlungAngefordertAm">
<?php echo $empfehlungData->empfehlung_angefordert_am ?>
</span>.
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
</div>
</form>
<div class="pull-right">
<button id="approveAnrechnungDetail-request-recommendation" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?>
</button>
</div>
</div>
</div>
<br><br>
<!-- Genehmigungssdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'genehmigung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-genehmigungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'genehmigungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'abgeschlossenVon'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenVon"><?php echo $genehmigungData->abgeschlossen_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'abschlussdatum'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenAm"><?php echo $genehmigungData->abgeschlossen_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-genehmigungDetail">
<div class="panel panel-default panel-body <?php echo is_null($genehmigungData->genehmigung) ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineGenehmigung'); ?>
</div>
<div class="alert alert-success <?php echo $genehmigungData->genehmigung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv">
<b><?php echo $this->p->t('anrechnung', 'genehmigungPositiv'); ?></b>
</div>
<div class="<?php echo $genehmigungData->genehmigung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'genehmigungNegativ'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-genehmigungDetail-begruendung"><?php echo htmlentities($genehmigungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default panel-body" 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>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></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', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></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>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-reject-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungDetail-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'genehmigungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-genehmigung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="approveAnrechnungDetail-reject-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'ablehnen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'genehmigen')); ?>
</button>
</div>
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="approveAnrechnungDetail-anrechnungInfoTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="approveAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-6">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
</tbody>
</table>
</div>
<div class="col-lg-6">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
<td><?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>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default" id="approveAnrechnungDetail-empfehlung"
data-empfehlung="<?php echo json_encode($empfehlungData->empfehlung) ?>">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>&emsp;
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="approveAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="approveAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-6">
<form id="form-empfehlung">
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')); ?></th>
<td id="approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm">
<?php echo $empfehlungData->empfehlungsanfrageAm; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'empfehlungsanfrageAn'); ?></th>
<td id="approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn">
<?php echo $empfehlungData->empfehlungsanfrageAn; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAm')); ?></th>
<td><?php echo $empfehlungData->empfehlung_am ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungVon')); ?></th>
<td><?php echo $empfehlungData->empfehlung_von ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></th>
<td id="approveAnrechnungDetail-empfehlungDetail-empfehlung"></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
<td id="approveAnrechnungDetail-empfehlungDetail-begruendung">
<?php echo htmlentities($empfehlungData->begruendung) ?>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<div class="col-lg-6">
<form id="form-empfehlungNotiz">
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<input type="hidden" name="notiz_id"
value="<?php echo $empfehlungData->notiz_id ?>">
<div class="form-group">
<label class="text-center">
<?php echo ucfirst($this->p->t('global', 'notiz')); ?>
</label>
<textarea name="empfehlungText" rows="4"><?php echo htmlentities($empfehlungData->notiz) ?></textarea>
</div>
<input type="submit" class="btn btn-default pull-right" value="<?php echo ucfirst($this->p->t('ui', 'speichern')); ?>">
</form>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="approveAnrechnungDetail-withdraw-request-recommedation"
class="btn btn-default btn-w200 <?php echo (is_null($empfehlungData->empfehlung) &&
$anrechnungData->status_kurzbz == 'inProgressLektor') ? '' : 'hidden' ?>"
type="button">
<?php echo ucfirst($this->p->t('global', 'zuruecknehmen')); ?>
</button>
<button id="approveAnrechnungDetail-request-recommendation" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?>
</button>
</div>
</div>
</div>
<br><br>
<!-- Genehmigungssdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'genehmigung'); ?></b></span>&emsp;
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'abgeschlossenVon'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenVon"><?php echo $genehmigungData->abgeschlossen_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'abschlussdatum'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenAm"><?php echo $genehmigungData->abgeschlossen_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-genehmigungDetail">
<!-- Infopanel: Noch nicht genehmigt / abgelehnt -->
<div class="panel panel-default panel-body <?php echo is_null($genehmigungData->genehmigung) ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineGenehmigung'); ?>
</div>
<!-- Infopanel: Genehmigt -->
<div class="alert alert-success <?php echo $genehmigungData->genehmigung === true ? '' : 'hidden' ?>" id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv">
<b><?php echo $this->p->t('anrechnung', 'genehmigungPositiv'); ?></b>
</div>
<!-- Infopanel: Abgelehnt -->
<div class="<?php echo $genehmigungData->genehmigung === false ? '' : 'hidden' ?>" id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'genehmigungNegativ'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-genehmigungDetail-begruendung"><?php echo htmlentities($genehmigungData->notiz) ?></span>
</div>
</div>
<form>
<input type="hidden" name="anrechnung_id" value="<?php echo $anrechnungData->anrechnung_id ?>">
<!-- Ablehnen -->
<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>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></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', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></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', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
<span id="empfehlungstextUebernehmen" 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>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-reject-anrechnung-confirm"
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<!-- Genehmigen -->
<div style="display: none" id="approveAnrechnungDetail-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungPositivQuestion'); ?></h4>
&ensp; <?php echo $this->p->t('anrechnung', 'genehmigungPositivSubquestion'); ?>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-genehmigung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-confirm"
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
<!-- Button Gehenhmigen / Ablehnen / Zurücknehmen -->
<div class="pull-right">
<button id="approveAnrechnungDetail-withdraw-anrechnung-approvement"
class="btn btn-default btn-w200 <?php echo ($anrechnungData->status_kurzbz == 'approved' ||
$anrechnungData->status_kurzbz == 'rejected') ? '' : 'hidden' ?>"
type="button">
<?php echo ucfirst($this->p->t('global', 'zuruecknehmen')); ?>
</button>
<button id="approveAnrechnungDetail-reject-anrechnung-ask" class="btn btn-danger btn-w200"
type="button"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'ablehnen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-ask" class="btn btn-primary btn-w200"
type="button"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'genehmigen')); ?>
</button>
</div>
</div>
</div>
<br><br><br><br>
</div>
<div class="col-xs-4">
<!-- -Statusleiste -->
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="approveAnrechnungDetail-status_kurzbz"
Status: <b><span class="text-uppercase" id="approveAnrechnungDetail-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<br>
<!-- Infopanels -->
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
</div>
</div>
</div>
</div>
</div><!--end container-fluid-->
</div><!--end page-wrapper-->
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -13,11 +13,14 @@ $this->load->view(
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
'begruendung',
'zgv'
),
'anrechnung' => array(
'nachweisdokumente',
'empfehlung',
'empfehlungsanfrageAn',
'empfehlungsanfrageAm',
'confirmTextAntragHatBereitsEmpfehlung',
'herkunft'
),
@@ -43,6 +46,7 @@ $this->load->view(
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'empfehlungWurdeAngefordert',
'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt'
),
@@ -155,11 +159,12 @@ $this->load->view(
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<button id="approveAnrechnungUebersicht-begruendung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-confirm"
class="btn btn-primary btn-w200">
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
@@ -173,11 +178,12 @@ $this->load->view(
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<button id="approveAnrechnungUebersicht-empfehlung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-confirm"
class="btn btn-primary btn-w200">
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
@@ -186,7 +192,7 @@ $this->load->view(
<!-- Filter buttons / Submit buttons-->
<div class="row">
<!-- Filter buttons -->
<div class="col-xs-3">
<div class="col-xs-4 col-md-5">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<button id="show-inProgressDP" class="btn btn-default btn-clearfilter" type="button"
@@ -194,6 +200,11 @@ $this->load->view(
title="<?php echo $this->p->t('ui', 'alleInBearbeitungSTGL'); ?>">
<i class='fa fa-eye'></i>
</button>
<button id="show-inProgressLektor" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'alleInBearbeitungLektor'); ?>"><i
class='fa fa-clock-o'></i>
</button>
<button id="show-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurEmpfohleneAnzeigen'); ?>"><i
@@ -215,17 +226,23 @@ $this->load->view(
class='fa fa-times'></i>
</button>
</div>
</div>
<a type="button" class="btn btn-default" style="margin-left: 20px;" href='<?php echo site_url('lehre/anrechnung/createAnrechnung') ?>' target='_blank'>
<i class='fa fa-plus' aria-hidden='true'></i> <?php echo $this->p->t('global', 'antragAnlegen'); ?>
</a>
</div>
</div>
<!-- Action Buttons 'Genehmigen', Ablehnen, 'Empfehlung anfordern'-->
<div class="col-xs-9">
<div class="col-xs-8 col-md-7">
<div class="pull-right">
<button id="approveAnrechnungUebersicht-request-recommendation"
class="btn btn-default btn-w200 btn-mr50"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?></button>
class="btn btn-default btn-w200 btn-mr50" type="button">
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?></button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('global', 'ablehnen')); ?></button>
class="btn btn-danger btn-w200" type="button">
<?php echo ucfirst($this->p->t('global', 'ablehnen')); ?></button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('global', 'genehmigen')); ?></button>
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('global', 'genehmigen')); ?></button>
</div>
</div>
</div>
@@ -1,4 +1,7 @@
<?php
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
@@ -14,12 +17,28 @@ $query = '
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
lv.orgform_kurzbz,
(SELECT ausbildungssemester
FROM public.tbl_prestudentstatus press
WHERE press.prestudent_id = anrechnung.prestudent_id
AND press.studiensemester_kurzbz = anrechnung.studiensemester_kurzbz
AND press.status_kurzbz = \'Student\'),
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code)
WHERE prestudent_id = anrechnung.prestudent_id
) AS zgv,
anrechnung.insertamum::date AS "antragsdatum",
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
@@ -33,13 +52,47 @@ $query = '
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
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)
)
SELECT anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung"
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"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
@@ -59,21 +112,28 @@ $filterWidgetArray = array(
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'organisationsform')),
'Semester',
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('global', 'zgv')),
ucfirst($this->p->t('anrechnung', 'antragdatum')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
'Status',
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')),
ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn'))
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentLayout:true,
persistentSort:true,
persistentFilter:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
@@ -100,26 +160,32 @@ $filterWidgetArray = array(
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
anrechnung_id: {visible: false, headerFilter:"input"},
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"},
dms_id: {visible: false, headerFilter:"input"},
studiensemester_kurzbz: {visible: false, headerFilter:"input"},
studiengang_kz: {visible: false, headerFilter:"input"},
stg_bezeichnung: {headerFilter:"input"},
orgform_kurzbz: {headerFilter:"input"},
ausbildungssemester: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_bezeichnung: {headerFilter:"input"}
status_kurzbz: {visible: false, headerFilter:"input"},
status_bezeichnung: {headerFilter:"input"},
empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate},
empfehlungsanfrageAn: {visible: false, headerFilter:"input"}
}', // col properties
);
@@ -0,0 +1,173 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'neueAnrechnung'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tabulator' => true,
'tablewidget' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragWurdeGestellt',
'antragBereitsGestellt',
'antragBearbeiten'
),
'ui' => array(
'hochladen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/createAnrechnung.js'
),
'customCSSs' => array(
'public/css/lehre/anrechnung.css'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- Title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'neueAnrechnung'); ?>
<small>| <?php echo $this->p->t('global', 'antragAnlegen'); ?></small>
</h3>
</div>
</div>
<!-- Studiensemester Dropdown -->
<div class="row">
<div class="col-xs-12">
<form class="form-inline" action="" method="get">
<div class="form-group">
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<button type="submit"
class="btn btn-default form-group">
<?php echo ucfirst($this->p->t('ui', 'anzeigen')); ?>
</button>
</form>
</div>
</div>
<!-- StudentInnen Table -->
<div class="row">
<div class="col-lg-10">
<?php $this->load->view('lehre/anrechnung/createAnrechnungData.php'); ?>
</div>
</div>
<br><br>
<!-- FORM START ------------------------------------------------------------------------------------------------------->
<form id="createAnrechnung-form">
<input name="prestudent_id" id="prestudent_id" type="hidden" value="" data-prestudent_id = "" >
<input name="studiensemester_kurzbz" id="studiensemester_kurzbz" type="hidden" value="<?php echo $studiensemester_selected ?>">
<div class="row">
<div class="col-lg-10">
<table class="table table-condensed table-bordered">
<!-- StudentIn -->
<tr>
<th class="col-xs-5 col-lg-2"><label><?php echo $this->p->t('person', 'studentIn'); ?></label></th>
<td><span id="student" class="pl-15"></span></td>
</tr>
<!-- Selectmenu Lehrveranstaltungen -->
<tr>
<th class="col-xs-5 col-lg-2"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?> *</th>
<td>
<select name="lehrveranstaltung_id" id="select-lehrveranstaltung" class="form-control select-w500">
<option value="" <?php echo set_select('lehrveranstaltung', '', TRUE); ?> >
<?php echo $this->p->t('ui', 'bitteWaehlen'); ?>
</option>
</select>
</td>
</tr>
<!-- Select Anrechnungbegruendungen -->
<tr>
<th class="col-xs-5 col-lg-2"><?php echo $this->p->t('global', 'begruendung'); ?> *</th>
<td>
<select name="begruendung_id" id="select-begruendung" class="form-control select-w500">
<option value="" <?php echo set_select('begruendung', '', TRUE); ?> >
<?php echo $this->p->t('ui', 'bitteWaehlen'); ?>
</option>
<?php foreach ($begruendungen as $begruendung) : ?>
<option value="<?php echo $begruendung->begruendung_id ?>"
<?php echo set_select('begruendung', $begruendung->begruendung_id); ?> >
<?php echo ucfirst($begruendung->bezeichnung) ?>
</option>
<?php endforeach; ?>
</select>
</td>
</tr>
<!-- Submit Herkunft der Kenntnisse -->
<tr>
<th class="col-xs-5 col-lg-2"><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></th>
<td>
<?php echo form_textarea(array(
'name' => 'herkunftKenntnisse',
'rows' => 1
)); ?>
</td>
</tr>
<!-- Submit Upload Nachweisdokumente -->
<tr>
<th class="col-xs-5 col-lg-2"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?> *</th>
<td>
<div><?php echo form_upload(array(
'name' => 'uploadfile',
'accept' => '.pdf',
'size' => '50',
'required' => 'required',
'enctype' => "multipart/form-data"
)); ?>
</div>
<a class="pull-right" id="download-nachweisdokumente"></a>
</td>
</tr>
</table>
</div>
</div>
<div class="row">
<div class="col-lg-10">
<!-- Submit Button -->
<button class="btn btn-primary btn-w200 pull-right" id="createAnrechnung-submit" type="submit" value="submit">
<?php echo $this->p->t('global', 'antragAnlegen'); ?>
</button>
<!-- Open new Anrechnung Button (hidden by default) -->
<a type="button" class="btn btn-default btn-mr10 pull-right hidden" id="createAnrechnung-openAnrechnung" target="_blank"></a>
</div>
</div>
</form>
<!-- FORM END --------------------------------------------------------------------------------------------------------->
</div>
</div>
</body>
@@ -0,0 +1,84 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$query = '
SELECT pst.prestudent_id,
person.person_id,
pststatus.studienplan_id,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
ausbildungssemester,
nachname,
vorname,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code)
WHERE prestudent_id = pst.prestudent_id
) AS zgv
FROM public.tbl_prestudent pst
JOIN public.tbl_prestudentstatus pststatus USING (prestudent_id)
JOIN public.tbl_person person USING (person_id)
JOIN public.tbl_student student USING (prestudent_id)
JOIN public.tbl_benutzer benutzer ON benutzer.uid = student.student_uid
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = pst.studiengang_kz
WHERE pststatus.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND pst.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
AND benutzer.aktiv = true
AND pststatus.status_kurzbz = \'Student\'
ORDER BY "stg_bezeichnung", ausbildungssemester, nachname
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'createAnrechnung',
'requiredPermissions' => 'lehre/anrechnung_anlegen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'prestudent_id',
'person_id',
'studienplan_id',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
'Semester',
ucfirst($this->p->t('person', 'nachname')),
ucfirst($this->p->t('person', 'vorname')),
ucfirst($this->p->t('global', 'zgv'))
),
'datasetRepOptions' => '{
height: 300,
layout: "fitColumns", // fit columns to width of table
persistentLayout:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "prestudent_id", // assign specific column as unique id (important for row indexing)
selectable: 1, // allow row selection
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
rowSelected: function(row) {
func_rowSelected(row);
},
rowSelectionChanged:function(data, rows){
func_rowSelectionChanged(data, rows);
},
tableWidgetHeader: false
}',
'datasetRepFieldsDefs' => '{
prestudent_id: {visible: false, headerFilter:"input"},
person_id: {visible: false, headerFilter:"input"},
studienplan_id: {visible: false, headerFilter:"input"},
studiengang_kz: {visible: false, headerFilter:"input"},
stg_bezeichnung: {headerFilter:"input"},
ausbildungssemester: {headerFilter:"input"},
nachname: {headerFilter:"input"},
vorname: {headerFilter:"input"},
zgv: {headerFilter:"input"}
}'
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
@@ -1,9 +1,12 @@
<?php
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'antragStellen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
@@ -11,11 +14,23 @@ $this->load->view(
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
'antragStellen',
'antragWurdeGestellt',
'antragBereitsGestellt',
'bearbeitungGesperrt'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen'
'hochladen',
'inBearbeitung',
'neu',
'maxZeichen',
'errorBestaetigungFehlt',
'systemfehler'
),
'anrechnung' => array(
'deadlineUeberschritten',
'benotungDerLV'
),
'person' => array(
'student',
@@ -47,7 +62,7 @@ $this->load->view(
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<!-- header -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
@@ -56,185 +71,193 @@ $this->load->view(
</h3>
</div>
</div>
<?php echo form_open_multipart(current_url() . '/apply',
['id' => 'requestAnrechnung-form'],
['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz]
); ?>
<!-- end header-->
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten, Dokument Upload, Notiz-->
<div class="row">
<div class="col-lg-12">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="requestAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'lektor')); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Antrag mit Checkboxen -->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 3px">
<span><?php echo $this->p->t('anrechnung', 'antragStellenText'); ?></span>&emsp;
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="1" required
<?php echo $anrechnungData->begruendung_id == '1' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenZeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundZeugnisTooltip" 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
<?php echo $anrechnungData->begruendung_id == '4' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenPraxis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundBerufTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundBerufTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
</div>
</div>
</div>
<!-- Dokument Upload-->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundAllgemeinTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50"
required <?php echo $disabled; ?>>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'uploadTooltipText'); ?>">
<i class="fa fa-lg fa-question-circle-o" aria-hidden="true"></i>
</span>
<?php if (!empty($anrechnungData->dms_id)): ?>
<a class="pull-right"
href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Notiz -->
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="panel-body">
<textarea class="form-control" name="anmerkung" rows="2"
required <?php echo $disabled; ?>><?php echo $anrechnungData->anmerkung; ?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Submit button 'Anrechnung beantragen'-->
<div class="pull-right">
<input type="submit" id="requestAnrechnung-submit" class="btn btn-primary"
value="<?php echo $this->p->t('anrechnung', 'anrechnungBeantragen'); ?>" <?php echo $disabled; ?>>
</div>
</div>
</div>
</div>
</div>
<!-- Antragsdaten, Dokument Upload, Notiz-->
<div class="row">
<div class="col-lg-12">
<form id="requestAnrechnung-form">
<input type="hidden" name="lv_id" value="<?php echo $antragData->lv_id ?>">
<input type="hidden" name="studiensemester" value="<?php echo $antragData->studiensemester_kurzbz ?>">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="requestAnrechnung-antragdatum"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<th><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<th><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<th><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<th><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<th><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<th><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<th><?php echo ucfirst($this->p->t('lehre', 'lektorInnen')); ?></th>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Antrag mit Checkboxen -->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 3px">
<span><?php echo $this->p->t('anrechnung', 'antragStellenText'); ?></span>&emsp;
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="1" required
<?php echo $anrechnungData->begruendung_id == '1' ? 'checked' : ''; ?> />
<?php echo $this->p->t('anrechnung', 'antragStellenWegenZeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundZeugnisTooltip" 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
<?php echo $anrechnungData->begruendung_id == '4' ? 'checked' : ''; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenPraxis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundBerufTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundBerufTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
</div>
</div>
</div>
<!-- Dokument Upload-->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundAllgemeinTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50"
required>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'uploadTooltipText'); ?>">
<i class="fa fa-lg fa-question-circle-o" aria-hidden="true"></i>
</span>
<a class="pull-right <?php echo !empty($anrechnungData->dms_id) ? '' : 'hidden' ?>"
id="requestAnrechnung-downloadDocLink"
href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?>
</a>
</div>
</div>
</div>
</div>
<!-- Herkunft der Kenntnisse -->
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="panel-body">
<textarea class="form-control" name="anmerkung" rows="1" id="requestAnrechnung-herkunftDerKenntnisse"
maxlength="<?php echo HERKUNFT_DER_KENNTNISSE_MAX_LENGTH ?>" required><?php echo $anrechnungData->anmerkung; ?></textarea>
<small><span class="text-muted pull-right"><?php echo $this->p->t('ui', 'maxZeichen'); ?> :<span id="requestAnrechnung-herkunftDerKenntnisse-charCounter"><?php echo HERKUNFT_DER_KENNTNISSE_MAX_LENGTH ?></span></span></small>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Bestaetigung-->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 3px">
<div class="checkbox">
<label>
<input type="checkbox" name="bestaetigung" required>
<b><?php echo $this->p->t('anrechnung', 'bestaetigungstext'); ?></b>
</label>
</div>
</div>
</div>
</div>
<!-- Button 'Anrechnung beantragen'-->
<div class="pull-right">
<input type="submit" id="requestAnrechnung-apply-anrechnung" class="btn btn-primary"
value="<?php echo $this->p->t('anrechnung', 'anrechnungBeantragen'); ?>">
</div>
</form>
</div>
</div>
<br><br><br><br>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="requestAnrechnung-status_kurzbz"
<!-- Status panel -->
<div class="alert text-center" id="requestAnrechnung-status">Status: <b><span class="text-uppercase" id="requestAnrechnung-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<?php if ($is_expired): ?>
<div class="alert alert-warning">
<?php echo $this->p->t('global', 'bearbeitungGesperrt'); ?>
<?php echo $is_expired && empty($antragData->anrechnung_id) ? ': ' . $this->p->t('anrechnung', 'deadlineUeberschritten') : ''; ?>
</div>
<?php endif; ?>
</div>
<!-- Sperregrund panel (hidden by default) -->
<div class="alert alert-danger text-center hidden" id="requestAnrechnung-sperre"
data-anrechnung_id="<?php echo empty($anrechnungData->anrechnung_id) ? '' : $anrechnungData->anrechnung_id; ?>"
data-expired="<?php echo json_encode($is_expired); ?>"
data-blocked="<?php echo json_encode($is_blocked) ?>">
</div>
<br>
<?php $this->load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
</div>
</div>
<?php echo form_close(); ?>
</div>
</div>
</body>
@@ -34,7 +34,11 @@ $this->load->view(
'lehrveranstaltung',
'ects',
'lektor',
)
),
'anrechnung' => array(
'empfehlungPositivConfirmed',
'empfehlungNegativConfirmed'
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
@@ -63,199 +67,240 @@ $this->load->view(
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>
</span>&emsp;
<span class="reviewAnrechnungDetail-anrechnungInfoTooltip" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="reviewAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-6">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('person', 'studentIn')); ?></th>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('person', 'personenkennzeichen'); ?></th>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></th>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></th>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></th>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
</tbody>
</table>
</div>
<div class="col-lg-6">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'ects'); ?></th>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('lehre', 'lektorInnen'); ?></th>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('global', 'zgv')); ?></th>
<td><?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>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></th>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>
</span>&emsp;
<span class="reviewAnrechnungDetail-anrechnungInfoTooltip" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="reviewAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="reviewAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="reviewAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default" id="reviewAnrechnungDetail-empfehlung" data-empfehlung="<?php echo json_encode($empfehlungData->empfehlung) ?>">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="reviewAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="reviewAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="reviewAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body <?php echo is_null($empfehlungData->empfehlung) ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineEmpfehlung'); ?>
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="reviewAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<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>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<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>&emsp;
<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>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungDetail-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-empfehlung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button>
</div>
</div>
</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-6">
<table class="table table-bordered table-condensed table-fixed">
<tbody>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm">
<?php echo $empfehlungData->empfehlungsanfrageAm; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'empfehlungsanfrageAn'); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn">
<?php echo $empfehlungData->empfehlungsanfrageAn; ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAm')); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-empfehlungAm">
<?php echo $empfehlungData->empfehlung_am ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungVon')); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-empfehlungVon">
<?php echo $empfehlungData->empfehlung_von ?>
</td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-empfehlung"></td>
</tr>
<tr>
<th class="col-xs-4"><?php echo $this->p->t('global', 'begruendung'); ?></th>
<td id="reviewAnrechnungDetail-empfehlungDetail-begruendung">
<?php echo htmlentities($empfehlungData->begruendung) ?>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-lg-6">
<div>
<label class="text-center">
<?php echo ucfirst($this->p->t('global', 'notizDerSTGL')); ?>
</label>
<textarea rows="4" readonly><?php echo htmlentities($empfehlungData->notiz) ?></textarea>
</div>
</div>
</div>
</div>
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<!-- Nicht empfehlen panel (hidden) -->
<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>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<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>&emsp;
<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>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<!-- Empfehlen panel (hidden)-->
<div class="panel panel-default panel-body" style="display: none" id="reviewAnrechnungDetail-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-empfehlung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
<!-- Button Empfehlen / Nicht Empfehlen -->
<div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button>
</div>
</div>
</div>
</div>
<div class="col-xs-4">
@@ -25,7 +25,7 @@
</a>
</h4>
</div>
<div id="collapseZero" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingZero">
<div id="collapseZero" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingZero">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
</div>
@@ -13,7 +13,8 @@ $this->load->view(
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
'begruendung',
'zgv'
),
'anrechnung' => array(
'nachweisdokumente',
@@ -154,11 +155,12 @@ $this->load->view(
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<button id="reviewAnrechnungUebersicht-begruendung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
@@ -172,11 +174,12 @@ $this->load->view(
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<button id="reviewAnrechnungUebersicht-empfehlung-abbrechen"
class="btn btn-default btn-w200" type="reset">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
@@ -222,9 +225,11 @@ $this->load->view(
<div class="col-xs-9">
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?></button>
class="btn btn-danger btn-w200" type="button">
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?></button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?></button>
class="btn btn-primary btn-w200" type="button">
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?></button>
</div>
</div>
</div>
@@ -20,6 +20,16 @@ $query = '
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
(SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ',
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . '
) AS zgv
FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
LEFT JOIN bis.tbl_zgvmaster zgvmaster USING (zgvmas_code)
WHERE prestudent_id = anrechnung.prestudent_id
) AS zgv,
anrechnung.insertamum::date AS "antragsdatum",
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
@@ -33,7 +43,7 @@ $query = '
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
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)
)
@@ -75,6 +85,8 @@ $filterWidgetArray = array(
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('global', 'zgv')),
ucfirst($this->p->t('anrechnung', 'antragdatum')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
@@ -110,25 +122,27 @@ $filterWidgetArray = array(
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
anrechnung_id: {visible: false, headerFilter:"input"},
lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"},
dms_id: {visible: false, headerFilter:"input"},
studiensemester_kurzbz: {visible: false, headerFilter:"input"},
studiengang_kz: {visible: false, headerFilter:"input"},
stg_bezeichnung: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_kurzbz: {visible: false, headerFilter:"input"},
status_bezeichnung: {headerFilter:"input"}
}', // col properties
);
@@ -414,7 +414,7 @@
selected="selected"><?php echo ucfirst($this->p->t('ui', 'freigabeart')) . '...' ?>
</option>
<?php foreach ($intstatusgruende as $statusgrund): ?>
<option value="<?php echo $statusgrund->statusgrund_id ?>"><?php echo $statusgrund->bezeichnung_mehrsprachig[0] ?></option>
<option value="<?php echo $statusgrund->statusgrund_id ?>" data-kurzbz="<?php echo $statusgrund->statusgrund_kurzbz ?>"><?php echo $statusgrund->bezeichnung_mehrsprachig[0] ?></option>
<?php endforeach ?>
</select>
<span class="input-group-btn">
+248 -248
View File
@@ -1,248 +1,248 @@
<?php
/* Copyright (C) 2009 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger < christian.paminger@technikum-wien.at >
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/person.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/student.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/phrasen.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
if (!$db = new basis_db())
die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung'));
$getuid=get_uid();
$uid=$getuid;
if(isset($_GET['uid']))
{
//Studentenansicht
$uid = $_GET['uid'];
//Rechte Pruefen
$allowed=false;
$student = new student();
if(!$student->load($uid))
die($p->t('global/fehlerBeimErmittelnDerUID'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
//Berechtigung ueber das Berechtigungssystem
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($getuid);
if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s'))
$allowed=true;
//oder Lektor mit Betreuung dieses Studenten
$qry = "SELECT 1
FROM
lehre.tbl_projektarbeit
JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id)
WHERE
tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND
vw_benutzer.uid=".$db->db_add_param($getuid).";";
if($result = $db->db_query($qry))
{
if($db->db_num_rows($result)>0)
{
$allowed=true;
}
}
if(!$allowed)
{
die($p->t('abgabetool/keineBerechtigungStudentenansicht'));
}
}
$htmlstr = '';
$htmlstr1 = '';
$vorname='';
$nachname='';
$zweitbetreuer = '';
$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname,
(SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname,
(SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre,
(SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost,
(SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
(SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
tbl_projektbetreuer.person_id AS betreuer_person_id,
tbl_projekttyp.bezeichnung AS prjbez, *,
lehre.tbl_projektbetreuer.note as note,
public.tbl_benutzer.aktiv as aktiv,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt
FROM lehre.tbl_projektarbeit
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
LEFT JOIN public.tbl_benutzer ON(uid=student_uid)
LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id)
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter')
AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)."
ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102';
if(!$erg=$db->db_query($sql_query))
{
$errormsg=$p->t('global/fehlerBeimLesenAusDatenbank');
}
else
{
$htmlstr .= "<form name='formular'><input type='hidden' name='check' value=''></form><table id='t1' class='tablesorter'>\n";
$htmlstr .= "<thead><tr>\n";
$htmlstr .= "
<th>".$p->t('abgabetool/details')."</th>
<th>".$p->t('lvplan/sem')."</th>
<th>".$p->t('lvplan/stg')."</th>
<th>".$p->t('global/mail')."</th>
<th>".$p->t('abgabetool/betreuer')."</th>
<th>".$p->t('abgabetool/typ')."</th>
<th>".$p->t('abgabetool/titel')."</th>
<!--<th>".$p->t('abgabetool/betreuerart')."</th>-->";
$htmlstr .= "</tr></thead><tbody>\n";
$i = 0;
while($row=$db->db_fetch_object($erg))
{
$htmlstr1 = '';
$zweitbetreuer_obj = new person();
if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id))
{
$zweitbetreuer = ', <b>'.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).'</b>: '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost;
}
$htmlstr1 = '<b>'.$db->convert_html_chars($row->betreuerart_kurzbz).'</b>: ';
$vorname=$row->vorname;
$nachname=$row->nachname;
$uid=$row->uid;
($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= '');
$htmlstr1 .= $row->bvorname.' '.$row->bnachname;
($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= '');
$htmlstr1 .= $zweitbetreuer;
$htmlstr .= " <tr>\n"; //class='liste".($i%2)."'
if (is_null($row->note) && $row->aktiv === 't')
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt))
{
$htmlstr .= "<td>";
if (!is_null($row->babgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "/";
if (!is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
$htmlstr .= "</td>";
} else
{
$htmlstr .= "<td></td>";
}
$htmlstr .= " <td>".$row->studiensemester_kurzbz."</td>\n";
$htmlstr .= " <td>".strtoupper($row->typ.$row->kurzbz)."</td>\n";
$htmlstr .= " <td align= center>";
$qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person
JOIN public.tbl_benutzer USING(person_id)
JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";";
if($result_betr=$db->db_query($qry_betr))
{
if($row_betr=$db->db_fetch_object($result_betr))
{
$htmlstr.="<a href='mailto:$row_betr->mitarbeiter_uid@".DOMAIN."?subject=Betreuung%20".$row->prjbez."%20von%20".$row->vorname."%20".$row->nachname."'><img src='../../../skin/images/email.png' alt='email' title='".$p->t('abgabetool/emailAnBetreuer')."'></a>";
}
else
{
$htmlstr.="UID unknown!";
}
}
$htmlstr .= " </td>";
$htmlstr .= " <td>".$htmlstr1." </td>\n";
$htmlstr .= " <td>".$db->convert_html_chars($row->prjbez)."</td>\n";
$htmlstr .= " <td>".$db->convert_html_chars($row->titel)."</td>\n";
// $htmlstr .= " <td>".$db->convert_html_chars($row->betreuerart_kurzbz)."</td>\n";
$htmlstr .= " </tr>\n";
$i++;
}
$htmlstr .= "</tbody></table>\n";
}
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Abgabesystem_Studentensicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<script language="JavaScript" type="text/javascript">
$(document).ready(function()
{
$("#t1").tablesorter(
{
sortList: [[4,0]],
widgets: ["zebra"]
});
});
</script>
</head>
<body>';
echo '<h1><div style="float:left">'.$p->t('abgabetool/ueberschrift');
if(trim($uid)!='')
echo " ($uid $vorname $nachname)</div> <div style='text-align:right'><a href='".$p->t('dms_link/abgabetoolStudentHandbuch')."' target='_blank'><img src='../../../skin/images/information.png' alt='Anleitung' title='Anleitung Abgabetool' border=0>&nbsp;".$p->t('global/handbuch')."</a></div>";
echo '</h1>';
echo $htmlstr;
echo '</body>
</html>';
?>
<?php
/* Copyright (C) 2009 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger < christian.paminger@technikum-wien.at >
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
*/
require_once('../../../config/cis.config.inc.php');
require_once('../../../include/functions.inc.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/person.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/student.class.php');
require_once('../../../include/studiengang.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/phrasen.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
if (!$db = new basis_db())
die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung'));
$getuid=get_uid();
$uid=$getuid;
if(isset($_GET['uid']))
{
//Studentenansicht
$uid = $_GET['uid'];
//Rechte Pruefen
$allowed=false;
$student = new student();
if(!$student->load($uid))
die($p->t('global/fehlerBeimErmittelnDerUID'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
//Berechtigung ueber das Berechtigungssystem
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($getuid);
if($rechte->isBerechtigt('lehre/abgabetool',$stg_obj->oe_kurzbz,'s'))
$allowed=true;
//oder Lektor mit Betreuung dieses Studenten
$qry = "SELECT 1
FROM
lehre.tbl_projektarbeit
JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id)
WHERE
tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND
vw_benutzer.uid=".$db->db_add_param($getuid).";";
if($result = $db->db_query($qry))
{
if($db->db_num_rows($result)>0)
{
$allowed=true;
}
}
if(!$allowed)
{
die($p->t('abgabetool/keineBerechtigungStudentenansicht'));
}
}
$htmlstr = '';
$htmlstr1 = '';
$vorname='';
$nachname='';
$zweitbetreuer = '';
$sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname,
(SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname,
(SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre,
(SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost,
(SELECT person_id FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
(SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
tbl_projektbetreuer.person_id AS betreuer_person_id,
tbl_projekttyp.bezeichnung AS prjbez, *,
lehre.tbl_projektbetreuer.note as note,
public.tbl_benutzer.aktiv as aktiv,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt
FROM lehre.tbl_projektarbeit
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
LEFT JOIN public.tbl_benutzer ON(uid=student_uid)
LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id)
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter')
AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)."
ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102';
if(!$erg=$db->db_query($sql_query))
{
$errormsg=$p->t('global/fehlerBeimLesenAusDatenbank');
}
else
{
$htmlstr .= "<form name='formular'><input type='hidden' name='check' value=''></form><table id='t1' class='tablesorter'>\n";
$htmlstr .= "<thead><tr>\n";
$htmlstr .= "
<th>".$p->t('abgabetool/details')."</th>
<th>".$p->t('lvplan/sem')."</th>
<th>".$p->t('lvplan/stg')."</th>
<th>".$p->t('global/mail')."</th>
<th>".$p->t('abgabetool/betreuer')."</th>
<th>".$p->t('abgabetool/typ')."</th>
<th>".$p->t('abgabetool/titel')."</th>
<!--<th>".$p->t('abgabetool/betreuerart')."</th>-->";
$htmlstr .= "</tr></thead><tbody>\n";
$i = 0;
while($row=$db->db_fetch_object($erg))
{
$htmlstr1 = '';
$zweitbetreuer_obj = new person();
if ($zweitbetreuer_obj->load($row->zweitbetreuer_person_id))
{
$zweitbetreuer = ', <b>'.$db->convert_html_chars($row->zweitbetreuer_betreuerart_kurzbz).'</b>: '.$zweitbetreuer_obj->titelpre.' '.$zweitbetreuer_obj->vorname.' '.$zweitbetreuer_obj->nachname.' '.$zweitbetreuer_obj->titelpost;
}
$htmlstr1 = '<b>'.$db->convert_html_chars($row->betreuerart_kurzbz).'</b>: ';
$vorname=$row->vorname;
$nachname=$row->nachname;
$uid=$row->uid;
($row->btitelpre!=''?$htmlstr1 .= $row->btitelpre.' ':$htmlstr1 .= '');
$htmlstr1 .= $row->bvorname.' '.$row->bnachname;
($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= '');
$htmlstr1 .= $zweitbetreuer;
$htmlstr .= " <tr>\n"; //class='liste".($i%2)."'
if (is_null($row->note) && $row->aktiv === 't')
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt))
{
$htmlstr .= "<td>";
if (!is_null($row->babgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "/";
if (!is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
$htmlstr .= "</td>";
} else
{
$htmlstr .= "<td></td>";
}
$htmlstr .= " <td>".$row->studiensemester_kurzbz."</td>\n";
$htmlstr .= " <td>".strtoupper($row->typ.$row->kurzbz)."</td>\n";
$htmlstr .= " <td align= center>";
$qry_betr="SELECT mitarbeiter_uid FROM public.tbl_person
JOIN public.tbl_benutzer USING(person_id)
JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
WHERE person_id=".$db->db_add_param($row->betreuer_person_id, FHC_INTEGER).";";
if($result_betr=$db->db_query($qry_betr))
{
if($row_betr=$db->db_fetch_object($result_betr))
{
$htmlstr.="<a href='mailto:$row_betr->mitarbeiter_uid@".DOMAIN."?subject=Betreuung%20".$row->prjbez."%20von%20".$row->vorname."%20".$row->nachname."'><img src='../../../skin/images/email.png' alt='email' title='".$p->t('abgabetool/emailAnBetreuer')."'></a>";
}
else
{
$htmlstr.="UID unknown!";
}
}
$htmlstr .= " </td>";
$htmlstr .= " <td>".$htmlstr1." </td>\n";
$htmlstr .= " <td>".$db->convert_html_chars($row->prjbez)."</td>\n";
$htmlstr .= " <td>".$db->convert_html_chars($row->titel)."</td>\n";
// $htmlstr .= " <td>".$db->convert_html_chars($row->betreuerart_kurzbz)."</td>\n";
$htmlstr .= " </tr>\n";
$i++;
}
$htmlstr .= "</tbody></table>\n";
}
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Abgabesystem_Studentensicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<script language="JavaScript" type="text/javascript">
$(document).ready(function()
{
$("#t1").tablesorter(
{
sortList: [[4,0]],
widgets: ["zebra"]
});
});
</script>
</head>
<body>';
echo '<h1><div style="float:left">'.$p->t('abgabetool/ueberschrift');
if(trim($uid)!='')
echo " ($uid $vorname $nachname)</div> <div style='text-align:right'><a href='".$p->t('dms_link/abgabetoolStudentHandbuch')."' target='_blank'><img src='../../../skin/images/information.png' alt='Anleitung' title='Anleitung Abgabetool' border=0>&nbsp;".$p->t('global/handbuch')."</a></div>";
echo '</h1>';
echo $htmlstr;
echo '</body>
</html>';
?>
+4 -3
View File
@@ -166,13 +166,14 @@ $qry = 'SELECT
tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe,
(SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status,
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang
FROM
campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid)
JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid)
LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
LEFT JOIN lehre.tbl_note USING (note)
LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz)
WHERE
@@ -213,8 +214,8 @@ if($result = $db->db_query($qry))
if($row->bisio_id!='' && $row->status!='Incoming' && ($row->bis > $stsemdatumvon || $row->bis=='') && $row->von < $stsemdatumbis) //Outgoing
$zusatz.='(o)(ab '.$datum->formatDatum($row->von,'d.m.Y').')';
if($row->note==6) //angerechnet
$zusatz.='(ar)';
if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
$zusatz.= '('. $row->anmerkung. ')';
if($row->mitarbeiter_uid!='') //mitarbeiter
$zusatz.='(ma)';
+214 -200
View File
@@ -33,7 +33,7 @@ $rechte->getBerechtigungen($user);
if (! $rechte->isberechtigt('basis/dms', null, 's', null))
die($rechte->errormsg);
?>
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//DE"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
@@ -160,6 +160,17 @@ if (! $rechte->isberechtigt('basis/dms', null, 's', null))
beschreibungstext = beschreibungstext.replace(/Ze1l3numxbr/g, "\r\n");
document.getElementById("beschreibung-textarea").value = beschreibungstext;
}
function updateSchlagworte(schlagworte)
{
document.getElementById("schlagworte-textarea").value = schlagworte;
}
function updateCisSuche(cisSuche)
{
if (cisSuche == true)
document.getElementById("cis_suche_checkbox").checked = true;
else
document.getElementById("cis_suche_checkbox").checked = false;
}
var __js_page_array = new Array();
function js_toggle_container(conid)
@@ -216,7 +227,7 @@ if (! $rechte->isberechtigt('basis/dms', null, 's', null))
}
</script>
</head>
<body>
<body>
<?php
$kategorie_kurzbz = isset($_REQUEST['kategorie_kurzbz']) ? $_REQUEST['kategorie_kurzbz'] : '';
@@ -542,14 +553,14 @@ elseif ($chkatID != '')
else
{
// Suche anzeigen
echo '<div align="left"><h1>Dokument Auswählen</h1></div><div align="right"></div>
<form action="'.$_SERVER['PHP_SELF'].'?searching=true&searchstring='.$searchstring.'" method="POST">
<input type="text" name="searchstring" value="'.$searchstring.'" placeholder="#123 oder Text">
<input type="submit" class="buttondesign" value="Suchen">
echo '<div align="left"><h1>Dokument Auswählen</h1></div><div align="right"></div>
<form action="'.$_SERVER['PHP_SELF'].'?searching=true&searchstring='.$searchstring.'" method="POST">
<input type="text" name="searchstring" value="'.$searchstring.'" placeholder="#123 oder Text">
<input type="submit" class="buttondesign" value="Suchen">
</form>';
echo ' <table cellspacing=0>
<tr>
echo ' <table cellspacing=0>
<tr>
<td valign="top" nowrap style="border-right: 1px solid lightblue; border-top: 1px solid lightblue; padding-right:5px">';
// Link zu Admin-Oberfläche
@@ -564,31 +575,31 @@ else
echo '<ul>';
drawKategorieMenue($dms->result);
echo '</ul>';
echo '<script>
$(document).ready(function()
{
OpenTreeToKategorie("'.$kategorie_kurzbz.'");
});
//Klappt den Kategoriebaum auf, damit die ausgewaehlte Kategorie sichtbar ist
function OpenTreeToKategorie(kategorie)
{
elem = document.getElementById(kategorie);
if(elem.nodeName=="UL")
elem.style.display="block";
while(true)
{
if(!elem.parentNode)
break;
else
elem = elem.parentNode;
if(elem.nodeName=="UL" && elem.className=="tabcontent")
elem.style.display="block";
}
}
echo '<script>
$(document).ready(function()
{
OpenTreeToKategorie("'.$kategorie_kurzbz.'");
});
//Klappt den Kategoriebaum auf, damit die ausgewaehlte Kategorie sichtbar ist
function OpenTreeToKategorie(kategorie)
{
elem = document.getElementById(kategorie);
if(elem.nodeName=="UL")
elem.style.display="block";
while(true)
{
if(!elem.parentNode)
break;
else
elem = elem.parentNode;
if(elem.nodeName=="UL" && elem.className=="tabcontent")
elem.style.display="block";
}
}
</script>';
echo '</td>
echo '</td>
<td valign="top" style="border-top: 1px solid lightblue;">';
// Dokumente der Ausgewaehlten Kategorie laden und Anzeigen
$dms = new dms();
@@ -714,7 +725,7 @@ else
echo '&dpp='.$_GET['dpp'];
}
echo '&searching=true&searchstring='.$searchstring.'" method="POST" style="float:left"><input type="submit" class="buttondesign" name="100weiter" value="100 weiter" style="margin-left:2px"/><input type="hidden" name="searchstring" id="searchstring" value="'.$searchstring.'" /></form>';
echo '<form action="'.$_SERVER['PHP_SELF'].'?searching=true&searchstring='.$searchstring.'&page='.$page.' method="POST" style="float:right">
echo '<form action="'.$_SERVER['PHP_SELF'].'?searching=true&searchstring='.$searchstring.'&page='.$page.' method="POST" style="float:right">
<input type="hidden" name="page" id="page" value="';
if ($page == 0 || $page == '')
{
@@ -724,9 +735,9 @@ else
{
echo $page;
}
echo '">
<input type="hidden" name="searchstring" id="searchstring" value="'.$searchstring.'" />
<input type="hidden" name="searching" id="searchstring" value="'.$searching.'" />
echo '">
<input type="hidden" name="searchstring" id="searchstring" value="'.$searchstring.'" />
<input type="hidden" name="searching" id="searchstring" value="'.$searching.'" />
<select name="dpp" onchange="this.form.submit();" style="margin-left:20px;">';
if (isset($_GET['dpp']))
{
@@ -765,14 +776,14 @@ else
}
else
{
echo ' <option>10</option><option selected>20</option><option>30</option>
<option>40</option><option>50</option><option>60</option>
<option>70</option><option>80</option><option>90</option>
<option>100</option><option>150</option><option>200</option>
echo ' <option>10</option><option selected>20</option><option>30</option>
<option>40</option><option>50</option><option>60</option>
<option>70</option><option>80</option><option>90</option>
<option>100</option><option>150</option><option>200</option>
<option>500</option><option>1000</option><option>2000</option>';
}
echo '
</select> Elemente pro Seite&nbsp;
echo '
</select> Elemente pro Seite&nbsp;
</form>';
}
else
@@ -898,7 +909,7 @@ else
echo '&dpp='.$_GET['dpp'];
}
echo '" method="POST" style="float:left"><input type="submit" class="buttondesign" name="100weiter" value="100 weiter" style="margin-left:2px"/></form>';
echo '<form action="'.$_SERVER['PHP_SELF'].'?kategorie_kurzbz='.$kategorie_kurzbz.'&page='.$page.' method="POST" style="float:right">
echo '<form action="'.$_SERVER['PHP_SELF'].'?kategorie_kurzbz='.$kategorie_kurzbz.'&page='.$page.' method="POST" style="float:right">
<input type="hidden" name="kategorie_kurzbz" id="kategorie_kurzbz" value="'.$kategorie_kurzbz.'" /><input type="hidden" name="page" id="page" value="';
if ($page == 0 || $page == '')
{
@@ -908,7 +919,7 @@ else
{
echo $page;
}
echo '">
echo '">
<select name="dpp" onchange="this.form.submit();" style="margin-left:20px;">';
if (isset($_GET['dpp']))
{
@@ -947,14 +958,14 @@ else
}
else
{
echo ' <option>10</option><option selected>20</option><option>30</option>
<option>40</option><option>50</option><option>60</option>
<option>70</option><option>80</option><option>90</option>
<option>100</option><option>150</option><option>200</option>
echo ' <option>10</option><option selected>20</option><option>30</option>
<option>40</option><option>50</option><option>60</option>
<option>70</option><option>80</option><option>90</option>
<option>100</option><option>150</option><option>200</option>
<option>500</option><option>1000</option><option>2000</option>';
}
echo '
</select> Elemente pro Seite&nbsp;
echo '
</select> Elemente pro Seite&nbsp;
</form>';
}
else
@@ -965,21 +976,21 @@ else
}
// drawFilesThumb($dms->result);
echo '
</td>
</tr>
echo '
</td>
</tr>
</table>';
if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'sui'))
{
echo '
<br>
<a href="#Upload" onclick="return upload()">Neue Datei hochladen</a>
<br>
<br><br>
<div id="divupload">
<hr>
echo '
<br>
<a href="#Upload" onclick="return upload()">Neue Datei hochladen</a>
<br>
<br><br>
<div id="divupload">
<hr>
<span id="ueberschrift"></span>';
if (isset($_REQUEST['searching']) && $_REQUEST['searching'] == 'true')
{
@@ -989,13 +1000,13 @@ else
{
echo '<form action="'.$_SERVER['PHP_SELF'].'?kategorie_kurzbz='.$kategorie_kurzbz.'&page='.$page.'&dpp='.$dpp.'" method="POST" enctype="multipart/form-data">';
}
echo '
<input type="hidden" name="kategorie_kurzbz" id="kategorie_kurzbz" value="'.$kategorie_kurzbz.'">
<input type="hidden" name="dms_id" id="dms_id" value="">
<table>
<tr>
<td>Beschreibung</td>
<td><textarea name="beschreibung" id="beschreibung-textarea" rows="1" cols="80" style="font-size: small;"></textarea></td>
echo '
<input type="hidden" name="kategorie_kurzbz" id="kategorie_kurzbz" value="'.$kategorie_kurzbz.'">
<input type="hidden" name="dms_id" id="dms_id" value="">
<table>
<tr>
<td>Beschreibung</td>
<td><textarea name="beschreibung" id="beschreibung-textarea" rows="1" cols="80" style="font-size: small;"></textarea></td>
</tr>
<tr>
<td>Schlagworte<br/>(Semikolon getrennt)</td>
@@ -1003,17 +1014,17 @@ else
</tr>
<tr>
<td>CIS-Suche</td>
<td><input type="checkbox" name="cis_suche"></td>
</tr>
<tr>
<td></td>
<td><input type="file" name="userfile"></td>
</tr>
</table>
<input type="hidden" name="projekt_kurzbz" value="'.$projekt_kurzbz.'">
<input type="hidden" name="projektphase_id" value="'.$projektphase_id.'">
<input type="submit" class="buttondesign" name="fileupload" value="Upload">
</form>
<td><input type="checkbox" id="cis_suche_checkbox" name="cis_suche"></td>
</tr>
<tr>
<td></td>
<td><input type="file" name="userfile"></td>
</tr>
</table>
<input type="hidden" name="projekt_kurzbz" value="'.$projekt_kurzbz.'">
<input type="hidden" name="projektphase_id" value="'.$projektphase_id.'">
<input type="submit" class="buttondesign" name="fileupload" value="Upload">
</form>
<br>';
$files = scandir(IMPORT_PATH);
$files_count = count($files) - 2; // Minus zwei wegen "." und ".."
@@ -1023,9 +1034,9 @@ else
}
if ($openupload)
{
echo '<script>
$(document).ready(function()
{
echo '<script>
$(document).ready(function()
{
';
if ($newVersionID != '')
{
@@ -1036,8 +1047,8 @@ else
else
echo 'upload();';
echo '
});
echo '
});
</script>';
}
}
@@ -1057,56 +1068,56 @@ function drawAllVersions($id)
$dms = new dms();
$dms->getAllVersions($id);
echo '<script>
$(document).ready(function()
{
$("#t3").tablesorter(
{
sortList: [[0,1]], headers: {6:{sorter:false}},
widgets: ["zebra"],
});
});
</script>
<table style="width:70%" class="tablesorter" id="t3">
<thead>
<tr align="center">
<th>Version</th>
<th>Name</th>
echo '<script>
$(document).ready(function()
{
$("#t3").tablesorter(
{
sortList: [[0,1]], headers: {6:{sorter:false}},
widgets: ["zebra"],
});
});
</script>
<table style="width:70%" class="tablesorter" id="t3">
<thead>
<tr align="center">
<th>Version</th>
<th>Name</th>
<th>Beschreibung</th>
<th>Schlagworte</th>
<th>CIS-Suche</th>
<th>CIS-Suche</th>
<th>Kategorie</th>
<th>Filename intern</th>
<th>Datum</th>
<th>User</th>
</tr>
<th>Filename intern</th>
<th>Datum</th>
<th>User</th>
</tr>
</thead><tbody>';
foreach ($dms->result as $dms_help)
{
echo '<tr>
<td style="padding: 1px; vertical-align:middle" align="center">'.$dms_help->version.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->name.'</td>
echo '<tr>
<td style="padding: 1px; vertical-align:middle" align="center">'.$dms_help->version.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->name.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->beschreibung.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->schlagworte.'</td>
<td style="padding: 1px; vertical-align:middle">'.($dms_help->cis_suche == 'true'?'Ja':'Nein').'</td>
<td style="padding: 1px; vertical-align:middle">'.($dms_help->cis_suche == 'true'?'Ja':'Nein').'</td>
<td style="padding: 1px; vertical-align:middle" align="center">'.$dms_help->kategorie_kurzbz.'</td>
<td style="padding: 1px; vertical-align:middle" align="center">'.$dms_help->filename.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->insertamum.'</td>
<td style="padding: 1px; vertical-align:middle;">'.$dms_help->insertvon.'</td>
<td style="padding: 1px; vertical-align:middle;">
<ul class="sf-menu">
<li><a style="font-size:small">Erweitert</a>
<ul>
<td style="padding: 1px; vertical-align:middle" align="center">'.$dms_help->filename.'</td>
<td style="padding: 1px; vertical-align:middle">'.$dms_help->insertamum.'</td>
<td style="padding: 1px; vertical-align:middle;">'.$dms_help->insertvon.'</td>
<td style="padding: 1px; vertical-align:middle;">
<ul class="sf-menu">
<li><a style="font-size:small">Erweitert</a>
<ul>
<li><a href="dms.php?id='.$dms_help->dms_id.'&version='.$dms_help->version.'" style="font-size:small" target="_blank">Herunterladen</a></li>';
if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'su'))
echo '<li><a href="'.$_SERVER['PHP_SELF'].'?renameid='.$dms_help->dms_id.'&kategorie_kurzbz='.$dms_help->kategorie_kurzbz.'&dms_id='.$dms_help->dms_id.'&version='.$dms_help->version.'" style="font-size:small">Datei umbenennen</a></li>';
if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'suid'))
echo '<li><a href="'.$_SERVER['PHP_SELF'].'?kategorie_kurzbz='.$dms_help->kategorie_kurzbz.'&versionid='.$dms_help->dms_id.'&dms_id='.$dms_help->dms_id.'&version='.$dms_help->version.'&delete" style="font-size:small">Löschen</a></li>';
echo '</ul>
</li>
</ul>
</td>
echo '</ul>
</li>
</ul>
</td>
</tr>';
}
echo '</tbody></table>';
@@ -1121,41 +1132,41 @@ function drawFilesFromImport()
if ($handle = opendir(IMPORT_PATH))
{
echo '<script>
$(document).ready(function()
{
$("#t3").tablesorter(
{
sortList: [[0,0]], headers: {1:{sorter:false}},
widgets: ["zebra"]
});
});
echo '<script>
$(document).ready(function()
{
$("#t3").tablesorter(
{
sortList: [[0,0]], headers: {1:{sorter:false}},
widgets: ["zebra"]
});
});
</script>';
echo ' <h3>Files im Import Ordner</h3>
<table class="tablesorter" id="t3" style="width: auto"> <form action ="'.$_SERVER['PHP_SELF'].'" method="POST" name="import" >
echo ' <h3>Files im Import Ordner</h3>
<table class="tablesorter" id="t3" style="width: auto"> <form action ="'.$_SERVER['PHP_SELF'].'" method="POST" name="import" >
<thead><th>File</th><th></th></thead><tbody>';
while (false !== ($file = readdir($handle)))
{
if ($file != '.' && $file != '..')
{
echo '
<tr>
<td>
<span> '.$file.'</span>
</td>
<td>
<a onclick="window.location=\'#divupload\'; document.import.importFile.value=\''.$file.'\';document.import.submit();" style="font-size:small">Upload</a>
</td>
echo '
<tr>
<td>
<span> '.$file.'</span>
</td>
<td>
<a onclick="window.location=\'#divupload\'; document.import.importFile.value=\''.$file.'\';document.import.submit();" style="font-size:small">Upload</a>
</td>
</tr>';
}
}
echo '
<input type="hidden" name="dms_id_import" id="dms_id_import" value="">
<input type="hidden" name="importFile" value="">
<input type="hidden" name="kategorie_kurzbz" id="kategorie_kurzbz" value="'.$kategorie_kurzbz.'">
<input type="hidden" name="projekt_kurzbz" value="'.$projekt_kurzbz.'">
<input type="hidden" name="projektphase_id" value="'.$projektphase_id.'">
echo '
<input type="hidden" name="dms_id_import" id="dms_id_import" value="">
<input type="hidden" name="importFile" value="">
<input type="hidden" name="kategorie_kurzbz" id="kategorie_kurzbz" value="'.$kategorie_kurzbz.'">
<input type="hidden" name="projekt_kurzbz" value="'.$projekt_kurzbz.'">
<input type="hidden" name="projektphase_id" value="'.$projektphase_id.'">
</form></tbody></table>';
closedir($handle);
}
@@ -1247,44 +1258,44 @@ function drawFilesList($rows)
if (count($rows) > 0)
{
echo '
<script>
$(document).ready(function()
{
$("#t2").tablesorter(
echo '
<script>
$(document).ready(function()
{
$("#t2").tablesorter(
{';
if ($suche == true)
echo 'sortList: [[4,0],[1,1]], headers: {3:{sorter:false}},';
else
echo 'sortList: [[0,0]], headers: {2:{sorter:false}},';
echo '
widgets: ["zebra"]
});
});
</script>
echo '
widgets: ["zebra"]
});
});
</script>
';
}
echo '
<table class="tablesorter" id="t2">
<thead>
<tr>
<th>Titel</th>
echo '
<table class="tablesorter" id="t2">
<thead>
<tr>
<th>Titel</th>
<th title="Version">V</th>';
if ($suche == true)
{
echo '<th>Kategorie</th>';
}
echo '
<th>&nbsp;</th>
<th>ID</th>
echo '
<th>&nbsp;</th>
<th>ID</th>
<th>Beschreibung</th>
<th>Schlagworte</th>
<th>CIS-Suche</th>
</tr>
</thead>
<tbody>
<th>CIS-Suche</th>
</tr>
</thead>
<tbody>
';
$i = 0;
foreach ($rows as $row)
@@ -1295,8 +1306,8 @@ function drawFilesList($rows)
else
$i++;
echo '
<tr>
echo '
<tr>
<td style="padding: 1px;">';
if (array_key_exists($row->mimetype, $mimetypes))
echo '<img title="'.$row->name.'" src="../skin/images/'.$mimetypes[$row->mimetype].'" style="height: 15px">';
@@ -1312,9 +1323,9 @@ function drawFilesList($rows)
$newerVersionAlert = 'alert(\'Achtung!! Es gibt eine neuere Version dieses Dokuments. Es wird die aktuellste eingefügt.\');';
}
echo '
<a href="id://'.$row->dms_id.'/Auswahl" onclick="'.$newerVersionAlert.' FileBrowserDialog.mySubmit('.$row->dms_id.'); return false;" style="font-size: small" title="'.$row->beschreibung.'">
'.$newVersion.' '.$row->name.'</a>
echo '
<a href="id://'.$row->dms_id.'/Auswahl" onclick="'.$newerVersionAlert.' FileBrowserDialog.mySubmit('.$row->dms_id.'); return false;" style="font-size: small" title="'.$row->beschreibung.'">
'.$newVersion.' '.$row->name.'</a>
</td>';
$datum = new datum();
@@ -1335,10 +1346,10 @@ function drawFilesList($rows)
echo '<td style="padding: 1px;">';
// Upload einer neuen Version
echo '<ul class="sf-menu">
<li><a href="#" style="font-size:small">Erweitert</a>
<ul>
<li><a href="id://'.$row->dms_id.'/Auswahl" onclick="'.$newerVersionAlert.' FileBrowserDialog.mySubmit('.$row->dms_id.');" style="font-size:small">Auswählen</a></li>
echo '<ul class="sf-menu">
<li><a href="#" style="font-size:small">Erweitert</a>
<ul>
<li><a href="id://'.$row->dms_id.'/Auswahl" onclick="'.$newerVersionAlert.' FileBrowserDialog.mySubmit('.$row->dms_id.');" style="font-size:small">Auswählen</a></li>
<li><a href="dms.php?id='.$row->dms_id.'&version='.$row->version.'" style="font-size:small" target="_blank">Herunterladen</a></li>';
if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'sui'))
{
@@ -1348,7 +1359,10 @@ function drawFilesList($rows)
$beschreibungstext = str_replace('"', "D4n7ührung", $beschreibungstext);
$beschreibungstext = str_replace("\\", "6Sl4sh", $beschreibungstext);
$beschreibungstext = str_replace("\r\n", "Ze1l3numxbr", $beschreibungstext);
echo $beschreibungstext.'\'); return upload(\''.$row->dms_id.'\',\''.$row->name.'\');" style="font-size:small">Neue Version hochladen</a></li>';
echo $beschreibungstext.'\');
updateSchlagworte(\''.$row->schlagworte.'\');
updateCisSuche(\''.$row->cis_suche.'\');
return upload(\''.$row->dms_id.'\',\''.$row->name.'\');" style="font-size:small">Neue Version hochladen</a></li>';
}
if (isset($_REQUEST['searching']) && $_REQUEST['searching'] == 'true')
{
@@ -1490,9 +1504,9 @@ function drawFilesList($rows)
if ($rechte->isberechtigt('basis/dms', $kategorie->kategorie_oe_kurzbz, 'suid'))
echo '<li><a href="'.$_SERVER['PHP_SELF'].'?kategorie_kurzbz='.$row->kategorie_kurzbz.'&dms_id='.$row->dms_id.'&delete" onclick="return conf_del()" style="font-size:small" >Löschen</a></li>';
}
echo '
</ul>
</li>
echo '
</ul>
</li>
</ul>';
echo '</td>';
echo '<td style="padding: 1px;">'.$row->dms_id.'</td>';
@@ -1540,15 +1554,15 @@ function drawRenameForm($dms_id, $version, $page = NULL, $dpp = NULL, $searching
echo '&dpp='.$dpp;
echo '" method="POST">';
}
echo '
<table>
<tr>
<td>Dateiname:</td>
<td><input type="text" size="40" name="dateiname" value="'.$dms->convert_html_chars($dms->name).'"></td>
</tr>
<tr>
<td>Beschreibung:</td>
<td><textarea name="beschreibung" rows="2" cols="80" style="font-size: small;">'.$dms->convert_html_chars($dms->beschreibung).'</textarea></td>
echo '
<table>
<tr>
<td>Dateiname:</td>
<td><input type="text" size="40" name="dateiname" value="'.$dms->convert_html_chars($dms->name).'"></td>
</tr>
<tr>
<td>Beschreibung:</td>
<td><textarea name="beschreibung" rows="2" cols="80" style="font-size: small;">'.$dms->convert_html_chars($dms->beschreibung).'</textarea></td>
</tr>
<tr>
<td>Schlagworte<br/>(Semikolon getrennt):</td>
@@ -1557,12 +1571,12 @@ function drawRenameForm($dms_id, $version, $page = NULL, $dpp = NULL, $searching
<tr>
<td>CIS-Suche:</td>
<td><input type="checkbox" name="cis_suche" '.($dms->cis_suche == 'true'?'checked="checked"':'').'></td>
</tr>
</table>
<input type="hidden" name="action" value="rename">
<input type="hidden" name="dms_id" value="'.$dms_id.'">
</tr>
</table>
<input type="hidden" name="action" value="rename">
<input type="hidden" name="dms_id" value="'.$dms_id.'">
<input type="hidden" name="version" value="'.$version.'">';
echo '<input type="submit" class="buttondesign" name="submit" value="Umbenennen">
echo '<input type="submit" class="buttondesign" name="submit" value="Umbenennen">
</form>';
}
else
@@ -1603,8 +1617,8 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL)
echo '&dpp='.$dpp;
echo '" method="POST">';
}
echo '
<select name="kategoriez">
echo '
<select name="kategoriez">
<option value="auswahl">-- Bitte Auswählen --</option>';
foreach ($allKategorien->result as $kategorienResult)
@@ -1619,8 +1633,8 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL)
echo '<option '.$selected.' value="'.$kategorienResult->kategorie_kurzbz.'">'.$kategorienResult->bezeichnung.' ['.$kategorienResult->kategorie_kurzbz.']</option>';
}
echo '</select>
<input type="hidden" name="action" value="chkat">
echo '</select>
<input type="hidden" name="action" value="chkat">
<input type="hidden" name="dms_id" value="'.$dms_id.'">';
if (! is_null($page))
echo '<input type="hidden" name="page" value="'.$page.'">';
@@ -1629,6 +1643,6 @@ function drawChangeKategorie($dms_id, $page = NULL, $dpp = NULL)
echo '<input type="submit" class="buttondesign" name="chkat_save" value="Speichern"></form>';
}
?>
</body>
</html>
?>
</body>
</html>
+5 -1
View File
@@ -270,7 +270,7 @@ function FunktionDelete()
// ****
// * Speichert die Daten
// ****
function FunktionDetailSpeichern()
function FunktionDetailSpeichern(kopie)
{
var funktion_kurzbz = document.getElementById('funktion-menulist-funktion').value;
var oe_kurzbz = document.getElementById('funktion-menulist-oe_kurzbz').value;
@@ -283,6 +283,9 @@ function FunktionDetailSpeichern()
var bezeichnung = document.getElementById('funktion-textbox-bezeichnung').value;
var wochenstunden = document.getElementById('funktion-textbox-wochenstunden').value;
if(kopie == true)
var neu = true;
//Bei Mitarbeitern wird kein Studiengang mitgeschickt
if(window.parent.document.getElementById('main-content-tabs').selectedItem==window.parent.document.getElementById('tab-mitarbeiter'))
studiengang_kz_berecht='';
@@ -412,6 +415,7 @@ function FunktionDetailDisableFields(val)
document.getElementById('funktion-menulist-semester').disabled=val;
document.getElementById('funktion-menulist-funktion').disabled=val;
document.getElementById('funktion-button-speichern').disabled=val;
document.getElementById('funktion-button-kopiespeichern').disabled=val;
document.getElementById('funktion-box-datum_von').disabled=val;
document.getElementById('funktion-box-datum_bis').disabled=val;
document.getElementById('funktion-textbox-bezeichnung').disabled=val;
+2 -1
View File
@@ -289,7 +289,8 @@ else
</grid>
<hbox>
<spacer flex="1" />
<button id="funktion-button-speichern" oncommand="FunktionDetailSpeichern()" label="Speichern" disabled="true"/>
<button id="funktion-button-kopiespeichern" oncommand="FunktionDetailSpeichern(true)" label="Als Kopie speichern" disabled="true"/>
<button id="funktion-button-speichern" oncommand="FunktionDetailSpeichern(false)" label="Speichern" disabled="true"/>
</hbox>
</groupbox>
<spacer/>
@@ -402,6 +402,20 @@ if(!$error)
}
}
}
//Pruefen, ob Benutzer inaktiv ist. Wenn ja, eine Warnung ausgeben
$benutzerAktiv = false;
if(!$error)
{
$benutzer = new benutzer($lem->mitarbeiter_uid);
$benutzerAktiv = $benutzer->bnaktiv;
if (!$benutzerAktiv)
{
$return = true;
$warnung = true;
$errormsg = "Achtung: Der/Die Benutzer*in ist inaktiv!\nBitte informieren Sie die Personalbteilung.\n\nDaten wurden gespeichert.\n\n";
}
}
}
if(!$error)
@@ -79,6 +79,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/anrechnung/rdf#lehrveranstaltung_bez_kompatibel"/>
<splitter class="tree-splitter"/>
<treecol id="student-anrechnungen-tree-status" label="Status" flex="2" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/anrechnung/rdf#status" />
<splitter class="tree-splitter"/>
<treecol id="student-anrechnungen-tree-genehmigt_von" label="genehmigt von" flex="2" hidden="false"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/anrechnung/rdf#genehmigt_von" />
@@ -99,6 +103,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#begruendung"/>
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#lehrveranstaltung_id_kompatibel"/>
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#lehrveranstaltung_bez_kompatibel"/>
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#status"/>
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#genehmigt_von"/>
<treecell label="rdf:http://www.technikum-wien.at/anrechnung/rdf#insertamum"/>
</treerow>
+21
View File
@@ -126,6 +126,12 @@ else
echo '
<menu id="'.$id.'" label="'.$label.'">
<menupopup>';
if ($id == 'student-toolbar-student')
echo '<menuitem label="Student" oncommand="StudentUnterbrecherZuStudent()" disabled="false" tooltiptext="Status ändern auf Student"/>';
if ($id == 'interessent-toolbar-zustudent')
echo '<menuitem label="Student" oncommand="InteressentzuStudent()" disabled="false" tooltiptext="Status ändern auf Student"/>';
foreach($gruende[$status_kurzbz] as $row)
{
$commandWithID = str_replace('STATUSGRUNDID',$row['statusgrund_id'],$command);
@@ -204,6 +210,21 @@ else
<menuitem id="student-toolbar-filter-offenebuchungen" label="offene Buchungen" oncommand="StudentKontoFilterStudenten('konto')" disabled="false" tooltiptext="Liste aller Studenten mit offenen Buchungen"/>
<menuitem id="student-toolbar-filter-studiengebuehr" label="nicht gebuchte Studiengebuehr" oncommand="StudentKontoFilterStudenten('studiengebuehr')" disabled="false" tooltiptext="Liste aller Studenten die noch nicht mit Studienbebuehr belastet wurden" />
<menuitem id="student-toolbar-filter-zgvohnedatum" label="ZGV eingetragen ohne Datum" oncommand="StudentKontoFilterStudenten('zgvohnedatum')" disabled="false" tooltiptext="Liste aller Studenten die ZGV eingetragen haben bei denen aber kein ZGV Datum gesetzt ist" />
<menu label="nach Statusgrund">
<menupopup id="student-filter-statusgrund-menu-popup">
<?php
$statusgrund = new statusgrund();
$statusgrund->getAll(true);
foreach($statusgrund->result as $row)
{
?>
<menuitem id="student-toolbar-filter-statusgrund-<?php echo $row->statusgrund_id;?>" label="<?php echo $row->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];?>" oncommand="StudentKontoFilterStudenten('stud-statusgrund-<?php echo $row->statusgrund_id; ?>')" disabled="false" tooltiptext="Liste aller Studenten mit Statusgrund <?php echo $row->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];?>" />
<?php
}
?>
</menupopup>
</menu>
</menupopup>
</toolbarbutton>
<?php
+76 -6
View File
@@ -1034,7 +1034,11 @@ function StudentAuswahl()
StudentGesamtNotenTreeloaded=false;
stsem = getStudiensemester();
var url = '<?php echo APP_ROOT ?>rdf/student.rdf.php?prestudent_id='+prestudent_id+'&studiensemester_kurzbz='+stsem+'&'+gettimestamp();
var url = buildStudentRDFURI({
'prestudent_id': prestudent_id,
'studiensemester_kurzbz': stsem
});
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].
getService(Components.interfaces.nsIRDFService);
@@ -2564,11 +2568,48 @@ function StudentKontoFilter()
kontotree.builder.addListener(StudentKontoTreeListener);
}
// ****
// * Generiert eine student.rdf URI
// ****
function buildStudentRDFURI(queryparams, tree)
{
var baseurl = "<?php echo APP_ROOT; ?>rdf/student.rdf.php";
if ( typeof tree !== "undefined" )
{
var col = tree.columns ? tree.columns["tree-verband-col-orgform"] : "tree-verband-col-orgform";
queryparams.orgform = tree.view.getCellText(tree.currentIndex,col);
}
return _buildURI(baseurl, queryparams);
}
// ****
// * Generiert aus einer BasisURL und einem Dictionary von Parametern eine URI
// ****
function _buildURI(baseurl, queryparams)
{
var str = [];
var url = baseurl;
for (var p in queryparams)
{
if ( queryparams.hasOwnProperty(p) && queryparams[p].length > 0 )
{
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(queryparams[p]));
}
}
var querystring = str.join("&");
if ( querystring.length > 0 )
{
url = url + '?' + querystring + '&' + gettimestamp();
}
return url;
}
// ****
// * Setzt im Studententree einen vordefinierten Filter
// ****
function StudentKontoFilterStudenten(filter)
{
//alert(filter);
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var tree=document.getElementById('tree-verband');
@@ -2591,12 +2632,26 @@ function StudentKontoFilterStudenten(filter)
var gruppe = getTreeCellText(tree, 'gruppe', tree.currentIndex);
var typ = getTreeCellText(tree, 'typ', tree.currentIndex);
var stsem = getTreeCellText(tree, 'stsem', tree.currentIndex);
if(stsem=='')
stsem = getStudiensemester();
if(typ=='')
typ='student';
url = "<?php echo APP_ROOT; ?>rdf/student.rdf.php?studiengang_kz="+stg_kz+"&semester="+sem+"&verband="+ver+"&gruppe="+grp+"&gruppe_kurzbz="+gruppe+"&studiensemester_kurzbz="+stsem+"&typ="+typ+"&filter2="+filter+"&buchungstyp="+buchungstyp+"&"+gettimestamp();
var url = buildStudentRDFURI({
'studiengang_kz': stg_kz,
'semester': sem,
'verband': ver,
'gruppe': grp,
'gruppe_kurzbz': gruppe,
'studiensemester_kurzbz': stsem,
'typ': typ,
'filter2': filter,
'buchungstyp': buchungstyp
}, tree);
console.log(url);
var treeStudent=document.getElementById('student-tree');
try
@@ -2614,6 +2669,7 @@ function StudentKontoFilterStudenten(filter)
treeStudent.database.RemoveDataSource(oldDatasources.getNext());
}
//alert(url);
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
StudentTreeDatasource = rdfService.GetDataSource(url);
StudentTreeDatasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
@@ -2655,7 +2711,18 @@ function StudentKontoFilterBuchungstyp()
stsem = getStudiensemester();
if(typ=='')
typ='student';
url = "<?php echo APP_ROOT; ?>rdf/student.rdf.php?studiengang_kz="+stg_kz+"&semester="+sem+"&verband="+ver+"&gruppe="+grp+"&gruppe_kurzbz="+gruppe+"&studiensemester_kurzbz="+stsem+"&typ="+typ+"&filter2=buchungstyp;"+filter+"&"+gettimestamp();
var url = buildStudentRDFURI({
'studiengang_kz': stg_kz,
'semester': sem,
'verband': ver,
'gruppe': grp,
'gruppe_kurzbz': gruppe,
'studiensemester_kurzbz': stsem,
'typ': typ,
'filter2': 'buchungstyp;' + filter
}, tree);
var treeStudent=document.getElementById('student-tree');
try
@@ -5318,6 +5385,7 @@ function StudentAnrechnungAuswahl()
lehrveranstaltung_id_kompatibel = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#lehrveranstaltung_id_kompatibel" ));
genehmigt_von = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#genehmigt_von" ));
anzahl_notizen = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#anzahl_notizen" ));
status = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#status" ));
// Studiengang ermitteln
var tree = document.getElementById('student-tree');
@@ -5436,8 +5504,10 @@ function StudentSuche()
document.getElementById('tree-verband').view.selection.clearSelection();
//Datasource setzten und Felder deaktivieren
url = "<?php echo APP_ROOT; ?>rdf/student.rdf.php?filter="+encodeURIComponent(filter)+"&"+gettimestamp();
var url = buildStudentRDFURI({
'filter': filter
});
var treeStudent=document.getElementById('student-tree');
try
+159 -155
View File
@@ -1,155 +1,159 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
require_once('../../config/vilesci.config.inc.php');
?>
var StudentRolleStudiensemester_old;
var StudentRolleAusbildungssemester_old;
var StudentRolleStatusgrundDatasource;
// ****
// * Laedt die Rolle
// ****
function StudentRolleInit(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
if(status_kurzbz!='')
{
document.getElementById('student-rolle-grid-row-textbox').hidden=false;
document.getElementById('student-rolle-grid-row-menulist').hidden=true;
StudentRolleStudiensemester_old=studiensemester_kurzbz;
StudentRolleAusbildungssemester_old=ausbildungssemester;
//Daten holen
var url = '<?php echo APP_ROOT ?>rdf/prestudentrolle.rdf.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester+'&'+gettimestamp();
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].
getService(Components.interfaces.nsIRDFService);
var dsource = rdfService.GetDataSourceBlocking(url);
var subject = rdfService.GetResource("http://www.technikum-wien.at/prestudentrolle/" + prestudent_id+"/"+status_kurzbz+"/"+studiensemester_kurzbz+"/"+ausbildungssemester);
var predicateNS = "http://www.technikum-wien.at/prestudentrolle/rdf";
//RDF parsen
var datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#datum" ));
var bestaetigt_datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#bestaetigt_am" ));
var bewerbung_abgeschicktamum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#bewerbung_abgeschicktamum" ));
var orgform_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#orgform_kurzbz" ));
var studienplan_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#studienplan_id" ));
var anmerkung= getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#anmerkung" ));
var statusgrund_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#statusgrund_id" ));
var rt_stufe = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#rt_stufe" ));
var neu = false;
StudentRolleLoadStatusgrund(status_kurzbz, statusgrund_id);
}
else
{
StudentRolleStudiensemester_old='';
StudentRolleAusbildungssemester_old='';
document.getElementById('student-rolle-grid-row-textbox').hidden=true;
document.getElementById('student-rolle-grid-row-menulist').hidden=false;
//Defaultwerte bei Neuem Datensatz
var status_kurzbz = 'Interessent';
var studiensemester_kurzbz=window.opener.getStudiensemester();
var ausbildungssemester='1';
var datum = '<?php echo date('d.m.Y') ?>';
var bestaetigt_datum = '<?php echo date('d.m.Y') ?>';
var bewerbung_abgeschicktamum = '';
var orgform_kurzbz = '';
var studienplan_id = '';
var anmerkung = '';
var statusgrund_id = '';
var rt_stufe = '';
StudentRolleLoadStatusgrund(status_kurzbz);
}
document.getElementById('student-rolle-textbox-prestudent_id').value=prestudent_id;
document.getElementById('student-rolle-textbox-status_kurzbz').value=status_kurzbz;
document.getElementById('student-rolle-menulist-studiensemester').value=studiensemester_kurzbz;
document.getElementById('student-rolle-menulist-ausbildungssemester').value=ausbildungssemester;
document.getElementById('student-rolle-datum-datum').value=datum;
document.getElementById('student-rolle-datum-bestaetigt_datum').value=bestaetigt_datum;
document.getElementById('student-rolle-datum-bewerbung_abgeschicktamum').value=bewerbung_abgeschicktamum;
document.getElementById('student-rolle-menulist-orgform_kurzbz').value=orgform_kurzbz;
MenulistSelectItemOnValue('student-rolle-menulist-studienplan', studienplan_id);
document.getElementById('student-rolle-textbox-anmerkung').value=anmerkung;
MenulistSelectItemOnValue('student-rolle-menulist-statusgrund', statusgrund_id);
MenulistSelectItemOnValue('student-rolle-menulist-stufe', rt_stufe);
}
// ****
// * Speichern der Rolle
// * Hierzu wird eine Funktion vom Aufrufenden Fenster gestartet weil
// * es dann nicht zu Problemen mit den Zugriffen auf die anderen Fkt
// * kommt.
// ****
function StudentRolleSpeichern()
{
if(window.opener.StudentRolleSpeichern(document, StudentRolleStudiensemester_old, StudentRolleAusbildungssemester_old))
window.close();
}
function StudentRolleLoadStatusgrund(status_kurzbz, statusgrund_id)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var menulistgrund = document.getElementById('student-rolle-menulist-statusgrund');
url='<?php echo APP_ROOT;?>rdf/statusgrund.rdf.php?status_kurzbz='+status_kurzbz+'&include_id='+statusgrund_id+'&ts'+gettimestamp();
try
{
StudentRolleStatusgrundDatasource.removeXMLSinkObserver(StudentDetailRolleTreeSinkObserver);
}
catch(e)
{}
//Alte DS entfernen
var oldDatasources = menulistgrund.database.GetDataSources();
while(oldDatasources.hasMoreElements())
{
menulistgrund.database.RemoveDataSource(oldDatasources.getNext());
}
//Refresh damit die entfernten DS auch wirklich entfernt werden
menulistgrund.builder.rebuild();
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
StudentRolleStatusgrundDatasource = rdfService.GetDataSourceBlocking(url);
StudentRolleStatusgrundDatasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
StudentRolleStatusgrundDatasource.QueryInterface(Components.interfaces.nsIRDFXMLSink);
menulistgrund.database.AddDataSource(StudentRolleStatusgrundDatasource);
menulistgrund.builder.rebuild();
}
/**
* Wenn das Dropdown fuer den Status geaendert wird, dann
* werden die Statusgruende zu diesem Status geladen
*/
function StudentRolleChangeStatus()
{
var status = document.getElementById('student-rolle-menulist-status_kurzbz').value;
StudentRolleLoadStatusgrund(status);
}
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
require_once('../../config/vilesci.config.inc.php');
?>
var StudentRolleStudiensemester_old;
var StudentRolleAusbildungssemester_old;
var StudentRolleStatusgrundDatasource;
// ****
// * Laedt die Rolle
// ****
function StudentRolleInit(prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
if(status_kurzbz!='')
{
document.getElementById('student-rolle-grid-row-textbox').hidden=false;
document.getElementById('student-rolle-grid-row-menulist').hidden=true;
StudentRolleStudiensemester_old=studiensemester_kurzbz;
StudentRolleAusbildungssemester_old=ausbildungssemester;
//Daten holen
var url = '<?php echo APP_ROOT ?>rdf/prestudentrolle.rdf.php?prestudent_id='+prestudent_id+'&status_kurzbz='+status_kurzbz+'&studiensemester_kurzbz='+studiensemester_kurzbz+'&ausbildungssemester='+ausbildungssemester+'&'+gettimestamp();
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].
getService(Components.interfaces.nsIRDFService);
var dsource = rdfService.GetDataSourceBlocking(url);
var subject = rdfService.GetResource("http://www.technikum-wien.at/prestudentrolle/" + prestudent_id+"/"+status_kurzbz+"/"+studiensemester_kurzbz+"/"+ausbildungssemester);
var predicateNS = "http://www.technikum-wien.at/prestudentrolle/rdf";
//RDF parsen
var datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#datum" ));
var bestaetigt_datum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#bestaetigt_am" ));
var bewerbung_abgeschicktamum = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#bewerbung_abgeschicktamum" ));
var orgform_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#orgform_kurzbz" ));
var studienplan_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#studienplan_id" ));
var anmerkung= getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#anmerkung" ));
var statusgrund_id = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#statusgrund_id" ));
var rt_stufe = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#rt_stufe" ));
var neu = false;
StudentRolleLoadStatusgrund(status_kurzbz, statusgrund_id);
}
else
{
StudentRolleStudiensemester_old='';
StudentRolleAusbildungssemester_old='';
document.getElementById('student-rolle-grid-row-textbox').hidden=true;
document.getElementById('student-rolle-grid-row-menulist').hidden=false;
//Defaultwerte bei Neuem Datensatz
var status_kurzbz = 'Interessent';
var studiensemester_kurzbz=window.opener.getStudiensemester();
var ausbildungssemester='1';
var datum = '<?php echo date('d.m.Y') ?>';
var bestaetigt_datum = '<?php echo date('d.m.Y') ?>';
var bewerbung_abgeschicktamum = '';
var orgform_kurzbz = '';
var studienplan_id = '';
var anmerkung = '';
var statusgrund_id = '';
var rt_stufe = '';
StudentRolleLoadStatusgrund(status_kurzbz);
}
document.getElementById('student-rolle-textbox-prestudent_id').value=prestudent_id;
document.getElementById('student-rolle-textbox-status_kurzbz').value=status_kurzbz;
document.getElementById('student-rolle-menulist-studiensemester').value=studiensemester_kurzbz;
document.getElementById('student-rolle-menulist-ausbildungssemester').value=ausbildungssemester;
document.getElementById('student-rolle-datum-datum').value=datum;
document.getElementById('student-rolle-datum-bestaetigt_datum').value=bestaetigt_datum;
document.getElementById('student-rolle-datum-bewerbung_abgeschicktamum').value=bewerbung_abgeschicktamum;
document.getElementById('student-rolle-menulist-orgform_kurzbz').value=orgform_kurzbz;
MenulistSelectItemOnValue('student-rolle-menulist-studienplan', studienplan_id);
document.getElementById('student-rolle-textbox-anmerkung').value=anmerkung;
MenulistSelectItemOnValue('student-rolle-menulist-statusgrund', statusgrund_id);
MenulistSelectItemOnValue('student-rolle-menulist-stufe', rt_stufe);
}
// ****
// * Speichern der Rolle
// * Hierzu wird eine Funktion vom Aufrufenden Fenster gestartet weil
// * es dann nicht zu Problemen mit den Zugriffen auf die anderen Fkt
// * kommt.
// ****
function StudentRolleSpeichern()
{
if(window.opener.StudentRolleSpeichern(document, StudentRolleStudiensemester_old, StudentRolleAusbildungssemester_old))
window.close();
}
function StudentRolleLoadStatusgrund(status_kurzbz, statusgrund_id)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var menulistgrund = document.getElementById('student-rolle-menulist-statusgrund');
if (typeof statusgrund_id !== 'undefined')
url='<?php echo APP_ROOT;?>rdf/statusgrund.rdf.php?status_kurzbz='+status_kurzbz+'&include_id='+statusgrund_id+'&ts'+gettimestamp();
else
url='<?php echo APP_ROOT;?>rdf/statusgrund.rdf.php?status_kurzbz='+status_kurzbz+'&ts'+gettimestamp();
try
{
StudentRolleStatusgrundDatasource.removeXMLSinkObserver(StudentDetailRolleTreeSinkObserver);
}
catch(e)
{}
//Alte DS entfernen
var oldDatasources = menulistgrund.database.GetDataSources();
while(oldDatasources.hasMoreElements())
{
menulistgrund.database.RemoveDataSource(oldDatasources.getNext());
}
//Refresh damit die entfernten DS auch wirklich entfernt werden
menulistgrund.builder.rebuild();
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
StudentRolleStatusgrundDatasource = rdfService.GetDataSourceBlocking(url);
StudentRolleStatusgrundDatasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
StudentRolleStatusgrundDatasource.QueryInterface(Components.interfaces.nsIRDFXMLSink);
menulistgrund.database.AddDataSource(StudentRolleStatusgrundDatasource);
menulistgrund.builder.rebuild();
}
/**
* Wenn das Dropdown fuer den Status geaendert wird, dann
* werden die Statusgruende zu diesem Status geladen
*/
function StudentRolleChangeStatus()
{
var status = document.getElementById('student-rolle-menulist-status_kurzbz').value;
StudentRolleLoadStatusgrund(status);
}
+41 -1
View File
@@ -243,7 +243,8 @@ class anrechnung extends basis_db
*/
public function delete($anrechnung_id)
{
$qry = "DELETE FROM lehre.tbl_anrechnung WHERE anrechnung_id = " . $this->db_add_param($anrechnung_id);
$qry = "DELETE FROM lehre.tbl_anrechnung_anrechnungstatus WHERE anrechnung_id = " . $this->db_add_param($anrechnung_id). "; ";
$qry.= "DELETE FROM lehre.tbl_anrechnung WHERE anrechnung_id = " . $this->db_add_param($anrechnung_id);
if ($this->db_query($qry))
{
@@ -362,4 +363,43 @@ class anrechnung extends basis_db
return false;
}
}
public function getLastAnrechnungstatus($anrechnung_id)
{
$sprache = new sprache();
$bezeichnung_mehrsprachig = $sprache->getSprachQuery('bezeichnung_mehrsprachig');
$qry = '
SELECT *, '. $bezeichnung_mehrsprachig. '
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ' . $this->db_add_param($anrechnung_id). '
ORDER BY insertamum DESC
LIMIT 1
';
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
$obj = new stdClass();
$obj->anrechnungstatus_id = $row->anrechnungstatus_id;
$obj->status_kurzbz = $row->status_kurzbz;
$obj->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig', $row);
$this->result[]= $obj;
return true;
}
else
{
$this->errormsg = 'Daten konnten nicht geladen werden';
return false;
}
}
else
{
$this->errormsg = 'Daten konnten nicht geladen werden';
return false;
}
}
}
+9 -4
View File
@@ -509,10 +509,11 @@ class betriebsmittelperson extends basis_db
/**
* Sucht welche Person die uebergebene Kartennummer hat
* @param $nummer Kartennummer
* @param $nummer Kartennummer
* @param boolean $checkRetour Optional. Default true. Checkt, ob die Karte bereits retourniert wurde. Wenn false werden auch bereits retournierte Karten zurückgegeben
* @return true wenn ok, false im Fehlerfall
*/
public function getKartenzuordnung($nummer)
public function getKartenzuordnung($nummer, $checkRetour=true)
{
// fuehrende Nullen bei Kartennummern auch checken
$qry='
@@ -536,8 +537,12 @@ class betriebsmittelperson extends basis_db
OR tbl_betriebsmittel.nummer2='.$this->db_add_param('00000'.$nummer).'
)
AND tbl_betriebsmittel.betriebsmitteltyp=\'Zutrittskarte\'
AND (ausgegebenam<=now() OR ausgegebenam is NULL)
AND (retouram>=now() OR retouram is NULL)';
AND (ausgegebenam<=now() OR ausgegebenam is NULL)';
if ($checkRetour == true)
{
$qry .= ' AND (retouram>=now() OR retouram is NULL)';
}
if($this->db_query($qry))
{
+1 -1
View File
@@ -373,7 +373,7 @@ class coodle extends basis_db
WHERE
(uid =".$this->db_add_param($uid, FHC_STRING, false)."
OR ersteller_uid =".$this->db_add_param($uid, FHC_STRING, false).")
AND endedatum >= CURRENT_DATE - interval '20 days';";
AND endedatum >= CURRENT_DATE - interval '90 days';";
if(!$this->db_query($qry))
{
+28
View File
@@ -16,6 +16,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>,
Manuela Thamer <manuela.thamer@technikum-wien.at>
*/
require_once('basis_db.class.php');
@@ -30,6 +31,7 @@ class statusgrund extends basis_db
public $aktiv = true; // boolean
public $bezeichnung_mehrsprachig; // varchar(255)[]
public $bezeichnung; // text[]
public $statusgrund_kurzbz; //varchar(32)
/**
* Konstruktor - Laedt optional einen Statusgrund
@@ -71,6 +73,7 @@ class statusgrund extends basis_db
$this->aktiv = $this->db_parse_bool($row->aktiv);
$this->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig', $row);
$this->beschreibung = $sprache->parseSprachResult('beschreibung', $row);
$this->statusgrund_kurzbz = $row->statusgrund_kurzbz;
}
else
{
@@ -120,6 +123,7 @@ class statusgrund extends basis_db
$obj->aktiv = $this->db_parse_bool($row->aktiv);
$obj->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig', $row);
$obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row);
$obj->statusgrund_kurzbz = $row->statusgrund_kurzbz;
$this->result[] = $obj;
}
@@ -166,6 +170,7 @@ class statusgrund extends basis_db
$obj->aktiv = $this->db_parse_bool($row->aktiv);
$obj->bezeichnung_mehrsprachig = $sprache->parseSprachResult('bezeichnung_mehrsprachig', $row);
$obj->beschreibung = $sprache->parseSprachResult('beschreibung', $row);
$obj->statusgrund_kurzbz = $row->statusgrund_kurzbz;
$this->result[] = $obj;
}
@@ -179,5 +184,28 @@ class statusgrund extends basis_db
return true;
}
/**
* Laedt das Klassenobjekt anhand der kurzbz
*
* @param string $statusgrund_kurzbz Statusgrund zu dem das Objekt geladen werden soll.
* @return object classobject
*/
public function getByStatusgrundKurzbz($statusgrund_kurzbz)
{
$qry = "
SELECT
*
FROM
public.tbl_status_grund
WHERE
statusgrund_kurzbz ='". $statusgrund_kurzbz. "'
";
$this->db_query($qry);
return
$this->db_fetch_object();
}
}
?>
+15 -1
View File
@@ -465,7 +465,7 @@ function checkZeilenUmbruch()
}
}
// Anerkennung nachgewiesener Kenntnisse (Anrechnung)
// Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer Studenten
if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN)
&& $rechte->isBerechtigt('student/anrechnung_beantragen'))
{
@@ -479,6 +479,20 @@ function checkZeilenUmbruch()
);
}
// Anerkennung nachgewiesener Kenntnisse (Anrechnung) - Anzeige fuer LektorInnen
if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN)
&& $rechte->isBerechtigt('lehre/anrechnung_empfehlen'))
{
$menu[]=array
(
'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse_empfehlen',
'position'=>'128',
'name'=>$p->t('lehre/anrechnungen'),
'icon'=>'../../../skin/images/button_listen.png',
'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/ReviewAnrechnungUebersicht?studiensemester='.urlencode($angezeigtes_stsem)
);
}
//************* Menuepunkte anzeigen ****************
+1
View File
@@ -42,4 +42,5 @@ $this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Noteneingabe deaktiviert';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Anerkennung nachgewiesener Kenntnisse';
$this->phrasen['lehre/anrechnung']='Anrechnung';
$this->phrasen['lehre/anrechnungen']='Anrechnungen';
?>
+1
View File
@@ -42,5 +42,6 @@ $this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Grading disabled';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Crediting for proven knowledge';
$this->phrasen['lehre/anrechnung']='Exemption';
$this->phrasen['lehre/anrechnungen']='Exemptions';
?>
+6
View File
@@ -69,4 +69,10 @@
.btn-mr50
{
margin-right: 50px;
}
.table-fixed
{
table-layout: fixed;
word-wrap: break-word;
}
+7
View File
@@ -0,0 +1,7 @@
.select-w500 {
width: 500px;
}
.pl-15 {
padding-left: 15px !important;
}
+83 -2
View File
@@ -379,6 +379,73 @@ var FHC_AjaxClient = {
this._veilTimeout);
},
/**
* Check if controllerParameters has a FileList of uploaded file(s).
*
* @param controllerParameters
* Example: {
* name1: value,
* name2: value,
* files: $(selector)[0].files --> this is the FileList
* }
* @returns {boolean}
* @private
*/
_hasFileList: function(controllerParameters)
{
// Loop through controllerParameters
for (key in controllerParameters)
{
// When FileList is found ( parameter with uploaded file(s))
if (controllerParameters[key] instanceof FileList)
{
return true;
}
}
/*
return Object.values(controllerParameters)
.some((value) => value instanceof FileList === true);
*/
},
/**
* Returns a FormData object. Useful for passing uploaded files via AJAX.
*
* @param controllerParameters
* @returns {FormData}
* @private
*/
_convertToFormDataObject: function(controllerParameters)
{
// The new FormData instance
const formData = new FormData();
// Loop through controllerParameters
for (key in controllerParameters)
{
var value = controllerParameters[key];
// When FileList is found ( parameter with uploaded file(s))
if (value instanceof FileList)
{
// Loop through uploaded files
//for (let file of value)
//for (var file of value)
for (var filekey in value)
{
var file = value[filekey];
// Append file to FormData object (if more than 1 file, append as array)
formData.append(value.length == 1 ? key : key + '[]', file);
}
}
else
{
// For any other then FileList, just append to FormData object
formData.append(key, value);
}
}
return formData;
},
/**
* Checks call parameters, if they are present and are valid
* It generates and returns all the parameters needed to perform an ajax remote call
@@ -419,8 +486,22 @@ var FHC_AjaxClient = {
// controllerParameters must be an object
if (typeof controllerParameters == "object")
{
// Copy the properties of controllerParameters into a new object
var data = FHC_AjaxClient._cpObjProps(controllerParameters);
// If controllerParameters contains uploaded file(s) as FileList
if (controllerParameters !== null && FHC_AjaxClient._hasFileList(controllerParameters))
{
// Convert controllerParameters to FormData object to easily pass uploaded files via AJAX
var data = FHC_AjaxClient._convertToFormDataObject(controllerParameters); // data is a FormData object now
// Add options to tell jQuery not to process data or worry about content-type
ajaxParameters.processData = false;
ajaxParameters.contentType = false;
}
// Anything else
else
{
// Copy the properties of controllerParameters into a new object
var data = FHC_AjaxClient._cpObjProps(controllerParameters);
}
// fhc_controller_id is given if present
data[FHC_CONTROLLER_ID] = FHC_AjaxClient.getUrlParameter(FHC_CONTROLLER_ID);
+12 -8
View File
@@ -544,7 +544,7 @@ var FHC_TableWidget = {
options.columns = arrayTabulatorColumns;
options.data = data.dataset;
if (options.tableWidgetHeader == 'undefined')
if (typeof options.tableWidgetHeader == 'undefined')
{
options.persistentLayout = true; // enables persistence (default store in localStorage if available, else in cookie)
options.persistenceID = data.tableUniqueId; // TableWidget unique id to store persistence data seperately for multiple tables
@@ -552,9 +552,13 @@ var FHC_TableWidget = {
options.movableColumns = true; // allows changing column order
options.tooltipsHeader = true; // set header tooltip with column title
options.placeholder = _func_placeholder(); // display text when table is empty
options.rowSelectionChanged = function(data, rows){
_func_rowSelectionChanged(data, rows);
};
if (typeof options.rowSelectionChanged == 'undefined')
{
options.rowSelectionChanged = function(data, rows){
_func_rowSelectionChanged(data, rows);
};
}
options.columnVisibilityChanged = function(column, visible) {
_func_columnVisibilityChanged(column, visible);
};
@@ -569,8 +573,8 @@ var FHC_TableWidget = {
// -------------------------------------------------------------------------------------------------------------
// Render tableWidgetHeader
if (options.tableWidgetHeader == 'undefined' ||
(options.tableWidgetHeader != 'undefined' && options.tableWidgetHeader != false))
if (typeof options.tableWidgetHeader == 'undefined' ||
(typeof options.tableWidgetHeader != 'undefined' && options.tableWidgetHeader != false))
{
var tabulatorHeaderHTML = _renderTabulatorHeaderHTML(tableWidgetDiv);
tableWidgetDiv.find('#tableWidgetHeader').append(tabulatorHeaderHTML);
@@ -588,7 +592,7 @@ var FHC_TableWidget = {
* selectButtons: true // tableWidgetFooter properties are checked in _renderTabulatorFooterHTML function
* }
*/
if (options.tableWidgetFooter != 'undefined' && options.tableWidgetFooter != null)
if (typeof options.tableWidgetFooter != 'undefined' && options.tableWidgetFooter != null)
{
var tabulatorFooterHTML = _renderTabulatorFooterHTML(options.tableWidgetFooter);
tableWidgetDiv.find('#tableWidgetFooter').append(tabulatorFooterHTML);
@@ -860,7 +864,7 @@ function _renderTabulatorFooterHTML(tableWidgetFooterOptions){
var tabulatorFooterHTML = '';
// If property selectButtons is true, render 'Alle auswaehlen / Alle abwaehlen' buttons
if (tableWidgetFooterOptions.selectButtons != 'undefined' && tableWidgetFooterOptions.selectButtons == true)
if (typeof tableWidgetFooterOptions.selectButtons != 'undefined' && tableWidgetFooterOptions.selectButtons == true)
{
tabulatorFooterHTML += '<div class="btn-toolbar" role="toolbar">';
tabulatorFooterHTML += '<div class="btn-group" role="group">';
+9 -3
View File
@@ -10,6 +10,7 @@ const RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ = "InfocenterRTfreigegQuerKurz";
const STGFREIGABE_MESSAGE_VORLAGE = "InfocenterSTGfreigegeben";
const STGFREIGABE_MESSAGE_VORLAGE_MASTER = "InfocenterSTGfreigegebenM";
const STGFREIGABE_MESSAGE_VORLAGE_MASTER_ENGLISCH = "InfocenterSTGfreigegebenMEng";
const STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER = "InfocenterSTGfreigegebenSemester";
//Statusgründe for which no Studiengang Freigabe Message should be sent
const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027];
@@ -653,7 +654,7 @@ var InfocenterDetails = {
}
else
{
if (receiverPrestudent.studiengangtyp === 'm' && (freigabedata.statusgrundbezeichnung === 'Ergänzungsprüfungen' || freigabedata.statusgrundbezeichnung === 'Supplementary exams'))
if (receiverPrestudent.studiengangtyp === 'm' && freigabedata.statuskurzbz === 'ergPruefung')
{
msgvars = {
'studiengangbezeichnung': studiengangbezeichnung,
@@ -671,7 +672,11 @@ var InfocenterDetails = {
//if Freigabe to Studiengang, send StgFreigabe Message if not already sent and allowed to send
else if (!stgFreigegeben && receiverPrestudent.sendStgFreigabeMsg === true)
{
InfocenterDetails.sendFreigabeMessage(prestudent_id, STGFREIGABE_MESSAGE_VORLAGE, msgvars);
if (receiverPrestudent.studiengangtyp === 'b' && freigabedata.statuskurzbz === 'anderesSemester')
vorlage = STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER
else
vorlage = STGFREIGABE_MESSAGE_VORLAGE
InfocenterDetails.sendFreigabeMessage(prestudent_id, vorlage, msgvars);
}
}
};
@@ -847,7 +852,8 @@ var InfocenterDetails = {
var statusgrundel = $("#frgstatusgrselect_" + prestudent_id + " select[name=frgstatusgrund]");
var statusgrund_id = statusgrundel.val();
var statusgrundbezeichnung = statusgrundel.find("option[value="+statusgrund_id+"]").text();
var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id, "statusgrundbezeichnung": statusgrundbezeichnung};
var statuskurzbz = statusgrundel.find(':selected').data('kurzbz');
var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id, "statusgrundbezeichnung": statusgrundbezeichnung, "statuskurzbz" : statuskurzbz};
InfocenterDetails.saveFreigabe(data);//Studiengangfreigabe
}
);
@@ -24,6 +24,9 @@ $(function(){
// Set status alert color
approveAnrechnungDetail.setStatusAlertColor();
// Set Empfehlungstext
approveAnrechnungDetail.setEmpfehlungstext();
// Init tooltips
approveAnrechnungDetail.initTooltips();
@@ -34,14 +37,23 @@ $(function(){
if (genehmigung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
genehmigung_panel.slideDown('slow');
// Show genehmigung panel if is hidden
genehmigung_panel.css('display', 'block');
genehmigung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: genehmigung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Approve Anrechnungen
$("#approveAnrechnungDetail-approve-anrechnung-confirm").click(function(){
$("#approveAnrechnungDetail-approve-anrechnung-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
// Get form data
let form_data = $('form').serializeArray();
@@ -93,13 +105,22 @@ $(function(){
if (begruendung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
begruendung_panel.slideDown('slow');
begruendung_panel.css('display', 'block');
begruendung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Reject Anrechnungen
$("#approveAnrechnungDetail-reject-anrechnung-confirm").click(function(){
$("#approveAnrechnungDetail-reject-anrechnung-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
let begruendung = $('#approveAnrechnungDetail-begruendung').val();
@@ -110,9 +131,6 @@ $(function(){
return;
}
// Avoid form redirecting automatically
event.preventDefault();
// Get form data
let form_data = $('form').serializeArray();
@@ -158,10 +176,12 @@ $(function(){
});
// Request Recommendation for Anrechnungen
$("#approveAnrechnungDetail-request-recommendation").click(function(){
$("#approveAnrechnungDetail-request-recommendation").click(function(e){
e.preventDefault();
// Get form data
let form_data = $('form').serializeArray();
let form_data = $('#form-empfehlung').serializeArray();
// Prepare data object for ajax call
@@ -186,8 +206,9 @@ $(function(){
if (!data.error && data.retval != null)
{
approveAnrechnungDetail.formatEmpfehlungIsRequested(
data.retval[0].empfehlung_angefordert_am,
data.retval[0].status_bezeichnung
data.retval[0].status_bezeichnung,
data.retval[0].empfehlungsanfrageAm,
data.retval[0].empfehlungsanfrageAn
);
}
},
@@ -199,6 +220,139 @@ $(function(){
);
});
// Withdraw approvement or rejection
$("#approveAnrechnungDetail-withdraw-anrechnung-approvement").click(function(){
if(!confirm(FHC_PhrasesLib.t("anrechnung", "genehmigungAblehnungWirklichZuruecknehmen")))
{
return;
}
// Get form data
let form_data = $('form').serializeArray();
// Prepare data object for ajax call
let data = {
'anrechnung_id' : form_data[0].value
};
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/withdraw",
data,
{
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
);
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
});
// Withdraw request for recommendation
$("#approveAnrechnungDetail-withdraw-request-recommedation").click(function(e){
e.preventDefault();
if(!confirm(FHC_PhrasesLib.t("anrechnung", "empfehlungsanforderungWirklichZuruecknehmen")))
{
return;
}
// Get form data
let form_data = $('#form-empfehlung').serializeArray();
// Prepare data object for ajax call
let data = {
'anrechnung_id' : form_data[0].value
};
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/withdrawRequestRecommendation",
data,
{
successCallback: function (data, textStatus, jqXHR)
{
console.log(data);
if (data.error && data.retval != null)
{
// Print error message
FHC_DialogLib.alertWarning(data.retval);
}
if (!data.error && data.retval != null)
{
approveAnrechnungDetail.formatEmpfehlungIsWithdrawed(
data.retval.status_bezeichnung
);
FHC_DialogLib.alertSuccess(
FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen")
);
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
});
$('#form-empfehlungNotiz').submit(function(e){
e.preventDefault();
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/saveEmpfehlungsNotiz",
{
anrechnung_id: this.anrechnung_id.value,
notiz_id: this.notiz_id.value,
empfehlung_text: this.empfehlungText.value
},
{
successCallback: function (data){
if (FHC_AjaxClient.isError(data)){
// Print error message
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data)){
// Print success message
FHC_DialogLib.alertSuccess((FHC_AjaxClient.getData(data)))
}
},
errorCallback(){
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
)
})
// Copy Begruendung into textarea
$(".btn-copyIntoTextarea").click(function(){
approveAnrechnungDetail.copyIntoTextarea(this);
@@ -212,7 +366,7 @@ $(function(){
// Break Begruendung abgeben
$('#approveAnrechnungDetail-begruendung-abbrechen').click(function(){
$('#approveAnrechnungDetail-begruendung').val('');
begruendung_panel.slideUp('slow');
})
@@ -238,6 +392,24 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning');
}
},
setEmpfehlungstext: function () {
let empfehlung = $('#approveAnrechnungDetail-empfehlung').data('empfehlung');
switch (empfehlung) {
case true:
$('#approveAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-success')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed"));
break;
case false:
$('#approveAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-danger')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed"));
break;
default:
$('#approveAnrechnungDetail-empfehlungDetail-empfehlung').html('-');
}
},
initTooltips: function (){
$('[data-toggle="tooltip"]').tooltip({
delay: { "show": 200, "hide": 200 },
@@ -250,20 +422,30 @@ var approveAnrechnungDetail = {
// Find closest textarea
let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().find('span:first').text()));
if (elem.id.length && elem.id == 'empfehlungstextUebernehmen')
{
// Copy Empfehlungstext into textarea
textarea.val($.trim($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text()));
return;
}
else
{
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().find('span:first').text()));
}
},
formatEmpfehlungIsRequested: function(empfehlungAngefordertAm, statusBezeichnung) {
$('#approveAnrechnungDetail-empfehlungDetail').children().addClass('hidden');
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsAngefordert').removeClass('hidden');
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungAngefordertAm').text(empfehlungAngefordertAm);
formatEmpfehlungIsRequested: function(statusBezeichnung, empfehlungsanfrageAm, empfehlungsanfrageAn) {
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html(empfehlungsanfrageAm);
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn').html(empfehlungsanfrageAn);
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
$('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-withdraw-request-recommedation').removeClass('hidden');
},
formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){
$('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden');
$('#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');
@@ -272,9 +454,13 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
$('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
// Show button to withdraw approval
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden');
},
formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){
$('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden');
$('#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');
@@ -284,5 +470,45 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
$('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
// Show button to withdraw approval
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden');
},
formatGenehmigungIsWithdrawed: function (statusBezeichnung){
let empfehlung = $('#approveAnrechnungDetail-empfehlung').data('empfehlung'); // null / false / true
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-danger').removeClass('alert-success');
$('#approveAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').removeClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden');
$('#approveAnrechnungDetail-abgeschlossenAm').text('-');
$('#approveAnrechnungDetail-abgeschlossenVon').text('-');
// Only enable recommendation button again if no recommendation was submitted until now
if (empfehlung === null)
{
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', false);
}
$('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', false);
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false);
// Hide button to withdraw approval
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').addClass('hidden');
},
formatEmpfehlungIsWithdrawed: function (statusBezeichnung){
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull').removeClass('hidden');
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html('-');
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAn').html('-');
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', false);
$('#approveAnrechnungDetail-approve-anrechnung-ask').prop('disabled', false);
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false);
// Hide button to withdraw approval
$('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden');
}
}
@@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const COLOR_LIGHTGREY = "#f5f5f5";
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
// -----------------------------------------------------------------------------------------------------------------
// Converts string date postgre style to string DD.MM.YYYY.
// This will allow correct filtering.
var mut_formatStringDate = function(value, data, type, params, component) {
if (value != null)
{
var d = new Date(value);
return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear();
}
}
// TABULATOR FUNCTIONS
// ---------------------------------------------------------------------------------------------------------------------
// Returns relative height (depending on screen size)
@@ -36,6 +50,7 @@ function hf_filterTrueFalse(headerValue, rowValue){
}
// Adds column details
// Sets focus on filterbutton, if table starts with stored filter.
function func_tableBuilt(table) {
table.addColumn(
{
@@ -49,10 +64,16 @@ function func_tableBuilt(table) {
url:function(cell){
return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id
},
// target:"_blank"
target:"_blank"
}
}, false, "status" // place column after status
);
// Set focus on filterbutton
let filters = table.getFilters();
if (filters.length > 0){
approveAnrechnung.focusFilterbuttonIfTableStartsWithStoredFilter(filters);
}
}
// Formats the rows
@@ -156,6 +177,26 @@ $(function(){
);
});
// Show only rows that are in progress by lector
$("#show-inProgressLektor").click(function(){
$('#tableWidgetTabulator').tabulator('setFilter',
[
{field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR},
{field: 'empfehlung_anrechnung', type: '=', value: null}
]
);
});
// Show only rows with empfohlene + noch nicht genehmigte/abgelehnte anrechnungen
$("#show-recommended").click(function(){
$('#tableWidgetTabulator').tabulator('setFilter',
[
{field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_STGL},
{field: 'empfehlung_anrechnung', type: '=', value: 'true'}
]
);
});
// Show only rows with nicht empfohlene + noch nicht genehmigte/abgelehnte anrechnungen
$("#show-not-recommended").click(function(){
$('#tableWidgetTabulator').tabulator('setFilter', [
@@ -205,13 +246,21 @@ $(function(){
if (genehmigung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
genehmigung_panel.slideDown('slow');
genehmigung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: genehmigung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Approve Anrechnungen
$("#approveAnrechnungUebersicht-approve-anrechnungen-confirm").click(function(){
$("#approveAnrechnungUebersicht-approve-anrechnungen-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
// Get selected rows data
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
@@ -274,13 +323,21 @@ $(function(){
if (begruendung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
begruendung_panel.slideDown('slow');
begruendung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Reject Anrechnungen
$("#approveAnrechnungUebersicht-reject-anrechnungen-confirm").click(function(){
$("#approveAnrechnungUebersicht-reject-anrechnungen-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
let begruendung = $('#approveAnrechnungUebersicht-begruendung').val();
@@ -310,9 +367,6 @@ $(function(){
return;
}
// Avoid form redirecting automatically
event.preventDefault();
// Prepare data object for ajax call
let data = {
'data': selected_data
@@ -352,6 +406,7 @@ $(function(){
// Request Recommendation for Anrechnungen
$("#approveAnrechnungUebersicht-request-recommendation").click(function(){
// Get selected rows data
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData');
@@ -398,12 +453,23 @@ $(function(){
if (!data.error && data.retval != null)
{
// Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert"));
// Print info message, if not all selected recommendations were requested
if (data.retval.length < selected_data.length){
FHC_DialogLib.alertInfo(
FHC_PhrasesLib.t(
"ui", "empfehlungWurdeAngefordertAusnahmeWoKeineLektoren",
[selected_data.length, data.retval.length, selected_data.length - data.retval.length])
);
}
else
{
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert"));
}
}
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data.retval);
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
@@ -421,7 +487,7 @@ $(function(){
// Break Ablehnung abgeben
$('#approveAnrechnungUebersicht-begruendung-abbrechen').click(function(){
$('#approveAnrechnungUebersicht-begruendung').val('');
begruendung_panel.slideUp('slow');
})
@@ -458,5 +524,40 @@ var approveAnrechnung = {
// Copy begruendung into textarea
textarea.val($.trim($(elem).parent().text()));
},
focusFilterbuttonIfTableStartsWithStoredFilter(filters){
switch (filters[0].value) {
case ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR:
$("#show-inProgressLektor").addClass('active');
break;
case ANRECHNUNGSTATUS_APPROVED:
$("#show-approved").addClass('active');
break;
case ANRECHNUNGSTATUS_REJECTED:
$("#show-rejected").addClass('active');
break;
case ANRECHNUNGSTATUS_PROGRESSED_BY_STGL:
if (filters.length > 1)
{
if (filters[1].field == 'empfehlung_anrechnung')
{
if (filters[1].value === 'true')
{
$("#show-recommended").addClass('active');
}
else
{
$("#show-not-recommended").addClass('active');
}
}
}
else
{
$("#show-inProgressDP").addClass('active');
}
break;
}
}
}
@@ -0,0 +1,159 @@
$(function () {
// Disable all form fields by default
createAnrechnung.disableFormFields();
// Create Anrechnung on form submit
$('#createAnrechnung-form').submit(function(e){
e.preventDefault();
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/create",
{
prestudent_id: this.prestudent_id.value,
studiensemester_kurzbz: this.studiensemester_kurzbz.value,
lehrveranstaltung_id: this.lehrveranstaltung_id.value,
begruendung_id: this.begruendung_id.value,
herkunftKenntnisse: this.herkunftKenntnisse.value,
uploadfile: this.uploadfile.files
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
FHC_DialogLib.alertSuccess(FHC_AjaxClient.getData(data).msg);
// Display button to open Anrechnung in new tab
createAnrechnung.displayButtonToOpenAnrechnung(FHC_AjaxClient.getData(data).anrechnung_id);
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
});
})
// TABULATOR FUNCTIONS
// ---------------------------------------------------------------------------------------------------------------------
/**
* Set form fields and populate selectmenu with LVs of student
* on row selection.
*
* @param row
*/
function func_rowSelected(row){
let studiensemester_kurzbz = $('#studiensemester_kurzbz').val();
let prestudent_id = row.getData().prestudent_id;
let vorname = row.getData().vorname;
let nachname = row.getData().nachname;
// Set hidden form field Prestudent ID
$('#prestudent_id').val(prestudent_id);
// Set field StudentIn
$('#student').text(vorname + ' ' + nachname);
// Populate Select with LVs of student
createAnrechnung.populateSelectWithStudentLVs(prestudent_id, studiensemester_kurzbz);
// Enable all form fields
createAnrechnung.enableFormFields();
}
/**
* Empty and disable form fields
* when none row selected.
*
* @param data
* @param rows
*/
function func_rowSelectionChanged(data, rows){
// If no student is selected in the table
if (rows.length == 0)
{
// ...empty form fields
createAnrechnung.emptyFormFields();
// ...disable form fields
createAnrechnung.disableFormFields();
}
}
// ---------------------------------------------------------------------------------------------------------------------
var createAnrechnung = {
emptyFormFields: function(){
// Empty field StudentIn
$('#student').text('');
// Empty form fields (except hidden ones)
$('#createAnrechnung-form :input:not([type=hidden])').val('');
// Hide eventually displayed button to open Anrechnung
$('#createAnrechnung-openAnrechnung').addClass('hidden');
},
disableFormFields: function(){
let prestudent_id = $('#prestudent_id').data('prestudent_id');
if (prestudent_id == '')
{
// Disable all form elements
$("#createAnrechnung-form :input").prop("disabled", true);
}
},
enableFormFields: function(){
$("#createAnrechnung-form :input").prop("disabled", false);
},
populateSelectWithStudentLVs: function(prestudent_id, studiensemester_kurzbz){
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/getLVsByStudent",
{'prestudent_id': prestudent_id, 'studiensemester_kurzbz': studiensemester_kurzbz},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
// Print error message
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
let lehrveranstaltungen = FHC_AjaxClient.getData(data);
// Remove previous Lehrveranstaltungen
$('#select-lehrveranstaltung option').slice(1).remove(); // Leave first option 'Bitte wählen'
// Append Lehrveranstaltungen
for (let lv of lehrveranstaltungen){
$('#select-lehrveranstaltung').append('<option value="'+ lv.lehrveranstaltung_id +'">'+ lv.bezeichnung +'</option>');
}
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
displayButtonToOpenAnrechnung: function(anrechnung_id){
// Display button to open Anrechnung in new tab
$('#createAnrechnung-openAnrechnung')
.removeClass('hidden')
.attr('href', 'ApproveAnrechnungDetail/?anrechnung_id=' + anrechnung_id)
.html('<i class="fa fa-external-link" aria-hidden="true"></i> ' + FHC_PhrasesLib.t("global", "antragBearbeiten"));
}
}
@@ -1,14 +1,65 @@
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
$(function(){
// Set status alert color
requestAnrechnung.setStatusAlertColor();
// Disable Form fields if Anrechnung was already applied
requestAnrechnung.disableFormFieldsIfAntragIsApplied();
// Check Bestaetigung checkbox if Anrechnung was already applied
requestAnrechnung.markAsBestaetigtIfAntragIsApplied();
// Init tooltips
requestAnrechnung.initTooltips();
// 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').submit(function(e){
// Avoid form redirecting automatically
e.preventDefault();
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/apply",
{
anmerkung: this.anmerkung.value,
begruendung: this.begruendung.value,
lv_id: this.lv_id.value,
studiensemester: this.studiensemester.value,
bestaetigung: this.bestaetigung.value,
uploadfile: this.uploadfile.files
},
{
successCallback:function(data, textStatus, jqXHR){
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
requestAnrechnung.formatAnrechnungIsApplied(
data.retval.antragdatum,
data.retval.dms_id,
data.retval.filename
);
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("global", "antragWurdeGestellt"));
}
},
errorCallback: function(jqXHR, textStatus, errorThrown){
FHC_DialogLib.alertWarning(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
});
})
var requestAnrechnung = {
@@ -24,9 +75,62 @@ var requestAnrechnung = {
break;
case '':
$('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-info');
$('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "neu"));
break;
default:
$('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning');
$('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung"));
}
},
disableFormFieldsIfAntragIsApplied: function(){
let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
if (status_kurzbz != '')
{
// Disable all form elements
requestAnrechnung.disableFormFields();
}
},
markAsBestaetigtIfAntragIsApplied: function(){
let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
if (status_kurzbz != '')
{
$("#requestAnrechnung-form :input[name='bestaetigung']").prop('checked', true);
}
},
disableFormFields(){
// Disable all form elements
$("#requestAnrechnung-form :input").prop("disabled", true);
},
displaySperreIfHasSperregrund: function(){
const anrechnung_id = $('#requestAnrechnung-sperre').data('anrechnung_id');
const is_expired = $('#requestAnrechnung-sperre').data('expired');
const is_blocked = $('#requestAnrechnung-sperre').data('blocked');
// If Deadline is expired or is blocked by grades of LV, AND not already angerechnet
if ((is_expired || is_blocked) && anrechnung_id == '')
{
// Hide status panel
$('#requestAnrechnung-status').hide();
// Show sperre panel
$('#requestAnrechnung-sperre')
.removeClass('hidden')
.html(function(){
let sperregrund = FHC_PhrasesLib.t('global', 'bearbeitungGesperrt') + ': ';
if (is_expired) {
sperregrund += FHC_PhrasesLib.t('anrechnung', 'deadlineUeberschritten');
}
else if (is_blocked){
sperregrund += FHC_PhrasesLib.t('anrechnung', 'benotungDerLV');
}
return "<b>"+ sperregrund + "</b>";
})
// Disable all form elements
requestAnrechnung.disableFormFields();
}
},
initTooltips: function (){
@@ -35,5 +139,27 @@ var requestAnrechnung = {
html: true
}
);
},
setCharsCounter: function(){
$('#requestAnrechnung-herkunftDerKenntnisse').keyup(function() {
let length = HERKUNFT_DER_KENNTNISSE_MAX_LENGTH - $(this).val().length;
$('#requestAnrechnung-herkunftDerKenntnisse-charCounter').text(length);
});
},
formatAnrechnungIsApplied: function (antragdatum, dms_id, filename){
$('#requestAnrechnung-antragdatum').text(antragdatum);
$('#requestAnrechnung-status_kurzbz').text(FHC_PhrasesLib.t("ui", "inBearbeitung"));
$('#requestAnrechnung-status_kurzbz').closest('div').addClass('alert-warning');
// Display File-Downloadlink
$('#requestAnrechnung-downloadDocLink')
.removeClass('hidden')
.attr('href', 'RequestAnrechnung/download?dms_id=' + dms_id)
.html(filename);
// Disable all form elements
$("#requestAnrechnung-form :input").prop("disabled", true);
}
}
@@ -25,6 +25,9 @@ $(function(){
// Set status alert color
reviewAnrechnung.setStatusAlertColor();
// Set Empfehlungstext
reviewAnrechnung.setEmpfehlungstext();
// Init tooltips
reviewAnrechnung.initTooltips();
@@ -41,13 +44,20 @@ $(function(){
if (empfehlung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
empfehlung_panel.slideDown('slow');
empfehlung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: empfehlung_panel.offset().top // Move empfehlung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Recommend Anrechnung
$("#reviewAnrechnungDetail-recommend-anrechnung-confirm").click(function(){
$("#reviewAnrechnungDetail-recommend-anrechnung-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
// Get form data
let form_data = $('form').serializeArray();
@@ -99,13 +109,20 @@ $(function(){
if (begruendung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
begruendung_panel.slideDown('slow');
begruendung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: begruendung_panel.offset().top // Move begruendung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Dont recommend Anrechnung
$("#reviewAnrechnungDetail-dont-recommend-anrechnung-confirm").click(function(){
$("#reviewAnrechnungDetail-dont-recommend-anrechnung-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
let begruendung = $('#reviewAnrechnungDetail-begruendung').val();
@@ -116,9 +133,6 @@ $(function(){
return;
}
// Avoid form redirecting automatically
event.preventDefault();
// Get form data
let form_data = $('form').serializeArray();
@@ -171,7 +185,7 @@ $(function(){
// Break Begruendung abgeben
$('#reviewAnrechnungDetail-begruendung-abbrechen').click(function(){
$('#reviewAnrechnungDetail-begruendung').val('');
begruendung_panel.slideUp('slow');
})
@@ -196,6 +210,24 @@ var reviewAnrechnung = {
$('#reviewAnrechnungDetail-status_kurzbz').closest('div').addClass('alert-warning');
}
},
setEmpfehlungstext: function () {
let empfehlung = $('#reviewAnrechnungDetail-empfehlung').data('empfehlung');
switch (empfehlung) {
case true:
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-success')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed"));
break;
case false:
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-danger')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed"));
break;
default:
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlung').html('-');
}
},
initTooltips: function (){
$('[data-toggle="tooltip"]').tooltip({
delay: { "show": 200, "hide": 200 },
@@ -213,22 +245,28 @@ var reviewAnrechnung = {
textarea.val($.trim($(elem).parent().find('span:first').text()));
},
formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){
$('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden');
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue').removeClass('hidden');
$('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#reviewAnrechnungDetail-recommend-anrechnung-ask').prop('disabled', true);
$('#reviewAnrechnungDetail-dont-recommend-anrechnung-ask').prop('disabled', true);
$('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm);
$('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon);
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-success')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungPositivConfirmed"));
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungAm').html(empfehlungAm);
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungVon').html(emfehlungVon);
},
formatEmpfehlungIsFalse: function(empfehlungAm, emfehlungVon, statusBezeichnung, begruendung){
$('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden');
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse').removeClass('hidden');
$('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#reviewAnrechnungDetail-recommend-anrechnung-ask').prop('disabled', true);
$('#reviewAnrechnungDetail-dont-recommend-anrechnung-ask').prop('disabled', true);
$('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm);
$('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon);
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlung')
.addClass('text-danger')
.html(FHC_PhrasesLib.t("anrechnung", "empfehlungNegativConfirmed"));
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungAm').html(empfehlungAm);
$('#reviewAnrechnungDetail-empfehlungDetail-empfehlungVon').html(emfehlungVon);
$('#reviewAnrechnungDetail-empfehlungDetail-begruendung').text(begruendung);
}
}
@@ -9,6 +9,20 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const COLOR_LIGHTGREY = "#f5f5f5";
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
// -----------------------------------------------------------------------------------------------------------------
// Converts string date postgre style to string DD.MM.YYYY.
// This will allow correct filtering.
var mut_formatStringDate = function(value, data, type, params, component) {
if (value != null)
{
var d = new Date(value);
return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear();
}
}
// TABULATOR FUNCTIONS
// ---------------------------------------------------------------------------------------------------------------------
// Returns relative height (depending on screen size)
@@ -48,8 +62,8 @@ function func_tableBuilt(table) {
label:"Details",
url:function(cell){
return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id
}
// target:"_blank"
},
target:"_blank"
}
}, false, "status" // place column after status
);
@@ -213,13 +227,20 @@ $(function(){
if (empfehlung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
empfehlung_panel.slideDown('slow');
empfehlung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: empfehlung_panel.offset().top // Move empfehlung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Recommend Anrechnungen
$("#reviewAnrechnungUebersicht-recommend-anrechnungen-confirm").click(function(){
$("#reviewAnrechnungUebersicht-recommend-anrechnungen-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
// Get selected rows data
let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
@@ -283,13 +304,20 @@ $(function(){
if (begruendung_panel.is(":hidden"))
{
// Show begruendung panel if is hidden
begruendung_panel.slideDown('slow');
begruendung_panel.slideDown(400, function() {
$('html, body').animate({
scrollTop: begruendung_panel.offset().top // Move genehmigung panel bottom up to be visible within window screen
}, 400);
});
return;
}
});
// Dont recommend Anrechnungen
$("#reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm").click(function(){
$("#reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm").click(function(e){
// Avoid bubbling click event to sibling break button
e.stopImmediatePropagation();
let begruendung = $('#reviewAnrechnungUebersicht-begruendung').val();
@@ -319,9 +347,6 @@ $(function(){
return;
}
// Avoid form redirecting automatically
event.preventDefault();
// Prepare data object for ajax call
let data = {
'data': selected_data
@@ -367,7 +392,7 @@ $(function(){
// Break Begruendung abgeben
$('#reviewAnrechnungUebersicht-begruendung-abbrechen').click(function(){
$('#reviewAnrechnungUebersicht-begruendung').val('');
begruendung_panel.slideUp('slow');
})
+13 -1
View File
@@ -129,7 +129,19 @@ function draw_content_xml($row)
if($person->load($row->pruefer3))
$pruefer3 = trim($person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost);
$qry = "SELECT * FROM public.tbl_benutzerfunktion JOIN campus.vw_mitarbeiter USING(uid) WHERE funktion_kurzbz='rek'";
$qry = "SELECT *
FROM PUBLIC.tbl_benutzerfunktion
JOIN campus.vw_mitarbeiter USING (uid)
WHERE funktion_kurzbz = 'rek'
AND (
tbl_benutzerfunktion.datum_von <= now()
OR tbl_benutzerfunktion.datum_von IS NULL
)
AND (
tbl_benutzerfunktion.datum_bis >= now()
OR tbl_benutzerfunktion.datum_bis IS NULL
)
ORDER BY tbl_benutzerfunktion.insertamum DESC LIMIT 1";
$rektor = '';
$db = new basis_db();
$db2 = new basis_db();
+19 -1
View File
@@ -28,10 +28,27 @@ $anrechnung = new anrechnung();
if(is_numeric($anrechnung_id))
{
$anrechnung->getAnrechnung($anrechnung_id);
// Add last Anrechnungstatus
$anrechnungstatus = new Anrechnung();
$anrechnungstatus->getLastAnrechnungstatus($anrechnung_id);
$anrechnung->result[0]->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
}
elseif(is_numeric($prestudent_id))
{
$anrechnung->getAnrechnungPrestudent($prestudent_id);
// Add last Anrechnungstatus to each Anrechnung of Prestudent
if(is_array($anrechnung->result))
{
foreach ($anrechnung->result as $row)
{
$anrechnungstatus = new Anrechnung();
$status = $anrechnungstatus->getLastAnrechnungstatus($row->anrechnung_id);
$row->status = $anrechnungstatus->result[0]->bezeichnung_mehrsprachig[DEFAULT_LANGUAGE];
}
}
}
else
{
@@ -80,6 +97,7 @@ if(is_array($anrechnung->result))
<ANRECHNUNG:insertvon><![CDATA['.$row->insertvon.']]></ANRECHNUNG:insertvon>
<ANRECHNUNG:updateamum><![CDATA['.$row->updateamum.']]></ANRECHNUNG:updateamum>
<ANRECHNUNG:updatevon><![CDATA['.$row->updatevon.']]></ANRECHNUNG:updatevon>
<ANRECHNUNG:status><![CDATA['.$row->status.']]></ANRECHNUNG:status>
</RDF:Description>
</RDF:li>
';
@@ -88,4 +106,4 @@ if(is_array($anrechnung->result))
?>
</RDF:Seq>
</RDF:RDF>
</RDF:RDF>
+17 -1
View File
@@ -61,8 +61,9 @@ function convdate($date)
function checkfilter($row, $filter2, $buchungstyp = null)
{
global $studiensemester_kurzbz, $kontofilterstg;
global $studiensemester_kurzbz, $kontofilterstg, $studiengang_kz;
$db = new basis_db();
$studstatusgrund = array();
if($filter2=='dokumente')
{
@@ -157,6 +158,21 @@ function checkfilter($row, $filter2, $buchungstyp = null)
}
}
}
elseif ( preg_match('/^stud-statusgrund-([0-9]+)$/', $filter2, $studstatusgrund) )
{
// Alle Studenten mit Statusgrund in tbl_prestudentstatus
$qry = "SELECT count(*) AS anzahl FROM public.tbl_prestudentstatus ps JOIN
public.tbl_prestudent p ON p.prestudent_id = ps.prestudent_id AND
ps. studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." AND
p. person_id=".$db->db_add_param($row->person_id, FHC_INTEGER)." AND
p.studiengang_kz=" . $db->db_add_param($studiengang_kz, FHC_INTEGER) . " AND
ps.statusgrund_id = " . $db->db_add_param($studstatusgrund[1], FHC_INTEGER);
//echo $qry . "\n";
$filtered = ( $db->db_query($qry) && ($row_filter = $db->db_fetch_object()) && ($row_filter->anzahl > 0) )
? true
: false;
return $filtered;
}
return true;
}
+6
View File
@@ -43,6 +43,12 @@ foreach($ampel->result as $a)
$uid = $row->uid;
$mail = new mail($uid.'@'.DOMAIN, 'cis@'.DOMAIN, $subject, $message);
// If message has HTML content
if($message != strip_tags($message)) {
$mail->setHTMLContent(sprintf('%s', $message));
}
if($mail->send())
echo "Email an $uid versandt\n";
else
+72 -44
View File
@@ -532,6 +532,46 @@ if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'ue'
}
}
// Note "intern angerechnet" hinzufügen
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'iar' AND (bezeichnung = 'intern angerechnet' OR bezeichnung = 'Intern angerechnet');"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "
INSERT INTO
lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre, offiziell, bezeichnung_mehrsprachig, lkt_ueberschreibbar)
VALUES(
(SELECT max(note)+1 FROM lehre.tbl_note),'intern angerechnet', 'iar', NULL, TRUE, NULL, TRUE, FALSE, FALSE, '{\"intern angerechnet\",\"internally credited\"}', FALSE
);
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_note: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_note: Note intern angerechnet hinzugefuegt!<br>';
}
}
// Note "nicht zugelassen" hinzufügen
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'nz' AND (bezeichnung = 'nicht zugelassen' OR bezeichnung = 'Nicht zugelassen');"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "
INSERT INTO
lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre, offiziell, bezeichnung_mehrsprachig, lkt_ueberschreibbar)
VALUES(
(SELECT max(note)+1 FROM lehre.tbl_note), 'nicht zugelassen', 'nz', NULL, TRUE, NULL, TRUE, FALSE, FALSE, '{\"nicht zugelassen\",\"not admitted\"}', FALSE
);
";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_note: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_note: Note nicht zugelassen hinzugefuegt!<br>';
}
}
// Spalte offiziell in lehre.tbl_note
if(!$result = @$db->db_query("SELECT offiziell FROM lehre.tbl_note LIMIT 1;"))
{
@@ -4637,7 +4677,7 @@ if ($result = @$db->db_query("SELECT 1 FROM campus.tbl_dms_kategorie_gruppe WHER
}
}
// Add table anrechnung_status
// Add table anrechnungstatus
if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;"))
{
$qry = "
@@ -4665,42 +4705,6 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;"
echo ' lehre.tbl_anrechnungstatus: Tabelle hinzugefuegt<br>';
}
// GRANT INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web;
$qry = 'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE lehre.tbl_anrechnungstatus TO web;';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnungstatus '.$db->db_last_error().'</strong><br>';
else
echo '<br>Granted privileges to <strong>web</strong> on lehre.tbl_anrechnungstatus';
// SEQUENCE seq_anrechnungstatus_status_kurzbz
if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'seq_anrechnungstatus_status_kurzbz'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = '
CREATE SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
';
if(!$db->db_query($qry))
echo '<strong>lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'</strong><br>';
else
echo '<br>Created sequence: lehre.seq_anrechnungstatus_status_kurzbz';
// GRANT SELECT, UPDATE ON SEQUENCE lehre.tbl_anrechnungstatus_status_kurzbz_seq to web;
$qry = 'GRANT SELECT, UPDATE ON SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz TO web;';
if (!$db->db_query($qry))
echo '<strong>lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'</strong><br>';
else
echo '<br>Granted privileges to <strong>vilesci</strong> on lehre.seq_anrechnungstatus_status_kurzbz';
}
}
// Add table anrechnung_anrechnungstatus
// Für bestehende genehmigte Anrechnungsanträge wird ein Eintrag mit dem Status 'approved' angelegt
if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus LIMIT 1;"))
@@ -4730,9 +4734,10 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu
INSERT INTO lehre.tbl_anrechnung_anrechnungstatus(anrechnung_id, status_kurzbz) SELECT anrechnung_id, 'approved' as status_kurzbz FROM lehre.tbl_anrechnung WHERE genehmigt_von is not null;
GRANT SELECT ON lehre.tbl_anrechnung_anrechnungstatus TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO web;
";
if(!$db->db_query($qry))
@@ -4796,6 +4801,19 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
// Add permission to create Anrechnung
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/anrechnung_anlegen';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_anlegen', 'Anrechnung anlegen');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_berechtigung: Added permission for lehre/anrechnung_anlegen<br>';
}
}
// INSERT,DELETE,UPDATE Berechtigung für tbl_dokumentprestudent hinzufügen
if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_dokumentprestudent' AND table_schema='public' AND grantee='web' AND privilege_type in ('INSERT','DELETE','UPDATE')"))
@@ -4851,7 +4869,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefung LIMIT 1;"))
updatevon character varying(32)
);
CREATE SEQUENCE public.tbl_zgvpruefung_id_seq
CREATE SEQUENCE public.tbl_zgvpruefung_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
@@ -4863,7 +4881,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefung LIMIT 1;"))
GRANT SELECT, UPDATE ON public.tbl_zgvpruefung_id_seq TO vilesci;
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_zgvpruefung TO vilesci;
GRANT SELECT ON public.tbl_zgvpruefung TO web;
";
if(!$db->db_query($qry))
@@ -4884,7 +4902,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefungstatus_status
datum timestamp without time zone DEFAULT now()
);
CREATE SEQUENCE public.tbl_zgvpruefungstatus_status_id_seq
CREATE SEQUENCE public.tbl_zgvpruefungstatus_status_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
@@ -4906,7 +4924,6 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_zgvpruefungstatus_status
echo ' public.tbl_zgvpruefungstatus_status: Tabelle hinzugefuegt<br>';
}
// Add index to system.tbl_log
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_pruefung_student_uid'"))
{
@@ -4920,7 +4937,6 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_pruef
echo 'Index fuer lehre.pruefung.student_uid hinzugefuegt<br>';
}
}
// Added Buchungstyp "ZuschussIO"
if ($result = @$db->db_query("SELECT 1 FROM public.tbl_buchungstyp WHERE buchungstyp_kurzbz = 'ZuschussIO';"))
{
@@ -4933,6 +4949,18 @@ if ($result = @$db->db_query("SELECT 1 FROM public.tbl_buchungstyp WHERE buchung
echo ' public.tbl_buchungstyp: Added buchungstyp "ZuschussIO" <br>';
}
}
//Add Column statusgrund_kurzbz to public.tbl_status_grund
if(!@$db->db_query("SELECT statusgrund_kurzbz FROM public.tbl_status_grund LIMIT 1"))
{
$qry = "ALTER TABLE public.tbl_status_grund ADD COLUMN statusgrund_kurzbz varchar(32);
ALTER TABLE public.tbl_status_grund ADD CONSTRAINT uk_tbl_statusgrund_kurzbz UNIQUE (statusgrund_kurzbz);
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_status_grund '.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue Spalte statusgrund_kurzbz zu Tabelle public.tbl_status_grund hinzugefügt';
}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -5153,7 +5181,7 @@ $tabellen=array(
"public.tbl_rt_person" => array("rt_person_id","person_id","rt_id","studienplan_id","anmeldedatum","teilgenommen","ort_kurzbz","punkte","insertamum","insertvon","updateamum","updatevon"),
"public.tbl_rt_studienplan" => array("reihungstest_id","studienplan_id"),
"public.tbl_status" => array("status_kurzbz","beschreibung","anmerkung","ext_id","bezeichnung_mehrsprachig"),
"public.tbl_status_grund" => array("statusgrund_id","status_kurzbz","aktiv","bezeichnung_mehrsprachig","beschreibung"),
"public.tbl_status_grund" => array("statusgrund_id","status_kurzbz","aktiv","bezeichnung_mehrsprachig","beschreibung","statusgrund_kurzbz"),
"public.tbl_semesterwochen" => array("semester","studiengang_kz","wochen"),
"public.tbl_service" => array("service_id", "bezeichnung","beschreibung","ext_id","oe_kurzbz","content_id","design_uid","betrieb_uid","operativ_uid","servicekategorie_kurzbz"),
"public.tbl_servicekategorie" => array("servicekategorie_kurzbz", "bezeichnung","sort"),
+613 -15
View File
@@ -788,6 +788,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'notizDerSTGL',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Notiz der STGL',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Note of the study course director',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -1494,7 +1514,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'benotungDerLV',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Benotung der Lehrveranstaltung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grading of the course',
'description' => '',
'insertvon' => 'system'
)
)
),
//*************************** CORE/filter
array(
@@ -8168,7 +8207,7 @@ Any unusual occurrences
'insertvon' => 'system'
)
)
),
),
array(
'app' => 'core',
'category' => 'ui',
@@ -9920,7 +9959,7 @@ Any unusual occurrences
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Deadline ist &uuml;berschritten',
'text' => 'Außerhalb der Einreichfrist',
'description' => '',
'insertvon' => 'system'
),
@@ -10672,6 +10711,26 @@ Any unusual occurrences
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungAm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => ' Empfehlung am',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Recommended on',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -11212,6 +11271,46 @@ Any unusual occurrences
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'zgv',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'ZGV',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'ZGV',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'antragWurdeAngelegt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Antrag wurde angelegt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Application was created',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -11364,10 +11463,10 @@ Any unusual occurrences
'sprache' => 'German',
'text' => "Bitte laden Sie den Antrag in deutscher oder englischer Sprache für das
<ul>
<li><u>Wintersemester spätestens bis 15. September</u></li>
<li><u>Wintersemester spätestens bis 22. September</u></li>
<li><u>Sommersemester spätestens bis 22. Februar</u> hoch.</li>
</ul>
<br>Die Entscheidung über den Antrag erfolgt in der Regel innerhalb von zwei Wochen ab dem 15. September
<br>Die Entscheidung über den Antrag erfolgt in der Regel innerhalb von zwei Wochen ab dem 22. September
bzw. 22. Februar.
<br><br>Für jede Lehrveranstaltung ist ein gesonderter Antrag beizubringen.</li>",
'description' => '',
@@ -11377,10 +11476,10 @@ Any unusual occurrences
'sprache' => 'English',
'text' => "Please upload the application in German or English
<ul>
<li><u>by September 15th for the winter semester</u></li>
<li><u>by September 22nd for the winter semester</u></li>
<li><u>by February 22nd for the summer semester</u> at the latest.</li>
</ul>
<br>The decision on the application is usually made within two weeks from September 15 (winter semester) or February 22 (summer semester).
<br>The decision on the application is usually made within two weeks from September 22 (winter semester) or February 22 (summer semester).
<br><br>A separate application must be submitted for each course.</li>",
'description' => '',
'insertvon' => 'system'
@@ -11416,17 +11515,17 @@ array(
array(
'sprache' => 'German',
'text' => "Bitte laden Sie mehrere Nachweis-Dokumente zusammengefasst in einem PDF-Dokument hoch.
<br><br>Falls Sie für den Nachweis der Gleichwertigkeit in Bundesgesetzblättern veröffentlichte Lehrpläne (vgl. HTL, HAK…) verwenden,
laden Sie bitte nur die für die Anrechnung relevanten Teile hoch oder markieren Sie diese entsprechend.
<br><br><span class=\"text-danger\">Falls diese Informationen nicht enthalten sind, kann der Antrag auch abgelehnt werden.</span>",
<br><br>Falls für den Nachweis der Gleichwertigkeit in Bundesgesetzblättern veröffentlichte Lehrpläne (vgl. HTL, HAK…) verwendet werden,
sind die für die Anrechnung relevanten Teile entsprechend zu <b>markieren</b>.
<br><br><span class=\"text-danger\">Falls das nicht gemacht wird, wird der Antrag aus formalen Gründen <b>abgelehnt</b>.</span>",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Please combine and upload more than one verification document in one PDF document.
<br><br>If you use curricula published in federal law gazettes (cf. HTL, HAK ...) to prove equivalence, please upload only the parts relevant for recognition or mark them accordingly.
<br><br><span class=\"text-danger\">If this information is not included, the application might be rejected.</span>",
<br><br>If you use curricula published in federal law gazettes (cf. HTL, HAK ...) to prove equivalence, please <b>mark</b> the parts relevant for recognition accordingly.
<br><br><span class=\"text-danger\">If this information is not included, the application must be <b>rejected</b>.</span>",
'description' => '',
'insertvon' => 'system'
)
@@ -11512,7 +11611,7 @@ array(
'sprache' => 'German',
'text' => "Die Entscheidung über den Antrag durch die Studiengangsleitung sollte
<ul>
<li><u>innerhalb von zwei Wochen ab dem 15. September (Wintersemester)</u></li>
<li><u>innerhalb von zwei Wochen ab dem 22. September (Wintersemester)</u></li>
<li><u>innerhalb von zwei Wochen ab dem 22. Februar (Sommersemester)</u> erfolgen.</li>
</ul>",
'description' => '',
@@ -11522,7 +11621,7 @@ array(
'sprache' => 'English',
'text' => "The decision on the application is usually made by the program director
<ul>
<li><u>within two weeks from September 15 (winter semester)</u></li>
<li><u>within two weeks from September 22 (winter semester)</u></li>
<li><u>within two weeks from February 22 (summer semester)</u>.</li>
</ul>",
'description' => '',
@@ -11853,6 +11952,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'empfehlungWurdeAngefordertAusnahmeWoKeineLektoren',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Empfehlungsanfragen: {0}<br>Abgeschickt: {1}<br>Nicht abgeschickt: {2}<br>Grund: Keine Lektoren zu LV zugeteilt.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Requests for recommendation: {0}<br>Sent: {1}<br>Not sent: {2}<br>Reason: No lectors assigned to the course yet.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
@@ -11873,7 +11992,486 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'alleInBearbeitungLektor',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Alle anzeigen, die auf Empfehlung von LektorIn warten.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Show all that are waiting for recommendation.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'zuruecknehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Zur&uuml;cknehmen",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Withdraw",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'genehmigungAblehnungWirklichZuruecknehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Ihre Genehmigung / Ablehnung wirklich zurücknehmen?",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Do you really want to withdraw your approval / rejection?",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'erfolgreichZurueckgenommen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Erfolgreich zurückgenommen.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Successfully withdrawn.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungsanforderungWirklichZuruecknehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Empfehlungsanforderung wirklich zurücknehmen?",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Do you really want to withdraw your request for recommendation?",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragNurImAktSS',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Der Antrag kann nur für das aktuelle Semester gestellt werden",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "You only can apply for the actual study semester",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'neu',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Neu",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "New",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'inBearbeitung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "in Bearbeitung",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "in process",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'antragWurdeGestellt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Antrag wurde gestellt.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Application was submitted successfully.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'antragBereitsGestellt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Der Antrag wurde bereits gestellt.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Application has already been submitted.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'genehmigungNegativEmpfehlungstextUebernehmen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Empfehlungstext des Lektors als Begr&uuml;ndung &uuml;bernehmen.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Copy the lectors recommendation text as reason for the rejection.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorFelderFehlen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Daten fehlen.<br>Bitte f&uuml;llen Sie alle Formularfelder aus",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Missing data.<br>Please fill in all form fields",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorUploadFehlt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Dokument fehlt.<br>Bitte laden Sie noch die entsprechenden Dokumente hoch.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Missing document.<br>Please upload the required documents.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorNichtAusgefuehrt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Ihre Anfrage konnte nicht ausgefuehrt werden.<br>Bitte wenden Sie sich an den IT-Support.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Your request could not be processed.<br>Please contact the IT Support team.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungsanfrageAn',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Anfrage an",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Requested to",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungsanfrageAm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Empfehlung angefragt am",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Requested on",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'maxZeichen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Max. Zeichen",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Max. Characters",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'bestaetigungstext',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Hiermit bestätige ich, dass ich die relevanten <a href='https://moodle.technikum-wien.at/course/view.php?id=15449' target='_blank'>Prozess-Informationen</a> gelesen habe und bestätige hiermit auch die Vollständigkeit und Richtigkeit meiner Angaben.<br>Ich nehme zur Kenntnis, dass der Antrag nur einmal hochgeladen werden kann und dass Unterlagen nicht nachgereicht werden können.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "I hereby confirm that I have read the relevant <a href='https://moodle.technikum-wien.at/course/view.php?id=15449' target='_blank'>process information</a> and hereby also confirm the accuracy and completeness of the information I have provided above.<br>I acknowledge that the application can only be uploaded once and that documents cannot be submitted later.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorBestaetigungFehlt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Ihre Bestaetigung fehlt.<br>Bitte aktivieren Sie das entsprechende Feld.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Your confirmation is missing.<br>Please confirm the corresponding field.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'neueAnrechnung',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Neue Anrechnung",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "New Exemption",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'antragAnlegen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Antrag anlegen",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Create Application",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'keineLVzugeteilt',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Dem Studierenden sind keine Lehrveranstaltungen zugeteilt.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "No courses assigned to this student yet.",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'antragBearbeiten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Antrag bearbeiten",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Go to application",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'antragBenotungBlockiert',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Antrag kann aufgrund der vorhandenen Benotung nicht erstellt werden.",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Application can not be created due to existing grade.",
'description' => '',
'insertvon' => 'system'
)
)
),
);
+129 -23
View File
@@ -26,15 +26,20 @@ require_once('../../include/functions.inc.php');
require_once('../../include/person.class.php');
require_once('../../include/benutzer.class.php');
require_once('../../include/student.class.php');
require_once('../../include/prestudent.class.php');
require_once('../../include/mitarbeiter.class.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/betriebsmittel.class.php');
require_once('../../include/betriebsmittelperson.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/datum.class.php');
require_once('../../include/studiensemester.class.php');
$uid = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
$datum_obj = new datum();
echo '<!DOCTYPE HTML>
<html>
@@ -44,22 +49,61 @@ echo '<!DOCTYPE HTML>
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../skin/jquery.css" type="text/css"/>
<script type="text/javascript" src="../../include/js/jquery.js"></script>
<title>Kartentausch</title>
<title>Kartenrücknahme</title>
</head>
<body>
<h2>Zutrittskarte - Ruecknahme</h2>';
<h2>Zutrittskarte - Rücknahme</h2>';
if(!$rechte->isBerechtigt('basis/fhausweis', 'suid'))
if(!$rechte->isBerechtigt('basis/fhausweis', 's'))
die('Sie haben keine Berechtigung für diese Seite');
$db = new basis_db();
$kartennummer = (isset($_POST['kartennummer'])?$_POST['kartennummer']:'');
$action=(isset($_POST['action'])?$_POST['action']:'');
if ($action == 'kartenruecknahme')
if ($action == 'karte_loeschen')
{
if(!$rechte->isBerechtigt('basis/fhausweis', 'suid'))
die('Sie haben keine Berechtigung zum löschen von Karten');
$bmp = new betriebsmittelperson();
if ($bmp->getKartenzuordnung($kartennummer, false))
{
if ($bmp->betriebsmittelperson_id != '')
{
if ($bmp->delete($bmp->betriebsmittelperson_id))
{
if ($bmp->delete_betriebsmittel($bmp->betriebsmittel_id))
{
echo '<span class="ok">Karte erfolgreich gelöscht</span>';
}
else
{
echo '<span class="error">Fehler beim löschen der Betriebsmittel_id: '.$bmp->betriebsmittel_id.'</span>';
}
}
else
{
echo '<span class="error">Fehler beim löschen der Betriebsmittelperson_id: '.$bmp->betriebsmittelperson_id.'</span>';
}
}
else
{
echo '<span class="error">Diese Karte ist derzeit nicht zugewiesen</span>';
}
}
else
{
echo '<span class="error">Diese Karte ist derzeit nicht zugewiesen</span>';
}
echo '<br><hr><br>';
}
if ($action == 'kartenabfrage' || $action == 'kartenruecknahme')
{
$bmp = new betriebsmittelperson();
if ($bmp->getKartenzuordnung($kartennummer))
if ($bmp->getKartenzuordnung($kartennummer, false))
{
if ($bmp->uid != '')
{
@@ -72,25 +116,28 @@ if ($action == 'kartenruecknahme')
}
else
{
$error=false;
//Neue Karte aktivieren
$bmp = new betriebsmittelperson();
if ($bmp->getKartenzuordnungPerson($benutzer->person_id, $kartennummer))
{
if ($bmp->ausgegebenam != '' && $bmp->retouram == '')
if ($action == 'kartenruecknahme')
{
$bmp->retouram=date('Y-m-d');
if(!$rechte->isBerechtigt('basis/fhausweis', 'su'))
die('Sie haben keine Berechtigung zum aktualisieren von Kartendaten');
$bmp->retouram = date('Y-m-d');
$bmp->updateamum = date('Y-m-d H:i:s');
$bmp->updatevon = $uid;
if(!$bmp->save(false))
{
echo '<span class="error">Fehler beim Tauschen: '.$bmp->errormsg.'</span>';
$error=true;
echo '<span class="error">Fehler beim austragen der Karte</span>';
}
else
echo '<span class="ok">Karte wurde erfolgreich ausgetragen.</span><br>
<table>
echo '<span class="ok">Karte wurde erfolgreich ausgetragen.</span>';
}
else
{
echo '<table>
<tr>
<td>
<img src="../../content/bild.php?src=person&person_id='.$benutzer->person_id.'"
@@ -99,14 +146,74 @@ if ($action == 'kartenruecknahme')
<td>
Vorname: '.$benutzer->vorname.'<br>
Nachname: '.$benutzer->nachname.'<br>
UID: <b>'.$benutzer->uid.'<br>
</td>
UID: '.$benutzer->uid.'<br>
Karte augegeben am: '.($bmp->ausgegebenam != '' ? $datum_obj->formatDatum($bmp->ausgegebenam,'d.m.Y') : '<span style="color: red">Karte nicht ausgegeben</span>').'<br>
Karte retour am: '.($bmp->retouram != '' ? $datum_obj->formatDatum($bmp->retouram,'d.m.Y') : '<span style="color: red">Karte nicht retourniert</span>').'<br>';
if ($bmp->beschreibung != '')
{
echo 'Beschreibung: '.$bmp->beschreibung.'<br>';
}
$student = new student();
$mitarbeiter = new mitarbeiter();
if ($student->load($bmp->uid))
{
$prestudent = new prestudent();
if ($prestudent->getLastStatus($student->prestudent_id))
{
echo '<br>Letzter Status: <b>';
$style = '';
if ($prestudent->status_kurzbz == 'Abbrecher' || $prestudent->status_kurzbz == 'Absolvent')
{
$style = 'style="color: red; font-weight: bold"';
}
echo '<span '.$style.'>'.$prestudent->status_kurzbz.'</span> im ';
$style = '';
$studiensemester = new studiensemester();
if ($prestudent->studiensemester_kurzbz != $studiensemester->getakt())
{
$style = 'style="color: red; font-weight: bold"';
}
echo '<span '.$style.'>'.$prestudent->studiensemester_kurzbz.'</span><br>';
}
}
elseif ($mitarbeiter->load($bmp->uid))
{
echo '<br>Letzter Status: '.($benutzer->bnaktiv ? '<span style="color: green;">Mitarbeiter*in aktiv</span>' : '<span style="color: red; font-weight: bold">Mitarbeiter*in inaktiv seit '.$datum_obj->formatDatum($benutzer->updateaktivam,'d.m.Y').'</span>').'<br>';
}
else
{
echo '<br>Kein/e Mitarbeiter*in oder Student*in<br>';
}
echo ' </td>
</tr>
</table>';
}
else
{
echo '<span>Karte ist nicht ausgegeben oder wurde bereits retourniert</span>';
</table><br>';
if ($bmp->retouram == '')
{
echo '<form action="'.$_SERVER['PHP_SELF'].'" METHOD="POST">
<input type="hidden" name="action" value="kartenruecknahme" />
<input type="hidden" name="kartennummer" value="'.$kartennummer.'"/>
<input type="submit" name="retournieren" style="color: #fff; background-color: #f0ad4e; border-color: #eea236; padding: 3px" value="Karte austragen" />
</form><br>';
}
if($rechte->isBerechtigt('basis/fhausweis', 'suid'))
{
echo '<form action="'.$_SERVER['PHP_SELF'].'" METHOD="POST">
<input type="hidden" name="action" value="karte_loeschen" />
<input type="hidden" name="kartennummer" value="'.$kartennummer.'"/>
<input type="submit"
name="loeschen"
style="color: #fff; background-color: #d9534f; border-color: #d43f3a;; padding: 3px"
value="Karte löschen" ';
// Wenn die Karte ausgegeben und/oder retourniert ist, wird zur Sicherheit nachgefragt ob wirklich gelöscht werden soll
if ($bmp->ausgegebenam != '' || $bmp->retouram != '')
{
echo ' onclick="return confirm(\'Die Karte wurde ausgegeben oder retourniert. Wollen Sie sie wirklich löschen?\')"';
}
echo '/>
</form>';
}
}
}
else
@@ -116,7 +223,6 @@ if ($action == 'kartenruecknahme')
Fehler beim Tauschen: Die Karte wurde dieser
Person noch nicht zugeordnet ('.$benutzer->uid.' '.$kartennummer.')
</span>';
$error = true;
}
}
}
@@ -144,10 +250,10 @@ Ziehen Sie die neue Karte über den Hitag Kartenleser um die Karte zu deaktivier
</script>
<br><br>
<form action="'.$_SERVER['PHP_SELF'].'" METHOD="POST">
<input type="hidden" name="action" value="kartenruecknahme" />
<input type="hidden" name="action" value="kartenabfrage" />
Kartennummer:
<input type="text" id="kartennummer" name="kartennummer"/>
<input type="submit" name="retournieren" value="Karte austragen" />
<input type="submit" name="abfragen" value="Karte abfragen" />
</form>
';
+6 -6
View File
@@ -44,13 +44,13 @@ echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../skin/jquery.css" type="text/css"/>
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" type="text/css" href="../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../vendor/jquery/sizzle/sizzle.js"></script>
<title>Kartentausch</title>
<title>Karte zuweisen</title>
<script type="text/javascript">
$(document).ready(function()
{
+76 -54
View File
@@ -67,6 +67,13 @@ echo '<!DOCTYPE HTML>
});
$("#t1").checkboxes("range", true);
$("#select_studiensemester_kurzbz_from").change(function()
{
var index = $(this).prop("selectedIndex");
index = index+3;
$("#select_studiensemester_kurzbz_to :nth-child("+index+")").prop("selected", true);
});
});
</script>
<title>Studienplan Semester Vorrückung</title>
@@ -96,10 +103,10 @@ if($studiensemester_kurzbz_to == '')
echo '<form action="studienplan_vorrueckung.php" method="POST">';
echo ' Quelle: <select name="studiensemester_kurzbz_from" />';
echo ' Quelle: <select id="select_studiensemester_kurzbz_from" name="studiensemester_kurzbz_from" />';
$stsem = new studiensemester();
$stsem->getAll();
$stsem->getPlusMinus(null,10,'ende ASC');
foreach($stsem->studiensemester as $row)
{
@@ -113,10 +120,7 @@ foreach($stsem->studiensemester as $row)
}
echo '</select>';
echo ' Ziel:<select name="studiensemester_kurzbz_to" />';
$stsem = new studiensemester();
$stsem->getAll();
echo ' Ziel:<select id="select_studiensemester_kurzbz_to" name="studiensemester_kurzbz_to" />';
foreach($stsem->studiensemester as $row)
{
@@ -168,7 +172,7 @@ if(isset($_POST['show']) && $studiensemester_kurzbz_from != '' && $studiensemest
studienplan.sprache
FROM lehre.tbl_studienplan studienplan
JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
JOIN lehre.tbl_studienordnung sto USING (studienordnung_id)
JOIN PUBLIC.tbl_studiengang USING (studiengang_kz)
WHERE tbl_studienplan_semester.studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_from, FHC_STRING)."
AND NOT EXISTS (
@@ -179,60 +183,78 @@ if(isset($_POST['show']) && $studiensemester_kurzbz_from != '' && $studiensemest
AND orgform_kurzbz = studienplan.orgform_kurzbz
AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_to, FHC_STRING)."
)
AND NOT EXISTS (
SELECT 1
FROM lehre.tbl_studienplan_semester
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
WHERE orgform_kurzbz = studienplan.orgform_kurzbz
AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz_to, FHC_STRING)."
AND studiengang_kz = sto.studiengang_kz
)
AND tbl_studiengang.typ IN ('b', 'm', 'l')
AND studienplan.onlinebewerbung_studienplan = true
AND tbl_studienplan_semester.semester = 1
ORDER BY studiengang";
AND studienplan.onlinebewerbung_studienplan = true";
if (substr($studiensemester_kurzbz_from,0,2) == 'SS')
{
$qry .= " AND tbl_studienplan_semester.semester = 2";
}
else
{
$qry .= " AND tbl_studienplan_semester.semester = 1";
}
$qry .= " ORDER BY studiengang";
if($result = $db->db_query($qry))
{
echo '<br>Anzahl: '.$db->db_num_rows($result);
//$pruefling = new pruefling();
echo '<form action="studienplan_vorrueckung.php" method="POST">';
echo '<input type="hidden" name="show">';
echo '<input type="hidden" value="'.$studiensemester_kurzbz_from.'" name="studiensemester_kurzbz_from">';
echo '<input type="hidden" value="'.$studiensemester_kurzbz_to.'" name="studiensemester_kurzbz_to">';
echo '<table id="t1" class="tablesorter" style="width: unset">
<thead>
<tr>
<th style="text-align: center">
<nobr>
<a href="#" id="toggle_t1" data-toggle="checkboxes" data-action="toggle" ><img src="../../skin/images/checkbox_toggle.png" name="toggle"></a>
<a href="#" id="uncheck_t1" data-toggle="checkboxes" data-action="uncheck" ><img src="../../skin/images/checkbox_uncheck.png" name="toggle"></a>
</nobr>
</th>
<th>Studiengang</th>
<th>Organisationsform</th>
<th>Bezeichnung</th>
<th>Sprache</th>
<th>Studienplan ID</th>
</tr>
</thead>
<tbody>';
while($row = $db->db_fetch_object($result))
if ($db->db_num_rows($result) > 0)
{
echo '
<tr>
<td><input type="checkbox" class="chkbox" name="studienplaene[]" value="'.$row->studienplan_id.'" checked="checked"></td>
<td>'.$row->studiengang.'</td>
<td>'.$row->orgform_kurzbz.'</td>
<td>'.$row->bezeichnung.'</td>
<td>'.$row->sprache.'</td>
<td>'.$row->studienplan_id.'</td>
</tr>';
echo '<form action="studienplan_vorrueckung.php" method="POST">';
echo '<input type="hidden" name="show">';
echo '<input type="hidden" value="'.$studiensemester_kurzbz_from.'" name="studiensemester_kurzbz_from">';
echo '<input type="hidden" value="'.$studiensemester_kurzbz_to.'" name="studiensemester_kurzbz_to">';
echo '<table id="t1" class="tablesorter" style="width: unset">
<thead>
<tr>
<th style="text-align: center">
<nobr>
<a href="#" id="toggle_t1" data-toggle="checkboxes" data-action="toggle" ><img src="../../skin/images/checkbox_toggle.png" name="toggle"></a>
<a href="#" id="uncheck_t1" data-toggle="checkboxes" data-action="uncheck" ><img src="../../skin/images/checkbox_uncheck.png" name="toggle"></a>
</nobr>
</th>
<th>Studiengang</th>
<th>Organisationsform</th>
<th>Bezeichnung</th>
<th>Sprache</th>
<th>Studienplan ID</th>
</tr>
</thead>
<tbody>';
while ($row = $db->db_fetch_object($result))
{
echo '
<tr>
<td><input type="checkbox" class="chkbox" name="studienplaene[]" value="'.$row->studienplan_id.'" checked="checked"></td>
<td>'.$row->studiengang.'</td>
<td>'.$row->orgform_kurzbz.'</td>
<td>'.$row->bezeichnung.'</td>
<td>'.$row->sprache.'</td>
<td>'.$row->studienplan_id.'</td>
</tr>';
}
echo "</tbody></table>";
if ($rechte->isBerechtigt('lehre/studienordnung', null, 'suid'))
{
echo '<button type="submit" name="vorruecken">Ausgewählte Studienpläne vorrücken</button>';
}
else
{
echo '<button name="vorruecken" disabled>Ausgewählte Studienpläne vorrücken</button> Keine Berechtigung zum Vorrücken von Studienplänen';
}
echo '</form>';
}
echo "</tbody></table>";
if($rechte->isBerechtigt('lehre/studienordnung', null, 'suid'))
{
echo '<button type="submit" name="vorruecken">Ausgewählte Studienpläne vorrücken</button>';
}
else
{
echo '<button name="vorruecken" disabled>Ausgewählte Studienpläne vorrücken</button> Keine Berechtigung zum Vorrücken von Studienplänen';
}
echo '</form>';
}
}
+26 -21
View File
@@ -19,6 +19,7 @@
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
* Manuela Thamer < manuela.thamer@technikum-wien.at >
*/
/**
* Vorrückung aller AKTIVEN Studenten.
@@ -32,6 +33,7 @@ require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/lehrverband.class.php');
require_once('../../include/studienordnung.class.php');
require_once('../../include/studienplan.class.php');
require_once('../../include/statusgrund.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
@@ -301,6 +303,16 @@ if (isset($_POST['vorr']))
}
}
//auf statusgrund_kurzbz abfragen
$statusgrundObj = new statusgrund($row_status->statusgrund_id);
$statusgrundId = null;
if ($statusgrundObj->statusgrund_kurzbz === "prewiederholer" && $row_status->ausbildungssemester > 1)
{
$s = $row->semester_stlv - 1;
$ausbildungssemester = $row_status->ausbildungssemester - 1;
$statusgrundId = $statusgrundObj->getByStatusgrundKurzbz('wiederholer')->statusgrund_id;
}
$lvb = new lehrverband();
//Lehrverbandgruppe anlegen, wenn noch nicht vorhanden
@@ -364,14 +376,15 @@ if (isset($_POST['vorr']))
//Eintragen des neuen Status
$sql .= "INSERT INTO public.tbl_prestudentstatus (prestudent_id, status_kurzbz,
studiensemester_kurzbz, ausbildungssemester, datum, insertamum,
insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id)
insertvon, updateamum, updatevon, ext_id, orgform_kurzbz, studienplan_id, statusgrund_id)
VALUES (".$db->db_add_param($row->prestudent_id).", ".
$db->db_add_param($row_status->status_kurzbz).", ".
$db->db_add_param($next_ss).", ".
$db->db_add_param($ausbildungssemester).", now(), now(), ".
$db->db_add_param($user).", NULL, NULL, NULL, ".
$db->db_add_param($row_status->orgform_kurzbz).", ".
$db->db_add_param($studienplan_id).");";
$db->db_add_param($studienplan_id).", ".
$db->db_add_param($statusgrundId).");";
}
if ($sql != '')
{
@@ -408,7 +421,7 @@ $outp .= '
<tr>
<td>Studiengang:</td>
<td>
<SELECT name="stg_kz">';
<SELECT name="stg_kz" onchange="document.location.href=this.value">';
//Auswahl Studiengang
foreach ($studiengang as $stg)
@@ -420,7 +433,7 @@ foreach ($studiengang as $stg)
$url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt";
$url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk";
$outp .= "<OPTION onclick=\"window.location.href='".$url."'\" ".($stg->studiengang_kz == $stg_kz?'selected':'').">";
$outp .= "<OPTION value='" . $url . "' " . ($stg->studiengang_kz == $stg_kz ? 'selected' : '') . ">";
$outp .= "$stg->kurzbzlang ($stg->kuerzel) - $stg->bezeichnung</OPTION>";
if (!isset($s[$stg->studiengang_kz]))
$s[$stg->studiengang_kz] = new stdClass();
@@ -435,17 +448,12 @@ $outp .= '</SELECT>
$outp .= "
<tr>
<td>Angezeigtes Studiensemester:</td>
<td><select name='studiensemester_kurzbz'>\n";
<td><select name='studiensemester_kurzbz' onchange='document.location.href=this.value'>\n";
if (isset($ss_arr) && is_array($ss_arr))
{
foreach ($ss_arr as $sts)
{
if ($studiensemester_kurzbz == $sts)
$sel = " selected ";
else
$sel = '';
$url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz";
$url .= "&semester=$semester";
$url .= "&semesterv=$semesterv";
@@ -453,7 +461,7 @@ if (isset($ss_arr) && is_array($ss_arr))
$url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt";
$url .= "&studiensemester_kurzbz_zk=$studiensemester_kurzbz_zk";
$outp .= "<option value='".$sts."' ".$sel."onclick=\"window.location.href = '".$url."'\">".$sts."</option>";
$outp .= "<option value='" .$url ."' " . ($studiensemester_kurzbz == $sts ? 'selected' : '') . ">".$sts."</option>";
}
}
$outp .= " </select>
@@ -493,17 +501,12 @@ $outp .= '
</tr>
<tr>
<td>Ausgangs-Studiensemester:</td>
<td><select name="studiensemester_kurzbz_akt">';
<td><select name="studiensemester_kurzbz_akt" onchange="document.location.href=this.value">';
if (isset($ss_arr) && is_array($ss_arr))
{
foreach ($ss_arr as $sts2)
{
if ($studiensemester_kurzbz_akt == $sts2)
$sel2 = " selected ";
else
$sel2 = '';
$url = $_SERVER['PHP_SELF']."?stg_kz=$stg_kz";
$url .= "&semester=$semester";
$url .= "&semesterv=$semesterv";
@@ -511,7 +514,7 @@ if (isset($ss_arr) && is_array($ss_arr))
$url .= "&studiensemester_kurzbz_akt=$sts2";
$url .= "&studiensemester_kurzb_zk=$studiensemester_kurzbz_zk";
$outp .= "<option value='".$sts2."' ".$sel2."onclick=\"window.location.href = '".$url."'\">".$sts2."</option>";
$outp .= "<option value='".$url ."' " . ($studiensemester_kurzbz_akt == $sts2 ? 'selected' : '') . ">".$sts2."</option>";
}
}
$outp .= " </select>
@@ -547,7 +550,7 @@ $outp .= '<A href="'.$url.'">alle</A> --
$outp .= "
<tr>
<td>Ziel-Studiensemester:</td>
<td><select name='studiensemester_kurzbz_zk'>\n";
<td><select name='studiensemester_kurzbz_zk' onchange='document.location.href=this.value'>\n";
if (isset($ss_arr) && is_array($ss_arr))
{
@@ -565,7 +568,7 @@ if (isset($ss_arr) && is_array($ss_arr))
$url .= "&studiensemester_kurzbz_akt=$studiensemester_kurzbz_akt";
$url .= "&studiensemester_kurzbz_zk=$sts3";
$outp .= "<option value='".$sts3."' ".$sel3."onclick=\"window.location.href = '".$url."'\">".$sts3."</option>";
$outp .= "<option value='" .$url ."' " . ($studiensemester_kurzbz_zk == $sts3 ? 'selected' : '') . ">".$sts3."</option>";
}
}
$outp .= " </select>\n
@@ -617,11 +620,12 @@ if ($result_std != 0)
$row = $db->db_fetch_object($result_std, $i);
$qry_status = "
SELECT
status_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung
tbl_prestudentstatus.status_kurzbz, statusgrund_kurzbz, ausbildungssemester, tbl_studienplan.studienplan_id, tbl_studienplan.bezeichnung
FROM
public.tbl_prestudentstatus
JOIN public.tbl_prestudent USING(prestudent_id)
LEFT JOIN lehre.tbl_studienplan USING(studienplan_id)
LEFT JOIN public.tbl_status_grund USING (statusgrund_id)
WHERE
person_id=".$db->db_add_param($row->person_id, FHC_INTEGER)."
AND studiengang_kz=".$db->db_add_param($row->studiengang_kz, FHC_INTEGER)."
@@ -638,6 +642,7 @@ if ($result_std != 0)
if ($row_status = $db->db_fetch_object($result_status))
{
$status_kurzbz = $row_status->status_kurzbz;
$statusgrund_kurzbz = $row_status->statusgrund_kurzbz;
$ausbildungssemester = $row_status->ausbildungssemester;
$studienplan_id = $row_status->studienplan_id;
$studienplan_bezeichnung = $row_status->bezeichnung;
+1
View File
@@ -3002,6 +3002,7 @@ else
if ($erg->letzter_status == 'Abgewiesener')
{
$inaktiv = 'text-muted';
$erg->prioritaet = 0;
}
echo "<tr id='row_".$erg->prestudent_id."'>
<td class='textcentered ".$inaktiv."'>
@@ -1,177 +0,0 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger < christian.paminger@technikum-wien.at >
* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at >
* Rudolf Hangl < rudolf.hangl@technikum-wien.at >
* Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at >
*/
// ***************************************************************
// * Script zum Anzeigen und Zusammenlegen von
// * doppelten Personen
// ***************************************************************
//DB Verbindung herstellen
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/basis_db.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
require_once('../../include/person.class.php');
require_once('../../include/functions.inc.php');
$msg='';
$outp='';
$anfang='';
$ende='';
$person1='';
$person2='';
if ((isset($_GET['person2']) || isset($_POST['person2']))&&(isset($_GET['person1']) || isset($_POST['person1'])))
{
//zusammenlegen der personen
$person2=(isset($_GET['person2'])?$_GET['person2']:$_POST['person2']);
$person1=(isset($_GET['person1'])?$_GET['person1']:$_POST['person1']);
$sql_query_upd1="BEGIN;";
$sql_query_upd1.="UPDATE public.tbl_benutzer SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_konto SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_prestudent SET person_id='$person1' WHERE person_id='$person2';";
//$sql_query_upd1.="UPDATE sync.tbl_syncperson SET person_portal='$radio_2' WHERE person_portal='$radio_1';";
$sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer1='$person1' WHERE pruefer1='$person2';";
$sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer2='$person1' WHERE pruefer2='$person2';";
$sql_query_upd1.="UPDATE lehre.tbl_abschlusspruefung SET pruefer3='$person1' WHERE pruefer3='$person2';";
$sql_query_upd1.="UPDATE lehre.tbl_projektbetreuer SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_adresse SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_akte SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_bankverbindung SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE public.tbl_kontakt SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="UPDATE wawi.tbl_betriebsmittelperson SET person_id='$person1' WHERE person_id='$person2';";
$sql_query_upd1.="DELETE FROM public.tbl_person WHERE person_id='$person2';";
if($db->db_query($sql_query_upd1))
{
$msg = "Daten erfolgreich gespeichert<br>";
$db->db_query("COMMIT;");
$msg .= "<br>".mb_eregi_replace(';',';<br>',$sql_query_upd1);
if(@$db->db_query('SELECT person_portal FROM sync.tbl_syncperson LIMIT 1'))
{
$msg.= "<br><br>Sync-Tabelle wird aktualisiert";
$sql_query_upd1="UPDATE sync.tbl_syncperson SET person_portal='$person1' WHERE person_portal='$person2';";
$db->db_query($sql_query_upd1);
$msg.= "<br>".mb_eregi_replace(';',';<br>',$sql_query_upd1)."COMMIT";
}
if(@$db->db_query('SELECT person_id FROM sync.tbl_syncperson LIMIT 1'))
{
$msg.= "<br><br>Sync-Tabelle wird aktualisiert";
$sql_query_upd1="UPDATE sync.tbl_syncperson SET person_id='$radio_2' WHERE person_id='$radio_1';";
$db->db_query($sql_query_upd1);
$msg.= "<br>".mb_eregi_replace(';',';<br>',$sql_query_upd1)."COMMIT";
}
}
else
{
$msg = "Die Änderung konnte nicht durchgeführt werden!";
$db->db_query("ROLLBACK;");
$msg.= "<br>".mb_eregi_replace(';',';<br><b>',$sql_query_upd1)."ROLLBACK</b>";
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../../skin/vilesci.css" rel="stylesheet" type="text/css">
<title>Personen-Auflistung von Mehrfacheinträgen</title>
</head>
<body>
<H1>Mehrfache Personendatensaetze</H1>
<?php
echo $outp;
//aufruf
if ($msg=='')
$msg="Diese Liste enth&auml;lt die ersten 50 Personendatens&auml;tze, die offenbar mehrfach vorkommen.
<br>Der Button in der erste Spalte gibt die Person_id des Datensatzes an, der entfernt werden soll.
<br>Wird dieser Button angeklickt, werden alle anh&auml;ngenden Daten dem Datensatz dieser Zeile (Person_id in Spalte 2) angeh&auml;ngt.
<br>Dadurch kann es in Folge zu Doppeleintr&auml;gen bei diesen Datens&auml;tzen kommen (z.B. Adresse).";
?>
<br>
<center><h2><?php echo "<span style=\"font-size:0.7em\">".$msg."</span>"; ?></h2></center>
<br>
<?php
//Tabellen anzeigen
//echo "<form name='form_table' action='personen_listedoppelte.php' method='POST'>";
echo "<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
echo "<tr>";
//Tabelle 1
echo "<table class='liste'><tr class='liste'>";
echo "<th>Alt.-ID</th>";
echo "<th>ID</th>";
echo "<th>Nachname</th>";
echo "<th>Vorname</th>";
echo "<th>Geburtsdatum</th>";
echo "<th>SVNr</th>";
echo "<th>Ersatzkennz.</th>";
echo "<th>Ext-ID</th>";
$qry="SELECT person.person_id as person2, tbl_person.person_id AS person1, tbl_person.nachname as nachname1, tbl_person.vorname as vorname1, tbl_person.gebdatum as gebdatum1,
tbl_person.svnr as svnr1, tbl_person.ersatzkennzeichen as ersatzkennzeichen1, tbl_person.ext_id as ext_id1, tbl_person.* FROM tbl_person person
JOIN tbl_person ON (person.vorname=tbl_person.vorname AND person.nachname=tbl_person.nachname AND person.gebdatum=tbl_person.gebdatum AND person.person_id!=tbl_person.person_id
AND person.person_id!=tbl_person.person_id) ORDER BY tbl_person.nachname
LIMIT 50 ;";
$i=0;
if($result = $db->db_query($qry))
{
while($l=$db->db_fetch_object($result))
{
echo "<tr class='liste".($i%2)."'>";
echo "<td align='center' ><form name='form_table' action='personen_listedoppelte.php' method='POST'>
<input type='hidden' name='person1' value='$l->person1'><input type='submit' name='person2' value='$l->person2'>
</form></td>";
echo "<td>$l->person1</td>";
echo "<td>$l->nachname1</td>";
echo "<td>$l->vorname1</td>";
echo "<td>$l->gebdatum1</td>";
echo "<td>$l->svnr1</td>";
echo "<td>$l->ersatzkennzeichen1</td>";
echo "<td>$l->ext_id1</td>";
echo "</tr>";
$i++;
}
}
echo "</table>";
echo "</td>";
//echo "<td valign='top'><input type='submit' value=' Weiter '></td>";
echo "</tr></table>";
//echo "</form>";
?>
</tr>
</table>
</body>
</html>
@@ -330,7 +330,7 @@ if($result = $db->db_query($qry))
}
echo '</SELECT>';
}
echo '&nbsp;&nbsp;<input type="checkbox" name="deletePruefling">&nbsp;Auch Prüfling löschen&nbsp;&nbsp;';
echo '&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Dieses Teilgebiet l&ouml;schen" name="deleteteilgebiet" onclick="return confirm(\'Antworten dieses Gebietes wirklich löschen?\')">&nbsp;&nbsp;&nbsp;&nbsp;';
if(isset($_POST['deleteteilgebiet']))
{
@@ -526,6 +526,57 @@ if(isset($_POST['delete_all']))
$db->errormsg = 'Fehler beim Loeschen der Daten';
$db->db_query('ROLLBACK');
}
// Wenn Option angeklickt ist, auch den Prüfling löschen
if (isset($_POST['deletePruefling']) && $_POST['deletePruefling'] == 'on')
{
$qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent']).";
";
if($db->db_query($qry))
{
while($row = $db->db_fetch_object())
{
$undo=" INSERT INTO testtool.tbl_pruefling(pruefling_id, studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES (".
$db->db_add_param($row->pruefling_id, FHC_INTEGER).', '.
$db->db_add_param($row->studiengang_kz, FHC_INTEGER).', '.
$db->db_add_param($row->idnachweis).', '.
$db->db_add_param($row->registriert).', '.
$db->db_add_param($row->prestudent_id, FHC_INTEGER).', '.
$db->db_add_param($row->semester, FHC_INTEGER).');';
}
}
else
{
$db->errormsg = 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling';
$db->db_query('ROLLBACK');
return false;
}
$qry = "DELETE FROM testtool.tbl_pruefling WHERE prestudent_id=".$db->db_add_param($_POST['prestudent']).";";
if($result = $db->db_query($qry))
{
//Log schreiben
$log = new log();
$log->new = true;
$log->sql = $qry;
$log->sqlundo = $undo;
$log->executetime = date('Y-m-d H:i:s');
$log->mitarbeiter_uid = $user;
$log->beschreibung = "Prüfling von Prestudent ".$_POST['prestudent']." geloescht";
if(!$log->save())
{
$db->errormsg = 'Fehler beim Schreiben des Log-Eintrages';
$db->db_query('ROLLBACK');
return false;
}
$db->db_query('COMMIT;');
echo '<br/><b> Prüfling wurde gelöscht</b>';
}
}
}
else
echo '<span class="error">Um alle Antworten eines Prüflings zu löschen, wählen Sie im DropDown bitte "Alle Gebiete" aus</span>';