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

This commit is contained in:
cris-technikum
2021-09-23 11:51:51 +02:00
46 changed files with 1405 additions and 732 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);
}
}
@@ -124,20 +124,20 @@ class InfoCenter extends Auth_Controller
'saveAbsage' => 'infocenter:rw',
'saveFreigabe' => 'infocenter:rw',
'getNotiz' => 'infocenter:r',
'saveNotiz' => 'infocenter:rw',
'saveNotiz' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
'updateNotiz' => 'infocenter:rw',
'reloadZgvPruefungen' => 'infocenter:r',
'reloadMessages' => 'infocenter:r',
'reloadDoks' => 'infocenter:r',
'reloadNotizen' => 'infocenter:r',
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r',
'outputAkteContent' => 'infocenter:r',
'getPostponeDate' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'park' => 'infocenter:rw',
'unpark' => 'infocenter:rw',
'setOnHold' => 'infocenter:rw',
'removeOnHold' => 'infocenter:rw',
'getStudienjahrEnd' => 'infocenter:r',
'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw'
+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);
@@ -169,18 +169,34 @@ class Lehrveranstaltung_model extends DB_Model
*/
public function getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id)
{
$query = "SELECT * FROM (SELECT distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid,
CASE WHEN lehrfunktion_kurzbz='LV-Leitung' THEN true ELSE false END as lvleiter
FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person
WHERE
tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND
tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND
tbl_person.person_id=tbl_benutzer.person_id AND
lehrveranstaltung_id=? AND
tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' AND
tbl_benutzer.aktiv=true AND tbl_person.aktiv=true AND
studiensemester_kurzbz=?) AS a
ORDER BY lvleiter DESC, nachname, vorname";
$query = "SELECT
*
FROM
(SELECT distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid,
CASE WHEN
EXISTS(
SELECT
1
FROM
lehre.tbl_lehreinheitmitarbeiter lvllem
JOIN lehre.tbl_lehreinheit lvlle USING(lehreinheit_id)
WHERE
lehrfunktion_kurzbz='LV-Leitung'
AND lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id
AND studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz
AND mitarbeiter_uid=tbl_benutzer.uid
) THEN true ELSE false END as lvleiter
FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person
WHERE
tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND
tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND
tbl_person.person_id=tbl_benutzer.person_id AND
lehrveranstaltung_id=? AND
tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' AND
tbl_benutzer.aktiv=true AND tbl_person.aktiv=true AND
studiensemester_kurzbz=?
) AS a
ORDER BY lvleiter DESC, nachname, vorname";
return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz));
}
@@ -273,7 +289,7 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, $parametersarray);
}
/**
* Gets Lehrveranstaltung and its Lehreinheiten (multiple rows possible).
* Returns empty array if student has no Lehrveranstaltung.
@@ -290,7 +306,7 @@ class Lehrveranstaltung_model extends DB_Model
AND studiensemester_kurzbz = ?
AND lehrveranstaltung_id = ?;
';
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
}
@@ -152,6 +152,7 @@ class Notiz_model extends DB_Model
*/
public function getNotizByTitel($person_id, $titel)
{
$this->addSelect('public.tbl_notiz.insertamum as insertnotiz, *');
// Join with the table public.tbl_notizzuordnung using notiz_id
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
$this->addJoin('public.tbl_prestudent', 'prestudent_id', 'LEFT');
+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,7 @@
<?php foreach ($notizenbewerbung as $notiz): ?>
<tr>
<td class="text-center">
<?php echo date_format(date_create($notiz->insertamum), 'd.m.Y H:i:s') ?>
<?php echo date_format(date_create($notiz->insertnotiz), 'd.m.Y H:i:s') ?>
</td>
<td>
<?php (!isset($notiz->kurzbzlang)) ?: print_r('(' . nl2br($notiz->kurzbzlang) . ') - ') ?>
@@ -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">