Merge branch 'master' into feature-10320/Personen_zusammenlegen_ALMAMatchID_pruefen

This commit is contained in:
Andreas Österreicher
2021-06-14 13:52:00 +02:00
118 changed files with 12876 additions and 812 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# FH-Complete
* [FH-Complete Homepage](https://www.fhcomplete.org)
* [Wiki](https://wiki.fhcomplete.org/)
* [Wiki](https://wiki.fhcomplete.info/)
* [Changelog](CHANGELOG.md)
@@ -0,0 +1,87 @@
<?php
/**
* FH-Complete
*
* @package FHC-API
* @author FHC-Team
* @copyright Copyright (c) 2021, fhcomplete.org
* @license GPLv3
* @link http://fhcomplete.org
* @since Version 1.0
* @filesource
*/
if (!defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungJob extends JOB_Controller
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
}
/**
* Sets the Grades in FAS to angerechnet if the request was successfull
* @return void
*/
public function setAnrechnungGrades()
{
$this->logInfo('Start Anrechnung Grades Job');
// get all accepted requests that are not in the grades table yet
// get all placement tests with incorrect studyplan
$qry = "
SELECT
student_uid, lehrveranstaltung_id, studiensemester_kurzbz, genehmigt_von
FROM
lehre.tbl_anrechnung
JOIN public.tbl_student USING(prestudent_id)
WHERE
genehmigt_von is not null
AND EXISTS(
SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = tbl_anrechnung.anrechnung_id
AND status_kurzbz='approved'
AND datum>=now()-'5 days'::interval
)
AND NOT EXISTS(
SELECT 1 FROM lehre.tbl_zeugnisnote
WHERE
lehrveranstaltung_id = tbl_anrechnung.lehrveranstaltung_id
AND studiensemester_kurzbz = tbl_anrechnung.studiensemester_kurzbz
AND student_uid = tbl_student.student_uid
)
";
$db = new DB_Model();
$result_grades = $db->execReadOnlyQuery($qry);
$cnt = 0;
if (hasData($result_grades))
{
$grades = getData($result_grades);
foreach ($grades as $anrechnung)
{
$cnt++;
// Set zeugnisnote to angerechnet (= note 6)
$ret = $this->ZeugnisnoteModel->insert(array(
'lehrveranstaltung_id' => $anrechnung->lehrveranstaltung_id,
'student_uid' => $anrechnung->student_uid,
'studiensemester_kurzbz' => $anrechnung->studiensemester_kurzbz,
'uebernahmedatum' => (new DateTime())->format('Y-m-d H:m:i'),
'benotungsdatum' => (new DateTime())->format('Y-m-d H:m:i'),
'note' => 6,
'insertvon' => $anrechnung->genehmigt_von,
'bemerkung' => 'Digitale Anrechnung'
)
);
}
}
$this->logInfo('End Anrechnung Grades Job', array('Number of Grades added'=>$cnt));
}
}
+113 -56
View File
@@ -1,7 +1,7 @@
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class ReihungstestJob extends CLI_Controller
class ReihungstestJob extends JOB_Controller
{
/**
* Constructor
@@ -17,6 +17,7 @@ class ReihungstestJob extends CLI_Controller
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
$this->load->model('crm/buchungstyp_model', 'BuchungstypModel');
// Load helpers
$this->load->helper('hlp_sancho_helper');
@@ -799,24 +800,39 @@ class ReihungstestJob extends CLI_Controller
* @param string $bcc. Optional. BCC-Mailadress to send the Mails to
* @param string $from. Optional. Sender-Mailadress shown to recipient
*/
public function prioritizationJob($bcc = null, $from = null)
public function prioritizationJob($studiensemester, $bcc = null, $from = null)
{
$qry = " SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') AS laststatus, /* Todo: Studiensemester dynamisch ermitteln oder als Parameter */
tbl_prestudentstatus.studiensemester_kurzbz,
tbl_prestudent.*
if (!isset($studiensemester) || isEmptyString($studiensemester))
{
$this->logError("Studiensemster not passed as parameter");
return;
}
$qry = "WITH prst AS (
SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) AS laststatus,
tbl_prestudentstatus.studiensemester_kurzbz,
tbl_prestudentstatus.datum AS prestudenstatus_datum,
tbl_prestudent.*,
tbl_studiengang.typ AS studiengang_typ
FROM PUBLIC.tbl_person
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz)
WHERE tbl_prestudentstatus.datum >= (SELECT CURRENT_DATE -1)
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, 'WS2020') IN ('Aufgenommener','Bewerber','Wartender')
AND studiensemester_kurzbz = 'WS2020' /* Todo: Studiensemester dynamisch ermitteln oder als Parameter */
AND tbl_studiengang.typ = 'b'
ORDER BY studiengang_kz, laststatus
";
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung USING (studienordnung_id)
JOIN PUBLIC.tbl_studiengang ON (tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz)
WHERE get_rolle_prestudent (tbl_prestudent.prestudent_id, ?) IN ('Aufgenommener','Bewerber','Wartender','Abgewiesener')
AND studiensemester_kurzbz = ?
AND tbl_studiengang.typ IN ('b', 'm')
)
SELECT * FROM prst
WHERE prestudenstatus_datum >= (SELECT CURRENT_DATE - 1)
AND (studiengang_typ = 'b' OR (studiengang_typ = 'm' AND EXISTS (SELECT 1 /* Master Studiengänge berücksichtigen wenn auch Bachelor im gleichen Semester */
FROM prst prstb
WHERE studiengang_typ = 'b'
AND laststatus != 'Abgewiesener'
AND prstb.person_id = prst.person_id )))
ORDER BY studiengang_kz, laststatus";
// Encode Params
if ($bcc != '')
@@ -837,26 +853,22 @@ class ReihungstestJob extends CLI_Controller
}
$db = new DB_Model();
$result_prestudents = $db->execReadOnlyQuery($qry);
$result_prestudents = $db->execReadOnlyQuery($qry, array_pad(array(), 3, $studiensemester));
$mailArray = array();
if (hasdata($result_prestudents))
{
foreach ($result_prestudents->retval as $row_ps)
{
// Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen
// falls diese Bewerber oder Warteliste sind
// Danach Kaution einbuchen
if ($row_ps->laststatus == 'Aufgenommener')
{
// Alle niedrigeren Prios laden
$qryNiedrPrios = "
// Alle niedrigeren Prios laden
$qryNiedrPrios = "
SELECT DISTINCT
get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') AS laststatus,
tbl_studienplan.orgform_kurzbz,
tbl_person.nachname,
tbl_person.vorname,
tbl_prestudent.*
tbl_prestudent.*,
tbl_studiengang.typ AS studiengang_typ
FROM PUBLIC.tbl_person
JOIN PUBLIC.tbl_prestudent USING (person_id)
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
@@ -866,18 +878,30 @@ class ReihungstestJob extends CLI_Controller
AND tbl_prestudent.prestudent_id != ".$row_ps->prestudent_id."
AND get_rolle_prestudent (tbl_prestudent.prestudent_id, '".$row_ps->studiensemester_kurzbz."') IN ('Aufgenommener','Bewerber','Wartender')
AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."'
AND tbl_studiengang.typ = 'b'
AND tbl_studiengang.typ IN ('b', 'm')
AND priorisierung > ".$row_ps->priorisierung."
ORDER BY studiengang_kz, laststatus
";
// Wenn der letzte Status "Aufgenommener" ist, alle niedrigeren Prios auf "Abgewiesen" setzen
// falls diese Bewerber oder Warteliste sind
// Danach Kaution einbuchen
if ($row_ps->laststatus == 'Aufgenommener')
{
$resultNiedrPrios = $db->execReadOnlyQuery($qryNiedrPrios);
if (hasdata($resultNiedrPrios))
{
foreach ($resultNiedrPrios->retval as $rowNiedrPrios)
{
if ($rowNiedrPrios->laststatus == 'Bewerber')
// nur Info wenn aufgenommen oder master
if ($rowNiedrPrios->laststatus == 'Aufgenommener' || $rowNiedrPrios->studiengang_typ == 'm')
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
elseif ($rowNiedrPrios->laststatus == 'Bewerber')
{
// Abgewiesenen-Status mit Statusgrund "Aufnahme anderer Studiengang" (ID 5) setzen
$lastStatus = $this->PrestudentstatusModel->getLastStatus($rowNiedrPrios->prestudent_id);
@@ -929,43 +953,63 @@ class ReihungstestJob extends CLI_Controller
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
}
elseif ($rowNiedrPrios->laststatus == 'Aufgenommener')
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio aufgenommen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AufnahmeHoeherePrio'][]
= $rowNiedrPrios->nachname.' '.$rowNiedrPrios->vorname.' ('.$rowNiedrPrios->prestudent_id.')';
}
}
}
// Kaution einbuchen für $row_ps->prestudent_id
// Kaution einbuchen für $row_ps->prestudent_id (für aufgenommenen Bachelor)
// Vorher prüfen, ob schon eine Kaution gebucht ist
// Todo: Betrag automatisch aus tbl_buchungstyp laden
$qryKautionExists = "
if ($row_ps->studiengang_typ == 'b')
{
$qryKautionExists = "
SELECT count(*) as anzahl
FROM public.tbl_konto
WHERE person_id = ".$row_ps->person_id."
AND studiensemester_kurzbz = '".$row_ps->studiensemester_kurzbz."'
AND buchungstyp_kurzbz = 'Kaution'";
WHERE person_id = " . $row_ps->person_id . "
AND studiensemester_kurzbz = '" . $row_ps->studiensemester_kurzbz . "'
AND buchungstyp_kurzbz = 'StudiengebuehrAnzahlung'";
$resultKautionExists = $db->execReadOnlyQuery($qryKautionExists);
if (hasdata($resultKautionExists))
{
if ($resultKautionExists->retval[0]->anzahl == '0')
$resultKautionExists = $db->execReadOnlyQuery($qryKautionExists);
if (hasdata($resultKautionExists))
{
// Todo: Zahlungsreferenz generieren (StudiengangsOE+Buchungsnummer)
$this->KontoModel->insert(array(
"person_id" => $row_ps->person_id,
"studiengang_kz" => $row_ps->studiengang_kz,
"studiensemester_kurzbz" => $row_ps->studiensemester_kurzbz,
"betrag" => -150,
"buchungsdatum" => date('Y-m-d'),
"buchungstext" => 'Kaution',
"buchungstyp_kurzbz" => 'Kaution',
"insertvon" => 'prioritizationJob',
"insertamum" => date('Y-m-d H:i:s')
));
if ($resultKautionExists->retval[0]->anzahl == '0')
{
// Betrag automatisch aus tbl_buchungstyp laden
$this->BuchungstypModel->addSelect('buchungstyp_kurzbz, standardbetrag, standardtext');
$buchungstypRes = $this->BuchungstypModel->loadWhere(array('buchungstyp_kurzbz' => 'StudiengebuehrAnzahlung'));
if (hasData($buchungstypRes))
{
$buchungstypData = getData($buchungstypRes)[0];
$this->KontoModel->insert(array(
"person_id" => $row_ps->person_id,
"studiengang_kz" => $row_ps->studiengang_kz,
"studiensemester_kurzbz" => $row_ps->studiensemester_kurzbz,
"betrag" => $buchungstypData->standardbetrag,
"buchungsdatum" => date('Y-m-d'),
"buchungstext" => $buchungstypData->standardtext,
"buchungstyp_kurzbz" => $buchungstypData->buchungstyp_kurzbz,
"insertvon" => 'prioritizationJob',
"insertamum" => date('Y-m-d H:i:s')
));
}
else
$this->logError('No Buchungstyp found for Studiengebühr Anzahlung');
}
}
}
}
elseif ($row_ps->laststatus == 'Abgewiesener')
{
$resultNiedrPrios = $db->execReadOnlyQuery($qryNiedrPrios);
if (hasdata($resultNiedrPrios))
{
foreach ($resultNiedrPrios->retval as $rowNiedrPrios)
{
// Mail zur Info an Assistenz schicken, dass in höherer Prio abgewiesen wurde
$mailArray[$rowNiedrPrios->studiengang_kz][$rowNiedrPrios->orgform_kurzbz]['AbgewiesenHoeherePrio'][]
= $rowNiedrPrios->nachname . ' ' . $rowNiedrPrios->vorname . ' (' . $rowNiedrPrios->prestudent_id . ')';
}
}
}
@@ -1015,6 +1059,19 @@ class ReihungstestJob extends CLI_Controller
}
$mailcontent .= '</tbody></table>';
}
if (isset($value['AbgewiesenHoeherePrio']) && !isEmptyArray($value['AbgewiesenHoeherePrio']))
{
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
Folgende Bewerber wurden in einem höher priorisierten Studiengang abgewiesen:</p>';
$mailcontent .= '<table style="border-collapse: collapse; border: 1px solid grey;">';
$mailcontent .= ' <tbody>';
sort($value['AbgewiesenHoeherePrio']);
foreach ($value['AbgewiesenHoeherePrio'] AS $key=>$bewerber)
{
$mailcontent .= '<tr><td style="font-family: verdana, sans-serif; border: 1px solid grey; padding: 3px">'.$bewerber.'</td></tr>';
}
$mailcontent .= '</tbody></table>';
}
if ($bcc != '' && isset($value['AbgewiesenWeilBewerber']) && !isEmptyArray($value['AbgewiesenWeilBewerber']))
{
$mailcontent .= '<p style="font-family: verdana, sans-serif;">
@@ -220,7 +220,7 @@ class Pruefungsprotokoll extends Auth_Controller
$nullfields = array('uhrzeit', 'endezeit', 'abschlussbeurteilung_kurzbz', 'protokoll');
foreach ($data as $idx => $item)
{
if (in_array($idx, $nullfields) & $item === '')
if (in_array($idx, $nullfields) && $item === '')
$data[$idx] = null;
}
@@ -0,0 +1,531 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
class approveAnrechnungDetail extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:rw',
'download' => 'lehre/anrechnung_genehmigen:rw',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$anrechnung_id = $this->input->get('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
show_error('Missing correct parameter');
}
// Check if user is entitled to read the Anrechnung
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
// Get Genehmigung data
if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData,
'genehmigungData' => $genehmigungData
);
$this->load->view('lehre/anrechnung/approveAnrechnungDetail.php', $viewData);
}
/**
* Approve Anrechnungen.
*/
public function approve()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved,
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Reject Anrechnungen.
*/
public function reject()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected,
'abgeschlossen_am' => (new DateTime())->format('d.m.Y'),
'abgeschlossen_von' => $person->vorname. ' '. $person->nachname
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Request recommendation for Anrechnungen.
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'empfehlung_anrechnung' => null,
'empfehlung_angefordert_am' => (new DateTime())->format('d.m.Y')
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if user is entitled to read this Anrechnung
* @param $anrechnung_id
*/
private function _checkIfEntitledToReadAnrechnung($anrechnung_id)
{
$result = $this->AnrechnungModel->load($anrechnung_id);
if(!$result = getData($result)[0])
{
show_error('Failed loading Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this Anrechnung');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
{
// Get Lehrveranstaltungen
$anrechnung_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
$anrechnung_arr[]= array(
'lehrveranstaltung_id' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->lehrveranstaltung_id,
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
);
}
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/
$lector_arr = $this->_getLectors($anrechnung_arr);
// Send mail to lectors
foreach ($lector_arr as $lector)
{
$to = $lector->uid;
$vorname = $lector->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
if (!$stgl_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'stgl_name' => $stgl_name,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Deine Empfehlung wird benötigt'
);
}
return true;
}
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* @param $anrechnung_arr
* @return array
*/
private function _getLectors($anrechnung_arr)
{
$lector_arr = array();
// Get lectors
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
if (!$result = getData($result))
{
show_error('Failed retrieving lectors of Lehrveranstaltung');
}
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one
if ($key !== false)
{
$lector_arr[]= $result[$key];
}
// ...otherwise keep all lectors
else
{
$lector_arr = array_merge($lector_arr, $result);
}
}
/**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
* But we wish to send only one email by to that one person)
* **/
foreach ($lector_arr as $lector)
{
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
@@ -0,0 +1,461 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class approveAnrechnungUebersicht extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN = 'lehre/anrechnung_genehmigen';
const REVIEW_ANRECHNUNG_URI = '/lehre/anrechnung/ReviewAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_genehmigen:rw',
'download' => 'lehre/anrechnung_genehmigen:rw',
'approve' => 'lehre/anrechnung_genehmigen:rw',
'reject' => 'lehre/anrechnung_genehmigen:rw',
'requestRecommendation' => 'lehre/anrechnung_genehmigen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
// Retrieve studiengaenge the user is entitled for
if (!$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
show_error(getError($studiengang_kz_arr));
}
if (!is_string($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr
);
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
}
/**
* Approve Anrechnungen.
*/
public function approve()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'approved'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$approved = getData($this->AnrechnungstatusModel->load('approved'))[0];
$approved = getUserLanguage() == 'German'
? $approved->bezeichnung_mehrsprachig[0]
: $approved->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->approveAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED,
'status_bezeichnung' => $approved
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Reject Anrechnungen.
*/
public function reject()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'rejected'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$rejected = getData($this->AnrechnungstatusModel->load('rejected'))[0];
$rejected = getUserLanguage() == 'German'
? $rejected->bezeichnung_mehrsprachig[0]
: $rejected->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Reject Anrechnung
if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED,
'status_bezeichnung' => $rejected
);
if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED))
{
show_error('Failed sending mail');
}
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Anrechnungen genehmigt.');
}
}
/**
* Request recommendation for Anrechnungen.
*/
public function requestRecommendation()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressLektor'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressLektor = getData($this->AnrechnungstatusModel->load('inProgressLektor'))[0];
$inProgressLektor = getUserLanguage() == 'German'
? $inProgressLektor->bezeichnung_mehrsprachig[0]
: $inProgressLektor->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $inProgressLektor,
'empfehlung_anrechnung' => null
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to lectors
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations
* */
if (!$this->_sendSanchoMailToLectors($json))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel->loadWhere(array(
'lehrveranstaltung_id' => $result->lehrveranstaltung_id
));
if(!$result = getData($result)[0])
{
show_error('Failed loading Lehrveranstaltung');
}
// Get STGL
$result = $this->StudiengangModel->getLeitung($result->studiengang_kz);
if($result = getData($result)[0])
{
if ($result->uid == $this->_uid)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mail to student to inform if Anrechnung was approved or rejected
* @param $mail_params
*/
private function _sendSanchoMailToStudent($anrechnung_id, $status_kurzbz)
{
$result = getData($this->anrechnunglib->getStudentData($anrechnung_id))[0];
// Get student name and mail address
$to = $result->uid. '@'. DOMAIN;
$anrede = $result->geschlecht == 'w' ? 'Sehr geehrte Frau ' : 'Sehr geehrter Herr ';
$text = $status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? 'Ihrem Antrag auf Anerkennung nachgewiesener Kenntnisse der Lehrveranstaltung "'.
$result->lv_bezeichnung. '" wurde stattgegeben.'
: 'wir haben Ihren Antrag auf Anerkennung nachgewiesener Kenntnisse geprüft und können die Lehrveranstaltung "'.
$result->lv_bezeichnung. '" leider nicht anrechnen, weil die Gleichwertigkeit nicht festgestellt werden konnte.';
// Prepare mail content
$body_fields = array(
'anrede_name' => $anrede. $result->vorname. ' '. $result->nachname,
'text' => $text
);
sendSanchoMail(
'AnrechnungGenehmigen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Ihr Antrag ist abgeschlossen'
);
return true;
}
/**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params
* @return bool
*/
private function _sendSanchoMailToLectors($mail_params)
{
// Get Lehrveranstaltungen
$anrechnung_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
$anrechnung_arr[]= array(
'lehrveranstaltung_id' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->lehrveranstaltung_id,
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
);
}
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/
$lector_arr = $this->_getLectors($anrechnung_arr);
// Send mail to lectors
foreach ($lector_arr as $lector)
{
$to = $lector->uid;
$vorname = $lector->vorname;
// Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel');
if (!$stgl_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::REVIEW_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'stgl_name' => $stgl_name,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAnfordern',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Deine Empfehlung wird benötigt'
);
}
return true;
}
/**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* @param $anrechnung_arr
* @return array
*/
private function _getLectors($anrechnung_arr)
{
$lector_arr = array();
// Get lectors
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
if (!$result = getData($result))
{
show_error('Failed retrieving lectors of Lehrveranstaltung');
}
// Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one
if ($key !== false)
{
$lector_arr[]= $result[$key];
}
// ...otherwise keep all lectors
else
{
$lector_arr = array_merge($lector_arr, $result);
}
}
/**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
* (e.g. if same lector is ones LV-Leitung and another time not, then array_unique would leave both.
* But we wish to send only one email by to that one person)
* **/
foreach ($lector_arr as $lector)
{
unset($lector->lvleiter);
}
// Now make the lector array aka mail receivers unique
$lector_arr = array_unique($lector_arr, SORT_REGULAR);
return $lector_arr;
}
}
@@ -0,0 +1,409 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class requestAnrechnung extends Auth_Controller
{
const REQUEST_ANRECHNUNG_URI = '/lehre/anrechnung/RequestAnrechnung';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const DEADLINE_INTERVAL_NACH_SEMESTERSTART = 'P1M'; // Deadline for application
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'student/anrechnung_beantragen:rw',
'apply' => 'student/anrechnung_beantragen:rw',
'download' => 'student/anrechnung_beantragen:rw',
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
$lehrveranstaltung_id = $this->input->get('lv_id');
if (!is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
// Check if application deadline is expired
// $is_expired = $this->_checkAntragDeadline($studiensemester_kurzbz);
$is_expired = false; // Set to false until Deadline is defined
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
{
$prestudent_id = getData($student)[0]->prestudent_id;
}
else
show_error('Cant load User');
// Get Anrechung data
$result = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (!$anrechnungData = getData($result))
{
show_error(getError($anrechnungData));
}
// Dont show who is progressing the application to the student
if ($anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR ||
$anrechnungData->status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_KF)
{
$anrechnungData->status = getUserLanguage() == 'German' ? 'in Bearbeitung' : 'in process';
}
$antragData = $this->anrechnunglib->getAntragData($this->_uid, $studiensemester_kurzbz, $lehrveranstaltung_id);
$viewData = array(
'antragData' => $antragData,
'anrechnungData' => $anrechnungData,
'is_expired' => $is_expired,
'disabled' => $is_expired && empty($anrechnungData->anrechnung_id) || !empty($anrechnungData->anrechnung_id)
? 'disabled'
: ''
);
$this->load->view('lehre/anrechnung/requestAnrechnung.php', $viewData);
}
/**
* Apply Anrechnungsantrag and send to STGL
*/
public function apply()
{
$anmerkung = $this->input->post('anmerkung');
$begruendung_id = $this->input->post('begruendung');
$lehrveranstaltung_id = $this->input->post('lv_id');
$studiensemester_kurzbz = $this->input->post('studiensemester');
if (empty($_FILES['uploadfile']['name']))
{
show_error('Missing upload file');
}
if (!is_numeric($begruendung_id) || !is_numeric($lehrveranstaltung_id) || !is_string($studiensemester_kurzbz))
{
show_error('Missing correct parameter');
}
$student = $this->StudentModel->load(array('student_uid' => $this->_uid));
if (isSuccess($student) && hasData($student))
{
$prestudent_id = getData($student)[0]->prestudent_id;
}
else
show_error('Cant load User');
$result = $this->_getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
if (hasData($result))
{
show_error('Der Antrag wurde bereits gestellt');
}
// Start DB transaction
$this->db->trans_start(false);
// Upload document
$dms = array(
'kategorie_kurzbz' => 'anrechnung',
'version' => 0,
'name' => $_FILES['uploadfile']['name'],
'mimetype' => $_FILES['uploadfile']['type'],
'insertamum' => (new DateTime())->format('Y-m-d H:i:s'),
'insertvon' => $this->_uid
);
if(isError($uploaddata = $this->dmslib->upload($dms, array('pdf'))))
{
show_error(getError($uploaddata));
}
// Get PrestudentID
$result = $this->_loadPrestudent($this->_uid, $studiensemester_kurzbz);
if (!$prestudent = getData($result)[0])
{
show_error('Failed retrieving prestudent');
}
// Save Anrechnung
$result = $this->AnrechnungModel->insert(array(
'prestudent_id' => $prestudent->prestudent_id,
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'begruendung_id' => $begruendung_id,
'dms_id' => $uploaddata->retval['dms_id'],
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anmerkung_student' => $anmerkung,
'insertvon' => $this->_uid
));
if (isError($result))
{
show_error('Failed inserting Anrechnung');
}
// Save Anrechnungstatus 'inProgressSTGL'
$result = $this->AnrechnungModel->saveAnrechnungstatus($result->retval, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
if (isError($result))
{
show_error('Failed saving Anrechnungstatus');
}
// Transaction complete!
$this->db->trans_complete();
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
show_error($result->msg, EXIT_ERROR);
}
// Send mail to STGL
$mail_params = array(
'studiengang_kz' => $prestudent->studiengang_kz,
'lehrveranstaltung_id' => $lehrveranstaltung_id
);
if(!$this->_sendSanchoMail($mail_params))
{
show_error('Failed sending mail');
}
else
{
redirect(site_url(). self::REQUEST_ANRECHNUNG_URI. '?studiensemester='. $studiensemester_kurzbz. '&lv_id='. $lehrveranstaltung_id);
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Load Prestudent by uid and Studiensemester.
* @param $uid
* @param $studiensemester_kurzbz
* @return mixed
*/
private function _loadPrestudent($uid, $studiensemester_kurzbz)
{
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->PrestudentstatusModel->addJoin('public.tbl_student', 'prestudent_id');
return $this->PrestudentstatusModel->loadWhere(array(
'student_uid' => $uid,
'studiensemester_kurzbz' => $studiensemester_kurzbz
)
);
}
/**
* Check if application deadline is expired.
* @param $studiensemester_kurzbz
* @return bool True if semester start is more then 1 week ago
* @throws Exception
*/
private function _checkAntragDeadline($studiensemester_kurzbz)
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addSelect('start');
if (!$start = getData($this->StudiensemesterModel->load($studiensemester_kurzbz)))
{
show_error(getError($start));
}
$start = new DateTime($start[0]->start);
$today = new DateTime('today midnight');
// True if today > application deadline
return ($today > $start->add((new DateInterval(self::DEADLINE_INTERVAL_NACH_SEMESTERSTART))));
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
if (!$student = getData($this->StudentModel->load(array('student_uid' => $this->_uid)))[0])
{
show_error('Failed loading Student');
}
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if($result = getData($result)[0])
{
if ($result->prestudent_id == $student->prestudent_id)
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Get Anrechnung by Lehrveranstaltung
* @param $lehrveranstaltung_id
* @return mixed
*/
private function _getAnrechnung($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$result = $this->AnrechnungModel->loadWhere(array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
));
if (isError($result))
{
show_error(getError($result));
}
return $result;
}
/**
* Send mail to STGL (if not available, send to STGL assistance)
* @param $mail_params
*/
private function _sendSanchoMail($mail_params)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($mail_params['studiengang_kz']);
// Get full name of student
$this->load->model('person/Person_model', 'PersonModel');
if (!$student_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Get lehrveranstaltung bezeichnung
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
if (!$lehrveranstaltung = getData($this->LehrveranstaltungModel->load($mail_params['lehrveranstaltung_id']))[0])
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'student_name' => $student_name,
'lehrveranstaltung_bezeichnung' => $lehrveranstaltung->bezeichnung,
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungAntragStellen',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Neuer Antrag wurde gestellt'
);
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -0,0 +1,397 @@
<?php
//if (! defined('BASEPATH')) exit('No direct script access allowed');
class reviewAnrechnungDetail extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->load->model('crm/Student_model', 'StudentModel');
$this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$anrechnung_id = $this->input->get('anrechnung_id');
if (!is_numeric($anrechnung_id))
{
show_error('Missing correct parameter');
}
// Check if user is entitled to read this Anrechnung
self::_checkIfEntitledToReadAnrechnung($anrechnung_id);
// Get Anrechung data
if (!$anrechnungData = getData($this->anrechnunglib->getAnrechnungData($anrechnung_id)))
{
show_error('Missing data for Anrechnung.');
}
// Get Empfehlung data
if(!$empfehlungData = getData($this->anrechnunglib->getEmpfehlungData($anrechnung_id)))
{
show_error('Missing data for recommendation');
}
$viewData = array(
'antragData' => $this->anrechnunglib->getAntragData(
$student_uid = $this->StudentModel->getUID($anrechnungData->prestudent_id),
$anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id
),
'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData
);
$this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData);
}
/**
* Recommend Anrechnungen.
*/
public function recommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'empfehlung_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */
if (!$this->_sendSanchoMails($json, true))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Dont recommend Anrechnungen.
*/
public function dontRecommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0])
{
show_error('Failed retrieving person data');
}
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP,
'empfehlumg_am' => (new DateTime())->format('d.m.Y'),
'empfehlung_von' => $person->vorname. ' '. $person->nachname
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
// Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadAnrechnung($anrechnung_id)
{
$result = $this->AnrechnungModel->load($anrechnung_id);
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mails to STGL (if not present then to STGL assistance)
* @param $mail_params
* @param $empfehlung
* @return bool
*/
private function _sendSanchoMails($mail_params, $empfehlung)
{
// Get studiengaenge
$studiengang_kz_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('studiengang_kz');
$this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz;
}
$studiengang_kz_arr = array_unique($studiengang_kz_arr);
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz);
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -0,0 +1,337 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class reviewAnrechnungUebersicht extends Auth_Controller
{
const BERECHTIGUNG_ANRECHNUNG_EMPFEHLEN = 'lehre/anrechnung_empfehlen';
const APPROVE_ANRECHNUNG_URI = '/lehre/anrechnung/ApproveAnrechnungUebersicht';
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnung_empfehlen:rw',
'download' => 'lehre/anrechnung_empfehlen:rw',
'recommend' => 'lehre/anrechnung_empfehlen:rw',
'dontRecommend' => 'lehre/anrechnung_empfehlen:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
$this->load->model('content/DmsVersion_model', 'DmsVersionModel');
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
$this->load->library('DmsLib');
// Load helpers
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('hlp_sancho_helper');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'anrechnung',
'person',
'lehre',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
$studiensemester_kurzbz = $this->input->get('studiensemester');
if (!is_string($studiensemester_kurzbz))
{
$studiensemester = $this->StudiensemesterModel->getNearest();
if (hasData($studiensemester))
{
$studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz;
}
elseif (isError($studiensemester))
{
show_error(getError($studiensemester));
}
}
$viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz
);
$this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData);
}
/**
* Recommend Anrechnungen.
*/
public function recommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'true',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
/**
* Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */
if (!$this->_sendSanchoMails($json, true))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Dont recommend Anrechnungen.
*/
public function dontRecommend()
{
$data = $this->input->post('data');
if(isEmptyArray($data))
{
return $this->outputJsonError('Fehler beim Übertragen der Daten.');
}
// Get statusbezeichnung for 'inProgressDP'
$this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig');
$inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0];
$inProgressDP = getUserLanguage() == 'German'
? $inProgressDP->bezeichnung_mehrsprachig[0]
: $inProgressDP->bezeichnung_mehrsprachig[1];
foreach ($data as $item)
{
// Approve Anrechnung
if(getData($this->anrechnunglib
->dontRecommendAnrechnung($item['anrechnung_id'], $item['begruendung'])))
{
$json[]= array(
'anrechnung_id' => $item['anrechnung_id'],
'empfehlung_anrechnung' => 'false',
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL,
'status_bezeichnung' => $inProgressDP
);
}
}
// Output json to ajax
if (isset($json) && !isEmptyArray($json))
{
// Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false))
{
show_error('Failed sending emails');
}
return $this->outputJsonSuccess($json);
}
else
{
return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt');
}
}
/**
* Download and open uploaded document (Nachweisdokument).
*/
public function download()
{
$dms_id = $this->input->get('dms_id');
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
// Check if user is entitled to read dms doc
self::_checkIfEntitledToReadDMSDoc($dms_id);
$this->dmslib->download($dms_id);
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
/**
* Check if user is entitled to read dms doc
* @param $dms_id
*/
private function _checkIfEntitledToReadDMSDoc($dms_id)
{
$result = $this->AnrechnungModel->loadWhere(array('dms_id' => $dms_id));
if(!$result = getData($result)[0])
{
show_error('Failed retrieving Anrechnung');
}
$result = $this->LehrveranstaltungModel
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
if($result = getData($result))
{
$entitled_lector_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr))
{
return;
}
}
show_error('You are not entitled to read this document');
}
/**
* Send mails to STGL (if not present then to STGL assistance)
* @param $mail_params
* @param $empfehlung
* @return bool
*/
private function _sendSanchoMails($mail_params, $empfehlung)
{
// Get studiengaenge
$studiengang_kz_arr = array();
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('studiengang_kz');
$this->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$studiengang_kz_arr[]= $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiengang_kz;
}
$studiengang_kz_arr = array_unique($studiengang_kz_arr);
// Send mail to STGL of each studiengang
foreach ($studiengang_kz_arr as $studiengang_kz)
{
// Get STGL mail address, if available, otherwise get assistance mail address
list ($to, $vorname) = $this->_getSTGLMailAddress($studiengang_kz);
// Get full name of lector
$this->load->model('person/Person_model', 'PersonModel');
if (!$lector_name = getData($this->PersonModel->getFullName($this->_uid)))
{
show_error ('Failed retrieving person');
}
// Link to Antrag genehmigen
$url =
CIS_ROOT. 'cis/index.php?menu='.
CIS_ROOT. 'cis/menu.php?content_id=&content='.
CIS_ROOT. index_page(). self::APPROVE_ANRECHNUNG_URI;
// Prepare mail content
$body_fields = array(
'vorname' => $vorname,
'lektor_name' => $lector_name,
'empfehlung' => $empfehlung ? 'positive' : 'negative',
'link' => anchor($url, 'Anrechnungsanträge Übersicht')
);
sendSanchoMail(
'AnrechnungEmpfehlungAbgeben',
$body_fields,
$to,
'Anerkennung nachgewiesener Kenntnisse: Empfehlung wurde abgegeben'
);
}
return true;
}
// Get STGL mail address, if available, otherwise get assistance mail address
private function _getSTGLMailAddress($stg_kz)
{
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->getLeitung($stg_kz);
// Get STGL mail address, if available
if (hasData($result))
{
return array(
$result->retval[0]->uid. '@'. DOMAIN,
$result->retval[0]->vorname
);
}
// ...otherwise get assistance mail address
else
{
$result = $this->StudiengangModel->load($stg_kz);
if (hasData($result))
{
return array(
$result->retval[0]->email,
''
);
}
}
}
}
@@ -270,7 +270,6 @@ class Lehrauftrag extends Auth_Controller
private function _sendMail($lehrvertrag_data_arr)
{
// Cluster data of new lehrvertraege as needed to send mail
$lehrvertrag_data_arr = $this->_cluster_newVertragData($lehrvertrag_data_arr);
foreach ($lehrvertrag_data_arr as $lehrvertrag_data)
{
+13
View File
@@ -47,6 +47,19 @@ abstract class JQW_Controller extends JOB_Controller
return $jobs;
}
/**
* To get the oldest added job using the given job type
*/
protected function getOldestJob($type)
{
$jobs = $this->jobsqueuelib->getOldestJob($type);
// If an error occurred then log it in database
if (isError($jobs)) $this->logError(getError($jobs), $type);
return $jobs;
}
/**
* To get all the jobs specified by the given parameters
*/
+643
View File
@@ -0,0 +1,643 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AnrechnungLib
{
const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR = 'AnrechnungNotizLektor';
const ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL = 'AnrechnungNotizSTGL';
public function __construct()
{
$this->ci =& get_instance();
$this->ci->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->ci->load->model('person/Person_model', 'PersonModel');
$this->ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->ci->load->model('crm/Student_model', 'StudentModel');
$this->ci->load->model('content/DmsVersion_model', 'DmsVersionModel');
}
/**
* Get Antrag data
* @param $uid
* @param $studiensemester_kurzbz
* @param $lv_id
* @return StdClass
*/
public function getAntragData($uid, $studiensemester_kurzbz, $lv_id)
{
$antrag_data = new StdClass();
// Get lehrveranstaltung data. Break, if course is not assigned to student.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
{
show_error('You are not assigned to this course yet.');
}
// Get the students personal data
if (!$person = getData($this->ci->PersonModel->getByUid($uid))[0])
{
show_error('Failed loading person data.');
}
// Get the internal personenkennzeichen
if (!$student = getData($this->ci->StudentModel->load(array('student_uid' => $uid)))[0])
{
show_error(getError($student));
}
// Get studiengang bezeichnung
if (!$studiengang = getData($this->ci->StudiengangModel->load($lv->studiengang_kz))[0])
{
show_error('Failed loading studiengang data.');
}
// Get lectors of lehrveranstaltung
$antrag_data->lektoren = array();
if (!$lv_lektoren = getData($this->ci->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lv_id)))
{
show_error('Failed loading course lectors.');
}
// Set the given studiensemester
$antrag_data->lv_id = $lv_id;
$antrag_data->lv_bezeichnung = $lv->bezeichnung;
$antrag_data->ects = $lv->ects;
$antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz;
$antrag_data->vorname = $person->vorname;
$antrag_data->nachname = $person->nachname;
$antrag_data->matrikelnr = $student->matrikelnr;
$antrag_data->stg_bezeichnung = $studiengang->bezeichnung;
$antrag_data->lektoren = $lv_lektoren;
return $antrag_data;
}
/**
* Get Anrechnung data, last status and Nachweisdokument dms data.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getAnrechnungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$anrechnung_data = new StdClass();
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* Get Anrechnung data by Lehrveranstaltung. Also retrieves last status and Nachweisdokument dms data.
* @param $lehrveranstaltung_id
* @return array
* @throws Exception
*/
public function getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id)
{
$anrechnung_data = new StdClass();
$anrechnung_data->anrechnung_id = '';
$anrechnung_data->prestudent_id = '';
$anrechnung_data->lehrveranstaltung = '';
$anrechnung_data->begruendung_id = '';
$anrechnung_data->anmerkung = '';
$anrechnung_data->dms_id = '';
$anrechnung_data->insertamum = '';
$anrechnung_data->insertvon = '';
$anrechnung_data->studiensemester_kurzbz = '';
$anrechnung_data->empfehlung = '';
$anrechnung_data->status_kurzbz = '';
$anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new';
$anrechnung_data->dokumentname = '';
$result = $this->ci->AnrechnungModel->loadWhere(
array(
'lehrveranstaltung_id' => $lehrveranstaltung_id,
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'prestudent_id' => $prestudent_id
)
);
if (isError($result))
{
show_error(getError($result));
}
if ($anrechnung = getData($result)[0])
{
$anrechnung_data = $this->_setAnrechnungDataObject($anrechnung);
}
return success($anrechnung_data);
}
/**
* Get students data by Anrechnung
* @param $anrechnung_id
* @return mixed
*/
public function getStudentData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$this->ci->AnrechnungModel->addSelect('tbl_benutzer.uid, tbl_prestudent.prestudent_id, tbl_person.person_id, tbl_anrechnung.studiensemester_kurzbz, vorname, nachname, geschlecht, tbl_lehrveranstaltung.bezeichnung AS "lv_bezeichnung"');
$this->ci->AnrechnungModel->addJoin('public.tbl_prestudent', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_student', 'prestudent_id');
$this->ci->AnrechnungModel->addJoin('public.tbl_benutzer', 'uid=student_uid');
$this->ci->AnrechnungModel->addJoin('public.tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
$this->ci->AnrechnungModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
if (isError($result))
{
show_error(getError($result));
}
if (!hasData($result))
{
show_error('Failed retrieving students data');
}
return $result;
}
/**
* Get Empfehlung data object.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getEmpfehlungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$empfehlung_data = new stdClass();
$empfehlung_data->empfehlung = null;
$empfehlung_data->empfehlung_von = '-';
$empfehlung_data->empfehlung_am = '-';
$empfehlung_data->empfehlung_angefordert_am = '-';
$empfehlung_data->notiz = ''; // Begruendung, if not recommended
if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
// Get date, where recommendation was last requested
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus(
$anrechnung_id,
self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR // when STLG asks for recommendation, status is set to in progress lektor
);
if ($result = getData($result)[0])
{
$empfehlung_data->empfehlung_angefordert_am = (new DateTime($result->insertamum))->format('d.m.Y');
}
if (is_null($anrechnung->empfehlung_anrechnung))
{
return success($empfehlung_data);
}
// If Empfehlung is true or false
if (!is_null($anrechnung->empfehlung_anrechnung))
{
// Get last lector and date, where recommendation was given
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus(
$anrechnung_id,
self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL // when lector sends recommendation, status is set to in progress STGL again
);
if ($result = getData($result)[0])
{
$empfehlung_datum = (new DateTime($result->insertamum))->format('d.m.Y');
}
// Get full name of lector
$result = $this->ci->PersonModel->getByUID($result->insertvon);
if ($result = getData($result)[0])
{
$empfehlung_von = $result->vorname. ' '. $result->nachname;
}
$empfehlung_data->empfehlung = $anrechnung->empfehlung_anrechnung;
$empfehlung_data->empfehlung_von = $empfehlung_von;
$empfehlung_data->empfehlung_am = $empfehlung_datum;
}
// If Empfehlung is false, retrieve also Notiz with Begruendung
if (!$anrechnung->empfehlung_anrechnung)
{
// Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet)
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR);
if ($notiz = getData($result)[0])
{
$empfehlung_data->notiz = $notiz->text;
}
}
return success($empfehlung_data);
}
/**
* Get Genehmigung data object.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function getGenehmigungData($anrechnung_id)
{
if (!is_numeric($anrechnung_id))
{
show_error('Incorrect parameter');
}
$genehmigung_data = new stdClass();
$genehmigung_data->genehmigung = null;
$genehmigung_data->abgeschlossen_von = '-';
$genehmigung_data->abgeschlossen_am = '-';
$genehmigung_data->notiz = ''; // Begruendung, if rejected
if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0])
{
show_error('Failed loading Anrechnung');
}
// Get date of approvement or rejection
$result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id);
if (!$result = getData($result)[0])
{
return success($genehmigung_data);
}
$genehmigung_data->genehmigung = $result->status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
? true
: false;
$genehmigung_data->abgeschlossen_am = (new DateTime($result->insertamum))->format('d.m.Y');
// Get full name of lector
$result = $this->ci->PersonModel->getByUID($result->insertvon);
if ($result = getData($result)[0])
{
$genehmigung_data->abgeschlossen_von = $result->vorname. ' '. $result->nachname;
}
// If Anrechnung was rejected, retrieve also Notiz with Begruendung
if (!$genehmigung_data->genehmigung)
{
// Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet)
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL);
if ($notiz = getData($result)[0])
{
$genehmigung_data->notiz = $notiz->text;
}
}
return success($genehmigung_data);
}
/**
* Get last Anrechnungstatusbezeichnung in users language.
* @param $anrechnung_id
* @return mixed
*/
public function getLastAnrechnungstatus($anrechnung_id)
{
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id);
$status_mehrsprachig = getData($result)[0]->bezeichnung_mehrsprachig;
$status = getUserLanguage() == 'German' ? $status_mehrsprachig[0] : $status_mehrsprachig[1];
return $status;
}
/**
* Approve Anrechnung.
* Checks last status of Anrechnung and will only approve if last status is not approved or rejected.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function approveAnrechnung($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
$stgl_uid = getAuthUID();
// Insert new status approved
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_APPROVED);
// Update genehmigt von
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'genehmigt_von' => $stgl_uid
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // approved
}
/**
* Reject Anrechnung.
* @param $anrechnung_id
* @return array
*/
public function rejectAnrechnung($anrechnung_id, $begruendung)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont reject
}
// Insert new status rejected
$result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_REJECTED);
if (isError($result))
{
show_error(getError($result));
}
// Add begruendung as notiz
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$this->ci->NotizModel->addNotizForAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL,
$begruendung,
getAuthUID()
);
return success(true); // rejected
}
/**
* Request recommendation.
* @param $anrechnung_id
* @return array
*/
public function requestRecommendation($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected or processed by lector
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED
|| $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED
|| $status_kurzbz == self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR)
{
return success(false); // dont ask for recommendation
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status inProgressLektor
$result = $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR);
/**
* Anyway update empfehlung_anrechnung to be null
* Regardless of what empfehlung_anrechnung was already set (true/false/null), it should be (reset to ) null by
* requesting a (new) recommendation.
* **/
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => null
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
/**
* Recommend Anrechnung.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function recommendAnrechnung($anrechnung_id)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status progessed by stgl
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
// Update empfehlung_anrechnung
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => true
)
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
/**
* Do not recommend Anrechnung.
* @param $anrechnung_id
* @return array
* @throws Exception
*/
public function dontRecommendAnrechnung($anrechnung_id, $begruendung)
{
// Check last Anrechnungstatus
if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0])
{
show_error(getError($result));
}
$status_kurzbz = $result->status_kurzbz;
// Exit if already approved or rejected
if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED)
{
return success(false); // dont approve
}
// Start DB transaction
$this->ci->db->trans_start(false);
// Insert new status progessed by stgl
$this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL);
// Update empfehlung_anrechnung
$this->ci->AnrechnungModel->update(
$anrechnung_id,
array(
'empfehlung_anrechnung' => false
)
);
$lektor_uid = getAuthUID();
// Add begruendung as notiz
$this->ci->load->model('person/Notiz_model', 'NotizModel');
$this->ci->NotizModel->addNotizForAnrechnung(
$anrechnung_id,
self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_LEKTOR,
$begruendung,
$lektor_uid
);
// Transaction complete
$this->ci->db->trans_complete();
if ($this->ci->db->trans_status() === false)
{
$this->ci->db->trans_rollback();
return error($result->msg, EXIT_ERROR);
}
return success(true); // recommended
}
// Return an object with Anrechnungdata
private function _setAnrechnungDataObject($anrechnung)
{
$anrechnung_data = new StdClass();
// Get Anrechnung data
$anrechnung_data->anrechnung_id = $anrechnung->anrechnung_id;
$anrechnung_data->prestudent_id = $anrechnung->prestudent_id;
$anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id;
$anrechnung_data->begruendung_id = $anrechnung->begruendung_id;
$anrechnung_data->anmerkung = $anrechnung->anmerkung_student;
$anrechnung_data->dms_id = $anrechnung->dms_id;
$anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y');
$anrechnung_data->insertvon= $anrechnung->insertvon;
$anrechnung_data->studiensemester_kurzbz= $anrechnung->studiensemester_kurzbz;
$anrechnung_data->empfehlung= $anrechnung->empfehlung_anrechnung;
// Get last status_kurzbz
$result = $this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung->anrechnung_id);
$anrechnung_data->status_kurzbz = $result->retval[0]->status_kurzbz;
// Get last status bezeichnung in the users language
$anrechnung_data->status = $this->getLastAnrechnungstatus($anrechnung->anrechnung_id);
// Get document name
$this->ci->DmsVersionModel->addSelect('name');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $anrechnung->dms_id));
if (isError($result))
{
show_error(getError($result));
}
$anrechnung_data->dokumentname = $result->retval[0]->name;
return $anrechnung_data;
}
}
+95
View File
@@ -6,6 +6,9 @@ class DmsLib
{
const FILE_CONTENT_PROPERTY = 'file_content';
const FILE_INPUT_NAME = 'uploadfile'; // name of the HTML input tag containing the uploaded file
private $UPLOAD_PATH = DMS_PATH; // temporary directory to store the upload file
/**
* Object initialization
*/
@@ -93,6 +96,84 @@ class DmsLib
return $result;
}
/**
* Uploads a document and saves it to DMS
* @param $dms DMS assoc array
* @param array $allowed_types Default: all. Param example: array(jpg, pdf)
* @return array
*/
public function upload($dms, $allowed_types = array('*'))
{
// Init upload configs
$this->_loadUploadLibrary($allowed_types);
if (!$this->ci->upload->do_upload(DmsLib::FILE_INPUT_NAME))
{
return error($this->ci->upload->display_errors());
}
$upload_data = $this->ci->upload->data(); // data about the uploaded file
$filename = $upload_data['file_name'];
// Insert to DMS table
if (!$result = $this->ci->DmsModel->insert($this->ci->DmsModel->filterFields($dms)))
{
return error('Failed inserting to DMS');
}
$upload_data['dms_id'] = $result->retval;
// Insert DMS version
if (!$result = $this->ci->DmsVersionModel->insert(
$this->ci->DmsVersionModel->filterFields($dms, $result->retval, $filename)))
{
return error('Failed inserting DMS version');
}
// return result of uploaded data
return success($upload_data); // data about the uploaded file
}
/**
* Download a document
* @param $dms_id
*/
public function download($dms_id)
{
if (!is_numeric($dms_id))
{
show_error('Wrong parameter');
}
$this->ci->DmsVersionModel->addSelect('filename');
$result = $this->ci->DmsVersionModel->loadWhere(array('dms_id' => $dms_id));
if (isError($result))
{
show_error(getError($result));
}
$filename = $result->retval[0]->filename;
$file = DMS_PATH. $filename;
if (file_exists($file))
{
$finfo = new finfo(FILEINFO_MIME);
header('Content-Description: File Transfer');
header('Content-Type: '.$finfo->file($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
else
{
show_error('File does not exist');
}
}
/**
* Saves a Document
* @param object $dms DMS Object ot be saved.
@@ -302,4 +383,18 @@ class DmsLib
return $result;
}
/**
* Loads the upload library of CI
*/
private function _loadUploadLibrary($allowed_types)
{
$config['upload_path'] = $this->UPLOAD_PATH;
$config['allowed_types'] = implode('|', $allowed_types);
$config['overwrite'] = true;
$config['file_name'] = uniqid().'.pdf';
$this->ci->load->library('upload', $config);
$this->ci->upload->initialize($config);
}
}
+13
View File
@@ -56,6 +56,19 @@ class JobsQueueLib
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
}
/**
* To get the oldest added jobs using the given job type
*/
public function getOldestJob($type)
{
$this->_ci->JobsQueueModel->resetQuery();
$this->_ci->JobsQueueModel->addOrder('creationtime', 'ASC');
$this->_ci->JobsQueueModel->addLimit('1');
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
}
/**
* To get all the jobs specified by the given parameters
*/
+4 -2
View File
@@ -167,7 +167,7 @@ class LDAPLib
}
// LDAP connection
$ldapConnection = @ldap_connect($ldapConfigs[self::SERVER], $ldapConfigs[self::PORT]);
$ldapConnection = @ldap_connect($ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]);
if ($ldapConnection) // if success
{
// Sets the LDAP protocol version
@@ -220,7 +220,9 @@ class LDAPLib
}
else // Connection error
{
return error(ldap_error($ldapConnection));
return error(
'An error occurred while connecting to the LDAP server: '.$ldapConfigs[self::SERVER].':'.$ldapConfigs[self::PORT]
);
}
}
}
+21
View File
@@ -45,4 +45,25 @@ class Student_model extends DB_Model
$max += 1;
return $matrikelnummer.sprintf("%03d", $max);
}
/**
* Get students UID by PrestudentID.
* @param $prestudent_id
* @return mixed
*/
public function getUID($prestudent_id)
{
$this->addSelect('student_uid');
$result = $this->loadWhere(
array('prestudent_id' => $prestudent_id)
);
if (!hasData($result))
{
show_error('Failed getting UID by prestudent_id');
}
return $result->retval[0]->student_uid;
}
}
@@ -11,4 +11,76 @@ class Anrechnung_model extends DB_Model
$this->dbTable = 'lehre.tbl_anrechnung';
$this->pk = 'anrechnung_id';
}
/**
* Save Anrechnungstatus.
* @param $anrechnung_id
* @param $status_kurzbz
* @return array|null
*/
public function saveAnrechnungstatus($anrechnung_id, $status_kurzbz)
{
$qry = '
INSERT INTO lehre.tbl_anrechnung_anrechnungstatus (
anrechnung_id, status_kurzbz, insertvon
) VALUES ( ?, ?, ?);
';
return $this->execQuery($qry, array($anrechnung_id, $status_kurzbz, getAuthUID()));
}
/**
* Get the last inserted Anrechnungstatus
* @param $anrechnung_id
* @return array|null
*/
public function getLastAnrechnungstatus($anrechnung_id, $status_kurzbz = null)
{
if (is_string($status_kurzbz))
{
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
AND status_kurzbz = ?
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id, $status_kurzbz));
}
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id));
}
/**
* Get status approved / rejected, if present.
* @param $anrechnung_id
* @return array|null
*/
public function getApprovedOrRejected($anrechnung_id)
{
$qry = '
SELECT *
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = ?
AND (status_kurzbz = \'approved\' OR status_kurzbz = \'rejected\')
ORDER BY insertamum DESC
LIMIT 1
';
return $this->execQuery($qry, array($anrechnung_id));
}
}
@@ -0,0 +1,15 @@
<?php
class Anrechnungstatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnungstatus';
$this->pk = 'status_kurzbz';
}
}
@@ -273,4 +273,24 @@ 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.
* @param $uid
* @param $studiensemester_kurzbz
* @param $lehrveranstaltung_id
* @return array|null
*/
public function getLvByStudent($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)
{
$query = '
SELECT * FROM campus.vw_student_lehrveranstaltung
WHERE uid = ?
AND studiensemester_kurzbz = ?
AND lehrveranstaltung_id = ?;
';
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
}
@@ -41,4 +41,23 @@ class Projektbetreuer_model extends DB_Model
return error ('Incorrect parameter type');
}
}
/**
* Get Projektbetreuer data by authentification token
* @param $zugangstoken
* @return object
*/
public function getBetreuerByToken($zugangstoken)
{
$qry = '
SELECT tbl_projektbetreuer.person_id, tbl_projektbetreuer.projektarbeit_id, student_uid
FROM lehre.tbl_projektbetreuer
JOIN lehre.tbl_projektarbeit USING (projektarbeit_id)
WHERE zugangstoken = ? AND zugangstoken_gueltigbis >= NOW()
ORDER BY tbl_projektbetreuer.insertamum DESC, projektarbeit_id DESC
LIMIT 1
';
return $this->execQuery($qry, array($zugangstoken));
}
}
@@ -10,5 +10,6 @@ class Zeugnisnote_model extends DB_Model
parent::__construct();
$this->dbTable = 'lehre.tbl_zeugnisnote';
$this->pk = array('studiensemester_kurzbz', 'student_uid', 'lehrveranstaltung_id');
$this->hasSequence = false;
}
}
@@ -448,4 +448,37 @@ class Studiengang_model extends DB_Model
return $this->execQuery($query, array($typ));
}
/**
* Get Studiengangsleitung
* @param null $studiengang_kz
* @return array
*/
public function getLeitung($studiengang_kz = null)
{
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email');
$this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz');
$this->addJoin('public.tbl_benutzer', 'uid');
$this->addJoin('public.tbl_person', 'person_id');
if (is_null($studiengang_kz))
{
$condition = '
funktion_kurzbz = \'Leitung\'
AND ( datum_von <= NOW() OR datum_von IS NULL )
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
';
}
elseif (is_numeric($studiengang_kz))
{
$condition = '
funktion_kurzbz = \'Leitung\'
AND ( datum_von <= NOW() OR datum_von IS NULL )
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
AND studiengang_kz = ' . $this->db->escape($studiengang_kz, FHC_INTEGER)
;
}
return $this->loadWhere($condition);
}
}
@@ -13,6 +13,11 @@ class Benutzer_model extends DB_Model
$this->hasSequence = false;
}
/**
* Gets active Benutzer from person_id
* @param $person_id
* @return object
*/
public function getFromPersonId($person_id)
{
return $this->loadWhere(array('person_id' => $person_id, 'aktiv' => true));
+70
View File
@@ -158,6 +158,76 @@ class Notiz_model extends DB_Model
return $this->loadWhere(array('person_id' => $person_id, 'titel LIKE' => $titel));
}
/**
* Add a Notiz for a given Anrechnung
* @param $anrechnung_id
* @param $titel
* @param $text
* @param $verfasser_uid
* @return array
*/
public function addNotizForAnrechnung($anrechnung_id, $titel, $text, $verfasser_uid)
{
// Loads model Notizzuordnung_model
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
// Start DB transaction
$this->db->trans_start(false);
$result = $this->insert(array(
'titel' => $titel,
'text' => $text,
'erledigt' => true,
'verfasser_uid' => $verfasser_uid,
"insertvon" => $verfasser_uid
));
if (isSuccess($result))
{
$notiz_id = $result->retval;
$result = $this->NotizzuordnungModel->insert(array('notiz_id' => $notiz_id, 'anrechnung_id' => $anrechnung_id));
}
// Transaction complete!
$this->db->trans_complete();
// Check if everything went ok during the transaction
if ($this->db->trans_status() === false || isError($result))
{
$this->db->trans_rollback();
$result = error($result->msg, EXIT_ERROR);
}
else
{
$this->db->trans_commit();
$result = success($notiz_id);
}
return $result;
}
/**
* Get Notizen by Anrechnung and title ordered last first
*
* @param $anrechnung_id
* @return array
*/
public function getNotizByAnrechnung($anrechnung_id, $titel = null)
{
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
$this->addOrder('insertamum', 'DESC');
if (is_string($titel))
{
return $this->loadWhere(array(
'anrechnung_id' => $anrechnung_id,
'titel' => $titel
));
}
return $this->loadWhere(array('anrechnung_id' => $anrechnung_id));
}
// ------------------------------------------------------------------------------------------------------
}
+16 -1
View File
@@ -191,7 +191,7 @@ class Person_model extends DB_Model
*/
public function getByUid($uid)
{
$this->addSelect('vorname, nachname, gebdatum, person_id');
$this->addSelect('vorname, nachname, gebdatum, person_id, bpk, matr_nr');
$this->addJoin('tbl_benutzer', 'person_id');
return $this->loadWhere(array('uid' => $uid));
@@ -248,4 +248,19 @@ class Person_model extends DB_Model
return $this->execQuery($qry, $parametersArray);
}
/**
* Get full name of given uid. (Vorname Nachname)
* @param $uid
* @return array
*/
public function getFullName($uid)
{
if (!$result = getData($this->getByUid($uid))[0])
{
show_error('Failed loading person');
}
return success($result->vorname. ' '. $result->nachname);
}
}
@@ -0,0 +1,359 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen',
'nichtSelektierbarAufgrundVon',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/approveAnrechnungDetail.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenGenehmigen'); ?>
<small>| <?php echo $this->p->t('global', 'detailsicht'); ?></small>
</h3>
</div>
</div>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="approveAnrechnungDetail-anrechnungInfoTooltip"
data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="approveAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default" id="test">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-empfehlungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'empfehlungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="approveAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="approveAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz != 'inProgressLektor' ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'keineEmpfehlungAngefordert'); ?>
</div>
<div class="panel panel-default panel-body <?php echo
is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressLektor'
? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsAngefordert">
<?php echo $this->p->t('anrechnung', 'empfehlungAngefordertNochKeineEmpfehlung'); ?>
<span id="approveAnrechnungDetail-empfehlungDetail-empfehlungAngefordertAm">
<?php echo $empfehlungData->empfehlung_angefordert_am ?>
</span>.
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
</div>
</form>
<div class="pull-right">
<button id="approveAnrechnungDetail-request-recommendation" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) && $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?>
</button>
</div>
</div>
</div>
<br><br>
<!-- Genehmigungssdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'genehmigung'); ?></b></span>&emsp;
<!-- <span class="approveAnrechnungDetail-genehmigungInfoTooltip"-->
<!-- data-toggle="tooltip" data-placement="right"-->
<!-- title="--><?php //echo $this->p->t('anrechnung', 'genehmigungInfoTooltipText'); ?><!--">-->
<!-- <i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>-->
<!-- </span>-->
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'abgeschlossenVon'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenVon"><?php echo $genehmigungData->abgeschlossen_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'abschlussdatum'); ?>:
<span id="approveAnrechnungDetail-abgeschlossenAm"><?php echo $genehmigungData->abgeschlossen_am ?></span>
</div>
</div>
<div class="panel-body" id="approveAnrechnungDetail-genehmigungDetail">
<div class="panel panel-default panel-body <?php echo is_null($genehmigungData->genehmigung) ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineGenehmigung'); ?>
</div>
<div class="alert alert-success <?php echo $genehmigungData->genehmigung === true ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv">
<b><?php echo $this->p->t('anrechnung', 'genehmigungPositiv'); ?></b>
</div>
<div class="<?php echo $genehmigungData->genehmigung === false ? '' : 'hidden' ?>"
id="approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'genehmigungNegativ'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="approveAnrechnungDetail-genehmigungDetail-begruendung"><?php echo htmlentities($genehmigungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungNegativQuestion'); ?></h4>
<b>&nbsp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-reject-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungDetail-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'genehmigungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungDetail-genehmigung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="approveAnrechnungDetail-reject-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'ablehnen')); ?>
</button>
<button id="approveAnrechnungDetail-approve-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo $anrechnungData->status_kurzbz == 'inProgressDP' ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('global', 'genehmigen')); ?>
</button>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="approveAnrechnungDetail-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<br>
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,236 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenGenehmigen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'tabulator' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
),
'anrechnung' => array(
'nachweisdokumente',
'empfehlung',
'confirmTextAntragHatBereitsEmpfehlung',
'herkunft'
),
'ui' => array(
'anzeigen',
'alleAnzeigen',
'hilfeZuDieserSeite',
'hochladen',
'spaltenEinstellen',
'hilfeZuDieserSeite',
'alleAuswaehlen',
'alleAbwaehlen',
'ausgewaehlteZeilen',
'hilfe',
'tabelleneinstellungen',
'keineDatenVorhanden',
'spaltenEinstellen',
'ja',
'nein',
'nichtSelektierbarAufgrundVon',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt'
),
'person' => array(
'student',
'personenkennzeichen',
'vorname',
'nachname'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/approveAnrechnungUebersicht.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenGenehmigen'); ?>
<small>| <?php echo ucfirst($this->p->t('global', 'uebersicht')); ?></small>
</h3>
</div>
</div>
<!-- dropdown studiensemester -->
<div class="row">
<div class="col-lg-12">
<form id="formApproveAnrechnungUebersicht" class="form-inline" action="" method="get">
<div class="form-group">
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<button type="submit"
class="btn btn-default form-group"><?php echo ucfirst($this->p->t('ui', 'anzeigen')); ?></button>
</form>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
</div>
</div>
<!-- Genehmigen / Ablehnen Panel -->
<div class="row">
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'genehmigungenNegativQuestion'); ?></h4>
&nbsp;<b><?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ol>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativPruefungNichtMoeglich'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ol>
<br>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="approveAnrechnungUebersicht-genehmigung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'genehmigungenPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'genehmigungenPositiv'); ?><br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="approveAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</div>
<!-- Filter buttons / Submit buttons-->
<div class="row">
<!-- Filter buttons -->
<div class="col-xs-3">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<button id="show-inProgressDP" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'alleInBearbeitungSTGL'); ?>">
<i class='fa fa-eye'></i>
</button>
<button id="show-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-up'></i>
</button>
<button id="show-not-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurNichtEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-down'></i>
</button>
<button id="show-approved" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurGenehmigteAnzeigen'); ?>"><i
class='fa fa-check'></i>
</button>
<button id="show-rejected" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurAbgelehnteAnzeigen'); ?>"><i
class='fa fa-times'></i>
</button>
</div>
</div>
</div>
<!-- Action Buttons 'Genehmigen', Ablehnen, 'Empfehlung anfordern'-->
<div class="col-xs-9">
<div class="pull-right">
<button id="approveAnrechnungUebersicht-request-recommendation"
class="btn btn-default btn-w200 btn-mr50"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlungAnfordern')); ?></button>
<button id="approveAnrechnungUebersicht-reject-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('global', 'ablehnen')); ?></button>
<button id="approveAnrechnungUebersicht-approve-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('global', 'genehmigen')); ?></button>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,128 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$query = '
WITH anrechnungen AS
(
SELECT DISTINCT
anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
)
SELECT anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'approveAnrechnungUebersicht',
'requiredPermissions' => 'lehre/anrechnung_genehmigen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'anrechnung_id',
'lehrveranstaltung_id',
'begruendung_id',
'dms_id',
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentLayout:true,
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
selectable: true, // allow row selection
selectableRangeMode: "click", // allow range selection using shift end click on end of range
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetFooter: {
selectButtons: true
},
selectableCheck: function(row){
return func_selectableCheck(row);
},
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
},
tooltips: function(cell){
return func_tooltips(cell);
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
stg_bezeichnung: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_bezeichnung: {headerFilter:"input"}
}', // col properties
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
@@ -0,0 +1,242 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'antragStellen'),
'jquery' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/requestAnrechnung.js'
)
)
);
?>
<style>
.tooltip-inner {
width:300px;
}
</style>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anerkennungNachgewiesenerKenntnisse'); ?>
<small>| <?php echo $this->p->t('anrechnung', 'antragStellen'); ?></small>
</h3>
</div>
</div>
<?php echo form_open_multipart(current_url() . '/apply',
['id' => 'requestAnrechnung-form'],
['lv_id' => $antragData->lv_id, 'studiensemester' => $antragData->studiensemester_kurzbz]
); ?>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten, Dokument Upload, Notiz-->
<div class="row">
<div class="col-lg-12">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="requestAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'lektor')); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Antrag mit Checkboxen -->
<div class="row">
<div class="col-lg-12">
<div class="well" style="border:solid black 3px">
<span><?php echo $this->p->t('anrechnung', 'antragStellenText'); ?></span>&emsp;
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="1" required
<?php echo $anrechnungData->begruendung_id == '1' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenZeugnis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundZeugnisTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundZeugnisTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
<div class="checkbox">
<label>
<input type="radio" name="begruendung" value="4" required
<?php echo $anrechnungData->begruendung_id == '4' ? 'checked' : ''; ?>
<?php echo $disabled; ?>>
<?php echo $this->p->t('anrechnung', 'antragStellenWegenPraxis'); ?>&emsp;
<span id="requestAnrechnung-anrechnungGrundBerufTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundBerufTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</label>
</div>
</div>
</div>
</div>
<!-- Dokument Upload-->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungGrundAllgemeinTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="form-inline panel-body">
<div class="form-group">
<input type="file" id="requestAnrechnung-uploadfile"
name="uploadfile" accept=".pdf" size="50"
required <?php echo $disabled; ?>>
</div>
<span id="requestAnrechnung-uploadTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'uploadTooltipText'); ?>">
<i class="fa fa-lg fa-question-circle-o" aria-hidden="true"></i>
</span>
<?php if (!empty($anrechnungData->dms_id)): ?>
<a class="pull-right"
href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Notiz -->
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<b><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></b>&emsp;
<span class="requestAnrechnung-anrechnungInfoTooltip" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
</div>
<div class="panel-body">
<textarea class="form-control" name="anmerkung" rows="2"
required <?php echo $disabled; ?>><?php echo $anrechnungData->anmerkung; ?></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Submit button 'Anrechnung beantragen'-->
<div class="pull-right">
<input type="submit" id="requestAnrechnung-submit" class="btn btn-primary"
value="<?php echo $this->p->t('anrechnung', 'anrechnungBeantragen'); ?>" <?php echo $disabled; ?>>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="requestAnrechnung-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<?php if ($is_expired): ?>
<div class="alert alert-warning">
<?php echo $this->p->t('global', 'bearbeitungGesperrt'); ?>
<?php echo $is_expired && empty($antragData->anrechnung_id) ? ': ' . $this->p->t('anrechnung', 'deadlineUeberschritten') : ''; ?>
</div>
<?php endif; ?>
<br>
<?php $this->load->view('lehre/anrechnung/requestAnrechnungImportant'); ?>
</div>
</div>
<?php echo form_close(); ?>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,53 @@
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<!-- Beantragung: Fristen panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"
aria-expanded="true" aria-controls="collapseOne">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoFristenBody'); ?>
</div>
</div>
</div>
<!-- Nachweisdokumente: Voraussetzung panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingTwo">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"
aria-expanded="false" aria-controls="collapseTwo">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteTitle'); ?>
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoNachweisdokumenteBody'); ?>
</div>
</div>
</div>
<!-- Herkunft der Kenntnisse: Angaben panel -->
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingThree">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree"
aria-expanded="false" aria-controls="collapseThree">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseTitle'); ?>
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'requestAnrechnungInfoHerkunftKenntnisseBody'); ?>
</div>
</div>
</div>
</div>
@@ -0,0 +1,278 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'ajaxlib' => true,
'dialoglib' => true,
'phrases' => array(
'global' => array(
'anerkennungNachgewiesenerKenntnisse',
'antragStellen'
),
'ui' => array(
'hilfeZuDieserSeite',
'hochladen',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen'
),
'person' => array(
'student',
'personenkennzeichen'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
)
),
'customCSSs' => array(
'public/css/Tabulator.css'
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/reviewAnrechnungDetail.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenPruefen'); ?>
<small>| <?php echo $this->p->t('global', 'detailsicht'); ?></small>
</h3>
</div>
</div>
<div class="row">
<div class="col-xs-8">
<div class="panel panel-default">
<div class="panel-body">
<!-- Antragsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'antrag'); ?></b></span>
</span>&emsp;
<span class="reviewAnrechnungDetail-anrechnungInfoTooltip" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('anrechnung', 'anrechnungInfoTooltipText'); ?>">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>
</span>
<span class="pull-right"><?php echo $this->p->t('anrechnung', 'antragdatum'); ?>: <span
id="reviewAnrechnung-status"><?php echo !empty($anrechnungData->anrechnung_id) ? $anrechnungData->insertamum : '-' ?></span></span>
</div>
<table class="panel-body table table-bordered table-condensed">
<tbody>
<tr>
<td><?php echo ucfirst($this->p->t('person', 'student')); ?></td>
<td><?php echo $antragData->vorname . ' ' . $antragData->nachname; ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('person', 'personenkennzeichen'); ?></td>
<td><?php echo $antragData->matrikelnr ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiensemester')); ?></td>
<td><?php echo $antragData->studiensemester_kurzbz ?></td>
</tr>
<tr>
<td><?php echo ucfirst($this->p->t('lehre', 'studiengang')); ?></td>
<td><?php echo $antragData->stg_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lehrveranstaltung'); ?></td>
<td><?php echo $antragData->lv_bezeichnung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'ects'); ?></td>
<td><?php echo $antragData->ects ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('lehre', 'lektorInnen'); ?></td>
<td>
<?php $len = count($antragData->lektoren) - 1 ?>
<?php foreach ($antragData->lektoren as $key => $lektor): ?>
<?php echo $lektor->vorname . ' ' . $lektor->nachname;
echo $key === $len ? '' : ', ' ?>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'herkunftDerKenntnisse'); ?></td>
<td><?php echo $anrechnungData->anmerkung ?></td>
</tr>
<tr>
<td><?php echo $this->p->t('anrechnung', 'nachweisdokumente'); ?></td>
<td>
<a href="<?php echo current_url() . '/download?dms_id=' . $anrechnungData->dms_id; ?>"
target="_blank"><?php echo htmlentities($anrechnungData->dokumentname) ?></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Empfehlungsdaten -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="text-uppercase"><b><?php echo $this->p->t('anrechnung', 'empfehlung'); ?></b></span>
<div class="pull-right">
<?php echo $this->p->t('anrechnung', 'empfehlungVon'); ?>:
<span id="reviewAnrechnungDetail-empfehlungVon"><?php echo $empfehlungData->empfehlung_von ?></span>
&emsp;|&emsp;
<?php echo $this->p->t('anrechnung', 'empfehlungdatum'); ?>:
<span id="reviewAnrechnungDetail-empfehlungAm"><?php echo $empfehlungData->empfehlung_am ?></span>
</div>
</div>
<div class="panel-body" id="reviewAnrechnungDetail-empfehlungDetail">
<div class="panel panel-default panel-body <?php echo is_null($empfehlungData->empfehlung) ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsNull">
<?php echo $this->p->t('anrechnung', 'nochKeineEmpfehlung'); ?>
</div>
<div class="alert alert-success <?php echo $empfehlungData->empfehlung === true ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue">
<b><?php echo $this->p->t('anrechnung', 'empfehlungPositivConfirmed'); ?></b>
</div>
<div class="<?php echo $empfehlungData->empfehlung === false ? '' : 'hidden' ?>"
id="reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse">
<div class="alert alert-danger">
<b><?php echo $this->p->t('anrechnung', 'empfehlungNegativConfirmed'); ?></b>
</div>
<div class="well"><b><?php echo $this->p->t('global', 'begruendung'); ?>
: </b>
<span id="reviewAnrechnungDetail-empfehlungDetail-begruendung"><?php echo htmlentities($empfehlungData->notiz) ?></span>
</div>
</div>
</div>
<div class="panel-body">
<form>
<input type="hidden" name="anrechnung_id"
value="<?php echo $anrechnungData->anrechnung_id ?>">
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungDetail-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungNegativQuestion'); ?></h4>
&ensp;
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp;
<span class="btn-copyIntoTextarea" data-toggle="tooltip"
data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-begruendung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungDetail-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungPositivSubquestion'); ?>
<br><br>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungDetail-empfehlung-abbrechen"
class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button>
</div>
</div>
<div class="col-xs-4">
<div class="alert text-center">
Status:
<b><span class="text-uppercase" id="reviewAnrechnungDetail-status_kurzbz"
data-status_kurzbz="<?php echo $anrechnungData->status_kurzbz ?>">
<?php echo $anrechnungData->status; ?>
</span></b>
</div>
<br>
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,66 @@
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"
aria-expanded="true" aria-controls="collapseOne">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoFristenBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingZero">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseZero"
aria-expanded="true" aria-controls="collapseZero">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenTitle'); ?>
</a>
</h4>
</div>
<div id="collapseZero" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingZero">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoAntragVoraussetungenBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingTwo">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"
aria-expanded="false" aria-controls="collapseTwo">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteTitle'); ?>
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoNachweisdokumenteBody'); ?>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading" role="tab" id="headingThree">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree"
aria-expanded="false" aria-controls="collapseThree">
<i class="fa fa-lg fa-info-circle" aria-hidden="true"></i>&ensp;
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseTitle'); ?>
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body">
<?php echo $this->p->t('anrechnung', 'reviewAnrechnungInfoHerkunftKenntnisseBody'); ?>
</div>
</div>
</div>
</div>
@@ -0,0 +1,236 @@
<?php
$this->load->view(
'templates/FHC-Header',
array(
'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'),
'jquery' => true,
'jqueryui' => true,
'bootstrap' => true,
'fontawesome' => true,
'tabulator' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
'phrases' => array(
'global' => array(
'begruendung'
),
'anrechnung' => array(
'nachweisdokumente',
'empfehlung',
'herkunft'
),
'ui' => array(
'anzeigen',
'alleAnzeigen',
'hilfeZuDieserSeite',
'hochladen',
'spaltenEinstellen',
'hilfeZuDieserSeite',
'alleAuswaehlen',
'alleAbwaehlen',
'ausgewaehlteZeilen',
'hilfe',
'tabelleneinstellungen',
'keineDatenVorhanden',
'spaltenEinstellen',
'ja',
'nein',
'nichtSelektierbarAufgrundVon',
'systemfehler',
'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben',
'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen'
),
'person' => array(
'student',
'personenkennzeichen',
'vorname',
'nachname'
),
'lehre' => array(
'studiensemester',
'studiengang',
'lehrveranstaltung',
'ects',
'lektor',
),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js'
)
)
);
?>
<body>
<div id="page-wrapper">
<div class="container-fluid">
<!-- title -->
<div class="row">
<div class="col-lg-12 page-header">
<h3>
<?php echo $this->p->t('anrechnung', 'anrechnungenPruefen'); ?>
<small>| <?php echo ucfirst($this->p->t('global', 'uebersicht')); ?></small>
</h3>
</div>
</div>
<!-- dropdown studiensemester -->
<div class="row">
<div class="col-lg-12">
<form id="formApproveAnrechnungUebersicht" class="form-inline" action="" method="get">
<div class="form-group">
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<button type="submit"
class="btn btn-default form-group"><?php echo ucfirst($this->p->t('ui', 'anzeigen')); ?></button>
</form>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php'); ?>
</div>
</div>
<!-- Empfehlung / Nicht Empfehlung Panel -->
<div class="row">
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungUebersicht-begruendung-panel">
<div>
<h4 class="panel panel-body panel-danger text-danger"><?php echo $this->p->t('anrechnung', 'empfehlungenNegativQuestion'); ?></h4>
<b>&ensp;<?php echo $this->p->t('anrechnung', 'bitteBegruendungAngeben'); ?></b><br><br>
<ul>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li>
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>
<span class="btn-copyIntoTextarea" data-toggle="tooltip" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard" aria-hidden="true"></i>
</span>
</li>
<li><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></li>
</ul>
<br>
<span class="text-danger">
<?php echo $this->p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
</span><br><br>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
rows="2" required></textarea>
</div>
<br>
<!-- Action Button Abbrechen & Bestaetigen-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-begruendung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
<div class="panel panel-default panel-body" style="display: none"
id="reviewAnrechnungUebersicht-empfehlung-panel">
<div>
<h4 class="panel panel-body panel-success text-success"><?php echo $this->p->t('anrechnung', 'empfehlungenPositivQuestion'); ?></h4>
&ensp;<?php echo $this->p->t('anrechnung', 'empfehlungenPositiv'); ?><br><br>
</div>
<br>
<!-- Action Button 'Abbrechen'-->
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-empfehlung-abbrechen" class="btn btn-default btn-w200">
<?php echo ucfirst($this->p->t('ui', 'abbrechen')); ?>
</button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-confirm"
class="btn btn-primary btn-w200">
<?php echo ucfirst($this->p->t('ui', 'bestaetigen')); ?>
</button>
</div>
</div>
</div>
<div class="row">
<!-- Filter buttons -->
<div class="col-xs-3">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group" role="group">
<button id="show-need-recommendation" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurFehlendeEmpfehlungenAnzeigen'); ?>"><i
class='fa fa-eye'></i>
</button>
<button id="show-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-up'></i>
</button>
<button id="show-not-recommended" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurNichtEmpfohleneAnzeigen'); ?>"><i
class='fa fa-thumbs-o-down'></i>
</button>
<button id="show-approved" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurGenehmigteAnzeigen'); ?>"><i
class='fa fa-check'></i>
</button>
<button id="show-rejected" class="btn btn-default btn-clearfilter" type="button"
data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'nurAbgelehnteAnzeigen'); ?>"><i
class='fa fa-times'></i>
</button>
</div>
</div>
</div>
<!-- Action Buttons 'Empfehlen', 'Nicht empfehlen'-->
<div class="col-xs-9">
<div class="pull-right">
<button id="reviewAnrechnungUebersicht-dont-recommend-anrechnungen-ask"
class="btn btn-danger btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?></button>
<button id="reviewAnrechnungUebersicht-recommend-anrechnungen-ask"
class="btn btn-primary btn-w200"><?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?></button>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
@@ -0,0 +1,138 @@
<?php
$STUDIENSEMESTER = $studiensemester_selected;
$LEKTOR_UID = getAuthUID();
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1';
$query = '
WITH anrechnungen AS
(
SELECT DISTINCT
anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id,
anrechnung.dms_id,
anrechnung.studiensemester_kurzbz,
stg.studiengang_kz,
stg.bezeichnung AS "stg_bezeichnung",
lv.bezeichnung AS "lv_bezeichnung",
lv.ects,
(person.nachname || \' \' || person.vorname) AS "student",
begruendung.bezeichnung AS "begruendung",
dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student,
empfehlung_anrechnung,
(SELECT status_kurzbz
FROM lehre.tbl_anrechnungstatus
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz)
WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC
LIMIT 1
) AS status_kurzbz
FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id)
JOIN public.tbl_studiengang AS stg USING (studiengang_kz)
JOIN lehre.tbl_lehrveranstaltung AS lv USING (lehrveranstaltung_id)
JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
)
SELECT DISTINCT ON (anrechnungen.*, lema.mitarbeiter_uid) anrechnungen.*,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung"
FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
WHERE anrechnungen.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz
AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\'
AND le.lehre = TRUE
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'approveAnrechnungUebersicht',
'requiredPermissions' => 'lehre/anrechnung_empfehlen',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'anrechnung_id',
'lehrveranstaltung_id',
'begruendung_id',
'dms_id',
'studiensemester_kurzbz',
'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')),
ucfirst($this->p->t('lehre', 'lehrveranstaltung')),
'ECTS',
ucfirst($this->p->t('person', 'studentIn')),
ucfirst($this->p->t('global', 'begruendung')),
ucfirst($this->p->t('anrechnung', 'nachweisdokumente')),
ucfirst($this->p->t('anrechnung', 'herkunft')),
ucfirst($this->p->t('anrechnung', 'empfehlung')),
'status_kurzbz',
'Status'
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitColumns", // fit columns to width of table
persistentLayout:true,
persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
selectable: true, // allow row selection
selectableRangeMode: "click", // allow range selection using shift end click on end of range
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
tableBuilt: function(){
func_tableBuilt(this);
},
tableWidgetFooter: {
selectButtons: true
},
selectableCheck: function(row){
return func_selectableCheck(row);
},
rowFormatter:function(row){
func_rowFormatter(row);
},
rowUpdated:function(row){
func_rowUpdated(row);
},
tooltips: function(cell){
return func_tooltips(cell);
}
}', // tabulator properties
'datasetRepFieldsDefs' => '{
anrechnung_id: {visible: false},
lehrveranstaltung_id: {visible: false},
begruendung_id: {visible: false},
dms_id: {visible: false},
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
stg_bezeichnung: {headerFilter:"input"},
lv_bezeichnung: {headerFilter:"input"},
ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"},
begruendung: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{
labelField:"dokument_bezeichnung",
url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id},
target:"_blank"
}},
anmerkung_student: {headerFilter:"input"},
empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse},
status_kurzbz: {visible: false},
status_bezeichnung: {headerFilter:"input"}
}', // col properties
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
?>
@@ -32,7 +32,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -48,7 +48,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -64,7 +64,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -241,7 +241,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
@@ -34,7 +34,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -50,7 +50,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -66,7 +66,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -128,7 +128,7 @@ FROM
(
SELECT
/* lehrauftraege also planned with dummies, therefore personalnummer is needed */
ma.personalnummer,
(ma.personalnummer::text),
lema.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
@@ -240,7 +240,7 @@ FROM
pa.lehreinheit_id,
lv.lehrveranstaltung_id,
lv.bezeichnung AS "lv_bezeichnung",
pa.projektarbeit_id AS "projektarbeit_id",
(pa.projektarbeit_id::text) AS "projektarbeit_id",
le.studiensemester_kurzbz,
stg.studiengang_kz,
upper(stg.typ || stg.kurzbz) AS "stg_typ_kurzbz",
@@ -249,7 +249,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
@@ -268,7 +268,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz ||
\' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
(nachname || \' \' || vorname) AS "lektor",
(vorname || \' \' || nachname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -14,7 +14,7 @@ $query = '
datum AS "storniert",
(
SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -65,7 +65,7 @@ SELECT
erteilt,
akzeptiert,
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -81,7 +81,7 @@ SELECT
)
) AS "bestellt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -97,7 +97,7 @@ SELECT
)
) AS "erteilt_von",
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
public.tbl_person
JOIN public.tbl_benutzer benutzer USING (person_id)
@@ -281,7 +281,7 @@ FROM
\'Betreuung\' AS "typ",
(betreuerart_kurzbz || \' \' ||
(SELECT
vorname || \' \' || nachname
nachname || \' \' || vorname
FROM
PUBLIC.tbl_person
JOIN PUBLIC.tbl_benutzer USING (person_id)
+1 -1
View File
@@ -6,7 +6,7 @@ class Nation_widget extends DropdownWidget
{
// Nation
$this->load->model('codex/Nation_model', 'NationModel');
$this->NationModel->addOrder('nation_code');
$this->NationModel->addOrder('kurztext');
$this->addSelectToModel($this->NationModel, 'nation_code', 'kurztext');
+1 -1
View File
@@ -8,7 +8,7 @@ class Studiengang_widget extends DropdownWidget
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->StudiengangModel->addOrder('kurzbzlang');
$this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', '\'(\' || upper(typ||kurzbz) || \') \' || tbl_studiengang.bezeichnung');
$this->addSelectToModel($this->StudiengangModel, 'studiengang_kz', 'upper(typ||kurzbz) || \' - \' || tbl_studiengang.bezeichnung');
// If 'studiengang' (array of specific studiengaenge) is given, retrieve these studiengaenge only
if (isset($widgetData['studiengang']) && !empty($widgetData['studiengang']))
+208 -9
View File
@@ -35,6 +35,8 @@ require_once('../../../include/datum.class.php');
require_once('../../../include/mail.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
if (!$db = new basis_db())
$db=false;
@@ -116,6 +118,68 @@ if($projektarbeit_id==-1)
if(!$projektarbeit_obj->load($projektarbeit_id))
die('Fehler beim Laden der Projektarbeit');
$titel = $projektarbeit_obj->titel;
$student_uid = $projektarbeit_obj->student_uid;
// paarbeit sollte nur ab SS2021 online bewertet werden
$qry_sem="SELECT 1
FROM lehre.tbl_projektarbeit
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date
LIMIT 1";
$result_sem=$db->db_query($qry_sem);
$num_rows_sem = $db->db_num_rows($result_sem);
if($num_rows_sem < 0)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br>&nbsp;";
}
// Zweitbegutachter holen
if($betreuerart=="Erstbegutachter")
{
$projektbetreuer = new projektbetreuer();
$alleBegutachter = $projektbetreuer->getProjektbetreuer($projektarbeit_id);
if ($alleBegutachter)
{
$alleBegutachterResults = $projektbetreuer->result;
foreach ($alleBegutachterResults as $begutachter)
{
if ($begutachter->betreuerart_kurzbz == "Erstbegutachter")
{
$erstbetreuer_id = $begutachter->person_id;
$zweitbegutachter = $projektbetreuer->getZweitbegutachterWithToken($erstbetreuer_id, $projektarbeit_id, $student_uid);
break;
}
}
// Mail mit Token an Zweitbegutachter senden
if ($zweitbegutachter && $num_rows_sem >= 1 && isset($_GET['zweitbegutachtertoken']))
{
$qry_std="SELECT * FROM campus.vw_benutzer where uid=".$db->db_add_param($uid);
if(!$result_std=$db->db_query($qry_std))
{
echo "<font color=\"#FF0000\">Student konnte nicht gefunden werden!</font><br>&nbsp;";
}
else
{
$row_std=@$db->db_fetch_object($result_std);
$mailres = sendZweitbegutachterMail($zweitbegutachter, $erstbetreuer_id, $row_std);
if ($mailres)
{
echo "<br><span style='color: green; '>".$p->t('abgabetool/zweitbegutachterMailGesendet', $zweitbegutachter->email)."</span><br>&nbsp;";
}
else
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerMailZweitBegutachter')." Mail: ".$zweitbegutachter->email."</font><br>&nbsp;";
}
}
}
}
}
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
@@ -124,6 +188,39 @@ echo '
<title>'.$p->t('abgabetool/abgabetool').'</title>
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style>
#beurteilungheadertable td {
height: 30px;
overflow: hidden;
}
#beurteilungheadertable form {
margin: 0;
}
/* Bild statt submit button, styling entfernen*/
button[name="zweitbegutachtertoken"] {
background: none;
color: inherit;
border: none;
font: inherit;
cursor: pointer;
outline: inherit;
}
#zweitbetrmailicon {
top: 4px;
height: 18px;
width: 18px;
position: relative;
}
#tokenmailicon {
top: 2px;
height: 15px;
width: 15px;
position: relative;
}
</style>
<script language="Javascript">
function confdel()
@@ -356,25 +453,73 @@ while ($result_nam && $row_nam=$db->db_fetch_object($result_nam))
{
$studentenname=$row_nam->studnam;
}
$htmlstr .= "<table width=100%>\n";
$htmlstr .= "<table id='beurteilungheadertable' width=100%>\n";
$htmlstr .= "<tr><td style='font-size:16px'>".$p->t('abgabetool/student').": <b>".$db->convert_html_chars($studentenname)."</b></td>";
$htmlstr .= "<td width=10% align=center><form action='../../../include/".EXT_FKT_PATH."/abgabe_lektor_benotung.php' title='Benotungsformular' target='_blank' method='GET'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='".$projektarbeit_id."'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='".$uid."'>\n";
$htmlstr .= "<input type='submit' name='note' value='".$p->t('abgabetool/benoten')."'></form></td>";
$htmlstr .= "<td width=10% align=center>";
if ($num_rows_sem >= 1)
{
$htmlstr .= "<form action='../../../index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung' title='Benotungsformular' target='_blank' method='GET'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='".$projektarbeit_id."'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='".$uid."'>\n";
$htmlstr .= "<input type='submit' name='note' value='".$p->t('abgabetool/benoten')."'></form>";
}
else
{
$htmlstr .= "<form action='javascript:void(0);'>";
$htmlstr .= "<input type='submit' value='".$p->t('abgabetool/benoten')."' title='".$p->t('abgabetool/aeltereParbeitBenoten')."'
alt='".$p->t('abgabetool/aeltereParbeitBenoten')."' disabled>";
$htmlstr .= "</form>";
}
$htmlstr .= "</td>";
if($betreuerart!="Zweitbegutachter")
{
$htmlstr .= "<td width=10% align=center><form action='https://www1.ephorus.com/' title='ephorus' target='_blank' method='GET'>";
$htmlstr .= "<input type='submit' name='ephorus' value='".$p->t('abgabetool/plagiatspruefung')."'></form></td></tr>";
$htmlstr .= "<td width=10% align=center><form action='https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start' title='plagiatsprüfung' target='_blank' method='GET'>";
$htmlstr .= "<input type='submit' name='ephorus' value='".$p->t('abgabetool/plagiatspruefung')."'></form></td>";
$htmlstr .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
$htmlstr .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>\n";
}
else
{
$htmlstr .= "<td>&nbsp;</td></tr>";
}
$htmlstr .= "<tr><td style='font-size:16px'>Titel: <b>".$db->convert_html_chars($titel)."<b></td><td></td><td valign=\"right\"><a href='abgabe_student_frameset.php?uid=$uid' target='_blank'>".$p->t('abgabetool/studentenansicht')."</a></td>";
$htmlstr .= "<tr><td style='font-size:16px'>" . $p->t('abgabetool/titel') . ": <b>".$db->convert_html_chars($titel)."<b></td><td></td><td valign=\"right\"><a href='abgabe_student_frameset.php?uid=$uid' target='_blank'>".$p->t('abgabetool/studentenansicht')."</a></td>";
$htmlstr .= "</tr>\n";
if (isset($zweitbegutachter) && $zweitbegutachter) // wenn es Zweitbegutachter gibt
{
// Zweitbegutachter anzeigen
$htmlstr .= "<tr>\n";
$htmlstr .= "<td style='font-size:16px'>" . $p->t('abgabetool/zweitBegutachter') . ": <b>" . $zweitbegutachter->voller_name . "</b>";
// keine Mail -> Fehler anzeigen
if (!isset($zweitbegutachter->email))
$htmlstr .= "&nbsp;&nbsp;<img src='../../../skin/images/exclamation.png' title='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "' alt='" . $p->t('abgabetool/zweitBegutachterEmailFehlt') . "'/>";
// Token senden button wenn Zweitbegutachter extern ist und Projektarbeit nicht für altes Semester ist
if (isset($zweitbegutachter->email) && !isset($zweitbegutachter->uid) && $num_rows_sem >= 1)
{
$htmlstr .= "<form action='" . htmlspecialchars($_SERVER['PHP_SELF']) . "' method='GET' style='display: inline'>\n";
$htmlstr .= "<input type='hidden' name='uid' value='" . $student_uid . "'>";
$htmlstr .= "<input type='hidden' name='projektarbeit_id' value='" . $projektarbeit_id . "'>";
$htmlstr .= "<input type='hidden' name='betreuerart' value='" . $betreuerart . "'>";
$htmlstr .= "&nbsp;<a href='mailto:".$zweitbegutachter->email."'><img id='zweitbetrmailicon' src='../../../skin/images/email.png'
title='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "' alt='" . $p->t('abgabetool/zweitbetreuerMailSenden', $zweitbegutachter->email) . "'/></a>\n";
$htmlstr .= "&nbsp;<button type='submit' name='zweitbegutachtertoken' title='" . $p->t('abgabetool/zweitbetreuerTokenMailSenden') . "'>
<img id='tokenmailicon' src='../../../skin/images/repeat.png' alt='" . $p->t('abgabetool/zweitbetreuerTokenMailSenden') . "'/></button>\n";
$htmlstr .= "</form>";
}
$htmlstr .= "</td>\n";
$htmlstr .= "<td></td>\n";
$htmlstr .= "<td></td>\n";
$htmlstr .= "</tr>\n";
}
$htmlstr .= "</table>\n";
$htmlstr .= "<table style='width: 100%'><tr>";
$htmlstr .= "<td><br><b>".$p->t('abgabetool/abgabetermine').":</b></td>\n";
$htmlstr .= "</tr>\n";
$htmlstr .= "</table>\n";
$htmlstr .= "<br><b>".$p->t('abgabetool/abgabetermine').":</b>\n";
$htmlstr .= "<table class='detail' style='padding-top:10px;' >\n";
$htmlstr .= "<tr></tr>\n";
$htmlstr .= "<tr>
@@ -543,4 +688,58 @@ $htmlstr .= "</form>\n";
$htmlstr .= "</table>\n";
$htmlstr .= "</body></html>\n";
echo $htmlstr;
/**
* Mail zum Zweitbegutachter mit Info dass Projektarbeit zur Bewertung bereit ist, inklusive Zugangstoken wenn nötig.
* @param object $zweitbegutachter
* @param $int erstbegutachter_person_id
* @param object $student
* @return bool|projektbetreuer|void|null
*/
function sendZweitbegutachterMail($zweitbegutachter, $erstbegutachter_person_id, $student)
{
if (!isset($zweitbegutachter->email) || $zweitbegutachter->email == '')
return false;
// send Mail to 2. Begutachter
$projektbetreuer = new projektbetreuer();
$projektbetreuer->generateZweitbegutachterToken($zweitbegutachter->person_id, $zweitbegutachter->projektarbeit_id);
if (!$projektbetreuer)
return $projektbetreuer;
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($erstbegutachter_person_id, $zweitbegutachter->projektarbeit_id, $student->uid);
if ($zweitbetr)
{
$intern = isset($zweitbetr->uid);
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung";
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$zweitbegutachter->projektarbeit_id."&uid=".$student->uid;
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
$maildata = array();
$maildata['geehrt'] = "geehrte".($zweitbegutachter->anrede=="Herr"?"r":"");
$maildata['anrede'] = $zweitbegutachter->anrede;
$maildata['betreuer_voller_name'] = $zweitbegutachter->voller_name;
$maildata['student_anrede'] = $student->anrede;
$maildata['student_voller_name'] = trim($student->titelpre." ".$student->vorname." ".$student->nachname." ".$student->titelpost);
$maildata['abgabetyp'] = isset($zweitbetr->abgabedatum) ? 'Endabgabe' : 'Abgabe';
$maildata['parbeituebersichtlink'] = $intern ? "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>" : "";
$maildata['bewertunglink'] = "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>";
$maildata['token'] = isset($zweitbetr->zugangstoken) && !$intern ? "<p>Zugangstoken: ".$zweitbetr->zugangstoken."</p>" : "";
return sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$maildata,
$zweitbetr->email,
"Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
return false;
}
?>
+33 -9
View File
@@ -99,7 +99,11 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
(SELECT betreuerart_kurzbz FROM lehre.tbl_projektbetreuer WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
tbl_projektbetreuer.person_id AS betreuer_person_id,
tbl_projekttyp.bezeichnung AS prjbez, *
tbl_projekttyp.bezeichnung AS prjbez, *,
lehre.tbl_projektbetreuer.note as note,
public.tbl_benutzer.aktiv as aktiv,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt
FROM lehre.tbl_projektarbeit
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
LEFT JOIN public.tbl_benutzer ON(uid=student_uid)
@@ -114,8 +118,6 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer'
OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter')
AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)."
AND public.tbl_benutzer.aktiv
AND lehre.tbl_projektarbeit.note IS NULL
ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
//AND tbl_projektarbeit.student_uid='$getuid' 'ie07m102';
@@ -155,7 +157,29 @@ else
($row->btitelpost!=''?$htmlstr1 .= ' '.$row->btitelpost:$htmlstr1 .= '');
$htmlstr1 .= $zweitbetreuer;
$htmlstr .= " <tr>\n"; //class='liste".($i%2)."'
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
if (is_null($row->note) && $row->aktiv === 't')
$htmlstr .= " <td><a href='abgabe_student_details.php?uid=".$row->uid."&projektarbeit_id=".$row->projektarbeit_id."&bid=".$row->betreuer_person_id."' target='as_detail' title='Details anzeigen'>".$p->t('abgabetool/upload')."</a></td>\n";
elseif (!is_null($row->babgeschickt) || !is_null($row->zweitbetreuer_abgeschickt))
{
$htmlstr .= "<td>";
if (!is_null($row->babgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->betreuer_person_id ."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungErstDownload')."</a>";
if (!is_null($row->babgeschickt) && !is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "/";
if (!is_null($row->zweitbetreuer_abgeschickt))
$htmlstr .= "<a href='../pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz=" . $row->zweitbetreuer_betreuerart_kurzbz . "&projektarbeit_id=" . $row->projektarbeit_id . "&person_id=" . $row->zweitbetreuer_person_id."' title='".$p->t('abgabetool/projektbeurteilungDownload')."'>".$p->t('abgabetool/projektbeurteilungZweitDownload')."</a>";
$htmlstr .= "</td>";
} else
{
$htmlstr .= "<td></td>";
}
$htmlstr .= " <td>".$row->studiensemester_kurzbz."</td>\n";
$htmlstr .= " <td>".strtoupper($row->typ.$row->kurzbz)."</td>\n";
$htmlstr .= " <td align= center>";
@@ -192,11 +216,11 @@ echo '
<title>Abgabesystem_Studentensicht</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<script language="JavaScript" type="text/javascript">
+94 -6
View File
@@ -34,6 +34,8 @@ require_once('../../../include/mail.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php');
$anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache);
@@ -324,7 +326,6 @@ if($command=="update" && $error!=true)
{
if($row_zd=@$db->db_fetch_object($result_zd))
{
$htmlstr = "<div>".$p->t('abgabetool/betreuer').": <b>".$db->convert_html_chars($betreuer)."</b><br>".$p->t('abgabetool/titel').": <b>".$db->convert_html_chars($titel)."<b><br><br></div>\n";
$htmlstr .= "<table class='detail' style='padding-top:10px;'>\n";
$htmlstr .= "<tr></tr>\n";
@@ -397,7 +398,7 @@ if($command=="update" && $error!=true)
echo $p->t('global/dateiNichtErfolgreichHochgeladen');
}
}
//E-Mail an 1.Begutachter
//E-Mail an 1.Begutachter und 2.Begutachter senden
if($bid!='' && $bid!=NULL)
{
$qry_betr="SELECT distinct trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first,
@@ -422,15 +423,102 @@ if($command=="update" && $error!=true)
}
else
{
// paarbeit sollte nur ab SS2021 online bewertet werden
$qry_sem="SELECT 1
FROM lehre.tbl_projektarbeit
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$db->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2021')::date
LIMIT 1";
$result_sem=$db->db_query($qry_sem);
$num_rows_sem = $db->db_num_rows($result_sem);
if($num_rows_sem < 0)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerAktualitaetProjektarbeit')."</font><br>&nbsp;";
}
$row_std=$db->db_fetch_object($result_std);
$mail = new mail($row_betr->mitarbeiter_uid."@".DOMAIN, "no-reply@".DOMAIN, "Bachelor-/Masterarbeitsbetreuung",
"Sehr geehrte".($row_betr->anrede=="Herr"?"r":"")." ".$row_betr->anrede." ".$row_betr->first."!\n\n".($row_std->anrede)." ".trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost)." hat eine Abgabe vorgenommen.\n\n--------------------------------------------------------------------------\nDies ist ein vom Bachelor-/Masterarbeitsabgabesystem generiertes Info-Mail\nCis->Mein CIS->Projektarbeiten->Bachelor- und Masterarbeitsabgabe\n--------------------------------------------------------------------------");
$mail->setReplyTo($user."@".DOMAIN);
if(!$mail->send())
// 1. Begutachter mail ohne Token
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/Projektarbeitsbeurteilung";
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$row_std->uid;
$abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe';
$maildata = array();
$maildata['geehrt'] = "geehrte".($row_betr->anrede=="Herr"?"r":"");
$maildata['anrede'] = $row_betr->anrede;
$maildata['betreuer_voller_name'] = $row_betr->first;
$maildata['student_anrede'] = $row_std->anrede;
$maildata['student_voller_name'] = trim($row_std->titelpre." ".$row_std->vorname." ".$row_std->nachname." ".$row_std->titelpost);
$maildata['abgabetyp'] = $abgabetyp;
$maildata['parbeituebersichtlink'] = "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>";
$maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
$maildata['token'] = "";
$mailres = sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$maildata,
$row_betr->mitarbeiter_uid."@".DOMAIN,
"Bachelor-/Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg',
$user."@".DOMAIN);
if(!$mailres)
{
echo "<font color=\"#FF0000\">".$p->t('abgabetool/fehlerMailBegutachter')."</font><br>&nbsp;";
}
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
if ($paabgabetyp_kurzbz == 'end')
{
$projektbetreuer = new projektbetreuer();
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid);
if ($zweitbetr)
{
$tokenGenRes = $projektbetreuer->generateZweitbegutachterToken($zweitbetr->person_id, $projektarbeit_id);
if (!$tokenGenRes)
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
$zweitbetr = $projektbetreuer->getZweitbegutachterWithToken($bid, $projektarbeit_id, $row_std->uid);
if (!$zweitbetr)
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
$intern = isset($zweitbetr->uid);
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
$zweitbetmaildata = array();
$zweitbetmaildata['geehrt'] = "geehrte" . ($zweitbetr->anrede == "Herr" ? "r" : "");
$zweitbetmaildata['anrede'] = $zweitbetr->anrede;
$zweitbetmaildata['betreuer_voller_name'] = $zweitbetr->voller_name;
$zweitbetmaildata['student_anrede'] = $maildata['student_anrede'];
$zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name'];
$zweitbetmaildata['abgabetyp'] = $abgabetyp;
$zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : "";
$zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
$zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($zweitbetr->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $zweitbetr->zugangstoken . "</p>" : "";
$mailres = sendSanchoMail(
'ParbeitsbeurteilungEndupload',
$zweitbetmaildata,
$zweitbetr->email,
"Masterarbeitsbetreuung",
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg',
$user . "@" . DOMAIN
);
if (!$mailres)
{
echo "<font color=\"#FF0000\">" . $p->t('abgabetool/fehlerMailZweitBegutachter') . "</font><br>&nbsp;";
}
}
}
}
}
else
+40 -3
View File
@@ -39,6 +39,7 @@ require_once('../../include/prestudent.class.php');
require_once('../../include/dokument_export.class.php');
require_once('../../include/person.class.php');
require_once('../../include/webservicelog.class.php');
require_once('../../include/projektarbeit.class.php');
if (!$db = new basis_db())
die('Fehler beim Oeffnen der Datenbankverbindung');
@@ -120,7 +121,7 @@ $params = 'xmlformat=xml';
//Admins duerfen Dokumente anderer Personen drucken
if ($rechte->isBerechtigt('admin'))
$user = $_GET['uid'];
$user = isset($_GET['uid']) ? $_GET['uid'] : $user;
$params .= '&uid='.$user;
if (isset($_GET['person_id']))
@@ -139,6 +140,11 @@ if (isset($_GET['all']))
$params .= '&all=1';
if (isset($_GET['xsl_oe_kurzbz']))
$params .= '&xsl_oe_kurzbz='. $_GET['xsl_oe_kurzbz'];
if (isset($_GET['projektarbeit_id']))
$params .= '&projektarbeit_id='. $_GET['projektarbeit_id'];
if (isset($_GET['betreuerart_kurzbz']))
$params .= '&betreuerart_kurzbz='. $_GET['betreuerart_kurzbz'];
// Logeintrag bei Download von Zahlungsbestaetigungen
if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung')
@@ -150,7 +156,7 @@ if (isset($_GET['xsl']) && $_GET['xsl'] == 'Zahlung')
$log->request_id = isset($_GET['buchungsnummern']) && !empty($_GET['buchungsnummern']) ? $_GET['buchungsnummern'] : NULL;
$log->beschreibung = 'Zahlungsbestaetigungsdownload';
$log->request_data = $requestdata;
$log->execute_user = $user;
$log->execute_user = get_uid();
$log->save(true);
}
@@ -183,9 +189,40 @@ if (isset($_GET['output']) && $_GET['output'] != 'pdf')
else
$output = 'pdf';
if (isset($_GET['xsl']) && ($_GET['xsl'] === 'Projektbeurteilung'))
{
if (!isset($_GET['betreuerart_kurzbz']) || !isset($_GET['person_id']) || !isset($_GET['projektarbeit_id']))
die('Fehlerhafte Parameteruebergabe');
$projektarbeit = new projektarbeit();
$projektarbeit->load($_GET['projektarbeit_id']);
$betreuer = new person();
$betreuer->getPersonFromBenutzer($user);
//Überprüft ob es der Betreuer oder der Student ist
if ($betreuer->person_id !== $_GET['person_id'] && $projektarbeit->student_uid !== $user && !$rechte->isBerechtigt('assistenz'))
die("<html><body><h3>Sie haben keine Berechtigung für diese Aktion.</h3></body></html>");
switch ($_GET['betreuerart_kurzbz'])
{
case 'Begutachter' :
$xsl = 'ProjektBeurteilungBA';
break;
case 'Erstbegutachter' :
$xsl = 'ProjektBeurteilungMAErst';
break;
case 'Zweitbegutachter' :
$xsl = 'ProjektBeurteilungMAZweit';
break;
}
$allowed = true;
}
$konto = new konto();
if (((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin'))
if ((((isset($_GET["uid"]) && $user == $_GET["uid"])) || $rechte->isBerechtigt('admin')) || (isset($allowed) && $allowed === true))
{
$buchungstypen = array();
if (defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN"))
+14
View File
@@ -30,6 +30,7 @@ require_once('../../../include/student.class.php');
require_once('../../../include/akte.class.php');
require_once('../../../include/datum.class.php');
require_once('../../../include/benutzerberechtigung.class.php');
require_once('../../../include/webservicelog.class.php');
$sprache = getSprache();
$p = new phrasen($sprache);
@@ -84,6 +85,19 @@ if(isset($_GET['action']) && $_GET['action']=='download')
header("Content-type: $akte->mimetype");
header('Content-Disposition: attachment; filename="'.$akte->titel.'"');
echo base64_decode($akte->inhalt);
//Log bei einem Download vom Becheid
if ((isset($akte->dokument_kurzbz) && !empty($akte->dokument_kurzbz)) && ($akte->dokument_kurzbz === 'Bescheid' || $akte->dokument_kurzbz === 'BescheidEng'))
{
$log = new Webservicelog();
$log->webservicetyp_kurzbz = 'content';
$log->request_id = (isset($akte->akte_id) && !empty($akte->akte_id)) ? $akte->akte_id : NULL;
$log->beschreibung = 'Bescheidbestaetigungsdownload';
$log->request_data = $_SERVER['QUERY_STRING'];
$log->execute_user = get_uid();
$log->save(true);
}
exit;
}
else
+1 -1
View File
@@ -217,7 +217,7 @@ if ($num_rows > 0)
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
{
$vertrag = new vertrag();
if (!$vertrag->isVertragErteiltLV($row->lehrveranstaltung_id, $stdsem, $user))
if (!$vertrag->isVertragErteiltLE($row->lehreinheit_id, $stdsem, $uid))
{
continue;
}
+21 -5
View File
@@ -464,7 +464,6 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr)))
{
if($hgfarbe[$i]!='#FFFC7F' && $hgfarbe[$i]!='#bbb' && $hgfarbe[$i]!='#CDDDEE')
{
$hgfarbe[$i]='#E9ECEE';
$datensatz[$i]=0;
$freigabevon[$i]=$row->freigabevon;
@@ -761,11 +760,25 @@ for ($i=0;$i<6;$i++)
echo "\n";
if(strlen(stristr($tage[$j+7*$i],"."))>0)
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color: '.$hgfarbe[$j+7*$i].'">';
if($j%6==0 || $j==7)
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color:#A5AFB6">';
}
else
{
echo '<td align="center" valign="center" style="font-size:16px; color:grey; background-color: ' . $hgfarbe[$j + 7 * $i] . '">';
}
}
else
{
echo '<td align="center" valign="center" style="background-color: '.$hgfarbe[$j+7*$i].'">';
if($j%6==0 || $j==7)
{
echo '<td align="center" valign="center" style="font-size:; color:; background-color:#A5AFB6">';
}
else
{
echo '<td align="center" valign="center" style="background-color: ' . $hgfarbe[$j + 7 * $i] . '">';
}
}
if($tage[$j+7*$i]!='')
{
@@ -781,11 +794,14 @@ for ($i=0;$i<6;$i++)
echo '<b>'.$tage[$j+7*$i].'</b><br>';
if(strlen(stristr($tage[$j+7*$i],"."))>0)
{
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"></td>';
echo '<input type="checkbox" name="wtag[]"
value="'.date("Y-m-d",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"
id="'.date("d.m.Y",mktime(0, 0, 0, substr($tage[$j+7*$i],3,2) , substr($tage[$j+7*$i],0,2), substr($tage[$j+7*$i],6,4))).'"></td>';
}
else
{
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"></td>';
echo '<input type="checkbox" name="wtag[]" value="'.date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"
id="'.date("d.m.Y",mktime(0, 0, 0, ($wmonat+1) , $tage[$j+7*$i], $jahre[$wjahr])).'"></td>';
}
}
else
+2
View File
@@ -195,6 +195,8 @@ echo ' <script type="text/javascript" src="../../../vendor/components/jqueryui
$konto->getBuchungstyp();
$buchungstyp = array();
echo $p->t('tools/zahlungenHinweis');
foreach ($konto->result as $row)
$buchungstyp[$row->buchungstyp_kurzbz]=$row->beschreibung;
+66 -11
View File
@@ -112,13 +112,14 @@ foreach($addon_obj->result as $addon)
// Wenn Seite fertig geladen ist Addons aufrufen
echo '
<script>
let holiDays =[];
$( document ).ready(function()
{
if(typeof addon !== \'undefined\')
{
for(i in addon)
{
addon[i].init("cis/private/profile/urlaubstool.php", {uid:\''.$uid.'\'});
addon[i].init("cis/private/profile/zeitsperre_resturlaub.php", {uid:\''.$uid.'\', holiDays: holiDays});
}
}
@@ -126,6 +127,7 @@ $( document ).ready(function()
changeMonth: true,
changeYear: true,
dateFormat: "dd.mm.yy",
beforeShowDay: setHoliDays
});
$( ".timepicker" ).timepicker({
@@ -137,13 +139,31 @@ $( document ).ready(function()
});
});
</script>';
?>
<style>
.dd_breit
{
width:460px;
// set holidays function which is configured in beforeShowDay
function setHoliDays(date) {
for (i = 0; i < holiDays.length; i++) {
if (date.getFullYear() == holiDays[i][0]
&& date.getMonth() == holiDays[i][1] - 1
&& date.getDate() == holiDays[i][2]) {
return [true, "holiday", ""];
}
}
return [true, ""];
}
</script>';
?>
<style type="text/css">
.dd_breit
{
width:460px;
}
.ui-datepicker td.holiday a, .ui-datepicker td.holiday a:hover
{
background: none #FFEBAF;
border: 1px solid #BF5A0C;
}
</style>
<script language="Javascript">
function conf_del()
@@ -180,7 +200,7 @@ function checkdatum()
return false;
}
var Datum, Tag, Monat,Jahr,vonDatum,bisDatum;
var Datum, Tag, Monat,Jahr,vonDatum,bisDatum, diff;
Datum=document.getElementById('vondatum').value;
Tag=Datum.substring(0,2);
@@ -210,12 +230,23 @@ function checkdatum()
bisDatum=Jahr+''+Monat+''+Tag;
diff=bisDatum-vonDatum;
if (vonDatum>bisDatum)
{
alert('<?php echo $p->t('zeitsperre/vonDatum');?> '+ document.getElementById('vondatum').value+ ' <?php echo $p->t('zeitsperre/istGroesserAlsBisDatum');?> '+document.getElementById('bisdatum').value);
document.getElementById('vondatum').focus();
return false;
}
else if (diff>14)
{
Check = confirm('<?php echo $p->t('zeitaufzeichnung/zeitraumAuffallendHoch');?>');
document.getElementById('bisdatum').focus();
if (Check == false)
return false;
else
return true;
}
return true;
}
@@ -254,6 +285,8 @@ function showHideBezeichnungDropDown()
document.getElementById('resturlaub').style.visibility = 'visible';
else
document.getElementById('resturlaub').style.visibility = 'hidden';
showHideStudeDropDown()
}
function setBisDatum()
@@ -261,6 +294,26 @@ function setBisDatum()
document.zeitsperre_form.bisdatum.value = document.zeitsperre_form.vondatum.value;
}
function showHideStudeDropDown()
{
var dd = document.zeitsperre_form.zeitsperretyp_kurzbz;
if (dd.options[dd.selectedIndex].value == 'ZA'
|| dd.options[dd.selectedIndex].value == 'Urlaub'
|| dd.options[dd.selectedIndex].value == 'Krank'
|| dd.options[dd.selectedIndex].value == 'DienstF'
|| dd.options[dd.selectedIndex].value == 'DienstV')
{
document.getElementById('vonStd').style.visibility = 'hidden';
document.getElementById('bisStd').style.visibility = 'hidden';
}
else
{
document.getElementById('vonStd').style.visibility = 'visible';
document.getElementById('bisStd').style.visibility = 'visible';
}
}
</script>
</head>
@@ -673,7 +726,7 @@ if($result = $db->db_query($qry))
}
$content_form.= '</SELECT></td></tr>';
$content_form.= '<tr><td>'.$p->t('global/bezeichnung').'</td><td colspan="2"><span id="dienstv_span"><input'.$style.' type="text" size="32" name="bezeichnung" maxlength="32" value="'.$zeitsperre->bezeichnung.'"'.$readonly.'></span></td></tr>';
$content_form.= '<tr><td>'.$p->t('global/von').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="vondatum" id="vondatum" value="'.($zeitsperre->vondatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->vondatum)):(!isset($_POST['vondatum'])?date('d.m.Y'):$_POST['vondatum'])).'"'.$readonly.'> <a href="javascript:void(0);" onClick="setBisDatum()">&dArr;</a></td><td style="text-align:right;"> ';
$content_form.= '<tr><td>'.$p->t('global/von').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="vondatum" id="vondatum" value="'.($zeitsperre->vondatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->vondatum)):(!isset($_POST['vondatum'])?date('d.m.Y'):$_POST['vondatum'])).'"'.$readonly.'> <a href="javascript:void(0);" onClick="setBisDatum()">&dArr;</a></td><td id="vonStd" style="text-align:right;"> ';
//dropdown fuer vonstunde
$content_form.= $p->t('zeitsperre/stundeInklusive');
@@ -695,7 +748,7 @@ for($i=0;$i<$num_rows_stunde;$i++)
$content_form.= "</SELECT></td></tr>";
$content_form.= '<tr><td>'.$p->t('global/bis').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="bisdatum" id="bisdatum" value="'.($zeitsperre->bisdatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->bisdatum)):(!isset($_POST['bisdatum'])?date('d.m.Y'):$_POST['bisdatum'])).'"'.$readonly.'></td><td style="text-align:right;"> ';
$content_form.= '<tr><td>'.$p->t('global/bis').'</td><td><input'.$style.' type="text" '.$class.' size="10" maxlength="10" name="bisdatum" id="bisdatum" value="'.($zeitsperre->bisdatum!=''?date('d.m.Y',$datum_obj->mktime_fromdate($zeitsperre->bisdatum)):(!isset($_POST['bisdatum'])?date('d.m.Y'):$_POST['bisdatum'])).'"'.$readonly.'></td><td id="bisStd" style="text-align:right;"> ';
//dropdown fuer bisstunde
$content_form.= $p->t('zeitsperre/stundeInklusive');
$content_form.= " <SELECT name='bisstunde'$style>\n";
@@ -749,12 +802,13 @@ $content_form.= '<td style="text-align:right;">';
if(isset($_GET['type']) && $_GET['type']=='edit')
$content_form.= "<input type='submit' name='submit_zeitsperre' value='".$p->t('global/speichern')."'>";
else
$content_form.= "<input type='submit' name='submit_zeitsperre' value='".$p->t('global/hinzufuegen')."'>";
$content_form.= '</td></tr>';
$content_form .= '<tr><td colspan="3">&nbsp;</td></tr>';
$content_form.= "<tr><td colspan='3' style='color:red'>".$p->t('zeitsperre/achtungEsWerdenAlleEingegebenenTage')."</td></tr>";
$content_form.= "<tr><td colspan='3' style='color:#ff0000'>" .$p->t('zeitsperre/achtungEsWerdenAlleEingegebenenTage')."</td></tr>";
$content_form.= '</table></form>';
echo '<table width="100%">';
@@ -774,3 +828,4 @@ echo '</table>';
</div>
<body>
</html>
<?php echo '<script>showHideStudeDropDown();</script>'; ?>
+8 -8
View File
@@ -91,20 +91,20 @@ if($aktion!='zip')
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../../skin/style.css.php" type="text/css">
<link rel="stylesheet" href="../../../skin/tablesort.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../../vendor/jquery/sizzle/sizzle.js"></script>
<script src="../../../vendor/components/jqueryui/jquery-ui.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../../../skin/jquery-ui-1.9.2.custom.min.css">
<link rel="stylesheet" href="../../../include/js/tablesort/table.css" type="text/css">
<script type="text/javascript" src="../../../include/js/jquery.ui.datepicker.translation.js"></script>';
include('../../../include/meta/jquery.php');
include('../../../include/meta/jquery-tablesorter.php');
echo '
<script language="JavaScript" type="text/javascript">
$(document).ready(function()
{
$("#t1").tablesorter(
{
sortList: [[5,0]],
widgets: ["zebra"]
widgets: ["zebra"],
headers: {1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }}
});
});
</script>
+263 -92
View File
@@ -1,5 +1,5 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
/* kCopyright (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
@@ -114,6 +114,8 @@ else
$gesperrt_bis = '2015-08-31';
$sperrdatum = date('c', strtotime($gesperrt_bis));
$datumjetzt = strtotime("+5 weeks");
$limitdatum = date('c', $datumjetzt);
// Uses urlencode to avoid XSS issues
$zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:'');
@@ -166,6 +168,12 @@ if(isset($_POST['export']))
}
}
//CSV export für Übersicht zugeteilter Projekte - Konflikt mit normalen HTML headern deshalb weiter vorne
if(isset($_POST['projektübersichtexport']))
{
exportProjectOverviewAsCSV($user, ',');
}
echo '<!DOCTYPE HTML>
<html>
<head>
@@ -213,6 +221,7 @@ echo '
<script type="text/javascript">
$(document).ready(function()
{
resetProjekt()
$( ".datepicker_datum" ).datepicker({
changeMonth: true,
changeYear: true,
@@ -459,6 +468,7 @@ echo '
document.getElementById("bis_datum").focus();
return false;
}
return true;
}
@@ -506,6 +516,12 @@ echo '
}
return true;
}
function resetProjekt()
{
$("#projekt").val("");
$("#projektphaseformgroup").hide();
}
function getProjektphasen(projekt_kurzbz)
{
@@ -535,7 +551,13 @@ echo '
var projphasenhtml = "";
for (var i = 0; i < json.length; i++)
{
projphasenhtml += "<option value = \'" + json[i].projektphase_id + "\'>" + json[i].bezeichnung + "<\/option>";
projphasenhtml += "<option value = \'" + json[i].projektphase_id + "\'>";
projphasenhtml += json[i].bezeichnung;
if(json[i].start != \'\' && json[i].ende !=\'\')
{
projphasenhtml += " ( "+json[i].start+" - "+json[i].ende+" )";
}
projphasenhtml += "<\/option>";
}
$("#projektphase").append(projphasenhtml);
@@ -673,6 +695,25 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
{
$zeit = new zeitaufzeichnung();
$projects_of_user = new projekt();
$projects= $projects_of_user->getProjekteListForMitarbeiter($user);
$project_kurzbz_array = array();
$projektph_of_user = new projektphase();
$projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user);
$projectphasen_kurzbz_array = array();
foreach($projects as $prjct)
{
array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz);
}
foreach ($projektphasen as $pp)
{
array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id);
}
$projectphase = new projektphase();
if ($_FILES['csv']['error'] == 0 && isset($_POST['import']))
{
$name = $_FILES['csv']['name'];
@@ -689,108 +730,134 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$anzahl = 0;
$importtage_array = array();
$ende_vorher = date('Y-m-d H:i:s');
while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE)
{
if($data[0] == $user)
{
if (!isset($data[5]))
$data[5] = NULL;
if (!isset($data[6]))
$data[6] = NULL;
if (!isset($data[7]))
$data[7] = NULL;
if (!isset($data[8]))
$data[8] = NULL;
if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>';
//elseif (isset($data[8]) && ( filter_var($data[8], FILTER_VALIDATE_INT) === false ))
//{
// echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Service ID ist keine Zahl ('.$data[8].')</b></span><br>';
//}
elseif (checkVals($data[5],$data[6],$data[7],$data[8]))
if($data[0] == $user){
if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')</b></span><br>';
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')</b></span><br>';
}
elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')</b></span><br>';
}
else
{
if ($data[1] == 'LehreIntern')
$data[1] = 'Lehre';
$zeit->new = true;
$zeit->beschreibung = NULL;
$zeit->oe_kurzbz_1 = NULL;
$zeit->projekt_kurzbz = NULL;
$zeit->projektphase_id = NULL;
$zeit->service_id = NULL;
$vonCSV = $datum->formatDatum($data[2], $format='Y-m-d');
$bisCSV = $datum->formatDatum($data[3], $format='Y-m-d');
$dateVonCSV = new DateTime($vonCSV);
$dateBisCSV = new DateTime($bisCSV);
$zeit->insertamum = date('Y-m-d H:i:s');
$zeit->updateamum = date('Y-m-d H:i:s');
$zeit->updatevon = $user;
$zeit->insertvon = $user;
$zeit->uid = $data[0];
$zeit->aktivitaet_kurzbz = $data[1];
$zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s');
$zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s');
if (isset($data[4]))
$zeit->beschreibung = $data[4];
if (isset($data[5]))
$zeit->oe_kurzbz_1 = $data[5];
if (isset($data[6]))
$zeit->projekt_kurzbz = $data[6];
if (isset($data[7]))
$zeit->projektphase_id = $data[7];
if (isset($data[8]))
$zeit->service_id = $data[8];
$tag = $datum->formatDatum($data[2], $format='Y-m-d');
if(!in_array($tag, $importtage_array))
if (!isset($data[5]))
$data[5] = NULL;
if (!isset($data[6]))
$data[6] = NULL;
if (!isset($data[7]))
$data[7] = NULL;
if (!isset($data[8]))
$data[8] = NULL;
if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>';
elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.</b></span><br>';
elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT")
{
$importtage_array[] = $tag;
$zeit->deleteEntriesForUser($user, $tag);
$tag_aktuell = $tag;
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).</b></span><br>';
}
elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')</b></span><br>';
}
elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')</b></span><br>';
}
elseif (checkVals($data[5],$data[6],$data[7],$data[8]))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')</b></span><br>';
}
else
{
if ($ende_vorher < $zeit->start)
if ($data[1] == 'LehreIntern')
$data[1] = 'Lehre';
$zeit->new = true;
$zeit->beschreibung = NULL;
$zeit->oe_kurzbz_1 = NULL;
$zeit->projekt_kurzbz = NULL;
$zeit->projektphase_id = NULL;
$zeit->service_id = NULL;
$zeit->insertamum = date('Y-m-d H:i:s');
$zeit->updateamum = date('Y-m-d H:i:s');
$zeit->updatevon = $user;
$zeit->insertvon = $user;
$zeit->uid = $data[0];
$zeit->aktivitaet_kurzbz = $data[1];
$zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s');
$zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s');
if (isset($data[4]))
$zeit->beschreibung = $data[4];
if (isset($data[5]))
$zeit->oe_kurzbz_1 = $data[5];
if (isset($data[6]))
$zeit->projekt_kurzbz = $data[6];
if (isset($data[7]))
$zeit->projektphase_id = $data[7];
if (isset($data[8]))
$zeit->service_id = $data[8];
$tag = $datum->formatDatum($data[2], $format='Y-m-d');
if(!in_array($tag, $importtage_array))
{
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $user;
$pause->insertvon = $user;
$pause->uid = $user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->start = $ende_vorher;
$pause->ende = $zeit->start;
$pause->beschreibung = '';
if(!$pause->save())
$importtage_array[] = $tag;
$zeit->deleteEntriesForUser($user, $tag);
$tag_aktuell = $tag;
}
else
{
if ($ende_vorher < $zeit->start)
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'</b></span><br>';
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $user;
$pause->insertvon = $user;
$pause->uid = $user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->start = $ende_vorher;
$pause->ende = $zeit->start;
$pause->beschreibung = '';
if(!$pause->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'</b></span><br>';
}
}
}
}
$ende_vorher = $zeit->ende;
if($data[2] != $data[3])
{
/*
if ($data[1] == 'LehreExtern')
$ende_vorher = $zeit->ende;
if($data[2] != $data[3])
{
$zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2])));
$zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3])));
}
*/
if(!$zeit->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'</b>('.$zeit->start.')</span><br>';
/*
if ($data[1] == 'LehreExtern')
{
$zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2])));
$zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3])));
}
*/
if(!$zeit->save())
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'</b>('.$zeit->start.')</span><br>';
}
else
$anzahl++;
}
else
$anzahl++;
}
else
$anzahl++;
}
}
}
}
else if (strpos($data[0],'#') === false)
{
@@ -812,7 +879,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
}
}
else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum</b></span>';
echo '<span style="color:#ff0000"><b>' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum</b></span>';
else if (isset($_POST['save']) || isset($_POST['edit']))
{
@@ -844,7 +911,28 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$zeit->service_id = $service_id;
$zeit->kunde_uid = $kunde_uid;
$saveerror = 0;
if (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit'])))
if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d')))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.</b></span><br>';
$saveerror = 1;
}
elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum)
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.</b></span><br>';
$saveerror = 1;
}
elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d')))
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.</b></span><br>';
$saveerror = 1;
}
elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT")
{
echo '<span style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).</b></span><br>';
$saveerror = 1;
}
elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit'])))
{
$p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s');
@@ -1021,7 +1109,9 @@ if($projekt->getProjekteMitarbeiter($user, true))
<a href='".$_SERVER['PHP_SELF']."?csvimport=1' style='font-size: larger;'>CSV Import</a><a style='font-size: larger; text-decoration: none; cursor: default'> | </a>
<a href='".$_SERVER['PHP_SELF']."?csvexport=1' style='font-size: larger;'>CSV Export</a>";
<a href='".$_SERVER['PHP_SELF']."?csvexport=1' style='font-size: larger;'>CSV Export</a><a style='font-size: larger; text-decoration: none; cursor: default'> | </a>
<a href='".$_SERVER['PHP_SELF']."?projektübersichtexport=1' style='font-size: larger;'>Projektübersichtexport</a>";
if($anzprojekte > 0)
echo "<a style='font-size: larger; text-decoration: none; cursor: default'> | </a><a href='".$_SERVER['PHP_SELF']."?projektexport=1".($passuid ? '&uid='.$user : '')."' style='font-size: larger;'>".$p->t("zeitaufzeichnung/projektexport")."</a>";
echo "</td>
@@ -1107,6 +1197,17 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '</form>';
}
if (isset($_GET['projektübersichtexport']))
{
echo '<tr><td colspan="4"><hr></td></tr>';
echo '<tr><td>CSV-Export</td>';
echo '<td align="right"><input type="submit" value="Projektübersichtexport" name="projektübersichtexport"></td></tr>';
echo '<tr><td></td><td colspan="3"></td></tr>';
echo '<tr><td colspan="4"><hr></td></tr>';
}
//Aktivitaet
echo '<tr>';
echo '<td>'.$p->t("zeitaufzeichnung/aktivitaet").'</td><td colspan="4">';
@@ -1145,7 +1246,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '<tr><td nowrap>'.$p->t("zeitaufzeichnung/organisationseinheiten").'</td>
<td colspan="3"><SELECT '.$oestyle.' name="oe_kurzbz_1">';
$oe = new organisationseinheit();
$oe->getFrequent($user,'180','3',true);
$oe->getFrequent($user,'180','3',true, array('oezuordnung', 'fachzuordnung', 'kstzuordnung'));
$trennlinie = true;
echo '<option value="">-- '.$p->t("zeitaufzeichnung/keineAuswahl").' --</option>';
@@ -1394,6 +1495,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
echo '</table>';
}
echo '</td></tr>';
echo '</table>';
echo '</form>';
@@ -1437,8 +1539,8 @@ if($projekt->getProjekteMitarbeiter($user, true))
printTableHeadings($fieldheadings, $za_simple);
$tag=null;
$woche=date('W');
$tag=null;
$woche=date('W');
$tagessumme='00:00';
$pausesumme='00:00';
@@ -1458,8 +1560,6 @@ if($projekt->getProjekteMitarbeiter($user, true))
{
$datumtag = $datum_obj->formatDatum($row->datum, 'Y-m-d');
//echo '<tr><th colspan="13">foo<th></tr>';
// Nach jedem Tag eine Summenzeile einfuegen
if(is_null($tag))
$tag = $datumtag;
@@ -1532,7 +1632,7 @@ if($projekt->getProjekteMitarbeiter($user, true))
$langindex = 1;
else
$langindex = 2;
echo '<b>'.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').'</b> <span id="tag_'.$datum->formatDatum($tag,'d_m_Y').'">'.$zeitsperre_text.'</span>'.$pausefehlt_str;
echo '<span style="display: inline-block; width: 130px;"><b>'.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').'</b></span><span id="tag_'.$datum->formatDatum($tag,'d_m_Y').'">'.$zeitsperre_text.'</span>'.$pausefehlt_str;
if ($ersumme != '00:00')
$erstr = ' (+ '.$ersumme.' ER)';
else
@@ -1859,4 +1959,75 @@ function getZeitaufzeichnung($user, $von, $bis)
return $za;
}
/**
* Exportiert Zeitaufzeichnungsdaten als CSV
* @param $data Zeitaufzeichnungsdaten
* @param string $delimiter CSV-Trennzeichen
* @param $fieldheadings Namen der Spaltenüberschriften
* @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple)
* @param $uid Id des Users für CSV-Filenamen "zeitaufzeichnung_uid"
*/
function exportProjectOverviewAsCSV($user, $delimiter = ',')
{
$filename = "projektUebersicht_".$user.".csv";
header('Content-type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
$file = fopen('php://output', 'w');
$towrite = getDataForProjectOverviewCSV($user);
foreach ($towrite as $row)
{
fputcsv($file, $row, $delimiter);
}
fclose($file);
//Abbruch damit HTML markup danach nicht mit exportiert wird
exit();
}
function getDataForProjectOverviewCSV($user)
{
$projects_of_user = new projekt();
$projects = $projects_of_user->getProjekteListForMitarbeiter($user);
$projektphase = new projektphase();
if($projektphase->getProjectphaseForMitarbeiter($user))
$projektphasen = $projektphase->result;
else
$projetkphasen = array();
$csvData = array();
foreach ($projects as $project)
{
$titel = $project->titel;
$projekt_kurzbz = $project->projekt_kurzbz;
$projekt_phase = '';
$projekt_phase_id = '';
$beginn = $project->beginn;
$ende = $project->ende;
$csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende);
}
foreach ($projektphasen as $prjp)
{
if (true)
{
$titel = $prjp->projekt_kurzbz;
$projekt_kurzbz = $prjp->projekt_kurzbz;
$projekt_phase = $prjp->bezeichnung;
$projekt_phase_id = $prjp->projektphase_id;
$beginn = $prjp->start;
$ende = $prjp->ende;
array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende) );
}
}
sort($csvData);
//headers schreiben
array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE'));
return $csvData;
}
?>
@@ -90,6 +90,7 @@ $ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$d
$projektlines = array();
$dayStart = $dayEnd = '';
$projektnames = $projektphasenames = $tosubtract = $allpauseranges = array();
$projektTiteles = array();
$activitiesToSubtract = ['Pause', 'LehreExtern', 'Arztbesuch', 'Behoerde'];//aktivitaetstypen which should be subtracted fromworktime
$ztaufdata = $ztauf->result;
$totalmonthsum = 0.00;
@@ -281,7 +282,15 @@ for ($i = 0; $i < count($ztaufdata); $i++)
//add new projekt to array with unique projekt names
if (!in_array($ztaufrow->projekt_kurzbz, $projektnames))
{
$projektnames[] = $ztaufrow->projekt_kurzbz;
$pt = new projekt();
$pt->load($ztaufrow->projekt_kurzbz);
if(!empty($pt->titel))
$projektTiteles[convertProblemChars($ztaufrow->projekt_kurzbz)] = convertProblemChars($pt->titel);
else
$projektTiteles[convertProblemChars($ztaufrow->projekt_kurzbz)] = 'kein Titel';
}
}
}
@@ -557,10 +566,21 @@ if ($nrProjects < 1)//no projekts - merge all cells and write notice
foreach ($projektnames as $projektname)
{
//Creating a worksheet
$worksheet =& $workbook->addWorksheet($projektname);
$worksheet->setInputEncoding('utf-8');
$titel = $projektTiteles[convertProblemChars($projektname)];
if ((strlen($titel)+strlen($projektname)) > 31)
{
$maxLength = 31;
$maxLength = ($maxLength - 3 - strlen($projektname));
$titel = substr($titel, 0, $maxLength);
$titel.='...';
}
//Creating a worksheet
$worksheet =& $workbook->addWorksheet(convertProblemChars($projektname).' ('.$titel.')');
$worksheet->setInputEncoding('utf-8');
$titel = $projektTiteles[convertProblemChars($projektname)];
//general options
$worksheet->setLandscape();
$worksheet->hideGridlines();
@@ -686,7 +706,7 @@ foreach ($projektnames as $projektname)
$worksheet->write($zeile, $spalte + 1 + $i, '', $format_bold_centered_toprightline);
$worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1 + $phasenameslength);
$worksheet->write($zeile, $spalte, $projektname, $format_bold_centered_toprightline);
$worksheet->write($zeile, $spalte, $projektname.' ('.$titel.')', $format_bold_centered_toprightline);
for ($i = 0; $i < $phasenameslength; $i++)
$worksheet->write($zeile + 1, $spalte + 1 + $i, $phasenames[$i], $format_bold_centered_bottomline);
@@ -1,26 +1,46 @@
<?php
require_once('../../../config/cis.config.inc.php');
/*require_once('../../../include/functions.inc.php');*/
require_once('../../../include/functions.inc.php');
require_once('../../../include/basis_db.class.php');
require_once('../../../include/projektphase.class.php');
require_once('../../../include/datum.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
//$uid=get_uid();
$user = get_uid();
$datum_obj = new datum();
if(isset($_GET['projekt_kurzbz'])) // TODO maybe check that phasen only shown if projekt is projekt of logged in user
{
$projekt_kurzbz = $_GET['projekt_kurzbz'];
$projektphase = new projektphase();
if($projektphase->getProjectphaseForMitarbeiterByKurzBz($user, $projekt_kurzbz))
$projektphasen_user = $projektphase->result;
else
$projektphasen_user = array();
$pp_user_ids = array();
foreach ($projektphasen_user as $pp_user)
{
array_push($pp_user_ids, $pp_user->projektphase_id);
}
if($projektphase->getProjektphasen($projekt_kurzbz))
{
$result_obj = array();
foreach($projektphase->result as $row)
{
$item['projektphase_id']=$row->projektphase_id;
$item['bezeichnung']=$row->bezeichnung;
$result_obj[]=$item;
if(in_array($row->projektphase_id, $pp_user_ids))
{
$item['projektphase_id'] = $row->projektphase_id;
$item['bezeichnung'] = $row->bezeichnung;
$item['start'] = $datum_obj->formatDatum($row->start, 'd.m.Y');
$item['ende'] = $datum_obj->formatDatum($row->ende, 'd.m.Y');
$result_obj[] = $item;
}
}
echo json_encode($result_obj);
}
+2 -3
View File
@@ -76,7 +76,7 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
</noscript>
<div class="row well">
<div class="col-sm-12">
<h2>Fomeln</h2>
<h2>Formeln</h2>
<p>Die Formeln auf der linken Seite sollten möglichst gleich dargestellt werden, wie in dem Bild auf der rechten Seite.<br>
Abweichungen in Schriftgröße und -art können vorkommen.</p>
<p>The formula on the left side should be equal to the picture on the right side.<br>
@@ -166,5 +166,4 @@ echo '<?xml version="1.0" encoding="ISO-8859-1" ?>';
</div>
</body>
</html>
</html>
+2 -4
View File
@@ -220,6 +220,7 @@ if (isset($_GET['action']) && $_GET['action'] == 'edit')
$studiengang = new studiengang($stg_kz);
echo '<table><form action="'.$_SERVER['PHP_SELF'].'?stg_kz='.$stg_kz.'&action=editsave" method="POST">
<input type="hidden" name="ablauf_id" value="'.$_POST['ablauf_id'].'" />
<tr><td>Studiengang_kz: </td><td><input type="text" name="stg_kz" value="'.strtoupper($studiengang->typ.$studiengang->kurzbz).' ('.$studiengang->bezeichnung.')'.'" style="width:98.5%" disabled /></td></tr>
<tr><td>Gebiet: </td><td><input type="text" value="'.$gebiet->kurzbz.' ('.$gebiet->bezeichnung.')" style="width:98.5%" disabled /><input type="hidden" name="gebiet_id" value="'.$ablauf->result[0]->gebiet_id.'"/></td></tr>
<tr><td>Reihung: </td><td><input type="text" name="reihung" value="'.$ablauf->result[0]->reihung.'" style="width:98.5%" /></td></tr>
@@ -254,10 +255,7 @@ if (isset($_GET['action']) && $_GET['action'] == 'editsave')
{
if (isset($_POST['reihung']) && $_POST['reihung'] != '' && isset($_POST['gewicht']) && $_POST['gewicht'] != '' && isset($_POST['semester']) && $_POST['semester'] != '')
{
$ablauf = new ablauf();
$ablauf->getAblaufId($stg_kz, $_POST['gebiet_id']);
$ablauf_id = $ablauf->result[0];
$ablauf = new ablauf($ablauf_id);
$ablauf = new ablauf($_POST['ablauf_id']);
$ablauf = $ablauf->result[0];
$ablauf->reihung = $_POST['reihung'];
$ablauf->gewicht = $_POST['gewicht'];
+16 -3
View File
@@ -219,6 +219,11 @@ if (isset($_REQUEST['prestudent']))
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id);
$rt_sprache = '';
if (empty($ablauf->result[0]))
{
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz);
}
if (!empty($ablauf->result[0]))
{
$rt_sprache = $ablauf->result[0]->sprache;
@@ -441,6 +446,7 @@ if (isset($prestudent_id))
if (isset($row_prio->studiengang_kz))
{
$firstPrio_studiengang_kz = $row_prio->studiengang_kz;
$firstPrio_studienplan_id = $row_prio->studienplan_id;
break;
}
}
@@ -449,9 +455,16 @@ if (isset($prestudent_id))
// Sprachwahl zu STG mit höchster Prio ermitteln
$ablauf = new Ablauf();
$sprachwahl = false;
if (isset($ablauf->result[0])
&& $ablauf->getAblaufVorgabeStudiengang($firstPrio_studiengang_kz)
&& is_bool($ablauf->result[0]->sprachwahl))
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id);
if (empty($ablauf->result[0]))
{
$ablauf->getAblaufGebiete($firstPrio_studiengang_kz);
}
if (isset($ablauf->result[0])
&& is_bool($ablauf->result[0]->sprachwahl))
{
$sprachwahl = $ablauf->result[0]->sprachwahl;
}
+2 -1
View File
@@ -79,12 +79,13 @@ if($doc->isLocked($id))
$dokumente_arr[] .= $row->dokument_kurzbz;
// An der FHTW wird das vorläufige ZGV Dokument verlangt und kann somit auch heruntergeladen werden
// Auch der Inivtation Letter kann von BewerberInnen heruntergeladen werden
// Auch der Invitation Letter und die Zeitbestätigung können von BewerberInnen heruntergeladen werden
if (CAMPUS_NAME == 'FH Technikum Wien')
{
$dokumente_arr[] .= 'ZgvBaPre';
$dokumente_arr[] .= 'ZgvMaPre';
$dokumente_arr[] .= 'InvitLet';
$dokumente_arr[] .= 'ZeitBest';
}
if ($person_id!=$akte_person || !in_array($akte_dokument_kurzbz, $dokumente_arr))
die('Sie haben keinen Zugriff auf dieses Dokument');
Generated
+9 -9
View File
@@ -681,12 +681,12 @@
"version": "0.9.1",
"source": {
"type": "git",
"url": "https://github.com/njh/easyrdf.git",
"url": "https://github.com/easyrdf/easyrdf.git",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/njh/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
"url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
"reference": "acd09dfe0555fbcfa254291e433c45fdd4652566",
"shasum": ""
},
@@ -796,6 +796,7 @@
"faker",
"fixtures"
],
"abandoned": true,
"time": "2019-12-12 13:22:17"
},
{
@@ -1321,16 +1322,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "2.0.23",
"version": "2.0.31",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099"
"reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4",
"reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4",
"shasum": ""
},
"require": {
@@ -1338,8 +1339,7 @@
},
"require-dev": {
"phing/phing": "~2.7",
"phpunit/phpunit": "^4.8.35|^5.7|^6.0",
"sami/sami": "~2.0",
"phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
"squizlabs/php_codesniffer": "~2.0"
},
"suggest": {
@@ -1409,7 +1409,7 @@
"x.509",
"x509"
],
"time": "2019-09-17 03:41:22"
"time": "2021-04-06 13:56:45"
},
{
"name": "rmariuzzo/jquery-checkboxes",
+1
View File
@@ -26,6 +26,7 @@ define('CIS_LEHRVERANSTALTUNG_LEISTUNGSUEBERSICHT_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_SEMESTERINFO_ANZEIGEN',true);
define('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN',false);
define('CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN', true);
define('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN', true);
// Im CIS Menue Links bei Modulen anzeigen wenn Lehrauftrag
define('CIS_LEHRVERANSTALTUNG_MODULE_LINK',true);
+1 -1
View File
@@ -95,7 +95,7 @@ foreach($addon_obj->result as $addon)
<command id="menu-prefs-stpltable-stundenplan:command" oncommand="stpltableChange('stundenplan');"/>
<command id="menu-prefs-stpltable-stundenplandev:command" oncommand="stpltableChange('stundenplandev');"/>
<command id="menu-prefs-kontofilterstg:command" oncommand="EinstellungenKontoFilterStgChange();"/>
<command id="menu-prefs-number_displayed_past_studiensemester:command" oncommand="variableChangeValue('number_displayed_past_studiensemester');"/>
<command id="menu-prefs-number_displayed_past_studiensemester:command" oncommand="variableChangeValueIfNumber('number_displayed_past_studiensemester');"/>
<command id="menu-statistic-lehrauftraege:command" oncommand="StatistikPrintLehrauftraege();"/>
<command id="menu-statistic-lvplanung:command" oncommand="StatistikPrintLVPlanung();"/>
<command id="menu-statistic-lvplanungexcel:command" oncommand="StatistikPrintLVPlanungExcel();"/>
+20
View File
@@ -2099,6 +2099,26 @@ function variableChangeValue(variable)
}
}
// ****
// * Aendert eines Variablenwert nach Überprüfung der Eingabe auf gültigen Wert (kleiner 100)
// ****
function variableChangeValueIfNumber(variable)
{
var variablevalue = getvariable(variable);
if(variablevalue = prompt('Bitte geben Sie den neuen Wert fuer '+variable+' ein', variablevalue))
{
if ((typeof(parseInt(variablevalue)) === 'number' && variablevalue < 100 ))
{
variableChange(variable, '', variablevalue);
}
else
{
alert(variablevalue + ' ist keine gültige Eingabe! Bitte eine Zahl eingeben!');
}
}
}
// ****
// * Sendet einen Request zum Aendern einer Variable
// ****
+64 -60
View File
@@ -322,66 +322,77 @@ if(!$error)
else
$alte_stunden_eingerechnet=true;
//Stundenreduzierung immer moeglich
if(($lem->semesterstunden>$semesterstunden_alt) || $neue_stunden_eingerechnet)
if ($semesterstunden_alt != '' && $lem->semesterstunden != '')
{
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT ";
if($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
elseif($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)) as summe";
elseif(!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)+($lem->semesterstunden)) as summe";
elseif(!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe";
$qry.=" FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
bismelden";
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0)
//Stundenreduzierung immer moeglich
if(($lem->semesterstunden>$semesterstunden_alt) || $neue_stunden_eingerechnet)
{
$qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")";
}
$oe_obj = new organisationseinheit();
$oe_arr = $oe_obj->getChilds($stunden_oe_kurzbz);
$qry = "SELECT ";
if($alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)+($lem->semesterstunden)) as summe";
elseif($alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)-($semesterstunden_alt)) as summe";
elseif(!$alte_stunden_eingerechnet && $neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)+($lem->semesterstunden)) as summe";
elseif(!$alte_stunden_eingerechnet && !$neue_stunden_eingerechnet)
$qry.=" (sum(tbl_lehreinheitmitarbeiter.semesterstunden)) as summe";
$qry.=" FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
bismelden";
if($db->db_query($qry))
{
if($row = $db->db_fetch_object())
if(count($oe_arr)>0)
$qry.=" AND tbl_studiengang.oe_kurzbz in(".$db->db_implode4SQL($oe_arr).")";
if(defined('FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE')
&& is_array(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)
&& count(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE)>0)
{
if($row->summe>$max_stunden)
{
if(!$fixangestellt)
{
if(!LehrauftragAufFirma($lem->mitarbeiter_uid))
{
//Warnung wenn die Stundenzahl ueberschritten wurde
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
}
}
else
{
$return = true;
$error = false;
$warnung = true;
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
}
$qry.=" AND tbl_studiengang.oe_kurzbz not in(".$db->db_implode4SQL(FAS_LV_LEKTORINNENZUTEILUNG_STUNDEN_IGNORE_OE).")";
}
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz, $oe_arr);
if($db->db_query($qry))
{
if($row = $db->db_fetch_object())
{
if($row->summe>$max_stunden)
{
if(!$fixangestellt)
{
if(!LehrauftragAufFirma($lem->mitarbeiter_uid))
{
//Warnung wenn die Stundenzahl ueberschritten wurde
$return = false;
$error = true;
$errormsg = "ACHTUNG: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden NICHT gespeichert!\n\n";
}
}
else
{
$return = true;
$error = false;
$warnung = true;
$errormsg = "Hinweis: Die maximal erlaubte Semesterstundenanzahl des Lektors von $max_stunden Stunden ($stunden_oe_kurzbz) wurde ueberschritten!\n Daten wurden gespeichert!\n\n";
}
$errormsg.=getStundenproInstitut($lem->mitarbeiter_uid, $le->studiensemester_kurzbz, $oe_arr);
}
}
else
{
$return = false;
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
else
{
@@ -389,13 +400,6 @@ if(!$error)
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
else
{
$return = false;
$error=true;
$errormsg='Fehler beim Ermitteln der Gesamtstunden';
}
}
}
@@ -28,6 +28,7 @@ header("Content-type: application/vnd.mozilla.xul+xml");
require_once('../../config/vilesci.config.inc.php');
require_once('../../config/global.config.inc.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/phrasen.class.php');
$user = get_uid();
$rechte = new benutzerberechtigung();
@@ -38,6 +39,8 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
// Vertragsdetails: Anzeige wird über config Eintrag bestimmt
$is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') || FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN == true) ? 'false' : 'true';
$sprache = getSprache();
$p = new phrasen($sprache);
?>
<overlay id="LehrveranstaltungDetailOverlay"
@@ -239,12 +242,12 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
</grid>
<vbox flex="1">
<label value=" Anmerkung" />
<label value="<?php echo $p->t('lehrveranstaltung/DetailAnmerkung'); ?>" />
<textbox id="lehrveranstaltung-detail-textbox-anmerkung" rows="5" multiline="true" disabled="true"/>
<hbox>
<spacer flex="1" />
<button id="lehrveranstaltung-detail-button-save" label="speichern" oncommand="LeDetailSave();" disabled="true"/>
<spacer flex="1" />
</hbox>
</vbox>
</hbox>
@@ -435,7 +438,7 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<vbox>
<groupbox>
<caption label="LektorInnendaten" />
<vbox flex="1" style="padding: 10px;">
<hbox flex="1" style="padding: 10px;">
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-lehreinheit_id" hidden="true"/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-mitarbeiter_uid" hidden="true"/>
<grid align="end" flex="1"
@@ -446,6 +449,8 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<column flex="1"/>
<column />
<column flex="1"/>
<column />
<column flex="1"/>
</columns>
<rows>
@@ -472,36 +477,34 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
</menupopup>
</template>
</menulist>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" value="<?php echo $p->t('lehrveranstaltung/LehreinheitmitarbeiterAnmerkung'); ?>"/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" disabled="true" maxlength="255" width="300" oninput="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-semesterstunden" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" value="Semesterstunden: "/>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-semesterstunden" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" value="Lehrauftragsstunden (LAS): "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-semesterstunden" disabled="true" maxlength="6" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten(); if(parseInt(this.value)) document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden').value= parseInt(this.value)"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" value="Planstunden: "/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" tooltiptext="LVPLS" value="LV-Plan Stunden: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-planstunden" disabled="true" maxlength="3" flex="1" oninput="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-stundensatz" control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-stundensatz" value="Stundensatz: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-stundensatz" disabled="true" maxlength="6" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten()"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" value="Faktor: "/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" value="Faktor: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-faktor" hidden="true" disabled="true" maxlength="3" flex="1" oninput="LeMitarbeiterValueChanged();LeMitarbeiterGesamtkosten()"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" value="BIS-Melden: "/>
<checkbox id="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" disabled="true" flex="1" oncommand="LeMitarbeiterValueChanged();"/>
</row>
<row>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" value="Anmerkung: "/>
<textbox id="lehrveranstaltung-lehreinheitmitarbeiter-textbox-anmerkung" disabled="true" maxlength="256" flex="1" oninput="LeMitarbeiterValueChanged();"/>
<label control="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" value="BIS-Melden: "/>
<checkbox id="lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden" disabled="true" flex="1" oncommand="LeMitarbeiterValueChanged();"/>
<label value='Gesamtkosten:' />
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-gesamtkosten" value='' />
<spacer />
<button label="Speichern" disabled="true" id="lehrveranstaltung-lehreinheitmitarbeiter-button-save" oncommand="LeMitarbeiterSave();"/>
<spacer />
<spacer />
</row>
</rows>
</grid>
<hbox flex="1">
<!--<spacer flex="1" />-->
<hbox flex="1">
<label value='Gesamtkosten:' />
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-gesamtkosten" value='' />
</hbox>
<button label="Speichern" disabled="true" id="lehrveranstaltung-lehreinheitmitarbeiter-button-save" oncommand="LeMitarbeiterSave();"/>
</hbox>
</vbox>
</hbox>
</groupbox>
</vbox>
@@ -509,11 +512,11 @@ $is_hidden = (!defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') |
<vbox>
<groupbox id="lehrveranstaltung-lehreinheitmitarbeiter-groupbox-vertragsdetails" hidden="<?php echo $is_hidden ?>">
<caption label="Vertragsdetails" />
<grid style="overflow:auto; padding:10px;" flex="1">
<grid style="overflow:auto; padding:10px;" >
<columns>
<column flex="1"/>
<column flex="1"/>
<column flex="1"/>
<column/>
<column/>
<column/>
</columns>
<rows>
<label id="lehrveranstaltung-lehreinheitmitarbeiter-label-vertrag_id" hidden="true" value=""/>
@@ -59,7 +59,7 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/lehrveranstaltungnotenov
</popupset>
<toolbox>
<toolbar id="lehrveranstaltung-nav-toolbar">
<toolbarbutton id="lehrveranstaltung-toolbar-neu" label="Neue Lehreinheit" oncommand="LeNeu();" disabled="true" image="../skin/images/NeuDokument.png" tooltiptext="Neue Lehreinheit anlegen" />
<toolbarbutton id="lehrveranstaltung-toolbar-neu" label="Neuer LV-Teil" oncommand="LeNeu();" disabled="true" image="../skin/images/NeuDokument.png" tooltiptext="Neue Lehreinheit anlegen" />
<toolbarbutton id="lehrveranstaltung-toolbar-del" label="Loeschen" oncommand="LeDelete();" disabled="true" image="../skin/images/DeleteIcon.png" tooltiptext="Lehreinheiten löschen"/>
<toolbarbutton id="lehrveranstaltung-toolbar-refresh" label="Aktualisieren" oncommand="LvTreeRefresh()" disabled="false" image="../skin/images/refresh.png" tooltiptext="Liste neu laden"/>
<toolbarbutton id="lehrveranstaltung-toolbar-lehrauftrag" label="Lehrauftrag" oncommand="LvCreateLehrauftrag()" disabled="false" image="../skin/images/person.gif" tooltiptext="Lehrauftrag ausdrucken" hidden="true"/>
+24 -1
View File
@@ -448,9 +448,32 @@ function MitarbeiterDetailDisableFields(val)
document.getElementById('mitarbeiter-detail-checkbox-kleriker').disabled=val;
}
function MitarbeiterCount()
{
var tree = document.getElementById('mitarbeiter-tree');
//Alle markierten Personen holen
var start = {};
var end = {};
var numRanges = tree.view.selection.getRangeCount();
var anzahl = 0;
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t, start, end);
for (var v = start.value; v <= end.value; v++)
{
anzahl = anzahl + 1;
}
}
return anzahl;
}
function MitarbeiterAuswahl()
{
if(!MitarbeiterTreeLoadDataOnSelect)
document.getElementById('mitarbeiter-toolbar-label-anzahl').value = 'Anzahl: ' + MitarbeiterCount();
if(!MitarbeiterTreeLoadDataOnSelect)
{
MitarbeiterTreeLoadDataOnSelect=true;
return true;
+1 -1
View File
@@ -252,7 +252,7 @@ else
array('uid', 'stg_kz', 'person_id', 'id', 'prestudent_id', 'buchungsnummern', 'ss', 'abschlusspruefung_id',
'typ', 'all', 'preoutgoing_id', 'lvid', 'projekt_kurzbz', 'von', 'bis', 'stundevon', 'stundebis',
'sem', 'lehreinheit', 'mitarbeiter_uid', 'studienordnung_id', 'fixangestellt', 'standort',
'abrechnungsmonat', 'form')
'abrechnungsmonat', 'form', 'projektarbeit_id', 'betreuerart_kurzbz')
)
)
{
+6 -2
View File
@@ -259,16 +259,19 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
]]>
</body>
</method>
<method name="DeleteRessource">
<method name="DeleteRessource">
<parameter name="ressource_id"/>
<body>
<body>
<![CDATA[
//debug('Refresh Notiz');
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
try
{
var col = tree.columns.getColumnFor(document.getAnonymousElementByAttribute(this ,'anonid', 'treecol-ressource-projekt_ressource_id'));
var projekt_ressource_id = tree.view.getCellText(tree.currentIndex, col);
var projekt_kurzbz = this.getAttribute('projekt_kurzbz');
var projektphase_id = this.getAttribute('projektphase_id');
//var projekt_ressource_id = this.getAttribute('projekt_ressource_id');
var soapBody = new SOAPObject("deleteProjektRessource");
//soapBody.appendChild(new SOAPObject("username")).val('joe');
@@ -286,6 +289,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
projektRessource.appendChild(new SOAPObject("projekt_kurzbz")).val('');
}
projektRessource.appendChild(new SOAPObject("ressource_id")).val(ressource_id);
projektRessource.appendChild(new SOAPObject("projekt_ressource_id")).val(projekt_ressource_id);
soapBody.appendChild(projektRessource);
var sr = new SOAPRequest("deleteProjektRessource",soapBody);
+21 -15
View File
@@ -1733,6 +1733,7 @@ else
$content .= "</tr>";
$content .= '</tfoot></table>';
$content .= "\n";
}
//Aufsplittungen für Mischformen holen
@@ -1744,28 +1745,32 @@ else
{
if ($db->db_num_rows($result) > 0)
{
$content .= "<br><br><h2>Aufsplittung Mischformen</h2><br>";
$content .= "\n<table class='liste table-autosort:0 table-stripeclass:alternate table-autostripe'>
<thead>
<tr>
<th class='table-sortable:default'>Studiengang</th>";
$content .= "<br><br>";
$content .= "<h2>Aufsplittung Mischformen</h2><br>";
$content .= "\n<table class='liste table-autosort:0 table-stripeclass:alternate table-autostripe'>";
$content .= "\n<thead>";
$content .= "\n<tr>";
$content .= "\n<th class='table-sortable:default'>Studiengang</th>";
foreach ($studenttypes as $heading)
{
$content .= "<th colspan=".$noOrgformen.">$heading</th>";
$content .= "\n<th colspan=".$noOrgformen.">$heading</th>";
}
$content .= "</tr><tr><th>&nbsp</th>";
$content .= "\n</tr>";
$content .= "\n<tr>\n<th></th>";
//orgformheadings (VZ, BB,...) ausgeben
for ($i = 0; $i < $noStudenttypes; $i++)
{
foreach ($orgform_arr as $row_orgform)
{
$content .= "<th align='center' class='table-sortable:numeric'>";
$content .= "\n<th align='center' class='table-sortable:numeric' nowrap>";
$content .= $row_orgform;
$content .= "</th>";
}
}
$content .= "</tr></thead><tbody>";
$content .= "\n</tr>";
$content .= "\n</thead>";
$content .= "\n<tbody>";
$sumarr = array();
@@ -1773,13 +1778,13 @@ else
{
$content .= "\n";
$content .= '<tr>';
$content .= "<td>".mb_strtoupper($row->typ.$row->kurzbz)." ($row->kurzbzlang)</td>";
$content .= "\n<td>".mb_strtoupper($row->typ.$row->kurzbz)." ($row->kurzbzlang)</td>";
foreach ($studenttypes as $key => $value)
{
foreach ($orgform_arr as $row_orgform)
{
$fullAlias = $key."_".mb_strtolower($row_orgform);
$content .= "<td align='center'>";
$content .= "\n<td align='center' nowrap>";
$content .= $row->{$fullAlias};
$content .= "</td>";
//Summe berechnen
@@ -1794,14 +1799,15 @@ else
}
}
}
$content .= "</tr>";
$content .= "\n</tr>";
$content .= "\n";
$content .= '</tbody><tfoot style="font-weight: bold;"><tr>';
$content .= "<td>Summe</td>";
$content .= "</tbody>";
$content .= '<tfoot style="font-weight: bold;"><tr>';
$content .= "\n<td>Summe</td>";
foreach ($sumarr as $sum)
{
$content .= "<td align='center'>".$sum."</td>";
$content .= "\n<td align='center'>".$sum."</td>";
}
$content .= "</tfoot></tr>";
$content .= '</table>';
+24 -1
View File
@@ -365,7 +365,6 @@ if(!$error)
$error = true;
$errormsg = 'Sie haben keine Schreibrechte fuer diesen Studiengang';
}
//Studentendaten speichern
if(!$error)
{
@@ -377,7 +376,15 @@ if(!$error)
$errormsg = 'Fehler beim Laden:'.$student->errormsg;
$error = true;
}
$datum = new datum();
$gebdatum = $_POST['geburtsdatum'];
if($gebdatum!='' && !$datum->checkDatum($gebdatum))
{
$return = false;
$errormsg = 'Geburtsdatum ist nicht korrekt.';
$error = true;
}
if(!$error)
{
$student->uid = $_POST['uid'];
@@ -2296,8 +2303,12 @@ if(!$error)
{
$dokumente = explode(';',$_POST['dokumente']);
$errormsg = '';
$sonst = 0;
foreach ($dokumente as $dokument_kurzbz)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2308,6 +2319,8 @@ if(!$error)
$dok->insertamum = date('Y-m-d H:i:s');
$dok->insertvon = $user;
$dok->new = true;
if ($dokument_kurzbz === 'Sonst')
$sonst++;
if(!$dok->save())
{
@@ -2501,8 +2514,13 @@ if(!$error)
{
$dokumente = explode(';',$_POST['dokumente']);
$errormsg = '';
$sonst = 0;
foreach ($dokumente as $dokument_kurzbz)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2514,6 +2532,11 @@ if(!$error)
{
$errormsg .= "Fehler bei $dokument_kurzbz: $dok->errormsg\n";
}
else
{
if ($dokument_kurzbz === 'Sonst')
$sonst++;
}
}
else
{
+1 -1
View File
@@ -151,7 +151,7 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<template>
<menupopup>
<menuitem value="rdf:http://www.technikum-wien.at/mobilitaetsprogramm/rdf#mobilitaetsprogramm_code"
label="rdf:http://www.technikum-wien.at/mobilitaetsprogramm/rdf#kurzbz"
label="rdf:http://www.technikum-wien.at/mobilitaetsprogramm/rdf#kurzbz - rdf:http://www.technikum-wien.at/mobilitaetsprogramm/rdf#beschreibung"
uri="rdf:*"/>
</menupopup>
</template>
+23
View File
@@ -952,6 +952,27 @@ function StudentImageInfomail()
}
}
function StudentCount()
{
var tree = document.getElementById('student-tree');
//Alle markierten Personen holen
var start = {};
var end = {};
var numRanges = tree.view.selection.getRangeCount();
var anzahl = 0;
for (var t = 0; t < numRanges; t++)
{
tree.view.selection.getRangeAt(t, start, end);
for (var v = start.value; v <= end.value; v++)
{
anzahl = anzahl + 1;
}
}
return anzahl;
}
// ****
// * Auswahl eines Studenten
// * bei Auswahl eines Studenten wird dieser geladen
@@ -959,6 +980,8 @@ function StudentImageInfomail()
// ****
function StudentAuswahl()
{
document.getElementById('student-toolbar-label-anzahl').value = 'Anzahl: ' + StudentCount();
if(!StudentTreeLoadDataOnSelect)
{
StudentTreeLoadDataOnSelect=true;
+13 -1
View File
@@ -892,7 +892,13 @@ function StudentProjektbetreuerAuswahl()
document.getElementById('student-projektbetreuer-checkbox-neu').checked=false;
var gesamtkosten = StudentProjektbetreuerGesamtkosten();
if (document.getElementById('student-projektbetreuer-button-beurteilung'))
{
checkBeurteilung();
}
// Wenn Vertragsdetails angezeigt werden
if (projektarbeit_vertragsdetails_anzeigen) {
//Reset attributes
@@ -1122,6 +1128,12 @@ function StudentProjektbetreuerDetailDisableFields(val)
document.getElementById('student-projektbetreuer-button-speichern').disabled=val;
document.getElementById('student-projektbetreuer-button-neueperson').disabled=val;
document.getElementById('student-projektbetreuer-button-kontaktdaten').disabled=val;
if (document.getElementById('student-projektbetreuer-button-beurteilung') && val === true)
{
document.getElementById('student-projektbetreuer-button-beurteilung').disabled=val;
document.getElementById('student-projektbetreuer-span-beurteilung').setAttribute("value", '');
}
}
// ****
@@ -520,7 +520,7 @@ $is_hidden = (!defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN')
</groupbox>
<!-- Vertragsdetails: Anzeige wird ueber config Eintrag bestimmt -->
<vbox>
<vbox id="student-projektbetreuer-vbox">
<groupbox id="student-projektbetreuer-groupbox-vertragsdetails" hidden="<?php echo $is_hidden ?>">
<caption label="Vertragsdetails" />
<grid style="overflow:auto; padding:10px;" flex="1">
@@ -529,7 +529,7 @@ $is_hidden = (!defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN')
<column flex="1"/>
<column flex="1"/>
</columns>
<rows>
<rows >
<label id="student-projektbetreuer-label-vertrag_id" hidden="true" value=""/>
<row>
<label value="Vertragsstatus:"/>
+29
View File
@@ -177,6 +177,24 @@ class bisverwendung extends basis_db
}
}
/**
* Prueft das Datum
* @param $date = string
* @return true wenn ok, sonst false
*/
static public function verifyDate($date, $strict = true)
{
$dateTime = DateTime::createFromFormat('Y-m-d', $date);
if ($strict) {
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
return false;
}
}
return $dateTime !== false;
}
/**
* Prueft die Daten vor dem Speichern
*
@@ -189,6 +207,17 @@ class bisverwendung extends basis_db
$this->errormsg = 'Vertragsstunden sind ungueltig';
return false;
}
elseif(!$this->verifyDate($this->beginn) && !empty($this->beginn))
{
$this->errormsg = 'Start Datum ist kein Valides Datum: '.$this->beginn;
return false;
}
elseif(!$this->verifyDate($this->ende) && !empty($this->ende))
{
$this->errormsg = 'End Datum ist kein Valides Datum: '.$this->ende;
return false;
}
return true;
}
+24 -5
View File
@@ -148,17 +148,37 @@ class datum
}
/**
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist
* @return true wenn ok, false wenn falsches Format
* Prueft ob das Datum im Format dd.mm.YYYY oder YYYY-mm-dd ist UND ob es sich um ein gültiges Datum handelt
* @return true wenn ok, false wenn falsches Format und/oder nicht gültig
*/
public function checkDatum($datum)
{
if(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$",$datum) || mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$",$datum))
return true;
//Format dd.mm.yyyy
if(mb_ereg("([0-9]{2}).([0-9]{2}).([0-9]{4})$", $datum))
{
$year = substr($datum, 6, 4);
$month = substr($datum, 3, 2);
$day = substr($datum, 0, 2);
}
//Format yyyy-mm-dd
elseif(mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})$", $datum))
{
$year = substr($datum, 0, 4);
$month = substr($datum, 5, 2);
$day = substr($datum, 8, 2);
}
else
{
return false;
}
return checkdate($month, $day, $year);
}
/**
* Zieht ein Datum von einem anderen ab, und gibt die differenz in Tagen zurueck (mit Vorzeichen)
* @param $datum1
@@ -395,6 +415,5 @@ class datum
{
return intval(substr($timestring, 0, 2)) + intval(substr($timestring, 3, 2)) / 60;
}
}
?>
+53
View File
@@ -1121,4 +1121,57 @@ function setLeadingZero($number, $length = 2)
return str_pad($number, $length, "0", STR_PAD_LEFT);
}
}
/**
* Generates a new token for diffent use cases. Default token length is 64
* - Reading messages
* - Forgotten password
* - etc
* Returns null on failure
*/
function generateUniqueToken($length = 64)
{
$token = null;
$firstGeneratedToken = null;
// For PHP 7 you can use random_bytes()
if (function_exists('random_bytes'))
{
try
{
$firstGeneratedToken = random_bytes($length); // try to generates cryptographically secure pseudo-random bytes...
}
catch (Exception $e) { $firstGeneratedToken = null; } // if fails $firstGeneratedToken is set to null
}
// For PHP >= 5.3 and < 7 and openssl is available
elseif (function_exists('openssl_random_pseudo_bytes'))
{
$firstGeneratedToken = openssl_random_pseudo_bytes($length, $strong);
// If the token generation ended with errors OR the generated token is NOT strong enough
if ($firstGeneratedToken == false || $strong == false) $firstGeneratedToken = null; // $firstGeneratedToken is set to null
}
if ($firstGeneratedToken != null) // If everything was fine
{
// base64 is about 33% longer, so we need to truncate the result
$token = strtr(substr(base64_encode($firstGeneratedToken), 0, $length), '+/=', '-_,');
}
// Fallback to mt_rand if:
// php < 5.3
// OR no openssl is available
// OR openssl_random_pseudo_bytes used an algorithm that is cryptographically NOT strong
// OR one of the previous methods failed
if ($token == null)
{
$token = ''; // set $token as an empty string
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/+';
$charactersLength = strlen($characters) - 1;
// Select some random characters
for ($i = 0; $i < $length; $i++) $token .= $characters[mt_rand(0, $charactersLength)];
}
return $token;
}
?>
+2 -2
View File
@@ -139,7 +139,7 @@ class gemeinde extends basis_db
if($this->db_query($qry))
{
//naechste ID aus der Sequence holen
$qry="SELECT currval('tbl_gemeinde_gemeinde_id_seq') as id;";
$qry="SELECT currval('bis.tbl_gemeinde_gemeinde_id_seq') as id;";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -219,4 +219,4 @@ class gemeinde extends basis_db
return true;
}
}
?>
?>
+7
View File
@@ -596,10 +596,17 @@ class lvregel extends basis_db
// Ausbildungssemester aus dem Status holen
$prestudent = new prestudent();
$studiensemester = new studiensemester();
$prev_studiensemester_kurzbz = $studiensemester->getPrevious();
if($prestudent->getLastStatus($student->prestudent_id, $studiensemester_kurzbz))
{
$this->cache[$uid][$studiensemester_kurzbz]=$prestudent->ausbildungssemester;
}
else if($prestudent->getLastStatus($student->prestudent_id, $prev_studiensemester_kurzbz))
{
$this->cache[$uid][$studiensemester_kurzbz]=$prestudent->ausbildungssemester + 1;
}
}
$ausbildungssemester = $this->cache[$uid][$studiensemester_kurzbz];
+44 -28
View File
@@ -691,10 +691,11 @@ class organisationseinheit extends basis_db
*
* @param string $user uid
* @param integer $zeitraum Anzahl Tage in die Vergangenheit, die fuer das Auftreten der OE beruecksichtigt werden sollen
* @param integer $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param string $anzahl_ereignisse default: 3 Wie oft soll diese OE mindestens in $zeitraum vorkommen, um beruecksichtigt zu werden
* @param boolean $aktiv
* @param array $funktion_zuordnungen Einschränkung nach zugeordneten Funktionen (Gültigkeitszeitraum heute - 1 Monat 1 Tag nach Gültigkeitsende)
*/
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null)
public function getFrequent($user, $zeitraum=null, $anzahl_ereignisse='3', $aktiv=null, $funktion_zuordnungen=array())
{
if(!is_numeric($anzahl_ereignisse))
{
@@ -707,36 +708,51 @@ class organisationseinheit extends basis_db
else
$zeit = "";
$qry = "SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
$qry = "SELECT * FROM (
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
count(tbl_zeitaufzeichnung.zeitaufzeichnung_id)
FROM campus.tbl_zeitaufzeichnung
JOIN public.tbl_organisationseinheit ON(oe_kurzbz IN (oe_kurzbz_1,oe_kurzbz_2))
WHERE tbl_zeitaufzeichnung.uid=".$this->db_add_param($user)."
$zeit
GROUP BY tbl_organisationseinheit.oe_kurzbz HAVING COUNT(*) > $anzahl_ereignisse
UNION
SELECT
oe_kurzbz,
oe_parent_kurzbz,
bezeichnung,
organisationseinheittyp_kurzbz,
aktiv,
lehre,
'0'
FROM public.tbl_organisationseinheit";
if(!is_null($aktiv))
$qry.=" WHERE aktiv=".$this->db_add_param($aktiv, FHC_BOOLEAN);
$qry .=" ORDER BY count DESC,bezeichnung,oe_kurzbz";
$qry .=") oes";
if (isset($funktion_zuordnungen) && is_array($funktion_zuordnungen) && count($funktion_zuordnungen) > 0)
{
$qry .= " WHERE EXISTS (
SELECT 1 FROM public.tbl_benutzerfunktion
WHERE uid = ".$this->db_add_param($user)."
AND funktion_kurzbz IN (".$this->db_implode4SQL($funktion_zuordnungen).")
AND oe_kurzbz = oes.oe_kurzbz
AND (datum_von <= now() OR datum_von IS NULL)
AND (datum_bis + interval '1 month 1 day' >= now() OR datum_bis IS NULL)
)";
}
$qry .= " ORDER BY count DESC,bezeichnung,oe_kurzbz";
if($this->db_query($qry))
{
+3 -1
View File
@@ -81,7 +81,9 @@ class organisationsform extends basis_db
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
}
}
return true;
}
/**
*
+239 -124
View File
@@ -28,26 +28,25 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class projekt extends basis_db
{
public $new; // boolean
public $result = array(); // projekt Objekt
public $new; // boolean
public $result = array(); // projekt Objekt
//Tabellenspalten
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $projekt_kurzbz; // string
public $nummer; // string
public $titel; // string
public $beschreibung; // string
public $beginn; // date
public $ende; // date
public $oe_kurzbz; // string
public $insertamum; // timestamp
public $insertvon; // string
public $updateamum; // timestamp
public $updatevon; // string
public $budget;
public $farbe;
public $anzahl_ma; // integer
public $aufwand_pt; // integer
public $anzahl_ma; // integer
public $aufwand_pt; // integer
/**
@@ -58,23 +57,21 @@ class projekt extends basis_db
{
parent::__construct();
if($projekt_kurzbz != null)
if ($projekt_kurzbz != null)
$this->load($projekt_kurzbz);
}
/**
* Laedt die Projek mit der Kurzbezeichnung $projekt_kurzbz
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @param string $projekt_kurzbz Kurzbz des Projekts.
* @return true wenn ok, false im Fehlerfall
*/
public function load($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "SELECT * FROM fue.tbl_projekt WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -102,30 +99,28 @@ class projekt extends basis_db
}
}
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
/**
* Laedt alle aktuellen Projekte
* @param bool $filter_kommende Lädt auch alle zukünftigen.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
* @return bool
*/
public function getProjekteAktuell($filter_kommende = false, $oe = null)
{
$qry = 'SELECT * FROM fue.tbl_projekt WHERE ';
if($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if ($filter_kommende)
$qry .= " ((beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP) OR beginn > CURRENT_TIMESTAMP)";
else
$qry .= " (beginn < CURRENT_TIMESTAMP AND ende > CURRENT_TIMESTAMP)";
if (!is_null($oe))
$qry .= ' AND oe_kurzbz='.$this->db_add_param($oe);
if (!is_null($oe))
$qry .= ' AND oe_kurzbz=' . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
$qry .= ' ORDER BY oe_kurzbz;';
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -150,26 +145,24 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= '.$this->db_add_param($ende).' and ende >= '.$this->db_add_param($beginn);
/**
* Laedt alle Projekte die zwischen beginn und ende liegen
* @param date $beginn Anfang.
* @param date $ende Ende.
* @param string $oe Organisationseinheit.
* @return bool
*/
public function getProjekteInZeitraum($beginn, $ende, $oe = null)
{
$qry = 'select * from fue.tbl_projekt where beginn <= ' . $this->db_add_param($ende) . ' and ende >= ' . $this->db_add_param($beginn);
if (!is_null($oe))
$qry .= " AND oe_kurzbz=".$this->db_add_param($oe);
$qry .= " AND oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -193,7 +186,7 @@ class projekt extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
@@ -205,13 +198,11 @@ class projekt extends basis_db
{
$qry = 'SELECT * FROM fue.tbl_projekt';
if (!is_null($oe))
$qry .= " WHERE oe_kurzbz=".$this->db_add_param($oe);
$qry .= " WHERE oe_kurzbz=" . $this->db_add_param($oe);
$qry .= ' ORDER BY oe_kurzbz;';
//echo $qry;
if ($this->db_query($qry))
{
while ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
while ($row = $this->db_fetch_object()) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -245,26 +236,21 @@ class projekt extends basis_db
protected function validate()
{
//Gesamtlaenge pruefen
if ($this->projekt_kurzbz == null)
{
if ($this->projekt_kurzbz == null) {
$this->errormsg = 'Projekt kurzbz darf nicht NULL sein!';
}
if ($this->oe_kurzbz == null)
{
if ($this->oe_kurzbz == null) {
$this->errormsg = 'OE kurbz darf nicht NULL sein!';
}
if (mb_strlen($this->projekt_kurzbz) > 16)
{
if (mb_strlen($this->projekt_kurzbz) > 16) {
$this->errormsg = 'Projektyp_kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
if (mb_strlen($this->nummer) > 8)
{
if (mb_strlen($this->nummer) > 8) {
$this->errormsg = 'Nummer darf nicht länger als 8 Zeichen sein';
return false;
}
if (mb_strlen($this->titel) > 256)
{
if (mb_strlen($this->titel) > 256) {
$this->errormsg = 'Titel darf nicht länger als 256 Zeichen sein';
return false;
}
@@ -283,52 +269,50 @@ class projekt extends basis_db
public function save($new = null)
{
//Variablen pruefen
if(!$this->validate())
if (!$this->validate())
return false;
if ($new == null)
$new = $this->new;
if ($new)
{
if ($new) {
//Neuen Datensatz einfuegen
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->nummer).', '.
$this->db_add_param($this->titel).', '.
$this->db_add_param($this->beschreibung).', '.
$this->db_add_param($this->beginn).', '.
$this->db_add_param($this->ende).', '.
$this->db_add_param($this->budget).', '.
$this->db_add_param($this->farbe).', '.
$this->db_add_param($this->oe_kurzbz).','.
$this->db_add_param($this->aufwand_pt).','.
$this->db_add_param($this->anzahl_ma).','.
$this->db_add_param($this->aufwandstyp_kurzbz).');';
$qry = 'INSERT INTO fue.tbl_projekt (projekt_kurzbz, nummer, titel,beschreibung, beginn, ende, budget, farbe, oe_kurzbz, aufwand_pt, anzahl_ma, aufwandstyp_kurzbz) VALUES(' .
$this->db_add_param($this->projekt_kurzbz) . ', ' .
$this->db_add_param($this->nummer) . ', ' .
$this->db_add_param($this->titel) . ', ' .
$this->db_add_param($this->beschreibung) . ', ' .
$this->db_add_param($this->beginn) . ', ' .
$this->db_add_param($this->ende) . ', ' .
$this->db_add_param($this->budget) . ', ' .
$this->db_add_param($this->farbe) . ', ' .
$this->db_add_param($this->oe_kurzbz) . ',' .
$this->db_add_param($this->aufwand_pt) . ',' .
$this->db_add_param($this->anzahl_ma) . ',' .
$this->db_add_param($this->aufwandstyp_kurzbz) . ');';
}
else
{
//Updaten des bestehenden Datensatzes
$qry = 'UPDATE fue.tbl_projekt SET '.
'projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '.
'nummer='.$this->db_add_param($this->nummer).', '.
'titel='.$this->db_add_param($this->titel).', '.
'beschreibung='.$this->db_add_param($this->beschreibung).', '.
'beginn='.$this->db_add_param($this->beginn).', '.
'ende='.$this->db_add_param($this->ende).', '.
'budget='.$this->db_add_param($this->budget).', '.
'farbe='.$this->db_add_param($this->farbe).', '.
'oe_kurzbz='.$this->db_add_param($this->oe_kurzbz).', '.
'anzahl_ma='.$this->db_add_param($this->anzahl_ma).', '.
'aufwand_pt='.$this->db_add_param($this->aufwand_pt).', '.
'aufwandstyp_kurzbz='.$this->db_add_param($this->aufwandstyp_kurzbz).' '.
'WHERE projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).';';
$qry = 'UPDATE fue.tbl_projekt SET ' .
'projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ', ' .
'nummer=' . $this->db_add_param($this->nummer) . ', ' .
'titel=' . $this->db_add_param($this->titel) . ', ' .
'beschreibung=' . $this->db_add_param($this->beschreibung) . ', ' .
'beginn=' . $this->db_add_param($this->beginn) . ', ' .
'ende=' . $this->db_add_param($this->ende) . ', ' .
'budget=' . $this->db_add_param($this->budget) . ', ' .
'farbe=' . $this->db_add_param($this->farbe) . ', ' .
'oe_kurzbz=' . $this->db_add_param($this->oe_kurzbz) . ', ' .
'anzahl_ma=' . $this->db_add_param($this->anzahl_ma) . ', ' .
'aufwand_pt=' . $this->db_add_param($this->aufwand_pt) . ', ' .
'aufwandstyp_kurzbz=' . $this->db_add_param($this->aufwandstyp_kurzbz) . ' ' .
'WHERE projekt_kurzbz=' . $this->db_add_param($this->projekt_kurzbz) . ';';
}
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -345,10 +329,9 @@ class projekt extends basis_db
*/
public function delete($projekt_kurzbz)
{
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
$qry = "DELETE FROM lehre.tbl_projek WHERE projekt_kurzbz=" . $this->db_add_param($projekt_kurzbz);
if ($this->db_query($qry))
{
if ($this->db_query($qry)) {
return true;
}
else
@@ -367,7 +350,7 @@ class projekt extends basis_db
*/
function getProjekteMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$qry = "SELECT DISTINCT
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
@@ -377,12 +360,12 @@ class projekt extends basis_db
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." OR
student_uid=".$this->db_add_param($mitarbeiter_uid)."
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
@@ -401,12 +384,10 @@ class projekt extends basis_db
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid);
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry))
{
while ($row = $this->db_fetch_object($result))
{
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
@@ -427,16 +408,86 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert Ein Array mit Porjekten von allen Projekten des Mitarbeiters mit UID.
* Optional auch mit den Zuteilungen zu Projektphasen.
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
function getProjekteListForMitarbeiter($mitarbeiter_uid, $projektphasen = false)
{
$projectList = array();
$qry = "SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_ressource
JOIN fue.tbl_projekt_ressource USING(ressource_id)
JOIN fue.tbl_projekt USING(projekt_kurzbz)
WHERE (beginn<=now() or beginn is null)
AND (ende + interval '1 month 1 day' >=now() OR ende is null)
AND
(
mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR
student_uid=" . $this->db_add_param($mitarbeiter_uid) . "
)";
if ($projektphasen == true)
$qry .= "UNION
SELECT DISTINCT
tbl_projekt.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) OR (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if ($result = $this->db_query($qry)) {
while ($row = $this->db_fetch_object($result)) {
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
$this->result[] = $obj;
array_push($projectList, $obj);
}
return $projectList;
}
else
{
$this->erromsg = 'Fehler beim Laden der Daten';
return false;
}
}
public function getProjektFromBestellung($bestellung_id)
{
$qry = "select * from fue.tbl_projekt
join wawi.tbl_projekt_bestellung USING (projekt_kurzbz)
where bestellung_id= ".$this->db_add_param($bestellung_id);
where bestellung_id= " . $this->db_add_param($bestellung_id);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
if ($this->db_query($qry)) {
if ($row = $this->db_fetch_object()) {
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->nummer = $row->nummer;
$this->titel = $row->titel;
@@ -463,5 +514,69 @@ class projekt extends basis_db
return false;
}
}
/**
* Liefert True zurück wenn die angegebenen Start und Endzeitpunkt der Arbeitsdauer in die Projektdauer fallen
* @param string $mitarbeiter_uid MitarbeiterUID.
* @param bool $projektphasen Default false. Wenn true, werden auch Zuteilungen zu Projektphasen geliefert.
* @return array wenn ok, false im Fehlerfall
*/
public function checkProjectInCorrectTime($projekt_kurzbz, $give_project_start, $give_projekt_ende)
{
if(empty($projekt_kurzbz))
return true;
try
{
$projekt = $this->getProjectByKurzbz($projekt_kurzbz);
if(strtotime($projekt->beginn))
$projekt_start = date('Y-m-d', strtotime($projekt->beginn));
else
$projekt_start = NULL;
if(strtotime($projekt->ende))
$projekt_ende = date('Y-m-d', strtotime($projekt->ende));
else
$projekt_ende = NULL;
$given_start = date('Y-m-d', strtotime($give_project_start));
$given_ende = date('Y-m-d', strtotime($give_projekt_ende));
if ((empty($projekt_start) || $given_start >= $projekt_start) && (empty($projekt_ende) || $given_ende <= $projekt_ende))
return true;
else
return false;
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
public function getProjectByKurzbz($projekt_kurzbz)
{
$qry = "SELECT * FROM fue.tbl_projekt
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
if ($result = $this->db_query($qry))
{
$row = $this->db_fetch_object($result);
$obj = new projekt();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->nummer = $row->nummer;
$obj->titel = $row->titel;
$obj->beschreibung = $row->beschreibung;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->oe_kurzbz = $row->oe_kurzbz;
return $obj;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+126 -3
View File
@@ -335,7 +335,7 @@ class projektbetreuer extends basis_db
}
/**
* Retrieves all projektarbeiten by person (only with stundensatz > 0)
* Retrieves all projektarbeiten by person
* @param $person_id
* @return boolean If succeeded true and result-array with objects of each projektarbeit of the person.
*/
@@ -349,8 +349,6 @@ class projektbetreuer extends basis_db
FROM
lehre.tbl_projektbetreuer
WHERE
(stundensatz IS NOT NULL) AND (stundensatz > 0)
AND
person_id =' . $this->db_add_param($person_id, FHC_INTEGER);
if ($this->db_query($qry))
@@ -391,5 +389,130 @@ class projektbetreuer extends basis_db
return false;
}
}
/**
* Holt Zweitbegutachter einer Projektarbeit mit Mail.
* @param $erstbegutachter_person_id int person_id des Erstbegutachters
* @param $projektarbeit_id int
* @param $student_uid string uid des Studenten der Arbeit abgibt
* @return object | bool
*/
public function getZweitbegutachterWithToken($erstbegutachter_person_id, $projektarbeit_id, $student_uid)
{
$qry_betr="SELECT betr.person_id, betr.projektarbeit_id, pers.anrede, betr.zugangstoken, betr.zugangstoken_gueltigbis, tbl_benutzer.uid, kontakt,
trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as voller_name,
CASE WHEN tbl_benutzer.uid IS NULL THEN kontakt ELSE tbl_benutzer.uid || '@".DOMAIN."' END AS email, abg.abgabedatum
FROM lehre.tbl_projektbetreuer betr
JOIN lehre.tbl_projektarbeit parb ON betr.projektarbeit_id = parb.projektarbeit_id
JOIN public.tbl_person pers ON betr.person_id = pers.person_id
LEFT JOIN public.tbl_kontakt ON pers.person_id = tbl_kontakt.person_id AND kontakttyp = 'email' AND zustellung = true
LEFT JOIN public.tbl_benutzer ON pers.person_id = tbl_benutzer.person_id
LEFT JOIN campus.tbl_paabgabe abg ON betr.projektarbeit_id = abg.projektarbeit_id AND abg.paabgabetyp_kurzbz = 'end'
WHERE betr.betreuerart_kurzbz = 'Zweitbegutachter'
AND betr.projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND parb.student_uid = ".$this->db_add_param($student_uid)."
AND EXISTS (
SELECT 1 FROM lehre.tbl_projektbetreuer
WHERE person_id = ".$this->db_add_param($erstbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Erstbegutachter'
AND projektarbeit_id = betr.projektarbeit_id
)
AND (tbl_benutzer.aktiv OR tbl_benutzer.aktiv IS NULL)
ORDER BY betr.insertamum DESC
LIMIT 1";
if ($betr=$this->db_query($qry_betr))
{
$row_betr = $this->db_fetch_object($betr);
if ($row_betr)
return $row_betr;
else
return false;
}
else
{
return false;
}
}
/**
* Generiert Token für externen Zweitbetreuer wenn noch kein Token vorhanden ist.
* @param int $zweitbegutachter_person_id
* @param int $projektarbeit_id
* @return bool true wenn erfolgreich (generiert oder bereits vorhanden), false wenn fehlgeschlagen
*/
public function generateZweitbegutachterToken($zweitbegutachter_person_id, $projektarbeit_id)
{
// if externer Betreuer and no valid token, generate
$betreuerUidQry = "SELECT uid, zugangstoken, zugangstoken_gueltigbis, tbl_projektbetreuer.person_id
FROM lehre.tbl_projektbetreuer
JOIN public.tbl_person USING(person_id)
LEFT JOIN public.tbl_benutzer USING(person_id)
WHERE projektarbeit_id = ".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_projektbetreuer.person_id = ".$this->db_add_param($zweitbegutachter_person_id, FHC_INTEGER)."
AND betreuerart_kurzbz = 'Zweitbegutachter'
LIMIT 1";
if ($betreueruidres = $this->db_query($betreuerUidQry))
{
$row_betr = $this->db_fetch_object($betreueruidres);
if ($row_betr)
{
if (!isset($row_betr->uid)
&& (!isset($row_betr->zugangstoken) || $row_betr->zugangstoken_gueltigbis < date('Y-m-d')))
{
$tokenanzahl = 1;
while ($tokenanzahl > 0)
{
//generate random string
$token = generateUniqueToken(16);
if (!$token)
return false;
$qry_tokencheck = "SELECT count(*) AS anzahl
FROM lehre.tbl_projektbetreuer
WHERE zugangstoken = " . $this->db_add_param($token);
if ($tokencount = $this->db_query($qry_tokencheck))
{
$row_tokencount = $this->db_fetch_object($tokencount);
$tokenanzahl = (int)$row_tokencount->anzahl;
}
else
{
return false;
}
}
$qry_upd = "UPDATE lehre.tbl_projektbetreuer SET
zugangstoken = " . $this->db_add_param($token) . ",
zugangstoken_gueltigbis = CURRENT_DATE + interval '1 year'
WHERE projektarbeit_id = " . $this->db_add_param($projektarbeit_id, FHC_INTEGER) . "
AND person_id = " . $this->db_add_param($row_betr->person_id, FHC_INTEGER) . "
AND betreuerart_kurzbz = 'Zweitbegutachter'";
if ($this->db_query($qry_upd))
{
return true;
}
else
{
return false;
}
}
else
return true; // not generated because intern or already exists
}
else
return false;// not found
}
else
return false; // query error
}
}
?>
+334 -101
View File
@@ -37,10 +37,10 @@ class projektphase extends basis_db
public $bezeichnung; //string
public $typ='Projektphase'; //string
public $beschreibung; //string
public $start; //date
public $ende; //date
public $start; //date
public $ende; //date
public $personentage; //integer
public $farbe;
public $farbe;
public $budget; // numeric
public $ressource_id; // bigint
public $ressource_bezeichnung; // string
@@ -58,7 +58,7 @@ class projektphase extends basis_db
{
parent::__construct();
if($projektphase_id != null)
if($projektphase_id != null)
$this->load($projektphase_id);
}
@@ -74,11 +74,11 @@ class projektphase extends basis_db
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
@@ -102,20 +102,20 @@ class projektphase extends basis_db
$this->updatevon = $row->updatevon;
return true;
}
else
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen mit zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
@@ -125,23 +125,23 @@ class projektphase extends basis_db
{
$this->result=array();
$qry = "Select * from fue.tbl_projektphase where projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz)." and projektphase_id not in (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
) SELECT *
FROM tasks) and projektphase_id not in (".$this->db_add_param($projektphase_id, FHC_INTEGER).")";
//echo "\n".$qry."\n";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -158,25 +158,25 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphasen zu einem Projekt
* @param $projekt_kurzbz Projekt der zu ladenden Projektphasen
* @param $foreignkey wenn ! gib nur die Erste Ebene der Projektphasen zurück
* @return true wenn ok, false im Fehlerfall
*/
*/
public function getProjektphasen($projekt_kurzbz, $foreignkey = null)
{
$this->result=array();
@@ -184,18 +184,18 @@ class projektphase extends basis_db
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projekt_kurzbz=".$this->db_add_param($projekt_kurzbz);
//echo "\n".$qry."\n";
if(!is_null($foreignkey))
$qry .= " and projektphase_fk is NULL";
$qry .= " ORDER BY start, projektphase_fk DESC;";
$qry .= " ORDER BY start, projektphase_fk DESC;";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -213,36 +213,36 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Lädt alle Unterphasen zu einem Projekt
* @param type $phase_id
* @return boolean
* @return boolean
*/
public function getAllUnterphasen($phase_id)
{
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
WHERE projektphase_fk =".$this->db_add_param($phase_id, FHC_INTEGER);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
@@ -260,15 +260,15 @@ class projektphase extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
return true;
}
else
{
$this->errormsg = "Fehler beim laden der Daten";
return false;
$this->errormsg = "Fehler beim laden der Daten";
return false;
}
}
@@ -296,11 +296,11 @@ class projektphase extends basis_db
$this->errormsg.='Projekt Kurzbz darf nicht länger als 16 Zeichen sein';
return false;
}
$this->errormsg = '';
return true;
}
/**
* Speichert den aktuellen Datensatz in die Datenbank
* Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt
@@ -315,12 +315,12 @@ class projektphase extends basis_db
if($new==null)
$new = $this->new;
if($new)
{
//Neuen Datensatz einfuegen
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
$qry='BEGIN; INSERT INTO fue.tbl_projektphase (projekt_kurzbz, projektphase_fk, bezeichnung, typ,
beschreibung, start, ende, budget, ressource_id, insertvon, insertamum, updatevon, updateamum, farbe, personentage) VALUES ('.
$this->db_add_param($this->projekt_kurzbz).', '.
$this->db_add_param($this->projektphase_fk).', '.
@@ -356,7 +356,7 @@ class projektphase extends basis_db
'updatevon='.$this->db_add_param($this->updatevon).' '.
'WHERE projektphase_id='.$this->db_add_param($this->projektphase_id, FHC_INTEGER).';';
}
if($this->db_query($qry))
{
if($new)
@@ -371,21 +371,21 @@ class projektphase extends basis_db
$this->db_query('COMMIT');
return true;
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
else
else
{
$this->errormsg = 'Fehler beim Auslesen der Sequence';
$this->db_query('ROLLBACK;');
return false;
}
}
return true;
}
else
@@ -394,7 +394,7 @@ class projektphase extends basis_db
return false;
}
}
/**
* Loescht den Datenensatz mit der ID die uebergeben wird
* @param $projekt_kurzbz ID die geloescht werden soll
@@ -407,77 +407,81 @@ class projektphase extends basis_db
$this->errormsg = 'Projektphase_ID ist ungueltig';
return true;
}
// an projektphase hängt noch eine phase
if($this->existPhaseFk($projektphase_id))
{
$this->errormsg ="Phase kann nicht gelöscht werden, da noch eine andere Phase daran hängt. Bitte zuerst Phase abhängen. ";
return false;
return false;
}
// Beginne Transaktion und lösche alle Tasks der Phase
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
$qry1 ="Begin; DELETE FROM fue.tbl_projekttask
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry1))
{
// Lösche alle zugewiesenen Ressourcen
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
$qry2 = "DELETE FROM fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry2))
{
// Lösche den Phaseneintrag
$qry3 = "DELETE FROM fue.tbl_projektphase
$qry3 = "DELETE FROM fue.tbl_projektphase
WHERE projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry3))
{
$this->db_query('COMMIT');
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler beim löschen der Projektphase aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Ressourcen aufgetreten";
$this->db_query('ROLLBACK');
return false;
return false;
}
}else
}
else
{
$this->errormsg ="Fehler beim löschen der Tasks aufgetreten";
$this->db_query('ROLLBACK');
return false;
$this->db_query('ROLLBACK');
return false;
}
}
/**
*
*
* Überprüft ob an übergebenr Phase noch eine andere Phase hängt. true wenn noch eine daran hängt
* @param $projektphase_id
*/
public function existPhaseFk($projektphase_id)
{
$qry = "SELECT * FROM fue.tbl_projektphase WHERE projektphase_fk =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
return true;
}else
return true;
}
else
{
$this->errormsg ="Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* Löscht Ressourcen einer Phase
* @param $projektphase_id
* @param $ressource_id -> wenn != null wird nur die eine ressource gelöscht
@@ -492,58 +496,60 @@ class projektphase extends basis_db
$this->errormsg = "Keine gültige ID übergeben";
return false;
}
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER)." and
ressource_id=".$this->db_add_param($ressource_id, FHC_INTEGER).";";
}else
}
else
{
// gesamte Ressourcen von Phase werden gelöscht
if(!is_numeric($projektphase_id))
{
$this->errormsg ="Keine gültige ID übergeben";
}
$qry ="DELETE from fue.tbl_projekt_ressource
$qry ="DELETE from fue.tbl_projekt_ressource
WHERE projektphase_id =".$this->db_add_param($projektphase_id, FHC_INTEGER).";";
}
if($this->db_query($qry))
{
return true;
}else
return true;
}
else
{
$this->errormsg = "Fehler bei der Abfrage aufgetreten";
return false;
return false;
}
}
/**
*
*
* gibt den Fortschritt der Phase in Prozent zurück --> Phasen die auf die übergebene Phase zeigen werden berücksichtigt
* @param $projektphase_id
*/
public function getFortschritt($projektphase_id)
public function getFortschritt($projektphase_id)
{
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
$qry = "Select * from fue.tbl_projektphase phase
join fue.tbl_projekttask task using(projektphase_id)
where task.projektphase_id = ".$this->db_add_param($projektphase_id, FHC_INTEGER)."
OR task.projektphase_id IN (
WITH RECURSIVE tasks(projektphase_fk) as
WITH RECURSIVE tasks(projektphase_fk) as
(
SELECT projektphase_id FROM fue.tbl_projektphase
WHERE projektphase_fk=".$this->db_add_param($projektphase_id, FHC_INTEGER)."
UNION ALL
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
SELECT p.projektphase_id FROM fue.tbl_projektphase p, tasks
WHERE p.projektphase_fk=tasks.projektphase_fk
)SELECT *
FROM tasks)";
$taskAnzahl = 0;
$taskAnzahl = 0;
// erledige tasks
$i = 0;
$ergebnis = 0;
$i = 0;
$ergebnis = 0;
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
@@ -553,25 +559,252 @@ class projektphase extends basis_db
$i++;
}
}
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
$taskAnzahl = ($taskAnzahl == 0)? 1 : $taskAnzahl;
$ergebnis = ($i*100)/$taskAnzahl;
return sprintf("%01.2f", $ergebnis);
}
/**
* Überprüft ob alle Tasks einer Phase erledigt sind
*/
public function isPhaseErledigt($phase_id)
{
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
$task = new projekttask();
$task->getProjekttasks($phase_id,null,'offen');
if(count($task->result)==0)
return true;
return true;
else
return false;
return false;
}
public function checkProjectphaseInCorrectTime($projektphase_id, $given_projectphase_start, $given_projektphase_ende)
{
if(empty($projektphase_id))
return true;
try
{
$projektphase = $this->getProjectphaseById($projektphase_id);
if(strtotime($projektphase->start))
{
$projektphase_start = date('Y-m-d', strtotime($projektphase->start));
}
else
{
$projektphase_start = NULL;
}
if(strtotime($projektphase->ende))
{
$projektphase_ende = date('Y-m-d', strtotime($projektphase->ende));
}
else
{
$projektphase_ende = NULL;
}
$given_start = date('Y-m-d', strtotime($given_projectphase_start));
$given_ende = date('Y-m-d', strtotime($given_projektphase_ende));
if ((empty($projektphase_start) || $given_start >= $projektphase_start)
&& (empty($projektphase_ende) || $given_ende <= $projektphase_ende))
{
return true;
}
else
{
return false;
}
}
catch (Exception $e)
{
error_log('Exception abgefangen: ', $e->getMessage(), "\n");
}
}
/**
* Laedt die Projektphase mit der ID $projektphase_id
* @param $projektphase_id ID der zu ladenden Projektphase
* @return true wenn ok, false im Fehlerfall
*/
public function getProjectphaseById($projektphase_id)
{
if(!is_numeric($projektphase_id))
{
$this->errormsg = 'Projektarbeit_id muss eine gueltige Zahl sein';
return false;
}
$qry = "SELECT tbl_projektphase.*, tbl_ressource.bezeichnung AS ressource_bezeichnung
FROM fue.tbl_projektphase LEFT OUTER JOIN fue.tbl_ressource USING (ressource_id)
WHERE projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER);
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->ressource_bezeichnung = $row->ressource_bezeichnung;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
return $obj;
}
else
{
$this->errormsg = 'Datensatz wurde nicht gefunden';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiter($mitarbeiter_uid)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
array_push($projecphasetList, $obj);
}
return $projecphasetList;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Laedt die Projektphase mit der ID des mitarbeiters für das jeweilige Projekt
* @param $mitarbeiter_uid der zu ladenden Projektphase des users
* @param $projekt_kurzbz des zu landenen Projekts
* @return array wenn ok, false im Fehlerfall
*/
public function getProjectphaseForMitarbeiterByKurzBz($mitarbeiter_uid, $projekt_kurzbz)
{
$projecphasetList = array();
$qry = "
SELECT
DISTINCT tbl_projektphase.*
FROM
fue.tbl_projektphase
JOIN fue.tbl_projekt USING (projekt_kurzbz)
JOIN fue.tbl_projekt_ressource USING (projektphase_id)
JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id)
WHERE
(
(
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null)
)
)
AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
AND tbl_projekt.projekt_kurzbz = ".$this->db_add_param($projekt_kurzbz);
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new projektphase();
$obj->projekt_kurzbz = $row->projekt_kurzbz;
$obj->projektphase_id = $row->projektphase_id;
$obj->projektphase_fk = $row->projektphase_fk;
$obj->bezeichnung = $row->bezeichnung;
$obj->typ = $row->typ;
$obj->beschreibung = $row->beschreibung;
$obj->start = $row->start;
$obj->ende = $row->ende;
$obj->personentage = $row->personentage;
$obj->farbe = $row->farbe;
$obj->budget = $row->budget;
$obj->ressource_id = $row->ressource_id;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+83 -11
View File
@@ -86,7 +86,7 @@ class ressource extends basis_db
$this->insertamum = $row->insertamum;
$this->insertvon = $row->insertvon;
$this->updateamum = $row->updateamum;
$this->updatevon = $row->updatevon;
$this->updatevon = $row->updatevon;
$this->funktion_kurzbz = $row->funktion_kurzbz;
return true;
}
@@ -130,7 +130,7 @@ class ressource extends basis_db
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->updatevon = $row->updatevon;
$this->result[] = $obj;
}
//var_dump($this->result);
@@ -174,7 +174,7 @@ class ressource extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->aufwand = $row->aufwand;
$obj->aufwand = $row->aufwand;
$obj->funktion_kurzbz = $row->funktion_kurzbz;
$obj->projekt_ressource_id= $row->projekt_ressource_id;
@@ -189,8 +189,8 @@ class ressource extends basis_db
return false;
}
}
/**
*
* Lädt die Projektressource
@@ -203,15 +203,15 @@ class ressource extends basis_db
$this->result=array();
if($this->db_query($qry))
{
{
if($row = $this->db_fetch_object())
{
$this->ressource_id = $row->ressource_id;
$this->beschreibung = $row->beschreibung;
$this->aufwand = $row->aufwand;
$this->aufwand = $row->aufwand;
$this->funktion_kurzbz = $row->funktion_kurzbz;
$this->projekt_ressource_id= $row->projekt_ressource_id;
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->projekt_ressource_id= $row->projekt_ressource_id;
$this->projekt_kurzbz = $row->projekt_kurzbz;
$this->projektphase_id = $row->projektphase_id;
return true;
}
@@ -223,7 +223,7 @@ class ressource extends basis_db
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
/**
*
@@ -256,7 +256,7 @@ class ressource extends basis_db
$obj->insertvon = $row->insertvon;
$obj->updateamum = $row->updateamum;
$obj->updatevon = $row->updatevon;
$obj->aufwand = $row->aufwand;
$obj->aufwand = $row->aufwand;
$obj->funktion_kurzbz = $row->funktion_kurzbz;
$obj->projekt_ressource_id = $row->projekt_ressource_id;
$this->result[] = $obj;
@@ -688,5 +688,77 @@ class ressource extends basis_db
return false;
}
}
/**
* Löscht eine Ressource zu Projekt Zuordnung
* @param type $ressource_id
* @param type $projekt_kurzbz
* @return boolean
*/
public function deleteFromProjektWithProjektRessourceId($ressource_id, $projekt_kurzbz, $project_ressource_id)
{
if($ressource_id == '' || !is_numeric($ressource_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
/*$qry="DELETE FROM fue.tbl_projekt_ressource WHERE ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false)."
AND projekt_kurzbz=".$this->db_add_param($projekt_kurzbz, FHC_STRING, false).';';
*/
$qry="
DELETE FROM fue.tbl_projekt_ressource pr
USING fue.tbl_ressource r
WHERE r.ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false). "
AND pr.projekt_ressource_id=".$this->db_add_param($project_ressource_id, FHC_INTEGER, false). "
AND pr.projekt_kurzbz=".$this->db_add_param($projekt_kurzbz, FHC_STRING, false).';';
if($this->db_query($qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Löschen der Daten';
return false;
}
}
/**
* Löscht eine Ressource zu Phase Zuordnung
* @param type $ressource_id
* @param type $projekt_kurzbz
* @return boolean
*/
public function deleteFromPhaseWithProjektRessourceId($ressource_id, $projektphase_id, $project_ressource_id)
{
if($ressource_id == '' || !is_numeric($ressource_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
if($projektphase_id == '' || !is_numeric($projektphase_id))
{
$this->errormsg = 'Ressource Id ist keine gültige Zahl';
return false;
}
/*$qry="DELETE FROM fue.tbl_projekt_ressource WHERE ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false)."
AND projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER, false).';';
*/
$qry="
DELETE FROM fue.tbl_projekt_ressource pr
USING fue.tbl_ressource r
WHERE r.ressource_id =".$this->db_add_param($ressource_id, FHC_INTEGER, false). "
AND pr.projekt_ressource_id=".$this->db_add_param($project_ressource_id, FHC_INTEGER, false). "
AND pr.projektphase_id=".$this->db_add_param($projektphase_id, FHC_INTEGER, false).';';
if($this->db_query($qry))
return true;
else
{
$this->errormsg = 'Fehler beim Löschen der Daten';
return false;
}
}
}
?>
+11 -5
View File
@@ -23,6 +23,7 @@ require_once(dirname(__FILE__).'/mail.class.php');
require_once(dirname(__FILE__).'/vorlage.class.php');
const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
const DEFAULT_SANCHO_FOOTER_IMG = 'sancho_footer_DEFAULT.jpg';
/**
* Send single Mail with Sancho Design and Layout.
@@ -31,14 +32,15 @@ const DEFAULT_SANCHO_HEADER_IMG = 'sancho_header_DEFAULT.jpg';
* to be replaced in the content template.
* @param string $to Email-adress.
* @param string $subject Subject of mail.
* @param string $headerImg Filename of the specific Sancho header image.
* @return boolean True, if succeeded.
* @param string $headerImg Filename of the specific Sancho header image.
* @param string $replyTo default Email-adress for reply.
* @return boolean True, if succeeded.
*/
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG)
function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerImg = DEFAULT_SANCHO_HEADER_IMG, $footerImg = DEFAULT_SANCHO_FOOTER_IMG, $replyTo = '')
{
$from = 'sancho@'. DOMAIN;
$sanchoHeader_img = dirname(__FILE__). '/../skin/images/sancho/'. $headerImg;
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/sancho_footer.jpg';
$sanchoFooter_img = dirname(__FILE__). '/../skin/images/sancho/'. $footerImg;
// Set unique content id for embedding header and footer image
$cid_header = uniqid();
@@ -63,7 +65,11 @@ function sendSanchoMail($vorlage_kurzbz, $vorlage_data, $to, $subject, $headerIm
// * embed the images
$mail->addEmbeddedImage($sanchoHeader_img, 'image/jpg', '', $cid_header);
$mail->addEmbeddedImage($sanchoFooter_img, 'image/jpg', '', $cid_footer);
// * Set reply-to
if (isset($replyTo) && $replyTo != '')
$mail->setReplyTo($replyTo);
// * embed the html content
$mail->setHTMLContent($body);
+14 -1
View File
@@ -421,7 +421,6 @@ function checkZeilenUmbruch()
'link'=>'../../../cms/news.php?studiengang_kz='.urlencode($studiengang_kz).'&semester='.urlencode($semester),
'text'=>$text
);
}
if(!defined('CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ABMELDUNG_ANZEIGEN)
@@ -466,6 +465,20 @@ function checkZeilenUmbruch()
}
}
// Anerkennung nachgewiesener Kenntnisse (Anrechnung)
if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN)
&& $rechte->isBerechtigt('student/anrechnung_beantragen'))
{
$menu[]=array
(
'id'=>'core_menu_anerkennungNachgewiesenerKenntnisse',
'position'=>'128',
'name'=>$p->t('lehre/anrechnung'),
'icon'=>'../../../skin/images/button_listen.png',
'link' => APP_ROOT. 'index.ci.php/lehre/anrechnung/RequestAnrechnung?studiensemester='.urlencode($angezeigtes_stsem).'&lv_id='.urlencode($lvid)
);
}
//************* Menuepunkte anzeigen ****************
+77
View File
@@ -1245,5 +1245,82 @@ class vertrag extends basis_db
return false;
}
}
/**
* Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehreinheit besitzt.
* @param $lehreinheit ID der Lehreinheit
* @param $studiensemester_kurzbz Studiensemester das geprueft wird
* @param $mitarbeiter_uid UID des Mitarbeiters
*/
public function isVertragErteiltLE($lehreinheit_id, $studiensemester_kurzbz, $mitarbeiter_uid)
{
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON')
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
{
// Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt
$qry = "
SELECT
tbl_studiensemester.start
FROM
public.tbl_studiensemester
WHERE
studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
AND tbl_studiensemester.start < (SELECT start
FROM public.tbl_studiensemester stsem WHERE
stsem.studiensemester_kurzbz=".$this->db_add_param(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)."
)";
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result)>0)
{
// Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt.
return true;
}
}
else
{
$this->errormsg = 'Fehler beim Laden des Studiensemesters';
return false;
}
}
$qry = "
SELECT
1
FROM
lehre.tbl_lehreinheitmitarbeiter
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN lehre.tbl_vertrag USING(vertrag_id)
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id)
WHERE
tbl_lehreinheitmitarbeiter.mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)."
AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)."
AND tbl_lehreinheit.lehreinheit_id=".$this->db_add_param($lehreinheit_id)."
AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt'
AND NOT EXISTS(
SELECT 1 FROM lehre.tbl_vertrag_vertragsstatus vstatus
WHERE vstatus.vertrag_id = tbl_vertrag.vertrag_id
AND vstatus.vertragsstatus_kurzbz='storno'
)
";
if ($result = $this->db_query($qry))
{
if ($this->db_num_rows($result) > 0)
{
return true;
}
else
{
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+1 -1
View File
@@ -174,7 +174,7 @@ class zeitaufzeichnung extends basis_db
}
if ($this->aktivitaet_kurzbz != 'Ersatzruhe' && $this->aktivitaet_kurzbz != 'DienstreiseMT')
{
$check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz != 'DienstreiseMT' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")";
$check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (aktivitaet_kurzbz != 'DienstreiseMT' or aktivitaet_kurzbz IS NULL ) and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")";
if($this->db_query($check_qry))
{
if($row = $this->db_fetch_object())
+12 -1
View File
@@ -1,5 +1,6 @@
<?php
$this->phrasen['abgabetool/abgabetool']='Abgabetool';
$this->phrasen['abgabetool/aeltereParbeitBenoten']='Projektarbeit für älteres Semester, bitte Word-Formular zur Benotung verwenden!';
$this->phrasen['abgabetool/typ']='Typ';
$this->phrasen['abgabetool/titel']='Titel';
$this->phrasen['abgabetool/betreuerart']='Betreuerart';
@@ -61,8 +62,10 @@ $this->phrasen['abgabetool/fehlerTerminEintragen']='Die Termin konnte nicht eing
$this->phrasen['abgabetool/fehlerTerminLoeschen']='Fehler beim Löschen des Termins!';
$this->phrasen['abgabetool/keineBerechtigungStudentenansicht']='Sie haben keine Berechtigung zum Anzeigen der Studentenansicht';
$this->phrasen['abgabetool/dateneingabeUnvollstaendig']='Die Dateneingabe ist unvollständig';
$this->phrasen['abgabetool/fehlerMailBegutachter']='Fehler beim Versenden des Mails an den (Erst-)Begutachter!';
$this->phrasen['abgabetool/fehlerMailBegutachter']='Fehler beim Versenden des Mails an den Erstbegutachter!';
$this->phrasen['abgabetool/fehlerMailZweitBegutachter']='Fehler beim Versenden des Mails an den Zweitbegutachter!';
$this->phrasen['abgabetool/fehlerBetreuerNichtGefundenKeinMail']='Betreuer nicht gefunden. Kein Mail verschickt!';
$this->phrasen['abgabetool/fehlerAktualitaetProjektarbeit']='Fehler bei Ermittlung der Aktualit&auml;t der Projektarbeit';
$this->phrasen['abgabetool/keinPDF']='Upload ist keine pdf-Datei! Bitte wiederholen Sie den Fileupload.';
$this->phrasen['abgabetool/dateiZuGross']='Die Datei ist zu groß! Maximale Dateigröße 15 MB';
$this->phrasen['abgabetool/fehlerTerminVorbei']='Die Abgabefrist für diesen Termin ist bereits abgelaufen.';
@@ -78,4 +81,12 @@ Sollten Sie trotzdem die `Eidesstattliche Erklärung´ samt Unterschrift hochlad
$this->phrasen['abgabetool/gelesenUndAkzeptiert']='Gelesen und akzeptiert';
$this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Erklärung nicht akzeptiert';
$this->phrasen['abgabetool/downloadProjektarbeit']='Dokument herunterladen';
$this->phrasen['abgabetool/zweitBegutachter']='ZweitbegutachterIn';
$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Zugangstoken an ZweitbegutachterIn noch einmal senden';
$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail an ZweitbegutachterIn (%s) gesendet';
$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Mail an ZweitbegutachterIn (%s) senden';
$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='keine Zustellmail für Zweitbegutachter vorhanden!';
$this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung herunterladen';
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter';
?>
+7 -7
View File
@@ -11,11 +11,11 @@ $this->phrasen['dms_link/iconPDF']='46'; //PDF Icon
$this->phrasen['dms_link/bedienungsanleitungMailverteiler']='1474'; //Bedienungsanleitung Mailverteiler
$this->phrasen['dms_link/berechtigungskonzeptMailverteiler']='1475'; //Berechtigungskonzept Mailverteiler
$this->phrasen['dms_link/handbuchUrlaubsverwaltung']='759'; //Handbuch Urlaubsverwaltung -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/handbuchZeitaufzeichnung']='1545'; //Handbuch Zeitaufzeichnung -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/handbuchZeitaufzeichnung']='1545'; //Handbuch Zeitaufzeichnung -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/fiktiveNormalarbeitszeit']='2512'; //fiktive Normalarbeitszeit -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/learningAgreementErasmus']='85863'; //Learning Agreement Incomings Erasmus
$this->phrasen['dms_link/learningAgreement']='38866'; //Learning Agreement Incomings NICHT Erasmus
$this->phrasen['dms_link/passwortpolicy']='57972'; //Passwortpolicy
$this->phrasen['dms_link/learningAgreement']='38866'; //Learning Agreement Incomings NICHT Erasmus
$this->phrasen['dms_link/passwortpolicy']='57972'; //Passwortpolicy
// Content IDs (=Englisch)
$this->phrasen['dms_link/lvPlanFAQ']='6887'; //Hilfe-Link aus dem LV-Plan in die LV-Plan FAQ auf der CIS (CMS-ID)
@@ -32,8 +32,8 @@ $this->phrasen['dms_link/lvevaluierungStudierendeCMS']=''; //Beschreibung des Ab
$this->phrasen['dms_link/lvevaluierungMitarbeiterCMS']=''; //Beschreibung des Ablaufs der LVEvaluierung für Mitarbeiter
//Links auf externe Seiten
$this->phrasen['dms_link/dokuwikiGesamtnote']='https://wiki.fhcomplete.org/doku.php?id=cis:gesamtnote'; //Link ins Dokuwiki zur Anleitung Gesamtnote
$this->phrasen['dms_link/abgabetoolLektorHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer LektorInnen
$this->phrasen['dms_link/abgabetoolStudentHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_studierende'; //Abgabetool Handbuch fuer Studierende
$this->phrasen['dms_link/abgabetoolAssistenzHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer Assistenz
$this->phrasen['dms_link/dokuwikiGesamtnote']='https://wiki.fhcomplete.info/doku.php?id=cis:gesamtnote'; //Link ins Dokuwiki zur Anleitung Gesamtnote
$this->phrasen['dms_link/abgabetoolLektorHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer LektorInnen
$this->phrasen['dms_link/abgabetoolStudentHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende'; //Abgabetool Handbuch fuer Studierende
$this->phrasen['dms_link/abgabetoolAssistenzHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer Assistenz
?>
+1 -1
View File
@@ -184,7 +184,7 @@
<!ENTITY menu-dokumente.accesskey "D">
<!ENTITY menu-dokumente-inskriptionsbestaetigung.key "I">
<!ENTITY menu-dokumente-inskriptionsbestaetigung.label "Inskriptionsbestätigung">
<!ENTITY menu-dokumente-inskriptionsbestaetigung.label "Studienbestätigung">
<!ENTITY menu-dokumente-inskriptionsbestaetigung.accesskey "I">
<!ENTITY menu-dokumente-bewerberakt.key "B">
+2 -1
View File
@@ -184,7 +184,8 @@ $this->phrasen['global/keineDatenGefunden']='Keine Daten gefunden';
$this->phrasen['global/erfolgreichAngelegt']='Erfolgreich angelegt';
$this->phrasen['global/keineSuchergebnisse']='Es liegen keine Daten zu Ihrer Suchanfrage vor';
$this->phrasen['global/bitteWaehlen']='Bitte wählen Sie';
$this->phrasen['global/zusaetzlicheInformationen']='Zusätzliche Informationen';
$this->phrasen['global/zusaetzlicheInformationen']='Zus&auml;tzliche Informationen';
//infrastruktur
+2
View File
@@ -40,4 +40,6 @@ $this->phrasen['lehre/nichtzugeteilt']='Sie sind nicht zu dieser Lehrveranstaltu
$this->phrasen['lehre/studienordnung']='Studienordnung';
$this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Noteneingabe deaktiviert';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Anerkennung nachgewiesener Kenntnisse';
$this->phrasen['lehre/anrechnung']='Anrechnung';
?>
+5
View File
@@ -0,0 +1,5 @@
<?php
$this->phrasen['lehrveranstaltung/DetailAnmerkung']='Anmerkung:';
$this->phrasen['lehrveranstaltung/LehreinheitmitarbeiterAnmerkung']='Anmerkung:';
?>
+2 -3
View File
@@ -27,13 +27,12 @@ $this->phrasen['profil/sieSindMitgliedInFolgendenVerteilern']='Sie sind Mitglied
$this->phrasen['profil/derUserIstInFolgendenVerteilern'] = 'Der User %s ist Mitglied in folgenden Verteilern';
$this->phrasen['profil/alleStudentenVon']='Alle StudentInnen von';
$this->phrasen['profil/kurzbeschreibungFuerOeh']='Kurzbeschreibung für die ÖH-Kandidatur';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die zuständige Assistenz';
$this->phrasen['profil/esWurdenKeineProfileGefunden']='Es wurden keine oder mehrere Profile f&uuml;r Ihren Useraccount gefunden';
$this->phrasen['profil/keinGueltigesProfil']='Kein gültiges Profil';
$this->phrasen['profil/adminstration']='Administration';
$this->phrasen['profil/zustaendigeAssistenz']='zuständige Assistenz';
$this->phrasen['profil/zustaendigeAssistenz']='hier';
$this->phrasen['profil/wendenSieSichAn']='Bitte wenden Sie sich an die';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht stimmen, wenden Sie sich bitte an die';
$this->phrasen['profil/solltenDatenNichtStimmen']='Sollten Ihre Daten nicht mehr aktuell sein, klicken Sie bitte';
$this->phrasen['profil/buero']='Büro';
$this->phrasen['profil/zeitsperrenVon']='Zeitsperren von';
$this->phrasen['profil/lvplanVon']='LV-Plan von';
+2 -1
View File
@@ -5,7 +5,7 @@ $this->phrasen['tools/dokumente']='Dokumente';
$this->phrasen['tools/dokument']='Dokument';
$this->phrasen['tools/erstelldatum']='Erstelldatum';
$this->phrasen['tools/bestaetigungenZeugnisse']='Bestätigungen/Zeugnisse';
$this->phrasen['tools/inskriptionsbestaetigung']='Inskriptionsbestätigung';
$this->phrasen['tools/inskriptionsbestaetigung']='Studienbestätigung';
$this->phrasen['tools/studienbeitragFuerSSBezahlt']='Studienbeitrag für das %1$s bezahlt';
$this->phrasen['tools/studienbeitragFuerSSNochNichtBezahlt']='Studienbeitrag für das %1$s noch nicht bezahlt';
$this->phrasen['tools/studienerfolgsbestaetigung']='Studienerfolgsbestätigung';
@@ -40,6 +40,7 @@ $this->phrasen['tools/zahlungsbestaetigung']='Zahlungsbestätigung';
$this->phrasen['tools/bestaetigungDrucken']='Bestaetigung drucken';
$this->phrasen['tools/offen']='offen';
$this->phrasen['tools/keineZahlungenVorhanden']='Derzeit sind keine Zahlungen vorhanden';
$this->phrasen['tools/zahlungenHinweis']='Bitte beachten Sie, dass es bis zu 5 Werktage dauern kann bis der Zahlungseingang hier aufscheint.';
//Ampeln
$this->phrasen['tools/ampelsystem']='Ampelsystem';
+12 -1
View File
@@ -1,5 +1,6 @@
<?php
$this->phrasen['abgabetool/abgabetool']='Submission tool';
$this->phrasen['abgabetool/aeltereParbeitBenoten']='Thesis handed in for older semester, please use word form for assessment!';
$this->phrasen['abgabetool/typ']='Type';
$this->phrasen['abgabetool/titel']='Title';
$this->phrasen['abgabetool/betreuerart']='Supervisor type';
@@ -60,8 +61,10 @@ $this->phrasen['abgabetool/fehlerTerminEintragen']='The deadline could not be en
$this->phrasen['abgabetool/fehlerTerminLoeschen']='Error deleting the deadline!';
$this->phrasen['abgabetool/keineBerechtigungStudentenansicht']='You are not allowed to view this Page';
$this->phrasen['abgabetool/dateneingabeUnvollstaendig']='Incomplete Data input';
$this->phrasen['abgabetool/fehlerMailBegutachter']='Error sending E-Mail to Assessor!';
$this->phrasen['abgabetool/fehlerMailBegutachter']='Error sending E-Mail to first Assessor!';
$this->phrasen['abgabetool/fehlerMailZweitBegutachter']='Error sending E-Mail to second Assessor!';
$this->phrasen['abgabetool/fehlerBetreuerNichtGefundenKeinMail']='Assessor not found. No E-Mail sent!';
$this->phrasen['abgabetool/fehlerAktualitaetProjektarbeit']='Error when checking if current thesis';
$this->phrasen['abgabetool/keinPDF']='Upload-File ist not a PDF! Please retry the Fileupload.';
$this->phrasen['abgabetool/dateiZuGross']='The File is too big! Maximum File size: 15 MB';
$this->phrasen['abgabetool/fehlerTerminVorbei']='The deadline for this upload has already expired.';
@@ -78,4 +81,12 @@ Sollten Sie trotzdem die `Eidesstattliche Erklärung´ samt Unterschrift hochlad
$this->phrasen['abgabetool/gelesenUndAkzeptiert']='Read and accepted';
$this->phrasen['abgabetool/erklaerungNichtAkzeptiert']='Declaration not accepted';
$this->phrasen['abgabetool/downloadProjektarbeit']='Download File';
$this->phrasen['abgabetool/zweitBegutachter']='Second assessor';
$this->phrasen['abgabetool/zweitbetreuerTokenMailSenden']='Resend access token to second assessor';
$this->phrasen['abgabetool/zweitbetreuerMailSenden']='Send mail to second assessor (%s)';
$this->phrasen['abgabetool/zweitbegutachterMailGesendet']='Mail sent to second assessor (%s)';
$this->phrasen['abgabetool/zweitBegutachterEmailFehlt']='Second assessor has no delivery mail adress!';
$this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment download';
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor';
?>
+6 -6
View File
@@ -10,11 +10,11 @@ $this->phrasen['dms_link/moodleHandbuch24']='1426'; //Moodle Handbuch
$this->phrasen['dms_link/iconPDF']='46'; //PDF Icon
$this->phrasen['dms_link/bedienungsanleitungMailverteiler']='1474'; //Bedienungsanleitung Mailverteiler
$this->phrasen['dms_link/berechtigungskonzeptMailverteiler']='1475'; //Berechtigungskonzept Mailverteiler
$this->phrasen['dms_link/handbuchUrlaubsverwaltung']='759'; //Handbuch Urlaubsverwaltung
$this->phrasen['dms_link/handbuchUrlaubsverwaltung']='759'; //Handbuch Urlaubsverwaltung
$this->phrasen['dms_link/handbuchZeitaufzeichnung']='1545'; //Handbuch Zeitaufzeichnung -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/fiktiveNormalarbeitszeit']='2512'; //fiktive Normalarbeitszeit -> Leer lassen, falls es keines gibt
$this->phrasen['dms_link/learningAgreementErasmus']='85863'; //Learning Agreement Incomings Erasmus
$this->phrasen['dms_link/learningAgreement']='38866'; //Learning Agreement Incomings NICHT Erasmus
$this->phrasen['dms_link/learningAgreement']='38866'; //Learning Agreement Incomings NICHT Erasmus
// Content IDs (=Deutsch)
$this->phrasen['dms_link/lvPlanFAQ']='6887'; //Hilfe-Link aus dem LV-Plan in die LV-Plan FAQ auf der CIS (CMS-ID)
@@ -27,8 +27,8 @@ $this->phrasen['dms_link/profilhilfe']=''; //Hilfe-Link aus dem Profil
$this->phrasen['dms_link/anleitungMailverteiler']='7578'; //Anleitung für die Benutzung der Mailverteiler und der Berechtigungsschlüssel
//Links auf externe Seiten
$this->phrasen['dms_link/dokuwikiGesamtnote']='https://wiki.fhcomplete.org/doku.php?id=cis:gesamtnote'; //Link ins Dokuwiki zur Anleitung Gesamtnote
$this->phrasen['dms_link/abgabetoolLektorHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer LektorInnen
$this->phrasen['dms_link/abgabetoolStudentHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_studierende'; //Abgabetool Handbuch fuer Studierende
$this->phrasen['dms_link/abgabetoolAssistenzHandbuch']='https://wiki.fhcomplete.org/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer Assistenz
$this->phrasen['dms_link/dokuwikiGesamtnote']='https://wiki.fhcomplete.info/doku.php?id=cis:gesamtnote'; //Link ins Dokuwiki zur Anleitung Gesamtnote
$this->phrasen['dms_link/abgabetoolLektorHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer LektorInnen
$this->phrasen['dms_link/abgabetoolStudentHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende'; //Abgabetool Handbuch fuer Studierende
$this->phrasen['dms_link/abgabetoolAssistenzHandbuch']='https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_lektoren'; //Abgabetool Handbuch fuer Assistenz
?>
+1 -1
View File
@@ -182,7 +182,7 @@ $this->phrasen['global/keineDatenGefunden']='No data found';
$this->phrasen['global/erfolgreichAngelegt']='Created successfully';
$this->phrasen['global/keineSuchergebnisse']='No matches found';
$this->phrasen['global/bitteWaehlen']='Please select';
$this->phrasen['global/zusaetzlicheInformationen']='Additional Informations';
$this->phrasen['global/zusaetzlicheInformationen']='Additional Information';
//infrastruktur
+3
View File
@@ -40,4 +40,7 @@ $this->phrasen['lehre/nichtzugeteilt']='Sie sind nicht zu dieser Lehrveranstaltu
$this->phrasen['lehre/studienordnung']='Studienordnung';
$this->phrasen['lehre/studienplan']='Studienplan';
$this->phrasen['lehre/noteneingabedeaktiviert']='Grading disabled';
$this->phrasen['lehre/anerkennungNachgewiesenerKenntnisse']='Crediting for proven knowledge';
$this->phrasen['lehre/anrechnung']='Exemption';
?>

Some files were not shown because too many files have changed in this diff Show More