diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index d76c0d79b..8982b9970 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -85,7 +85,7 @@ class approveAnrechnungDetail extends Auth_Controller // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); - + // Get Antrag data $antragData = $this->anrechnunglib->getAntragData( $anrechnungData->prestudent_id, @@ -98,7 +98,7 @@ class approveAnrechnungDetail extends Auth_Controller // Get Genehmigung data $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); - + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, @@ -121,13 +121,13 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + // Approve Anrechnung foreach ($data as $item) { @@ -166,13 +166,13 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + // Reject Anrechnung foreach ($data as $item) { @@ -210,10 +210,10 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + $retval = array(); $counter = 0; - + foreach ($data as $item) { // Check if Anrechnungs-LV has lector @@ -221,18 +221,18 @@ class approveAnrechnungDetail extends Auth_Controller { // Count up LV with no lector $counter++; - + // Break, if LV has no lector break; } - + // Get full name of LV Leitung. // If LV Leitung is not present, get full name of LV lectors. $lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']); $empfehlungsanfrage_an = !isEmptyArray($lector_arr) ? implode(', ', array_column($lector_arr, 'fullname')) : ''; - + // Request Recommendation if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) { @@ -246,7 +246,7 @@ class approveAnrechnungDetail extends Auth_Controller ); } } - + /** * Send mails to lectors * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector @@ -255,11 +255,11 @@ class approveAnrechnungDetail extends Auth_Controller if (!isEmptyArray($retval)) { self::_sendSanchoMailToLectors($retval); - + // Output json to ajax return $this->outputJsonSuccess($retval); } - + // Output json to ajax if (isEmptyArray($retval) && $counter > 0) { @@ -267,22 +267,22 @@ class approveAnrechnungDetail extends Auth_Controller "Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt." ); } - + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } - + /** * Withdraw approved / rejected Anrechnung and reset to 'inProgressDP'. */ public function withdraw() { $anrechnung_id = $this->input->post('anrechnung_id'); - + if (!is_numeric($anrechnung_id)) { $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); } - + // Delete last status approved / rejected. // If last status is 'approved', Genehmigung is resetted. $result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id); @@ -291,13 +291,13 @@ class approveAnrechnungDetail extends Auth_Controller { $this->terminateWithJsonError(getError($result)); } - + // Success output to AJAX $this->outputJsonSuccess(array( 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } - + /** * Withdraw request for reommendation and reset to 'inProgressDP'. * This is only possible if the lector has not provided a recommendation yet. @@ -305,69 +305,69 @@ class approveAnrechnungDetail extends Auth_Controller public function withdrawRequestRecommendation() { $anrechnung_id = $this->input->post('anrechnung_id'); - + if (!is_numeric($anrechnung_id)) { show_error('Wrong parameter.'); } - + // Get boolean empfehlung of given Anrechnung if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0]) { show_error('Failed loading Anrechnung'); } - + $empfehlung = $result->empfehlung_anrechnung; - + // Get last Anrechnungstatus if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) { show_error('Failed loading last Anrechnungstatus'); } - + $last_status = $result->status_kurzbz; $anrechnungstatus_id = $result->anrechnungstatus_id; - + // Return if Anrechnung was not waiting for recommendation or if Anrechnung has already been recommended - if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && !is_null($empfehlung)) + if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || !is_null($empfehlung)) { return $this->outputJsonError('No recommendation to withdraw.'); } - + // Reset status to 'inProgressDP' $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); - + if (isError($result)) { return $this->outputJsonError('Could not withdraw this application.'); } - + // Success output to AJAX return $this->outputJsonSuccess(array( 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } - + public function saveEmpfehlungsNotiz() { $anrechnung_id = $this->input->post('anrechnung_id'); $notiz_id = $this->input->post('notiz_id'); $empfehlungstext = $this->input->post('empfehlung_text'); - + // Validate data if (isEmptyString($anrechnung_id)) { $this->terminateWithJsonError($this->p->t('ui', 'systemFehler')); } - + // Save Empfehlungstext $result = self::_saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id); - + if (isError($result)) { $this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern')); } - + // Output success message $this->outputJsonSuccess($this->p->t('ui', 'gespeichert')); } @@ -386,10 +386,10 @@ class approveAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } @@ -475,7 +475,7 @@ class approveAnrechnungDetail extends Auth_Controller show_error('You are not entitled to read this document'); } - + /** * Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv) * @param $mail_params @@ -503,8 +503,8 @@ class approveAnrechnungDetail extends Auth_Controller * Anyway this function will receive a unique array to avoid sending more mails to one and the same lector. * **/ $lector_arr = $this->_getLectors($anrechnung_arr); - - + + // Send mail to lectors foreach ($lector_arr as $lector) @@ -594,11 +594,11 @@ class approveAnrechnungDetail extends Auth_Controller return $lector_arr; } - + private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id) { $this->load->model('person/Notiz_model', 'NotizModel'); - + if (!isEmptyString($notiz_id)) { return $this->NotizModel->update( @@ -610,15 +610,15 @@ class approveAnrechnungDetail extends Auth_Controller ) ); } - + return $this->NotizModel->addNotizForAnrechnung( $anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL, trim($empfehlungstext), $this->_uid ); - - + + } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index ef5373f5f..8517d7f9d 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -169,18 +169,34 @@ class Lehrveranstaltung_model extends DB_Model */ public function getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id) { - $query = "SELECT * FROM (SELECT distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid, - CASE WHEN lehrfunktion_kurzbz='LV-Leitung' THEN true ELSE false END as lvleiter - FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person - WHERE - tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND - tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND - tbl_person.person_id=tbl_benutzer.person_id AND - lehrveranstaltung_id=? AND - tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' AND - tbl_benutzer.aktiv=true AND tbl_person.aktiv=true AND - studiensemester_kurzbz=?) AS a - ORDER BY lvleiter DESC, nachname, vorname"; + $query = "SELECT + * + FROM + (SELECT distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid, + CASE WHEN + EXISTS( + SELECT + 1 + FROM + lehre.tbl_lehreinheitmitarbeiter lvllem + JOIN lehre.tbl_lehreinheit lvlle USING(lehreinheit_id) + WHERE + lehrfunktion_kurzbz='LV-Leitung' + AND lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id + AND studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz + AND mitarbeiter_uid=tbl_benutzer.uid + ) THEN true ELSE false END as lvleiter + FROM lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_benutzer, public.tbl_person + WHERE + tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND + tbl_lehreinheitmitarbeiter.mitarbeiter_uid=tbl_benutzer.uid AND + tbl_person.person_id=tbl_benutzer.person_id AND + lehrveranstaltung_id=? AND + tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%' AND + tbl_benutzer.aktiv=true AND tbl_person.aktiv=true AND + studiensemester_kurzbz=? + ) AS a + ORDER BY lvleiter DESC, nachname, vorname"; return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz)); } @@ -273,7 +289,7 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, $parametersarray); } - + /** * Gets Lehrveranstaltung and its Lehreinheiten (multiple rows possible). * Returns empty array if student has no Lehrveranstaltung. @@ -290,7 +306,7 @@ class Lehrveranstaltung_model extends DB_Model AND studiensemester_kurzbz = ? AND lehrveranstaltung_id = ?; '; - + return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)); } } diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 2a7939e17..824c0ba3c 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -22,6 +22,7 @@ * Manfred Kindl * Gerald Raab * Alexei Karpenko + * Manuela Thamer */ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/functions.inc.php'); @@ -44,6 +45,7 @@ require_once('../../../include/bisverwendung.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); + $sprache = getSprache(); $p=new phrasen($sprache); $sprache_obj = new sprache(); @@ -88,7 +90,7 @@ $fieldheadings = array( 'oe1' => $p->t("zeitaufzeichnung/oe"), 'oe2' => $p->t("zeitaufzeichnung/oe").'2', 'aktivitaet' => $p->t("zeitaufzeichnung/aktivitaet"), 'service' => $p->t("zeitaufzeichnung/service"), 'start' => $p->t("zeitaufzeichnung/start"), 'ende' => $p->t("zeitaufzeichnung/ende"), 'dauer' => $p->t("zeitaufzeichnung/dauer"), 'kunde' => $p->t("zeitaufzeichnung/kunde"), 'beschreibung' => $p->t("global/beschreibung"), 'aktion' => $p->t("global/aktion"), - 'datum' => $p->t("global/datum") + 'datum' => $p->t("global/datum"),'homeoffice' => $p->t("zeitaufzeichnung/homeoffice") ); if ($rechte->isBerechtigt('basis/servicezeitaufzeichnung')) @@ -131,10 +133,13 @@ $bis_datum = (isset($_REQUEST['bis_datum'])?$_REQUEST['bis_datum']:date('d.m.Y') $bis_uhrzeit = (isset($_POST['bis_uhrzeit'])?$_POST['bis_uhrzeit']:date('H:i',mktime(date('H'), date('i')+10))); $bis = $bis_datum.' '.$bis_uhrzeit; +$homeoffice = (isset($_POST['homeoffice'])?true:false); $pause_von = (isset($_POST['pause_von'])?$_POST['pause_von']:date('H:i')); $pause_bis = (isset($_POST['pause_bis'])?$_POST['pause_bis']:date('H:i')); $von_pause = $von_datum.' '.$pause_von; $bis_pause = $bis_datum.' '.$pause_bis; +$homeofficeChecked = ''; +//$reload = false; $beschreibung = (isset($_POST['beschreibung'])?$_POST['beschreibung']:''); $service_id = (isset($_POST['service_id'])?$_POST['service_id']:''); @@ -221,7 +226,7 @@ echo ' @@ -806,6 +923,39 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->projektphase_id = $data[7]; if (isset($data[8])) $zeit->service_id = $data[8]; + if (isset($data[9])) + { + if (strtolower($data[9] == 'true')) + { + // check, ob homeoffice gemäß Bisverwendung + $verwendung = new bisverwendung(); + $verwendung->getVerwendungDatum($data[0],$vonCSV); + + foreach ($verwendung->result as $v) + // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
"; + + if ($v->homeoffice) + { + + // echo "homeoffice erlaubt
"; + $zeit->homeoffice = true; + } + else + { + echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; + + $zeit->homeoffice = false; + } + } + else + { + $zeit->homeoffice = false; + } + } + else + { + $zeit->homeoffice = false; + } $tag = $datum->formatDatum($data[2], $format='Y-m-d'); if(!in_array($tag, $importtage_array)) @@ -829,6 +979,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->start = $ende_vorher; $pause->ende = $zeit->start; $pause->beschreibung = ''; + $pause->homeoffice = $homeoffice; if(!$pause->save()) { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; @@ -908,6 +1059,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->updatevon = $user; $zeit->projekt_kurzbz = $projekt_kurzbz; $zeit->projektphase_id = $projektphase_id; + $zeit->homeoffice = $homeoffice; $zeit->service_id = $service_id; $zeit->kunde_uid = $kunde_uid; $saveerror = 0; @@ -924,8 +1076,10 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.
'; + echo '

