Merge branch 'master' into Sonstiges-Sprint-176/Anrechnungen_Bugfixes

This commit is contained in:
Andreas Österreicher
2021-09-15 18:25:36 +02:00
31 changed files with 754 additions and 523 deletions
+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);
+71 -69
View File
@@ -16,7 +16,7 @@ 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';
@@ -30,7 +30,7 @@ class AnrechnungJob extends JOB_Controller
$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');
}
@@ -94,7 +94,7 @@ 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.
@@ -102,7 +102,7 @@ class AnrechnungJob extends JOB_Controller
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
@@ -127,15 +127,15 @@ class AnrechnungJob extends JOB_Controller
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
@@ -144,20 +144,20 @@ class AnrechnungJob extends JOB_Controller
'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)
@@ -167,38 +167,38 @@ class AnrechnungJob extends JOB_Controller
$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,
@@ -207,7 +207,7 @@ class AnrechnungJob extends JOB_Controller
'datentabelle' => $anrechnungen_table,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
// Send mail
sendSanchoMail(
'AnrechnungAntragStellen',
@@ -216,17 +216,17 @@ class AnrechnungJob extends JOB_Controller
'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');
@@ -234,35 +234,35 @@ class AnrechnungJob extends JOB_Controller
$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',
@@ -272,33 +272,35 @@ class AnrechnungJob extends JOB_Controller
);
}
}
/**
* 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.');
// Get all yesterdays rejections
$this->AnrechnungModel->addSelect('student.student_uid, vorname, nachname, geschlecht, lv.bezeichnung, notiz.text');
$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');
$this->AnrechnungModel->addJoin('public.tbl_notizzuordnung', 'anrechnung_id');
$this->AnrechnungModel->addJoin('public.tbl_notiz notiz', 'notiz_id');
$this->AnrechnungModel->addOrder('notiz.insertamum', 'DESC');
$this->AnrechnungModel->addLimit(1);
$result = $this->AnrechnungModel->loadWhere(
'(status.insertamum)::date = (NOW() - INTERVAL \'24 HOURS\')::DATE AND
status.status_kurzbz = '. $this->db->escape(self::ANRECHNUNGSTATUS_REJECTED). ' AND
notiz.titel = '. $this->db->escape(self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL)
);
$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))
@@ -306,26 +308,26 @@ class AnrechnungJob extends JOB_Controller
$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',
@@ -334,14 +336,14 @@ html;
'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))
{
@@ -354,7 +356,7 @@ html;
else
{
$result = $this->StudiengangModel->load($studiengang_kz);
if (hasData($result))
{
return array(
@@ -364,7 +366,7 @@ html;
}
}
}
// Build HTML table with yesterdays new Anrechnungen of the given STG
private function _getSTGLMailDataTable($studiengang_kz, $anrechnungen)
{
@@ -377,7 +379,7 @@ html;
function ($anrechnung) use (&$studiengang_kz) {
return $anrechnung->studiengang_kz == $studiengang_kz;
});
// Amount of Anrechnungen
$amount = count($anrechnungen);
@@ -386,7 +388,7 @@ html;
<table style="width: 60%; border-collapse: collapse;" border="1" cellpadding="5">
<tbody>
';
foreach ($anrechnungen as $anrechnung)
{
// Head line for each LV bezeichnung
@@ -394,18 +396,18 @@ html;
{
$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);
}
}
+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
}
}
}
+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;
}
}
+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);
+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>
@@ -184,6 +184,32 @@
)
LIMIT 1
) AS "StgNichtAbgeschickt",
(
SELECT COUNT(*)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
JOIN public.tbl_studiengang sg USING(studiengang_kz)
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.'
AND pss.bewerbung_abgeschicktamum IS NULL
AND pss.bestaetigtam IS NULL
AND ps.person_id = p.person_id
AND (sg.typ IN ('.$STUDIENGANG_TYP.')
OR
sg.studiengang_kz in('.$ADDITIONAL_STG.')
)
AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
AND NOT EXISTS (
SELECT 1
FROM tbl_prestudentstatus spss
WHERE spss.prestudent_id = pss.prestudent_id
AND spss.status_kurzbz = '.$REJECTED_STATUS.'
AND spss.studiensemester_kurzbz IN (SELECT ss.studiensemester_kurzbz FROM public.tbl_studiensemester ss WHERE ss.ende >
(SELECT start FROM public.tbl_studiensemester sss WHERE studiensemester_kurzbz = '.$STUDIENSEMESTER.'))
)
LIMIT 1
) AS "AnzahlStgNichtAbgeschickt",
(
SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || sp.orgform_kurzbz), \', \')
FROM public.tbl_prestudentstatus pss
@@ -322,6 +348,7 @@
ucfirst($this->p->t('global', 'abgeschickt')).' ('.$this->p->t('global', 'anzahl').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'gesendet').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'nichtGesendet').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'anzahlNichtGesendet').')',
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')',
'ZGV Nation BA',
'ZGV Nation MA',
@@ -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">
+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)';
+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)
+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
+75 -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
@@ -5437,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);
}
+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();
}
}
?>
+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
}
);
+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();
+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;
}
+53 -2
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;"))
{
@@ -4900,7 +4940,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';"))
{
@@ -4913,6 +4952,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>';
@@ -5135,7 +5186,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"),
+3 -3
View File
@@ -122,10 +122,10 @@ $filters = array(
],
"filters": [
{
"name": "SendDate",
"name": "AnzahlStgNichtAbgeschickt",
"option": "",
"condition": "",
"operation": "nset"
"condition": "0",
"operation": "gt"
}
]
}
+20
View File
@@ -568,6 +568,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'anzahlNichtGesendet',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anzahl (nicht gesendet)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'amount (not sent)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
+2 -2
View File
@@ -178,7 +178,7 @@ if ($action == 'kartenabfrage' || $action == 'kartenruecknahme')
}
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</span>').'<br>';
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
{
@@ -197,7 +197,7 @@ if ($action == 'kartenabfrage' || $action == 'kartenruecknahme')
</form><br>';
}
if(!$rechte->isBerechtigt('basis/fhausweis', 'suid'))
if($rechte->isBerechtigt('basis/fhausweis', 'suid'))
{
echo '<form action="'.$_SERVER['PHP_SELF'].'" METHOD="POST">
<input type="hidden" name="action" value="karte_loeschen" />
+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>';