'.$p->t("global/fehlerBeimSpeichernDerDaten").': + Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.


'; $saveerror = 1; + } elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT") { @@ -968,6 +1122,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->insertvon = $user; $pause->uid = $user; $pause->aktivitaet_kurzbz = 'Pause'; + $pause->homeoffice = $homeoffice; $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); $pause->beschreibung = ''; @@ -1055,13 +1210,12 @@ else echo ' '; //Laden der Daten zum aendern -if(isset($_GET['type']) && $_GET['type']=='edit') +if (isset($_GET['type']) && $_GET['type'] == 'edit') { $zeit = new zeitaufzeichnung(); - - if($zeit->load($zeitaufzeichnung_id)) + if ($zeit->load($zeitaufzeichnung_id)) { - if($zeit->uid==$user) + if ($zeit->uid == $user) { $uid = $zeit->uid; $aktivitaet_kurzbz = $zeit->aktivitaet_kurzbz; @@ -1072,13 +1226,15 @@ if(isset($_GET['type']) && $_GET['type']=='edit') $oe_kurzbz_2 = $zeit->oe_kurzbz_2; $projekt_kurzbz = $zeit->projekt_kurzbz; $projektphase_id = $zeit->projektphase_id; + $homeoffice = $zeit->homeoffice; + $homeoffice[0] == 't' ? $homeofficeChecked = 'checked' : $homeofficeChecked = ''; $service_id = $zeit->service_id; $kunde_uid = $zeit->kunde_uid; $projektphase = new projektphase(); - $projektphasen = array(); - if($projektphase->getProjektphasen($projekt_kurzbz)) + + if ($projektphase->getProjectphaseForMitarbeiterByKurzBz($uid, $projekt_kurzbz)) { foreach ($projektphase->result as $row) { @@ -1089,15 +1245,16 @@ if(isset($_GET['type']) && $_GET['type']=='edit') else { echo "".$p->t("global/keineBerechtigungZumAendernDesDatensatzes").""; - $zeitaufzeichnung_id=''; + $zeitaufzeichnung_id = ''; } } } + //Projekte holen zu denen der Benutzer zugeteilt ist $projekt = new projekt(); -if($projekt->getProjekteMitarbeiter($user, true)) +if ($projekt->getProjekteMitarbeiter($user, true)) { //if(count($projekt->result)>0) //{ @@ -1324,36 +1481,48 @@ if($projekt->getProjekteMitarbeiter($user, true)) $selected = ''; echo ''; - } - echo ''; - - //Projektphase - $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; - $hiddentext = $showprojphases ? "" : " style='display:none'"; - - echo - '    '. - $p->t("zeitaufzeichnung/projektphase").' - '; - } - echo ''; } + echo ''; - if ($za_simple == 0) + //Projektphase + $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; + $hiddentext = $showprojphases ? "" : " style='display:none'"; + + echo + '    '. + $p->t("zeitaufzeichnung/projektphase").' + '; + } + echo ''; + } + + echo ""; + + if ($za_simple == 0) { // Service echo ' @@ -1402,6 +1571,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); $diff = $bis_ts - $von_ts; + echo ' '.$p->t("global/von").' - '.$p->t("global/bis").' @@ -1444,6 +1614,20 @@ if($projekt->getProjekteMitarbeiter($user, true)) '; + + //Homeoffice Checkbox + echo ' + +   + + + Homeoffice + + + + + '; + //Beschreibung echo ''.$p->t("global/beschreibung").''; echo ''; @@ -1505,7 +1689,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo ''; else echo ''; - //echo ''; + //echo ''; $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) @@ -1621,6 +1805,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; echo ''; @@ -1770,6 +1955,11 @@ if($projekt->getProjekteMitarbeiter($user, true)) $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; if ($row->aktivitaet_kurzbz=='Pause' || $row->aktivitaet_kurzbz=='LehreExtern'|| $row->aktivitaet_kurzbz=='Ersatzruhe') $style .= ' style="color: grey;"'; + if($db->convert_html_chars($row->homeoffice)=='t') + { + $homeoffice = " - Homeoffice"; + }else + $homeoffice=""; $summe = $row->summe; $service = new service(); $service->load($row->service_id); @@ -1785,7 +1975,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) { echo ' '.$db->convert_html_chars($row->oe_kurzbz_2).''; } - echo ''.$db->convert_html_chars($row->aktivitaet_kurzbz).''; + echo ''.$db->convert_html_chars($row->aktivitaet_kurzbz).($homeoffice).''; if(!$za_simple) { echo ' '.StringCut($db->convert_html_chars($service->bezeichnung),20,null,'...').' '; @@ -1919,8 +2109,8 @@ function getDataForCSV($rawdata, $fieldheadings, $za_simple = false) $datum = new datum(); $csvData = array(); //headers schreiben - $csvData[] = ($za_simple) ? array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['aktivitaet'], $fieldheadings['beschreibung']) - : array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['oe2'], $fieldheadings['aktivitaet'], $fieldheadings['service'], $fieldheadings['kunde'], $fieldheadings['beschreibung']); + $csvData[] = ($za_simple) ? array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['aktivitaet'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']) + : array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['oe2'], $fieldheadings['aktivitaet'], $fieldheadings['service'], $fieldheadings['kunde'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']); foreach ($rawdata as $zeitauf) { //Newline characters bei Beschreibung ersetzen @@ -1933,13 +2123,13 @@ function getDataForCSV($rawdata, $fieldheadings, $za_simple = false) if($za_simple) { $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), - $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->aktivitaet_kurzbz, $beschreibung); + $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->aktivitaet_kurzbz, $beschreibung, $zeitauf->homeoffice); } else { $servicebez = ($service->load($zeitauf->service_id))?$service->bezeichnung:""; $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), $bisdatum, - $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->oe_kurzbz_2, $zeitauf->aktivitaet_kurzbz, $servicebez, $zeitauf->kunde_uid, $beschreibung); + $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->oe_kurzbz_2, $zeitauf->aktivitaet_kurzbz, $servicebez, $zeitauf->kunde_uid, $beschreibung, $zeitauf->homeoffice); } } return $csvData; diff --git a/cis/private/tools/zeitaufzeichnung_bisverwendung.php b/cis/private/tools/zeitaufzeichnung_bisverwendung.php new file mode 100644 index 000000000..2f430ecda --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_bisverwendung.php @@ -0,0 +1,75 @@ + + */ +/** + * Checks, if there is the possibility for homeoffice for the given bisverwendung of + * a certain date. + */ +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/globals.inc.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/Excel/excel.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/mitarbeiter.class.php'); +require_once('../../../include/zeitaufzeichnung.class.php'); +require_once('../../../include/projekt.class.php'); +require_once('../../../include/bisverwendung.class.php'); + +if ((isset($_GET['uid'])) && (isset($_GET['day']))) +{ + $uid = get_uid(); + + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung + //des uebergebenen Users anzeigen + if (isset($_GET['uid']) && $_GET['uid'] != $uid) + { + $p = new phrasen(); + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + + if ($rechte->isBerechtigt('admin')) + { + $uid = $_GET['uid']; + } + else + { + die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); + } + } + + $day = $_GET['day']; + + $verwendung = new bisverwendung(); + + $verwendung->getVerwendungDatum($uid, $day); + $homeoffice = false; + + foreach ($verwendung->result as $v) + { + if ($v->homeoffice) + { + $homeoffice = true; + } + } + + echo json_encode($homeoffice); + +} diff --git a/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php index 4e4671367..cd0acc0bd 100644 --- a/cis/private/tools/zeitaufzeichnung_projektphasen.php +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -1,18 +1,59 @@ + Andreas Oesterreicher + Manuela Thamer + */ require_once('../../../config/cis.config.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'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/phrasen.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + $user = get_uid(); +//Wenn User Administrator ist und UID uebergeben wurde, dann die Phasen +//des uebergebenen Users anzeigen +if (isset($_GET['uid']) && $user != $_GET['uid']) +{ + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($user); + + if ($rechte->isBerechtigt('admin')) + { + $user = $_GET['uid']; + } + else + { + $p = new phrasen(); + die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); + } +} + $datum_obj = new datum(); -if(isset($_GET['projekt_kurzbz'])) // TODO maybe check that phasen only shown if projekt is projekt of logged in user +if (isset($_GET['projekt_kurzbz'])) { $projekt_kurzbz = $_GET['projekt_kurzbz']; $projektphase = new projektphase(); @@ -28,12 +69,12 @@ if(isset($_GET['projekt_kurzbz'])) // TODO maybe check that phasen only shown if array_push($pp_user_ids, $pp_user->projektphase_id); } - if($projektphase->getProjektphasen($projekt_kurzbz)) + if ($projektphase->getProjektphasen($projekt_kurzbz)) { $result_obj = array(); - foreach($projektphase->result as $row) + foreach ($projektphase->result as $row) { - if(in_array($row->projektphase_id, $pp_user_ids)) + if (in_array($row->projektphase_id, $pp_user_ids)) { $item['projektphase_id'] = $row->projektphase_id; $item['bezeichnung'] = $row->bezeichnung; diff --git a/content/mitarbeiter/mitarbeiterDBDML.php b/content/mitarbeiter/mitarbeiterDBDML.php index eb7ba6650..84a0e00f1 100644 --- a/content/mitarbeiter/mitarbeiterDBDML.php +++ b/content/mitarbeiter/mitarbeiterDBDML.php @@ -181,6 +181,13 @@ if(!$error) $verwendung->azgrelevant = false; else $verwendung->azgrelevant = ''; + + if($_POST['homeoffice']=='true') + $verwendung->homeoffice = true; + elseif($_POST['homeoffice']=='false') + $verwendung->homeoffice = false; + else + $verwendung->homeoffice = ''; if($verwendung->save()) { diff --git a/content/mitarbeiter/mitarbeiteroverlay.js.php b/content/mitarbeiter/mitarbeiteroverlay.js.php index d4d2aae9a..b87a309f8 100644 --- a/content/mitarbeiter/mitarbeiteroverlay.js.php +++ b/content/mitarbeiter/mitarbeiteroverlay.js.php @@ -1234,6 +1234,7 @@ function MitarbeiterVerwendungSpeichern(dialog, bisverwendung_id, mitarbeiter_ui inkludierte_lehre = dialog.getElementById('mitarbeiter-verwendung-detail-textbox-inkludierte_lehre').value; zeitaufzeichnungspflichtig = dialog.getElementById('mitarbeiter-verwendung-detail-checkbox-zeitaufzeichnungspflichtig').checked; azgrelevant = dialog.getElementById('mitarbeiter-verwendung-detail-checkbox-azgrelevant').checked; + homeoffice = dialog.getElementById('mitarbeiter-verwendung-detail-checkbox-homeoffice').checked; if(verwendung_code=='1') { @@ -1293,6 +1294,7 @@ function MitarbeiterVerwendungSpeichern(dialog, bisverwendung_id, mitarbeiter_ui req.add('inkludierte_lehre', inkludierte_lehre); req.add('zeitaufzeichnungspflichtig', zeitaufzeichnungspflichtig); req.add('azgrelevant', azgrelevant); + req.add('homeoffice', homeoffice); var response = req.executePOST(); diff --git a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php index 1119c468d..499935991 100644 --- a/content/mitarbeiter/mitarbeiterverwendungdialog.js.php +++ b/content/mitarbeiter/mitarbeiterverwendungdialog.js.php @@ -71,6 +71,7 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) inkludierte_lehre = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#inkludierte_lehre" )); zeitaufzeichnungspflichtig = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#zeitaufzeichnungspflichtig" )); azgrelevant = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#azgrelevant" )); + homeoffice = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#homeoffice" )); } else { @@ -89,6 +90,7 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) fixangestellt = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#fixangestellt" )); azgrelevant = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#azgrelevant" )); + homeoffice = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#homeoffice" )); //neuer Datensatz wird angelegt MitarbeiterVerwendungDetailNeu='true'; @@ -121,6 +123,15 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) { azgrelevant='Ja'; } + + if (!homeoffice) + { + homeoffice='Nein'; + } + else + { + homeoffice='Ja'; + } } document.getElementById('mitarbeiter-verwendung-detail-menulist-beschart1').value=ba1code; @@ -151,6 +162,11 @@ function MitarbeiterVerwendungInit(mitarbeiter_uid, bisverwendung_id) document.getElementById('mitarbeiter-verwendung-detail-checkbox-azgrelevant').checked=false; else document.getElementById('mitarbeiter-verwendung-detail-checkbox-azgrelevant').checked=true; + + if(homeoffice=='Nein') + document.getElementById('mitarbeiter-verwendung-detail-checkbox-homeoffice').checked=false; + else + document.getElementById('mitarbeiter-verwendung-detail-checkbox-homeoffice').checked=true; MitarbeiterVerwendungDetailToggleHauptberuf(); MitarbeiterVerwendungVerwendungChange(); } diff --git a/content/mitarbeiter/mitarbeiterverwendungdialog.xul.php b/content/mitarbeiter/mitarbeiterverwendungdialog.xul.php index 197df7d27..1e9d44a15 100644 --- a/content/mitarbeiter/mitarbeiterverwendungdialog.xul.php +++ b/content/mitarbeiter/mitarbeiterverwendungdialog.xul.php @@ -170,6 +170,10 @@ echo '