From 92999ae93e60a30c548fbb14939d657c71d2bc2c Mon Sep 17 00:00:00 2001 From: Paolo Date: Wed, 20 Dec 2017 12:22:34 +0100 Subject: [PATCH 1/9] Retrive and display the list of available filters from DB --- .../system/infocenter/InfoCenter.php | 51 +++++++++++++++---- .../system/infocenter/infocenterFilters.php | 4 +- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 17e7dcc03..a16377172 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -8,6 +8,10 @@ class InfoCenter extends VileSci_Controller { parent::__construct(); + // + $this->load->model('system/Filters_model', 'FiltersModel'); + + // $this->load->library('WidgetLib'); } @@ -16,17 +20,20 @@ class InfoCenter extends VileSci_Controller */ public function index() { - $listFiltersSent = array( - 'Sent 1' => 100, - 'Sent 2' => 200, - 'Sent 3' => 300 + $listFiltersSent = array(); + $listFiltersNotSent = array(); + + $personActionsArray = array( + 'app' => 'aufnahme', + 'dataset_name' => 'PersonActions', + 'person_id' => null, + 'default_filter' => false, + 'array_length(description, 1) >' => 0 ); - $listFiltersNotSent = array( - 'Not Sent 1' => 400, - 'Not Sent 2' => 500, - 'Not Sent 3' => 600 - ); + $listFiltersSent = $this->_getFilterList($personActionsArray, '%InfoCenterSentApplication%'); + + $listFiltersNotSent = $this->_getFilterList($personActionsArray, '%InfoCenterNotSentApplication%'); $this->load->view( 'system/infocenter/infocenter.php', @@ -36,4 +43,30 @@ class InfoCenter extends VileSci_Controller ) ); } + + /** + * + */ + private function _getFilterList($personActionsArray, $filter_kurzbz) + { + $listFilters = array(); + + $this->FiltersModel->resetQuery(); + $this->FiltersModel->addSelect('filter_id, description'); + $this->FiltersModel->addOrder('sort', 'ASC'); + + $personActionsArray['filter_kurzbz ILIKE'] = $filter_kurzbz; + $filters = $this->FiltersModel->loadWhere($personActionsArray); + if (hasData($filters)) + { + for ($filtersCounter = 0; $filtersCounter < count($filters->retval); $filtersCounter++) + { + $filter = $filters->retval[$filtersCounter]; + + $listFilters[$filter->filter_id] = $filter->description[0]; + } + } + + return $listFilters; + } } diff --git a/application/views/system/infocenter/infocenterFilters.php b/application/views/system/infocenter/infocenterFilters.php index f15b24fbb..9780be77f 100644 --- a/application/views/system/infocenter/infocenterFilters.php +++ b/application/views/system/infocenter/infocenterFilters.php @@ -1,11 +1,11 @@ $filterId) + foreach ($listFilters as $filterId => $description) { $toPrint = '
%s
'; - echo sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filterId'), $filterId, $name).PHP_EOL; + echo sprintf($toPrint, base_url('index.ci.php/system/infocenter/InfoCenter?filterId'), $filterId, $description).PHP_EOL; } } From c0f9b314098e052212e85325bd7f75708cae9158 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 20 Dec 2017 14:54:11 +0100 Subject: [PATCH 2/9] Fixed Bug that lines are not continuious in some excel versions, projecttime now added up also if second time entry is starting at same time as last project entry ends, converting to date is done only once at begin of projectline iteration --- .../tools/zeitaufzeichnung_projektliste.php | 102 +++++++++++------- 1 file changed, 63 insertions(+), 39 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 130dde64a..ef272fedf 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -66,7 +66,7 @@ $toignore = ['Pause', 'LehreExtern']; $ztaufdata = $ztauf->result; $monthsums = [0 => 0.00]; -//sprt list by startdate ascending (if not already done in zeitaufzeichnung class) +//sort list by startdate ascending (if not already done in zeitaufzeichnung class) usort($ztaufdata, function ($ztaufa, $ztaufb) { $date = new datum(); @@ -75,9 +75,12 @@ usort($ztaufdata, function ($ztaufa, $ztaufb) ); //fill projectlines with data -for ($i = 0; $i < sizeof($ztaufdata); $i++) +for ($i = 0; $i < count($ztaufdata); $i++) { $ztaufrow = $ztaufdata[$i]; + //make sure dates are in correct format + $ztaufrow->start = $date->formatDatum($ztaufrow->start, $format = 'Y-m-d H:i:s'); + $ztaufrow->ende = $date->formatDatum($ztaufrow->ende, $format = 'Y-m-d H:i:s'); $day = intval($date->formatDatum($ztaufrow->ende, 'd')); //first entry for a day $isFirstEntry = !isset($projectlines[$day]); @@ -95,16 +98,16 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) $tosubtract[] = $subtraction; //save all pause ranges - if($ztaufrow->aktivitaet_kurzbz == $toignore[0]) + if ($ztaufrow->aktivitaet_kurzbz == $toignore[0]) { $prevpause = null; - if(sizeof($allpauseranges)>0) + if (count($allpauseranges) > 0) { - $prevpause = $allpauseranges[sizeof($allpauseranges) - 1]; + $prevpause = $allpauseranges[count($allpauseranges) - 1]; } //first pause or no overlap to previous pause - add pauserange - if( is_null($prevpause ) || $prevpause->ende <= $ztaufrow->start ) + if (is_null($prevpause) || $prevpause->ende <= $ztaufrow->start) { $pauserange = new stdClass(); $pauserange->start = $ztaufrow->start; @@ -112,16 +115,17 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) $allpauseranges[] = $pauserange; } //pause overlap - change pause ende - elseif($prevpause->ende > $ztaufrow->start ) + elseif ($prevpause->ende > $ztaufrow->start) { - $allpauseranges[sizeof($allpauseranges) - 1]->ende = $ztaufrow->ende; + $allpauseranges[count($allpauseranges) - 1]->ende = $ztaufrow->ende; } } } - if (($dayStart == '' || $date->mktime_fromtimestamp($date->formatDatum($dayStart, $format = 'Y-m-d H:i:s')) > $date->mktime_fromtimestamp($date->formatDatum($ztaufrow->start, $format = 'Y-m-d H:i:s'))) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) + //save new dayStart (if earlier) or dayEnd (if later) + if (($dayStart == '' || $dayStart > $ztaufrow->start) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) $dayStart = $ztaufrow->start; - if (($dayEnd == '' || $date->mktime_fromtimestamp($date->formatDatum($dayEnd, $format = 'Y-m-d H:i:s')) < $date->mktime_fromtimestamp($date->formatDatum($ztaufrow->ende, $format = 'Y-m-d H:i:s'))) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) + if (($dayEnd == '' || $dayEnd < $ztaufrow->ende) && $ztaufrow->aktivitaet_kurzbz != $toignore[1]) $dayEnd = $ztaufrow->ende; if ($isFirstEntry) @@ -141,7 +145,7 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) $toadd = 0.00; //case 1: there is no overlap, just add project time difference - if ($date->mktime_fromtimestamp($ztaufrow->start) > $date->mktime_fromtimestamp($lastende)) + if ($ztaufrow->start >= $lastende) { $toadd = $date->convertTimeStringToHours($ztaufrow->diff); $laststart = $ztaufrow->start; @@ -152,13 +156,13 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->alleZeiten[] = $newprojecttime; } //case 2: overlap - add only part of the time - elseif ($date->mktime_fromtimestamp($ztaufrow->start) < $date->mktime_fromtimestamp($lastende) && $date->mktime_fromtimestamp($ztaufrow->ende) > $date->mktime_fromtimestamp($lastende)) + elseif ($ztaufrow->start < $lastende && $ztaufrow->ende > $lastende) { $toadd = ($date->mktime_fromtimestamp($ztaufrow->ende) - $date->mktime_fromtimestamp($lastende)) / 3600; $lastende = $ztaufrow->ende; $alleZeiten =& $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->alleZeiten; $index = count($alleZeiten); - $alleZeiten[$index-1]->ende = $ztaufrow->ende; + $alleZeiten[$index - 1]->ende = $ztaufrow->ende; } $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->stunden += $toadd; @@ -201,14 +205,14 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) if ($isLastEntry) { - $worktime_unix = $date->mktime_fromtimestamp($date->formatDatum($dayEnd, $format = 'Y-m-d H:i:s')) - $date->mktime_fromtimestamp($date->formatDatum($dayStart, $format = 'Y-m-d H:i:s')); + $worktime_unix = $date->mktime_fromtimestamp($dayEnd) - $date->mktime_fromtimestamp($dayStart); $worktimehours = $worktime_unix / 3600; $projectlines[$day]->arbeitszeit = $worktimehours; $pauseSubtracted = 0.00; $lehreExternExists = false; - //subtract Pauses and LehreExtern + //subtract pauses and LehreExtern from total worktime foreach ($tosubtract as $subtraction) { if ($subtraction->typ == $toignore[0]) @@ -223,32 +227,33 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) } } - //subtract pauses from Project worktimes - foreach($allpauseranges as $pauserange) + //subtract pauses from project worktimes + foreach ($allpauseranges as $pauserange) { - foreach($projectlines[$day]->projekte as $name => $project) + foreach ($projectlines[$day]->projekte as $name => $project) { - foreach($projectlines[$day]->projekte[$name]->alleZeiten as $zeit) + foreach ($projectlines[$day]->projekte[$name]->alleZeiten as $zeit) { - if($pauserange->start >= $zeit->start && $pauserange->ende <= $zeit->ende) + //pause between project start and end + if ($pauserange->start >= $zeit->start && $pauserange->ende <= $zeit->ende) { $projectlines[$day]->projekte[$name]->stunden -= ($date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($pauserange->start)) / 3600; break; } - elseif($pauserange->start < $zeit->ende && $pauserange->start > $zeit->start) + //pause and project time overlap at project time end + elseif ($pauserange->start < $zeit->ende && $pauserange->start > $zeit->start) { $projectlines[$day]->projekte[$name]->stunden -= ($date->mktime_fromtimestamp($zeit->ende) - $date->mktime_fromtimestamp($pauserange->start)) / 3600; - //break; } - elseif($pauserange->ende > $zeit->start && $pauserange->ende< $zeit->ende) + //pause and project time overlap at project time start + elseif ($pauserange->ende > $zeit->start && $pauserange->ende < $zeit->ende) { $projectlines[$day]->projekte[$name]->stunden -= ($date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($zeit->start)) / 3600; - //break; } } } } - + //worktime with no break greater 6 -> compulsory break of half an hour if ($pauseSubtracted < 0.5 && !$lehreExternExists) { @@ -262,7 +267,7 @@ for ($i = 0; $i < sizeof($ztaufdata); $i++) $projectlines[$day]->arbeitszeit = floor($projectlines[$day]->arbeitszeit * 100) / 100; - foreach($projectlines[$day]->projekte as $name => $project) + foreach ($projectlines[$day]->projekte as $name => $project) { $projecthours =& $projectlines[$day]->projekte[$name]->stunden; $projecthours = floor($projecthours * 100) / 100; @@ -309,6 +314,12 @@ $format_heading_right_bottomline->setAlign('right'); $format_heading_right_bottomline->setRight(2); $format_heading_right_bottomline->setBottom(2); +$format_heading_bottomline =& $workbook->addFormat(); +$format_heading_bottomline->setBottom(2); + +$format_heading_topline =& $workbook->addFormat(); +$format_heading_topline->setTop(2); + $format_bold_centered_toprightline =& $workbook->addFormat(); $format_bold_centered_toprightline->setBorder(1); $format_bold_centered_toprightline->setBold(); @@ -349,7 +360,9 @@ $format_cell_centered->setAlign('center'); $format_cell_centered->setVAlign('vcenter'); $format_cell_centered_leftline =& $workbook->addFormat(); -$format_cell_centered_leftline->setBorder(1); +$format_cell_centered_leftline->setRight(1); +$format_cell_centered_leftline->setLeft(1); +$format_cell_centered_leftline->setBottom(1); $format_cell_centered_leftline->setAlign('center'); $format_cell_centered_leftline->setVAlign('vcenter'); $format_cell_centered_leftline->setLeft(2); @@ -382,7 +395,7 @@ $format_cell_centered_alllines->setAlign('center'); $format_cell_centered_alllines->setVAlign('vcenter'); //define column widths -$nrProjects = sizeof($projectnames); +$nrProjects = count($projectnames); $daywidth = 4; $totalworktimewidth = 10; $worktimewidth = 8; @@ -431,14 +444,23 @@ while ($numberspaces > 0) $spalte = $zeile = 0; //write global header -$lastspalte = ($nrProjects > 0) ? 2 + sizeof($projectnames) * 2 : 14; +$lastspalte = ($nrProjects > 0) ? 2 + count($projectnames) * 2 : 14; $worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 2); $worksheet->write($zeile, $spalte, $monthtext." ".$year, $format_heading_left); -$worksheet->write($zeile + 1, $spalte, "", $format_heading_left); - +$worksheet->write($zeile + 1, $spalte, $monthtext." ".$year, $format_heading_left); +for ($i = 1; $i < 3; $i++) +{ + $worksheet->write($zeile, $spalte+$i, "", $format_heading_topline); + $worksheet->write($zeile + 1, $spalte+$i, "", $format_heading_bottomline); +} $worksheet->setMerge($zeile, $spalte + 3, $zeile, $lastspalte); $worksheet->setMerge($zeile + 1, $spalte + 3, $zeile + 1, $lastspalte); $worksheet->write($zeile, $spalte + 3, "Projektliste gedruckt am:".$spacesstringFirst.$username, $format_heading_right); +for ($i = 4; $i < $lastspalte; $i++) +{ + $worksheet->write($zeile, $i, "", $format_heading_topline); + $worksheet->write($zeile + 1, $i, "", $format_heading_bottomline); +} $worksheet->write($zeile, $lastspalte, '', $format_heading_right); $worksheet->write($zeile + 1, $spalte + 3, date('d.m.Y H:i').$spacesstringSecond.'Personal-Nr.:'.$persnr, $format_heading_right_bottomline); $worksheet->write($zeile + 1, $lastspalte, '', $format_heading_right_bottomline); @@ -452,7 +474,9 @@ $worksheet->hideScreenGridlines(); //write table header $worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 1); $worksheet->write($zeile, $spalte, "Tag", $format_bold_centered_alllines); -$worksheet->write($zeile + 1, $spalte++, "", $format_bold_centered_alllines); +$worksheet->write($zeile + 1, $spalte, "", $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte + 1, "Tag", $format_bold_centered_alllines); +$worksheet->write($zeile + 1, ++$spalte, "", $format_bold_centered_alllines); $worksheet->setMerge($zeile, ++$spalte, $zeile + 1, $spalte); $worksheet->write($zeile, $spalte, "Arbeitszeit", $format_bold_centered_alllines); $worksheet->write($zeile + 1, $spalte, "", $format_bold_centered_alllines); @@ -505,15 +529,16 @@ for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) } else { - //write empty cells - $worksheet->write($zeile, $spalte, '0,00', $format_cell_centered_rightline); - $toskip = sizeof($projectnames) * 2; + //write empty cells until end of table + $worksheet->write($zeile, $spalte, '0,00', $format_cell_centered_leftline); + $toskip = count($projectnames) * 2; for ($i = 0; $i <= $toskip; $i++) { if ($i % 2 == 0) - $worksheet->write($zeile, $spalte++, '', $format_cell_centered_rightline); + $worksheet->write($zeile, $spalte, '', $format_cell_centered_rightline); else - $worksheet->write($zeile, $spalte++, '', $format_cell_centered); + $worksheet->write($zeile, $spalte, '', $format_cell_centered); + $spalte++; } } $zeile++; @@ -531,6 +556,7 @@ if ($nrProjects < 1) $spalte = 0; $worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1); $worksheet->write($zeile, $spalte, 'Summe:', $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte + 1, '', $format_bold_centered_alllines); $spalte += 2; $worksheet->write($zeile, $spalte++, number_format($monthsums[0], 2, ",", "."), $format_cell_centered_alllines); foreach ($projectnames as $project) @@ -538,7 +564,5 @@ foreach ($projectnames as $project) $worksheet->write($zeile, $spalte++, number_format($monthsums[$project], 2, ",", "."), $format_cell_centered_topbottomleftline); $worksheet->write($zeile, $spalte++, "", $format_cell_centered_topbottomrightline); } - $worksheet->fitToPages(1, 1); $workbook->close(); - From 628908b9e800972e157c16a508ac1d03e5671e15 Mon Sep 17 00:00:00 2001 From: Paolo Date: Thu, 21 Dec 2017 16:26:23 +0100 Subject: [PATCH 3/9] - FilterWidget now loads filter from DB only the first time - Changed the query statement to load data from logs and person data --- .../system/infocenter/InfoCenter.php | 22 ++++++++-------- .../system/infocenter/infocenterData.php | 25 +++++++++---------- application/widgets/FilterWidget.php | 9 +++++-- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index a16377172..ac6cd2aa7 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -23,17 +23,9 @@ class InfoCenter extends VileSci_Controller $listFiltersSent = array(); $listFiltersNotSent = array(); - $personActionsArray = array( - 'app' => 'aufnahme', - 'dataset_name' => 'PersonActions', - 'person_id' => null, - 'default_filter' => false, - 'array_length(description, 1) >' => 0 - ); + $listFiltersSent = $this->_getFilterList('%InfoCenterSentApplication%'); - $listFiltersSent = $this->_getFilterList($personActionsArray, '%InfoCenterSentApplication%'); - - $listFiltersNotSent = $this->_getFilterList($personActionsArray, '%InfoCenterNotSentApplication%'); + $listFiltersNotSent = $this->_getFilterList('%InfoCenterNotSentApplication%'); $this->load->view( 'system/infocenter/infocenter.php', @@ -47,10 +39,18 @@ class InfoCenter extends VileSci_Controller /** * */ - private function _getFilterList($personActionsArray, $filter_kurzbz) + private function _getFilterList($filter_kurzbz) { $listFilters = array(); + $personActionsArray = array( + 'app' => 'aufnahme', + 'dataset_name' => 'PersonActions', + 'person_id' => null, + 'default_filter' => false, + 'array_length(description, 1) >' => 0 + ); + $this->FiltersModel->resetQuery(); $this->FiltersModel->addSelect('filter_id, description'); $this->FiltersModel->addOrder('sort', 'ASC'); diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 0c7b6bdba..6a6600d4d 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -1,20 +1,19 @@ ' SELECT p.person_id AS "PersonId", - p.nachname AS "Nachname", p.vorname AS "Vorname", - k.kontakt AS "Email", - p.aktiv AS "Aktiv", - k.updateamum AS "UpdateDate" - FROM public.tbl_person p INNER JOIN public.tbl_kontakt k USING(person_id) + p.nachname AS "Nachname", + p.gebdatum AS "Gebdatum", + l.zeitpunkt AS "LastAction", + l.insertvon AS "User/Operator" + FROM public.tbl_person p INNER JOIN system.tbl_log l USING(person_id) WHERE p.aktiv = TRUE - AND p.person_id = k.person_id - AND k.kontakttyp = \'email\' - AND p.person_id < 1000 + AND l.app = \'aufnahme\' ', - 'hideHeader' => true, - 'hideSave' => true, + 'hideHeader' => false, + 'hideSave' => false, 'additionalColumns' => array('Details'), 'formatRaw' => function($fieldName, $fieldValue, $datasetRaw) { @@ -41,9 +40,9 @@ } else { - $filterWidgetArray['app'] = 'core'; - $filterWidgetArray['datasetName'] = 'kontakts'; - $filterWidgetArray['filterKurzbz'] = 'This filter filters'; + $filterWidgetArray['app'] = 'aufnahme'; + $filterWidgetArray['datasetName'] = 'PersonActions'; + $filterWidgetArray['filterKurzbz'] = 'InfoCenterNotSentApplicationAll'; } echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 988032c0a..59a4ae334 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -95,8 +95,13 @@ class FilterWidget extends Widget */ public function display($widgetData) { - // - $this->_loadFilter(); + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + if ((isset($filterSessionArray[self::SELECTED_FIELDS]) && count($filterSessionArray[self::SELECTED_FIELDS]) == 0) + && (isset($filterSessionArray[self::SELECTED_FILTERS]) && count($filterSessionArray[self::SELECTED_FILTERS]) == 0)) + { + // + $this->_loadFilter(); + } // $this->_setSessionFilterData(); From 017c6c24ec3afaf9860d053c2943cd0d9aa107f1 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 22 Dec 2017 15:04:06 +0100 Subject: [PATCH 4/9] added multilanguage support for Projektliste and CSV Export --- cis/private/tools/zeitaufzeichnung.php | 17 ++-- .../tools/zeitaufzeichnung_projektliste.php | 80 +++++++++++-------- locale/de-AT/zeitaufzeichnung.php | 17 +++- locale/en-US/zeitaufzeichnung.php | 17 +++- 4 files changed, 85 insertions(+), 46 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 8b145092e..636c368ff 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -45,6 +45,9 @@ require_once('../../../include/benutzerberechtigung.class.php'); $sprache = getSprache(); $p=new phrasen($sprache); +$sprache_obj = new sprache(); +$sprache_obj->load($sprache); +$sprache_index=$sprache_obj->index; if (!$db = new basis_db()) die($p->t("global/fehlerBeimOeffnenDerDatenbankverbindung")); @@ -726,7 +729,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) CSV Export"; if($anzprojekte > 0) - echo " | Projektexport"; + echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo " "; if ($p->t("dms_link/handbuchZeitaufzeichnung")!='') @@ -753,15 +756,15 @@ if($projekt->getProjekteMitarbeiter($user, true)) $jahreanz = 3; echo '
'; echo '
'; - echo 'Projektexport'; - echo 'Monat: '; for($i=1;$i<13;$i++) { $selected = ($i == $aktmonat)?'selected = "selected"':''; - echo ''; + echo ''; } echo ''; - echo 'Jahr: '; for(;$jahreanz>0;$jahreanz--) { echo ''; @@ -795,8 +798,8 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo '
'; echo 'CSV-Export'; - echo 'Startdatum: '; - echo 'Enddatum: '; + echo ''.$p->t('zeitaufzeichnung/startdatum').' '; + echo ''.$p->t('zeitaufzeichnung/enddatum').' '; echo ''; echo ''; echo '
'; diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index ef272fedf..391167186 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -38,6 +38,12 @@ if (!isset($_GET['projexpmonat'])) if (!isset($_GET['projexpjahr'])) die("Parameter jahr fehlt"); +$sprache = getSprache(); +$p = new phrasen($sprache); +$sprache_obj = new sprache(); +$sprache_obj->load($sprache); +$sprache_index = $sprache_obj->index; + $uid = get_uid(); $benutzer = new benutzer(); if (!$benutzer->load($uid)) @@ -46,7 +52,7 @@ if (!$benutzer->load($uid)) $month = $_GET['projexpmonat']; $year = $_GET['projexpjahr']; -$monthtext = $monatsname[1][$month - 1]; +$monthtext = $monatsname[$sprache_index][$month - 1]; $username = $benutzer->vorname." ".$benutzer->nachname; $mitarbeiter = new mitarbeiter(); $mitarbeiter->load($uid); @@ -288,10 +294,10 @@ $workbook = new Spreadsheet_Excel_Writer(); $workbook->setVersion(8); // sending HTTP headers -$workbook->send("Projektliste_".$month."_".$year.".xls"); +$workbook->send('Projektliste_'.$month.'_'.$year.'.xls'); // Creating a worksheet -$worksheet =& $workbook->addWorksheet("Projektliste"); +$worksheet =& $workbook->addWorksheet($p->t('zeitaufzeichnung/projektliste')); $worksheet->setInputEncoding('utf-8'); // Define formats @@ -397,7 +403,7 @@ $format_cell_centered_alllines->setVAlign('vcenter'); //define column widths $nrProjects = count($projectnames); $daywidth = 4; -$totalworktimewidth = 10; +$totalworktimewidth = 13; $worktimewidth = 8; $worksheet->setColumn(0, 1, $daywidth); $worksheet->setColumn(2, 2, $totalworktimewidth); @@ -425,44 +431,48 @@ foreach ($projectcolumnwidths as $projectname => $width) //calculating spaces for centering global header texts $numberspaces = ($maxwidthprojects - 10 - strlen($username)); -$spacesstringFirst = ""; +$spacesstringFirst = ''; while ($numberspaces > 0) { - $spacesstringFirst .= " "; + $spacesstringFirst .= ' '; $numberspaces--; } $numberspaces = ($maxwidthprojects - 14 - strlen($persnr)); -$spacesstringSecond = ""; +$spacesstringSecond = ''; while ($numberspaces > 0) { - $spacesstringSecond .= " "; + $spacesstringSecond .= ' '; $numberspaces--; } $spalte = $zeile = 0; +//set language options +$decpoint = $sprache_index === '2' ? '.' : ','; +$thousandsep = $sprache_index === '2' ? ',' : '.'; + //write global header $lastspalte = ($nrProjects > 0) ? 2 + count($projectnames) * 2 : 14; $worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 2); -$worksheet->write($zeile, $spalte, $monthtext." ".$year, $format_heading_left); -$worksheet->write($zeile + 1, $spalte, $monthtext." ".$year, $format_heading_left); +$worksheet->write($zeile, $spalte, $monthtext.' '.$year, $format_heading_left); +$worksheet->write($zeile + 1, $spalte, $monthtext.' '.$year, $format_heading_left); for ($i = 1; $i < 3; $i++) { - $worksheet->write($zeile, $spalte+$i, "", $format_heading_topline); - $worksheet->write($zeile + 1, $spalte+$i, "", $format_heading_bottomline); + $worksheet->write($zeile, $spalte + $i, '', $format_heading_topline); + $worksheet->write($zeile + 1, $spalte + $i, '', $format_heading_bottomline); } $worksheet->setMerge($zeile, $spalte + 3, $zeile, $lastspalte); $worksheet->setMerge($zeile + 1, $spalte + 3, $zeile + 1, $lastspalte); -$worksheet->write($zeile, $spalte + 3, "Projektliste gedruckt am:".$spacesstringFirst.$username, $format_heading_right); +$worksheet->write($zeile, $spalte + 3, $p->t('zeitaufzeichnung/projektlistegedruckt').$spacesstringFirst.$username, $format_heading_right); for ($i = 4; $i < $lastspalte; $i++) { - $worksheet->write($zeile, $i, "", $format_heading_topline); - $worksheet->write($zeile + 1, $i, "", $format_heading_bottomline); + $worksheet->write($zeile, $i, '', $format_heading_topline); + $worksheet->write($zeile + 1, $i, '', $format_heading_bottomline); } $worksheet->write($zeile, $lastspalte, '', $format_heading_right); -$worksheet->write($zeile + 1, $spalte + 3, date('d.m.Y H:i').$spacesstringSecond.'Personal-Nr.:'.$persnr, $format_heading_right_bottomline); +$worksheet->write($zeile + 1, $spalte + 3, date('d.m.Y H:i').$spacesstringSecond.$p->t('zeitaufzeichnung/personalnr').$persnr, $format_heading_right_bottomline); $worksheet->write($zeile + 1, $lastspalte, '', $format_heading_right_bottomline); $zeile += 3; @@ -473,22 +483,22 @@ $worksheet->hideScreenGridlines(); //write table header $worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 1); -$worksheet->write($zeile, $spalte, "Tag", $format_bold_centered_alllines); -$worksheet->write($zeile + 1, $spalte, "", $format_bold_centered_alllines); -$worksheet->write($zeile, $spalte + 1, "Tag", $format_bold_centered_alllines); -$worksheet->write($zeile + 1, ++$spalte, "", $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte, $p->t('zeitaufzeichnung/tag'), $format_bold_centered_alllines); +$worksheet->write($zeile + 1, $spalte, '', $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte + 1, $p->t('zeitaufzeichnung/tag'), $format_bold_centered_alllines); +$worksheet->write($zeile + 1, ++$spalte, '', $format_bold_centered_alllines); $worksheet->setMerge($zeile, ++$spalte, $zeile + 1, $spalte); -$worksheet->write($zeile, $spalte, "Arbeitszeit", $format_bold_centered_alllines); -$worksheet->write($zeile + 1, $spalte, "", $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte, $p->t('zeitaufzeichnung/arbeitszeit'), $format_bold_centered_alllines); +$worksheet->write($zeile + 1, $spalte, '', $format_bold_centered_alllines); $spalte++; foreach ($projectnames as $project) { $worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1); $worksheet->write($zeile, $spalte, $project, $format_bold_centered_toprightline); - $worksheet->write($zeile, $spalte + 1, "", $format_bold_centered_toprightline); - $worksheet->write($zeile + 1, $spalte, "Stunden", $format_bold_centered_bottomline); - $worksheet->write($zeile + 1, $spalte + 1, "Tätigkeit", $format_bold_centered_bottomrightline); + $worksheet->write($zeile, $spalte + 1, '', $format_bold_centered_toprightline); + $worksheet->write($zeile + 1, $spalte, $p->t('zeitaufzeichnung/stunden'), $format_bold_centered_bottomline); + $worksheet->write($zeile + 1, $spalte + 1, $p->t('zeitaufzeichnung/taetigkeit'), $format_bold_centered_bottomrightline); $spalte += 2; } $zeile += 2; @@ -501,14 +511,14 @@ for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) $monthstr = ($month < 10) ? '0'.$month : $month; $daystr = ($daysnmbr < 10) ? '0'.$daysnmbr : $daysnmbr; $datestring = $year.'-'.$monthstr.'-'.$daystr; - $weekday = substr($tagbez[1][$date->formatDatum($datestring, 'N')], 0, 2); + $weekday = substr($tagbez[$sprache_index][$date->formatDatum($datestring, 'N')], 0, 2); $worksheet->write($zeile, $spalte++, $weekday, $format_cell_centered_leftline); $worksheet->write($zeile, $spalte++, $daysnmbr, $format_cell_centered_rightline); if (array_key_exists($daysnmbr, $projectlines)) { //write worktime - $worksheet->write($zeile, $spalte++, number_format($projectlines[$daysnmbr]->arbeitszeit, 2, ",", "."), $format_cell_centered_rightline); + $worksheet->writeString($zeile, $spalte++, number_format($projectlines[$daysnmbr]->arbeitszeit, 2, $decpoint, $thousandsep), $format_cell_centered_rightline); $spaltetemp = $spalte; //write projects foreach ($projectnames as $project) @@ -516,7 +526,7 @@ for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) if (array_key_exists($project, $projectlines[$daysnmbr]->projekte)) { $worksheet->setColumn($spalte, $spalte, $worktimewidth); - $worksheet->write($zeile, $spalte++, number_format($projectlines[$daysnmbr]->projekte[$project]->stunden, 2, ",", "."), $format_cell_centered_leftline); + $worksheet->writeString($zeile, $spalte++, number_format($projectlines[$daysnmbr]->projekte[$project]->stunden, 2, $decpoint, $thousandsep), $format_cell_centered_leftline); $worksheet->setColumn($spalte, $spalte, $projectcolumnwidths[$project]); $worksheet->write($zeile, $spalte++, $projectlines[$daysnmbr]->projekte[$project]->beschreibung, $format_cell_rightline); } @@ -530,7 +540,7 @@ for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) else { //write empty cells until end of table - $worksheet->write($zeile, $spalte, '0,00', $format_cell_centered_leftline); + $worksheet->writeString($zeile, $spalte, number_format(0, 2, $decpoint, $thousandsep), $format_cell_centered_leftline); $toskip = count($projectnames) * 2; for ($i = 0; $i <= $toskip; $i++) { @@ -548,21 +558,21 @@ if ($nrProjects < 1) //no projects - merge all cells and write notice { $worksheet->setMerge(3, 3, 4 + $daysinmonth, $lastspalte); - $worksheet->write(3, 3, "keine Projekte vorhanden", $format_bold_centered_alllines); - $worksheet->write(3, $lastspalte, "", $format_bold_centered_alllines); + $worksheet->write(3, 3, $p->t('zeitaufzeichnung/keineprojekte'), $format_bold_centered_alllines); + $worksheet->write(3, $lastspalte, '', $format_bold_centered_alllines); } //write monthly sums $spalte = 0; $worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1); -$worksheet->write($zeile, $spalte, 'Summe:', $format_bold_centered_alllines); +$worksheet->write($zeile, $spalte, $p->t('zeitaufzeichnung/summe'), $format_bold_centered_alllines); $worksheet->write($zeile, $spalte + 1, '', $format_bold_centered_alllines); $spalte += 2; -$worksheet->write($zeile, $spalte++, number_format($monthsums[0], 2, ",", "."), $format_cell_centered_alllines); +$worksheet->writeString($zeile, $spalte++, number_format($monthsums[0], 2, $decpoint, $thousandsep), $format_cell_centered_alllines); foreach ($projectnames as $project) { - $worksheet->write($zeile, $spalte++, number_format($monthsums[$project], 2, ",", "."), $format_cell_centered_topbottomleftline); - $worksheet->write($zeile, $spalte++, "", $format_cell_centered_topbottomrightline); + $worksheet->writeString($zeile, $spalte++, number_format($monthsums[$project], 2, $decpoint, $thousandsep), $format_cell_centered_topbottomleftline); + $worksheet->write($zeile, $spalte++, '', $format_cell_centered_topbottomrightline); } $worksheet->fitToPages(1, 1); $workbook->close(); diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index 30ca703e9..a1f247827 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -41,7 +41,20 @@ $this->phrasen['zeitaufzeichnung/alleEintraege']='Alle Einträge'; $this->phrasen['zeitaufzeichnung/summeEintraege']='Summe Einträge'; $this->phrasen['zeitaufzeichnung/arbeitszeit']='Arbeitszeit'; $this->phrasen['zeitaufzeichnung/pause']='Pausen';'inkl. 30 min. Pflichtpause'; -$this->phrasen['zeitaufzeichnung/inklusivePflichtpause']='inkl. 30 min. Pflichtpause'; -$this->phrasen['zeitaufzeichnung/handbuchZeitaufzeichnung']='Arbeitszeitaufzeichnung Leitfaden'; +$this->phrasen['zeitaufzeichnung/inklusivePflichtpause']='inkl. 30 min. Pflichtpause'; +$this->phrasen['zeitaufzeichnung/handbuchZeitaufzeichnung']='Arbeitszeitaufzeichnung Leitfaden'; $this->phrasen['zeitaufzeichnung/fiktiveNormalarbeitszeit']='Vereinbarung der fiktiven Normalarbeitszeit'; +$this->phrasen['zeitaufzeichnung/projektexport']='Projektexport'; +$this->phrasen['zeitaufzeichnung/projektliste']='Projektliste'; +$this->phrasen['zeitaufzeichnung/projektlistegedruckt']='Projektliste gedruckt am:'; +$this->phrasen['zeitaufzeichnung/personalnr']='Personal-Nr.:'; +$this->phrasen['zeitaufzeichnung/jahr']='Jahr:'; +$this->phrasen['zeitaufzeichnung/monat']='Monat:'; +$this->phrasen['zeitaufzeichnung/tag']='Tag'; +$this->phrasen['zeitaufzeichnung/startdatum']='Startdatum:'; +$this->phrasen['zeitaufzeichnung/enddatum']='Enddatum:'; +$this->phrasen['zeitaufzeichnung/stunden']='Stunden'; +$this->phrasen['zeitaufzeichnung/taetigkeit']='Tätigkeit'; +$this->phrasen['zeitaufzeichnung/keineprojekte']='keine Projekte vorhanden'; +$this->phrasen['zeitaufzeichnung/summe']='Summe:'; ?> diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php index 576657e8f..e7e92fa11 100644 --- a/locale/en-US/zeitaufzeichnung.php +++ b/locale/en-US/zeitaufzeichnung.php @@ -41,7 +41,20 @@ $this->phrasen['zeitaufzeichnung/alleEintraege']='All entries'; $this->phrasen['zeitaufzeichnung/summeEintraege']='Total'; $this->phrasen['zeitaufzeichnung/arbeitszeit']='Working time'; $this->phrasen['zeitaufzeichnung/pause']='Breaks'; -$this->phrasen['zeitaufzeichnung/inklusicePlichtpause']='incl. 30 min. lunch break'; -$this->phrasen['zeitaufzeichnung/handbuchZeitaufzeichnung']='Timesheet howto'; +$this->phrasen['zeitaufzeichnung/inklusicePlichtpause']='incl. 30 min. lunch break'; +$this->phrasen['zeitaufzeichnung/handbuchZeitaufzeichnung']='Timesheet howto'; $this->phrasen['zeitaufzeichnung/fiktiveNormalarbeitszeit']='Vereinbarung der fiktiven Normalarbeitszeit'; +$this->phrasen['zeitaufzeichnung/projektexport']='Projectexport'; +$this->phrasen['zeitaufzeichnung/projektliste']='Projectlist'; +$this->phrasen['zeitaufzeichnung/projektlistegedruckt']='Projectlist printed on:'; +$this->phrasen['zeitaufzeichnung/personalnr']='staff number '; +$this->phrasen['zeitaufzeichnung/jahr']='Year:'; +$this->phrasen['zeitaufzeichnung/monat']='Month:'; +$this->phrasen['zeitaufzeichnung/tag']='Day'; +$this->phrasen['zeitaufzeichnung/startdatum']='Startdate:'; +$this->phrasen['zeitaufzeichnung/enddatum']='Enddate:'; +$this->phrasen['zeitaufzeichnung/stunden']='Hours'; +$this->phrasen['zeitaufzeichnung/taetigkeit']='Activity'; +$this->phrasen['zeitaufzeichnung/keineprojekte']='no projects exist'; +$this->phrasen['zeitaufzeichnung/summe']='Sum:'; ?> \ No newline at end of file From f820fdf040115b0efd4c02ac9ecc939e8bacc2c4 Mon Sep 17 00:00:00 2001 From: Paolo Date: Wed, 3 Jan 2018 11:30:51 +0100 Subject: [PATCH 5/9] Correct CSS order in new FHC-Header --- application/views/templates/FHC-Header.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 4b4dcc511..d1986d73a 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -87,12 +87,12 @@ function _generateJSsInclude($JSs) // -------------------------------------------------------------------------------------------------------- // CSS - // Eventually required CSS - _generateCSSsInclude($customCSSs); // Eventually required CSS - // Table sorter CSS if ($tablesorter === true) _generateCSSsInclude('skin/tablesort.css'); + // Eventually required CSS + _generateCSSsInclude($customCSSs); // Eventually required CSS + // -------------------------------------------------------------------------------------------------------- // Javascripts From e6d78d6d8dc3935fd59104098949e7ed88156d84 Mon Sep 17 00:00:00 2001 From: Paolo Date: Thu, 4 Jan 2018 18:14:52 +0100 Subject: [PATCH 6/9] - Changed query to retrive data about persons & logs - Added operator "set" and "not set" to FilterWidget for timestamp type - FilterWidget store filterId into session - FilterWidget load a filter from DB only if a different filter is required --- .../system/infocenter/infocenterData.php | 81 ++++++++++- application/widgets/FilterWidget.php | 132 +++++++++++------- 2 files changed, 154 insertions(+), 59 deletions(-) diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 6a6600d4d..a4776e14d 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -2,25 +2,70 @@ $filterWidgetArray = array( 'query' => ' + SELECT * + FROM ( SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", p.nachname AS "Nachname", p.gebdatum AS "Gebdatum", - l.zeitpunkt AS "LastAction", - l.insertvon AS "User/Operator" - FROM public.tbl_person p INNER JOIN system.tbl_log l USING(person_id) + (SELECT zeitpunkt + FROM system.tbl_log + WHERE app = \'aufnahme\' + AND person_id = p.person_id + ORDER BY zeitpunkt DESC + LIMIT 1) AS "LastAction", + (SELECT insertvon + FROM system.tbl_log + WHERE app = \'aufnahme\' + AND person_id = p.person_id + ORDER BY zeitpunkt DESC + LIMIT 1) AS "User/Operator", + (SELECT pss.studiensemester_kurzbz + FROM public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + WHERE pss.status_kurzbz = \'Interessent\' + AND pss.bestaetigtam IS NULL + AND pss.bestaetigtvon IS NULL + AND ps.person_id = p.person_id + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1) AS "Studiensemester", + (SELECT pss.bewerbung_abgeschicktamum + FROM public.tbl_prestudentstatus pss + INNER JOIN public.tbl_prestudent ps USING(prestudent_id) + WHERE pss.status_kurzbz = \'Interessent\' + AND pss.bestaetigtam IS NULL + AND pss.bestaetigtvon IS NULL + AND ps.person_id = p.person_id + ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC + LIMIT 1) AS "SendDate" + FROM public.tbl_person p WHERE p.aktiv = TRUE - AND l.app = \'aufnahme\' + AND p.person_id IN ( + SELECT person_id + FROM public.tbl_prestudent + INNER JOIN public.tbl_prestudentstatus USING(prestudent_id) + WHERE status_kurzbz = \'Interessent\' + AND bestaetigtam IS NULL + AND bestaetigtvon IS NULL) + GROUP BY 1, 2, 4, 5, 6, 7 + ORDER BY "LastAction" DESC + ) tbl_infocenter + WHERE "Studiensemester" IN ( + SELECT studiensemester_kurzbz + FROM public.tbl_studiensemester + WHERE (NOW() >= start AND NOW() <= ende) + OR start > NOW() + ) ', 'hideHeader' => false, 'hideSave' => false, 'additionalColumns' => array('Details'), 'formatRaw' => function($fieldName, $fieldValue, $datasetRaw) { - $link = 'Details'; - if ($fieldName == 'Details') { + $link = 'Details'; + $datasetRaw->{$fieldName} = sprintf( $link, base_url('index.ci.php/system/infocenter/infocenterDetails/showDetails/'), @@ -28,6 +73,30 @@ ); } + if ($fieldName == 'SendDate') + { + if ($datasetRaw->{$fieldName} == '1970.01.01 01:00:00') + { + $datasetRaw->{$fieldName} = 'Not sent'; + } + } + + if ($fieldName == 'LastAction') + { + if ($datasetRaw->{$fieldName} == '1970.01.01 01:00:00') + { + $datasetRaw->{$fieldName} = 'Not logged'; + } + } + + if ($fieldName == 'User/Operator') + { + if ($datasetRaw->{$fieldName} == '') + { + $datasetRaw->{$fieldName} = 'NA'; + } + } + return $datasetRaw; } ); diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 59a4ae334..438862eb1 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -51,6 +51,8 @@ class FilterWidget extends Widget const OP_IS_FALSE = 'false'; const OP_CONTAINS = 'contains'; const OP_NOT_CONTAINS = 'ncontains'; + const OP_SET = 'set'; + const OP_NOT_SET = 'nset'; const OPT_DAYS = 'days'; const OPT_MONTHS = 'months'; @@ -95,9 +97,17 @@ class FilterWidget extends Widget */ public function display($widgetData) { + // $filterSessionArray = $this->session->userdata(self::SESSION_NAME); - if ((isset($filterSessionArray[self::SELECTED_FIELDS]) && count($filterSessionArray[self::SELECTED_FIELDS]) == 0) - && (isset($filterSessionArray[self::SELECTED_FILTERS]) && count($filterSessionArray[self::SELECTED_FILTERS]) == 0)) + + // + if ($this->filterId == null && isset($filterSessionArray[self::FILTER_ID])) + { + $this->filterId = $filterSessionArray[self::FILTER_ID]; + } + + // + if ($filterSessionArray[self::FILTER_ID] != $this->filterId) { // $this->_loadFilter(); @@ -281,6 +291,8 @@ class FilterWidget extends Widget @@ -492,6 +504,11 @@ class FilterWidget extends Widget $filterSessionArray[self::ADDITIONAL_COLUMNS] = array(); } + if (!isset($filterSessionArray[self::FILTER_ID])) + { + $filterSessionArray[self::FILTER_ID] = -1; + } + $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); } @@ -962,6 +979,8 @@ class FilterWidget extends Widget $filterSessionArray[self::ACTIVE_FILTERS_OPTION] ); + $filterSessionArray[self::FILTER_ID] = $this->filterId; + $this->session->set_userdata(self::SESSION_NAME, $filterSessionArray); } @@ -1001,61 +1020,68 @@ class FilterWidget extends Widget foreach ($activeFilters as $field => $activeFilterValue) { - if (trim($activeFilterValue) != '') + if ($first) { - if ($first) + $first = false; + } + else + { + $where .= ' AND '; + } + + if (isset($activeFiltersOperation[$field])) + { + $where .= '"'.$field.'"'; + $condition = ''; + + switch ($activeFiltersOperation[$field]) { - $first = false; - } - else - { - $where .= ' AND '; + case self::OP_EQUAL: + if (!is_numeric($activeFilterValue)) $activeFilterValue = 0; + $condition = ' = '.$activeFilterValue; + break; + case self::OP_NOT_EQUAL: + if (!is_numeric($activeFilterValue)) $activeFilterValue = 0; + $condition = ' != '.$activeFilterValue; + break; + case self::OP_GREATER_THAN: + if (!is_numeric($activeFilterValue)) $activeFilterValue = 0; + $condition = ' > '.$activeFilterValue; + break; + case self::OP_LESS_THAN: + if (!is_numeric($activeFilterValue)) $activeFilterValue = 0; + if (isset($activeFiltersOption[$field]) + && ($activeFiltersOption[$field] == self::OPT_DAYS + || $activeFiltersOption[$field] == self::OPT_MONTHS)) + { + $condition = ' < (NOW() - \''.$activeFilterValue.' '.$activeFiltersOption[$field].'\'::interval)'; + } + else + { + $condition = ' < '.$activeFilterValue; + } + break; + case self::OP_CONTAINS: + $condition = ' ILIKE \'%'.$activeFilterValue.'%\''; + break; + case self::OP_NOT_CONTAINS: + $condition = ' NOT ILIKE \'%'.$activeFilterValue.'%\''; + break; + case self::OP_IS_TRUE: + $condition = ' IS TRUE'; + break; + case self::OP_IS_FALSE: + $condition = ' IS FALSE'; + break; + case self::OP_SET: + $condition = ' IS NOT NULL'; + break; + case self::OP_NOT_SET: + $condition = ' IS NULL'; + break; } - if (isset($activeFiltersOperation[$field])) - { - $where .= '"'.$field.'"'; - $condition = ''; - - switch ($activeFiltersOperation[$field]) - { - case self::OP_EQUAL: - $condition = ' = '.$activeFilterValue; - break; - case self::OP_NOT_EQUAL: - $condition = ' != '.$activeFilterValue; - break; - case self::OP_GREATER_THAN: - $condition = ' > '.$activeFilterValue; - break; - case self::OP_LESS_THAN: - if (isset($activeFiltersOption[$field]) - && ($activeFiltersOption[$field] == self::OPT_DAYS - || $activeFiltersOption[$field] == self::OPT_MONTHS)) - { - $condition = ' < (NOW() - \''.$activeFilterValue.' '.$activeFiltersOption[$field].'\'::interval)'; - } - else - { - $condition = ' < '.$activeFilterValue; - } - break; - case self::OP_CONTAINS: - $condition = ' ILIKE \'%'.$activeFilterValue.'%\''; - break; - case self::OP_NOT_CONTAINS: - $condition = ' NOT ILIKE \'%'.$activeFilterValue.'%\''; - break; - case self::OP_IS_TRUE: - $condition = ' IS TRUE'; - break; - case self::OP_IS_FALSE: - $condition = ' IS FALSE'; - break; - } - - $where .= $condition; - } + $where .= $condition; } } From 00dbedc040c402423a5458ecf468897711fdf254 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 5 Jan 2018 12:45:58 +0100 Subject: [PATCH 7/9] added jqueryui, bootstrap, fontawesome, datatables (new tablesorter) --- application/views/templates/FHC-Header.php | 38 ++++- composer.json | 31 +++- composer.lock | 158 +++++++++++++++++++-- 3 files changed, 207 insertions(+), 20 deletions(-) diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 4b4dcc511..f55048fdc 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -9,6 +9,10 @@ $customJSs = isset($customJSs) ? $customJSs : null; // By default set the parameters to false $jquery3 = isset($jquery3) ? $jquery3 : false; +$jqueryui = isset($jqueryui) ? $jqueryui : false; +$bootstrap = isset($bootstrap) ? $bootstrap : false; +$fontawesome= isset($fontawesome) ? $fontawesome : false; +$datatables= isset($datatables) ? $datatables : false; $tablesorter = isset($tablesorter) ? $tablesorter : false; /** @@ -80,24 +84,46 @@ function _generateJSsInclude($JSs) - - - Date: Mon, 8 Jan 2018 09:55:13 +0100 Subject: [PATCH 8/9] improved infocenter details, added bootstrap and admin theme (sb admin 2) , added zgv pruefung Status, Studiensemester and Ausbildungssemester, contacts in one table, nachzureichen and nachgereicht am columns --- .../system/infocenter/InfocenterDetails.php | 332 +++----- application/libraries/PersonLogLib.php | 20 +- application/models/crm/Prestudent_model.php | 34 + application/models/person/Notiz_model.php | 15 +- application/models/person/Person_model.php | 42 + .../system/infocenter/infocenterDetails.php | 746 ++++++++++++------ application/views/templates/FHC-Header.php | 6 +- application/widgets/Nation_widget.php | 4 +- application/widgets/Zgv_widget.php | 4 +- application/widgets/Zgvmaster_widget.php | 4 +- 10 files changed, 714 insertions(+), 493 deletions(-) diff --git a/application/controllers/system/infocenter/InfocenterDetails.php b/application/controllers/system/infocenter/InfocenterDetails.php index f65efea77..390885207 100644 --- a/application/controllers/system/infocenter/InfocenterDetails.php +++ b/application/controllers/system/infocenter/InfocenterDetails.php @@ -2,8 +2,15 @@ if (! defined("BASEPATH")) exit("No direct script access allowed"); +/** + * Class InfocenterDetails + * shows aufnahme-related data for a person and its prestudents, enables document and zgv checks, + * displays and saves Notizen for a person, logs aufnahme-related actions for a person + */ class InfocenterDetails extends VileSci_Controller { + //app name for logging + const APP = 'aufnahme'; /** * constructor @@ -11,20 +18,13 @@ class InfocenterDetails extends VileSci_Controller public function __construct() { parent::__construct(); - // Load models + $this->load->model('person/person_model', 'PersonModel'); - $this->load->model('person/kontakt_model', 'KontaktModel'); - $this->load->model('person/adresse_model', 'AdresseModel'); $this->load->model('person/notiz_model', 'NotizModel'); - $this->load->model('person/notizzuordnung_model', 'NotizzuordnungModel'); $this->load->model('crm/prestudent_model', 'PrestudentModel'); $this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel'); $this->load->model('crm/akte_model', 'AkteModel'); $this->load->model('crm/statusgrund_model', 'StatusgrundModel'); - $this->load->model('codex/nation_model', 'NationModel'); - $this->load->model('codex/zgv_model', 'ZgvModel'); - $this->load->model('codex/zgvmaster_model', 'ZgvmasterModel'); - $this->load->model('organisation/studiengang_model', 'StudiengangModel'); $this->load->library('DmsLib'); $this->load->library('WidgetLib'); @@ -33,53 +33,27 @@ class InfocenterDetails extends VileSci_Controller $this->load->helper('fhcauth'); $this->load->helper('url'); - $this->app = 'aufnahme'; $this->uid = getAuthUID(); if(!$this->uid) show_error('user authentification failed'); } - public function index() - { - //TODO error page - } - + /** + * loads all necessary Person data: Stammdaten (name, svnr, contact, ...), Dokumente, Logs and Notizen + * @param $person_id + * @return array + */ private function __loadPersonData($person_id) { - $person = $this->PersonModel->load($person_id); + $stammdaten = $this->PersonModel->getPersonStammdaten($person_id); - if ($person->error) + if ($stammdaten->error) { - show_error($person->retval); + show_error($stammdaten->retval); } - $staatsbuergerschaft = $this->NationModel->load($person->retval[0]->staatsbuergerschaft); - if ($staatsbuergerschaft->error) - { - show_error($staatsbuergerschaft->retval); - } - - $geburtsnation = $this->NationModel->load($person->retval[0]->geburtsnation); - if ($geburtsnation->error) - { - show_error($geburtsnation->retval); - } - - $this->KontaktModel->addDistinct(); - $this->KontaktModel->addSelect('kontakttyp, kontakt'); - $kontakte = $this->KontaktModel->loadWhere(array('person_id' => $person_id)); - - if ($kontakte->error) - { - show_error($kontakte->retval); - } - - $adresse = $this->AdresseModel->loadWhere(array('person_id' => $person_id)); - - if ($adresse->error) - { - show_error($adresse->retval); - } + if(!isset($stammdaten->retval)) + return null; $dokumente = $this->AkteModel->loadWhere(array('person_id' => $person_id)); @@ -88,41 +62,30 @@ class InfocenterDetails extends VileSci_Controller show_error($dokumente->retval); } - $logs = $this->personloglib->getLogs($person_id, $this->app); + $logs = $this->personloglib->getLogs($person_id, $this::APP); - foreach($logs as $log) - $log->logdata = json_decode($log->logdata); + $notizen = $this->NotizModel->getNotiz($person_id); - $this->NotizzuordnungModel->addSelect('notiz_id'); - $notizzuordnung = $this->NotizzuordnungModel->loadWhere(array('person_id' => $person_id)); - - if ($notizzuordnung->error) + if ($notizen->error) { - show_error($notizzuordnung->retval); - } - - $notizen = array(); - - foreach ($notizzuordnung->retval as $notiz_id) - { - $notiz = $this->NotizModel->load($notiz_id->notiz_id); - $notizen[] = $notiz->retval[0]; + show_error($notizen->retval); } $data = array ( - 'person' => $person->retval[0], - 'staatsbuergerschaft' => $staatsbuergerschaft->retval[0], - 'geburtsnation' => $geburtsnation->retval[0], - 'kontakte' => $kontakte->retval, - 'adresse' => isset($adresse->retval[0]) ? $adresse->retval[0] : null, + 'stammdaten' => $stammdaten->retval, 'dokumente' => $dokumente->retval, 'logs' => $logs, - 'notizen' => $notizen + 'notizen' => $notizen->retval ); return $data; } + /** + * loads all necessary Prestudent data: Zgv data, Statusgruende + * @param $person_id + * @return array + */ private function __loadPrestudentData($person_id) { $zgvpruefungen = []; @@ -136,117 +99,14 @@ class InfocenterDetails extends VileSci_Controller foreach ($prestudenten->retval as $prestudent) { - $zgvpruefung = new stdClass(); - $zgvpruefung->prestudent_id = $prestudent->prestudent_id; + $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent->prestudent_id); - //Prestudentstatus - $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent->prestudent_id); - - if ($lastStatus->error) + if ($prestudent->error) { - show_error($lastStatus->retval); + show_error($prestudent->retval); } - $zgvpruefung->prestudentstatus = $lastStatus->retval[0]; - - // Studiengang - $this->StudiengangModel->addSelect('kurzbzlang, bezeichnung, typ');//TODO need bezeichnung? - $studiengang = $this->StudiengangModel->load($prestudent->studiengang_kz); - - if ($studiengang->error) - { - show_error($studiengang->retval); - } - - $zgvpruefung->studiengang = $studiengang->retval[0]->kurzbzlang; - $zgvpruefung->studiengangtyp = $studiengang->retval[0]->typ; - - // Zgv - if (isset($prestudent->zgv_code)) - { - $this->ZgvModel->addSelect('zgv_code, zgv_bez'); - $zgv = $this->ZgvModel->load($prestudent->zgv_code); - - if ($zgv->error) - { - show_error($zgv->retval); - } - - $zgvpruefung->zgv_code = $zgv->retval[0]->zgv_code; - $zgvpruefung->zgv_bez = $zgv->retval[0]->zgv_bez; - } - else - { - $zgvpruefung->zgv_code = null; - $zgvpruefung->zgv_bez = null; - } - $zgvpruefung->zgvort = $prestudent->zgvort; - $zgvpruefung->zgvdatum = $prestudent->zgvdatum; - - // Zgv Nation - if (isset($prestudent->zgvnation)) - { - $this->NationModel->addSelect('nation_code, kurztext'); - $zgvnation = $this->NationModel->load($prestudent->zgvnation); - - if ($zgvnation->error) - { - show_error($zgvnation->retval); - } - - $zgvpruefung->zgvnation_code = $zgvnation->retval[0]->nation_code; - $zgvpruefung->zgvnation_bez = $zgvnation->retval[0]->kurztext; - } - else - { - $zgvnation = null; - $zgvpruefung->zgvnation_code = null; - $zgvpruefung->zgvnation_bez = null; - } - - // Zgv Master - if (isset($prestudent->zgvmas_code)) - { - $this->ZgvmasterModel->addSelect('zgvmas_code, zgvmas_bez'); - $zgvmas = $this->ZgvmasterModel->load($prestudent->zgvmas_code); - - if ($zgvmas->error) - { - show_error($zgvmas->retval); - } - $zgvpruefung->zgvmas_code = $zgvmas->retval[0]->zgvmas_code; - $zgvpruefung->zgvmas_bez = $zgvmas->retval[0]->zgvmas_bez; - } - else - { - $zgvpruefung->zgvmas_code = null; - $zgvpruefung->zgvmas_bez = null; - } - $zgvpruefung->zgvmaort = $prestudent->zgvmaort; - $zgvpruefung->zgvmadatum = $prestudent->zgvmadatum; - - // Zgv Master Nation - if (isset($prestudent->zgvmanation)) - { - $this->NationModel->addSelect('nation_code, kurztext'); - $zgvmanation = $this->NationModel->load($prestudent->zgvmanation); - - if ($zgvmanation->error) - { - show_error($zgvmanation->retval); - } - - $zgvpruefung->zgvmanation_code = $zgvmanation->retval[0]->nation_code; - $zgvpruefung->zgvmanation_bez = $zgvmanation->retval[0]->kurztext; - } - else - { - $zgvmanation = null; - $zgvpruefung->zgvmanation_code = null; - $zgvpruefung->zgvmanation_bez = null; - } - - $zgvpruefungen[] = $zgvpruefung; + $zgvpruefungen[] = $prestudent->retval[0]; } //TODO replace with widget @@ -260,19 +120,33 @@ class InfocenterDetails extends VileSci_Controller return $data; } + /** + * initialization function, gets person and prestudent data and loads the view with the data + * @param $person_id + */ public function showDetails($person_id) { + if(!is_numeric($person_id)) + show_error('person id is not numeric!'); $persondata = $this->__loadPersonData($person_id); + if(!isset($persondata)) + show_error('person does not exist!'); $prestudentdata = $this->__loadPrestudentData($person_id); $this->load->view('system/infocenter/infocenterDetails.php', array_merge($persondata, $prestudentdata)); } + /** + * saves if a document has been formal geprueft. saves current timestamp if checked as geprueft, or null if not. + */ public function saveFormalGeprueft() { $akte_id = $this->input->get('akte_id'); $formalgeprueft = $this->input->get('formal_geprueft'); $person_id = $this->input->get('person_id'); + if(!isset($akte_id) || !isset($formalgeprueft) || !isset($person_id)) + show_error('Parameters not set!'); + $akte = $this->AkteModel->load($akte_id); if ($akte->error) @@ -280,23 +154,28 @@ class InfocenterDetails extends VileSci_Controller show_error($akte->retval); } - $timestamp = (isset($formalgeprueft) && $formalgeprueft === 'true')? date('Y-m-d H:i:s') : null; - $this->AkteModel->update($akte_id, array('formal_geprueft_amum' => $timestamp)); + $timestamp = ($formalgeprueft === 'true') ? date('Y-m-d H:i:s') : null; + $result = $this->AkteModel->update($akte_id, array('formal_geprueft_amum' => $timestamp)); + + if ($result->error) + { + show_error($result->retval); + } //write person log - $this->personloglib->log($person_id, 'Action', array('name' => 'Dokument formal geprüft', 'message' => 'Dokument'.$akte->titel.' formal geprüft, gesetzt auf '.(is_null($timestamp) ? 'NULL' : $timestamp), 'success' => 'true'), $this->app, null, $this->uid); - - redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id); + $this->personloglib->log($person_id, 'Action', array('name' => 'Dokument formal geprüft', 'message' => 'Dokument '.$akte->titel.' formal geprüft, gesetzt auf '.(is_null($timestamp) ? 'NULL' : $timestamp), 'success' => 'true'), $this::APP, null, $this->uid); + //redirect to start page + redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id.'#DokPruef'); } + /** + * saves a zgv for a prestudent. includes Ort, Datum, Nation for bachelor and master. + * @param $prestudent_id + */ public function saveZgvPruefung($prestudent_id) { - // prestudentdata - $studiensemester = $this->input->post('studiensemester') === 'null' ? null : $this->input->post('studiensemester'); - $ausbildungssemester = $this->input->post('ausbildungssemester'); - // zgvdata - $zgv_code = $this->input->post('zgv') === 'null' ? null : $this->input->post('zgv'); + $zgv_code = $this->input->post('zgv') === 'null' ? null : $this->input->post('zgv');//check for string null, in case dropdown changed to default value $zgvort = $this->input->post('zgvort'); $zgvdatum = $this->input->post('zgvdatum'); $zgvdatum = empty($zgvdatum) ? null : date_format(date_create($zgvdatum), 'Y-m-d'); @@ -309,20 +188,6 @@ class InfocenterDetails extends VileSci_Controller $zgvmadatum = empty($zgvmadatum) ? null : date_format(date_create($zgvmadatum), 'Y-m-d'); $zgvmanation_code = $this->input->post('zgvmanation') === 'null' ? null : $this->input->post('zgvmanation'); - $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); - - if ($lastStatus->error) - { - show_error($lastStatus->retval); - } - - $result = $this->PrestudentstatusModel->update(array('prestudent_id' => $prestudent_id, 'studiensemester_kurzbz' => $lastStatus->retval[0]->studiensemester_kurzbz, 'ausbildungssemester' => $lastStatus->retval[0]->ausbildungssemester), array('studiensemester_kurzbz' => $studiensemester, 'ausbildungssemester' => $ausbildungssemester)); - - if ($result->error) - { - show_error($result->retval); - } - $result = $this->PrestudentModel->update($prestudent_id, array('zgv_code' => $zgv_code, 'zgvort' => $zgvort, 'zgvdatum' => $zgvdatum, 'zgvnation' => $zgvnation_code, 'zgvmas_code' => $zgvmas_code, 'zgvmaort' => $zgvmaort, 'zgvmadatum' => $zgvmadatum, 'zgvmanation' => $zgvmanation_code)); @@ -331,15 +196,22 @@ class InfocenterDetails extends VileSci_Controller show_error($result->retval); } + //get extended Prestudent data for logging $logdata = $this->__getPersonAndStudiengangFromPrestudent($prestudent_id); - $this->personloglib->log($logdata['person_id'], 'Action', array('name' => 'Zgv gespeichert', 'message' => 'Zgv für Studiengang '.$logdata['studiengang_kurzbz'].' wurde gespeichert ', 'success' => 'true'), $this->app, null, $this->uid); + $this->personloglib->log($logdata['person_id'], 'Action', array('name' => 'Zgv gespeichert', 'message' => 'Zgv für Studiengang '.$logdata['studiengang_kurzbz'].' wurde gespeichert', 'success' => 'true'), $this::APP, null, $this->uid); - $this->__redirectToStart($prestudent_id); + $this->__redirectToStart($prestudent_id, 'ZgvPruef'); } + /** + * saves Absage for Prestudent including the reason for the Absage (statusgrund). + * inserts Studiensemester and Ausbildungssemester for the new Absage of (chronologically) last status. + * @param $prestudent_id + */ public function saveAbsage($prestudent_id) { + //TODO email messaging $statusgrund = $this->input->post('statusgrund'); $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -358,11 +230,16 @@ class InfocenterDetails extends VileSci_Controller $logdata = $this->__getPersonAndStudiengangFromPrestudent($prestudent_id); - $this->personloglib->log($logdata['person_id'], 'Processstate', array('name' => 'Interessent abgewiesen', 'message' => 'Interessent wurde für Studiengang '.$logdata['studiengang_kurzbz'].' abgewiesen', 'success' => 'true'), $this->app, null, $this->uid); + $this->personloglib->log($logdata['person_id'], 'Processstate', array('name' => 'Interessent abgewiesen', 'message' => 'Interessent wurde für Studiengang '.$logdata['studiengang_kurzbz'].' abgewiesen', 'success' => 'true'), $this::APP, null, $this->uid); - $this->__redirectToStart($prestudent_id); + $this->__redirectToStart($prestudent_id, 'ZgvPruef'); } + /** + * saves Freigabe of a Prestudent to the Studiengang. + * updates bestaetigtam and bestaetigtvon fields of the last status + * @param $prestudent_id + */ public function saveFreigabe($prestudent_id) { $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); @@ -382,11 +259,15 @@ class InfocenterDetails extends VileSci_Controller $logdata = $this->__getPersonAndStudiengangFromPrestudent($prestudent_id); - $this->personloglib->log($logdata['person_id'], 'Processstate', array('name' => 'Interessent freigegeben', 'message' => 'Interessent wurde für Studiengang '.$logdata['studiengang_kurzbz'].' freigegeben', 'success' => 'true'), $this->app, null, $this->uid); + $this->personloglib->log($logdata['person_id'], 'Processstate', array('name' => 'Interessent freigegeben', 'message' => 'Interessent wurde für Studiengang '.$logdata['studiengang_kurzbz'].' freigegeben', 'success' => 'true'), $this::APP, null, $this->uid); - $this->__redirectToStart($prestudent_id); + $this->__redirectToStart($prestudent_id, 'ZgvPruef'); } + /** + * saves a new Notiz for a person + * @param $person_id + */ public function saveNotiz($person_id) { $titel = $this->input->post('notiztitel'); @@ -395,11 +276,15 @@ class InfocenterDetails extends VileSci_Controller $this->NotizModel->addNotizForPerson($person_id, $titel, $text, $erledigt, $this->uid); - $this->personloglib->log($person_id, 'Action', array('name' => 'Notiz hinzugefügt', 'message' => 'Notiz mit Titel '.$titel.' wurde hinzugefügt', 'success' => 'true'), $this->app, null, $this->uid); + $this->personloglib->log($person_id, 'Action', array('name' => 'Notiz hinzugefügt', 'message' => 'Notiz mit Titel '.$titel.' wurde hinzugefügt', 'success' => 'true'), $this::APP, null, $this->uid); - redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id); + redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id.'#NotizAkt'); } + /** + * Outputs content of an Akte, sends appropriate headers (so the document can be downloaded) + * @param $akte_id + */ public function outputAkteContent($akte_id) { $akte = $this->AkteModel->load($akte_id); @@ -416,22 +301,34 @@ class InfocenterDetails extends VileSci_Controller show_error($aktecontent->retval); } - header("Content-type: ".$akte->retval[0]->mimetype); - header('Content-Disposition: attachment; filename="'.$akte->retval[0]->titel.'"'); - echo $aktecontent->retval; + $this->output + ->set_status_header(200) + ->set_content_type($akte->retval[0]->mimetype, 'utf-8') + ->set_header('Content-Disposition: attachment; filename="'.$akte->retval[0]->titel.'"') + ->set_output($aktecontent->retval) + ->_display(); } - private function __redirectToStart($prestudent_id) + /** + * helper function for redirecting to initial page for person from a prestudent-specific page + * @param $prestudent_id + * @param $section optional section of the page to go to + */ + private function __redirectToStart($prestudent_id, $section = '') { $this->PrestudentModel->addSelect('person_id'); $person_id = $this->PrestudentModel->load($prestudent_id)->retval[0]->person_id; - redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id); + redirect('/system/infocenter/InfocenterDetails/showDetails/'.$person_id.'#'.$section); } + /** + * helper function retrieves personid and studiengang kurzbz from a prestudent id + * @param $prestudent_id + * @return array + */ private function __getPersonAndStudiengangFromPrestudent($prestudent_id) { - $this->PrestudentModel->addSelect('person_id, studiengang_kz'); - $prestudent = $this->PrestudentModel->load($prestudent_id); + $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id); if ($prestudent->error) { @@ -439,16 +336,7 @@ class InfocenterDetails extends VileSci_Controller } $person_id = $prestudent->retval[0]->person_id; - - $this->StudiengangModel->addSelect('kurzbzlang');//TODO need bezeichnung? - $studiengang = $this->StudiengangModel->load($prestudent->retval[0]->studiengang_kz); - - if ($studiengang->error) - { - show_error($studiengang->retval); - } - - $studiengang_kurzbz = $studiengang->retval[0]->kurzbzlang; + $studiengang_kurzbz = $prestudent->retval[0]->studiengang; return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz); } diff --git a/application/libraries/PersonLogLib.php b/application/libraries/PersonLogLib.php index 34bde6145..6b63ba472 100644 --- a/application/libraries/PersonLogLib.php +++ b/application/libraries/PersonLogLib.php @@ -46,7 +46,8 @@ class PersonLogLib } /** - * Gets Logs for a Person, filtered by Parameters + * Gets Logs for a Person, filtered by parameters. + * Requirements for retrieving log: name is set * @param int $person_id ID of the Person. * @param string $app Name of the App. * @param string $oe_kurzbz Organisations Unit. @@ -55,8 +56,23 @@ class PersonLogLib public function getLogs($person_id, $app = null, $oe_kurzbz = null) { $result = $this->ci->PersonLogModel->filterLog($person_id, $app, $oe_kurzbz); + if (isSuccess($result)) - return $result->retval; + { + $decoded_logs = array(); + //decode logs + foreach ($result->retval as $log) + { + $log->logdata = json_decode($log->logdata); + //requirement - logname not null + if (isset($log->logdata->name)) + { + $decoded_logs[] = $log; + } + } + + return $decoded_logs; + } else show_error($result->retval); } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2919036e9..99e5d4613 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -192,4 +192,38 @@ class Prestudent_model extends DB_Model return $this->execQuery(sprintf($query, is_array($prestudent_id) ? 'IN' : '='), array($prestudent_id)); } + + + /** + * gets extended zgv data (with bezeichnung) for a prestudent + * includes last status, Studiengang, zgv, zgv master + * @param $prestudent_id + */ + public function getPrestudentWithZgv($prestudent_id) + { + $this->addSelect('tbl_prestudent.*, tbl_studiengang.kurzbzlang as studiengang, tbl_studiengang.typ as studiengangtyp, tbl_zgv.zgv_code, tbl_zgv.zgv_bez, + tbl_prestudent.zgvort, tbl_prestudent.zgvdatum, tbl_prestudent.zgvnation as zgvnation_code, + tbl_zgvmaster.zgvmas_code, tbl_zgvmaster.zgvmas_bez, tbl_prestudent.zgvmaort, tbl_prestudent.zgvmadatum, tbl_prestudent.zgvmanation as zgvmanation_code'); + $this->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT'); + $this->addJoin('bis.tbl_zgv', 'zgv_code', 'LEFT'); + $this->addJoin('bis.tbl_zgvmaster', 'zgvmas_code', 'LEFT'); + + $prestudent = $this->load($prestudent_id); + if($prestudent->error) + return error($prestudent->retval); + + //Prestudentstatus + $this->load->model('crm/prestudentstatus_model', 'PrestudentstatusModel'); + $lastStatus = $this->PrestudentstatusModel->getLastStatus($prestudent_id); + + if ($lastStatus->error) + { + return error($lastStatus->retval); + } + + $prestudent->retval[0]->prestudentstatus = $lastStatus->retval[0]; + + return success($prestudent->retval); + } + } diff --git a/application/models/person/Notiz_model.php b/application/models/person/Notiz_model.php index 37581def1..3ec142ca4 100644 --- a/application/models/person/Notiz_model.php +++ b/application/models/person/Notiz_model.php @@ -131,5 +131,18 @@ class Notiz_model extends DB_Model return $result; } + + /** + * gets all Notizen for a person + * @param $person_id + */ + public function getNotiz($person_id) + { + // Join with the table public.tbl_notizzuordnung using notiz_id + $this->addJoin('public.tbl_notizzuordnung', 'notiz_id'); + + return $this->loadWhere(array('person_id' => $person_id)); + } // ------------------------------------------------------------------------------------------------------ -} \ No newline at end of file + +} diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 770be0e14..caf746b94 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -152,4 +152,46 @@ class Person_model extends DB_Model return $result; } + + /** + * gets Stammdaten for a person, including contactdata in textform from other tables + * nation, kontakt, adresse + * @param $person_id + * @return array + */ + public function getPersonStammdaten($person_id) + { + $this->addSelect('tbl_person.*, s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation'); + $this->addJoin('bis.tbl_nation s', 'tbl_person.staatsbuergerschaft = s.nation_code', 'LEFT'); + $this->addJoin('bis.tbl_nation g', 'tbl_person.geburtsnation = g.nation_code', 'LEFT'); + + $person = $this->load($person_id); + + if($person->error) + return error($person->retval); + + //return null if not found + if(count($person->retval) < 1) + return success(null); + + $this->load->model('person/kontakt_model', 'KontaktModel'); + $this->load->model('person/adresse_model', 'AdresseModel'); + + $this->KontaktModel->addDistinct(); + $this->KontaktModel->addSelect('kontakttyp, anmerkung, kontakt, zustellung'); + $this->KontaktModel->addOrder('kontakttyp'); + $kontakte = $this->KontaktModel->loadWhere(array('person_id' => $person_id)); + if($kontakte->error) + return error($kontakte->retval); + + $adressen = $this->AdresseModel->loadWhere(array('person_id' => $person_id)); + if($adressen->error) + return error($adressen->retval); + + $stammdaten = $person->retval[0]; + $stammdaten->kontakte = $kontakte->retval; + $stammdaten->adressen = $adressen->retval; + + return success($stammdaten); + } } diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index b663094c7..be9fffea3 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -1,269 +1,499 @@ load->view('templates/header', array('title' => 'InfocenterDetails', 'datepicker' => true, 'datepickerclass' => 'dateinput'/*, 'tablesort' => true, 'tableid' => 't1'*/)); +$this->load->view('templates/FHC-Header', array('title' => 'InfocenterDetails', 'jquery3' => true, 'jqueryui' => true, 'bootstrap' => true, 'fontawesome' => true, 'datatables' => true, 'customCSSs' => 'vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/css/sb-admin-2.min.css'/*, 'datepickerclass' => 'dateinput'*/)); ?> -

Infocenter - Person Details

-
- Stammdaten - - - - - - - +
+
+
+ +
+
+
+
+
+
+

Stammdaten

+
+ +
+
Vorname: vorname ?>
Nachname: nachname ?>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Vornamevorname ?>
Nachname + nachname ?>
Geburtsdatum + gebdatum), 'd.m.Y') ?>
Sozialversicherungsnr + svnr ?>
Staatsbürgerschaft + staatsbuergerschaft ?>
Geschlecht + geschlecht ?>
Geburtsnation + geburtsnation ?>
Geburtsortgebort ?>
+ - - Geburtsdatum: gebdatum), 'd.m.Y') ?> - - - Sozialversicherungsnr: svnr ?> - - - Staatsbürgerschaft: kurztext ?> - - - Geschlecht: geschlecht ?> - - - Geburtsnation: kurztext ?> - - - Geburtsort: gebort ?> - - - Kontaktdaten - - - - kontakttyp).': '; - if ($kontakt->kontakttyp == 'email'): - ?> - - kontakt; - if ($kontakt->kontakttyp == 'email'): - ?> - - - - - - - - Adresse: strasse.", ".$adresse->plz." ".$adresse->ort : "" ?> - - - -
-
- Dokumentenprüfung - - - - - - - - - formal_geprueft_amum)) ? "checked" : ""; - ?> - - - - - - - - -
NameTypUploaddatumformal geprüft
titel ?> - dokument_kurzbz ?>erstelltam), 'd.m.Y') ?> - - onclick="onFormalGeprueftChange(this.checked, akte_id ?>, person_id ?>)"/> - formal_geprueft_amum; - ?> -
-
- - -
- ZGV Prüfung - Studiengang studiengang ?> - - - - - - - - - - - - - - studiengangtyp === 'm') :?> - - - - - - - - - - - - - - - - -
- - prestudentstatus->status_kurzbz?> - - - prestudentstatus->bestaetigtam) ? "ja" : "nein" ?> - - - widgetlib->widget( - 'Studiensemester_widget', - array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->prestudentstatus->studiensemester_kurzbz), - array('name' => 'studiensemester', 'id' => 'studiensemester') - ); ?> - - - prestudentstatus->ausbildungssemester ?> -
- - widgetlib->widget( - 'Zgv_widget', - array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgv_code), - array('name' => 'zgv', 'id' => 'zgv') - ); ?> - - - - - - zgvdatum), 'd.m.Y') ?>" - name="zgvdatum"> - - - widgetlib->widget( - 'Nation_widget', - array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvnation_code), - array('name' => 'zgvnation', 'id' => 'zgvnation') - ); ?> -
- - widgetlib->widget( - 'Zgvmaster_widget', - array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code), - array('name' => 'zgvmas', 'id' => 'zgvmas') - ); ?> - - - - - - zgvmadatum), 'd.m.Y') ?>" - name="zgvmadatum"> - - - widgetlib->widget( - 'Nation_widget', - array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code), - array('name' => 'zgvmanation', 'id' => 'zgvmanation') - ); ?> -
- -
-
- + +
+ + + + + + + + + + + + + + kontakte as $kontakt): ?> - widgetlib->widget( - 'Statusgrund_widget', - array(), - array('name' => 'absage', 'id' => 'absage') - ); */ - //Prestudenten cannot be abgewiesen or freigegeben if already done - if(!isset($zgvpruefung->prestudentstatus->bestaetigtam) && $zgvpruefung->prestudentstatus->status_kurzbz != 'Abgewiesener') : - ?> - - - - - - - - - - -
Kontakte
TypKontaktZustellungAnmerkung
- - - - - - - - - - - - - - -
DatumAktivitätUser
zeitpunkt), 'd.m.Y H:i:s') ?>logdata->name ?>insertvon ?>
+ + kontakttyp); ?> + + kontakttyp === 'email'): ?> + + kontakt; + if ($kontakt->kontakttyp === 'email'): + ?> + + + + zustellung === true ? 'X' : ''; ?> + anmerkung; ?> + + + adressen as $adresse): ?> + + + Adresse + + + strasse.', '.$adresse->plz.' '.$adresse->ort : '' ?> + + + zustelladresse === true ? 'X' : '' ?> + + + heimatadresse === true ? 'Heimatadresse' : '').($adresse->heimatadresse === true && $adresse->rechnungsadresse === true ? ', ' : '').($adresse->rechnungsadresse === true ? 'Rechnungsadresse' : ''); ?> + + + + + +
+ + + + + +
+
+
+
- - - - - - - + +

Dokumentenprüfung

+
+
+
DatumNotizUser
+ + + + + + + + + + formal_geprueft_amum) ? "checked" : ""; + ?> + + + + + + + + + + +
NameTypUploaddatumformal geprüftnachzureichennachgereicht am
+ titel) ? $dokument->bezeichnung : $dokument->titel ?> + dokument_kurzbz ?>erstelltam), 'd.m.Y') ?> + /> + formal_geprueft_amum) ? date_format(date_create($dokument->formal_geprueft_amum), 'd.m.Y') : ''; ?> + + nachgereicht === true ? 'X' : ''; ?> + + nachgereicht_am) ? date_format(date_create($dokument->nachgereicht_am), 'd.m.Y') : ''; ?> +
+
+
+
+ + +
+
+
+
+
+
+ +

ZGV-Prüfung

+
+
+
+ - - - insertamum), 'd.m.Y H:i:s') ?> - titel ?> - verfasser_uid ?> - - - - -
- -
- Titel: -
- Text: - -
+
+
+ Studiengang studiengang ?> +
+
+
+
+
+
+ + prestudentstatus->bestaetigtam) ? "ja" : "nein" ?> +
+
+
+
+ + prestudentstatus->status_kurzbz ?> +
+
+
+
+ + prestudentstatus->studiensemester_kurzbz ?> +
+
+
+
+ + prestudentstatus->ausbildungssemester ?> +
+
+
+
+
+
+ + widgetlib->widget( + 'Zgv_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgv_code), + array('name' => 'zgv', 'id' => 'zgv', 'class' => 'form-control') + ); ?> +
+
+
+
+ + +
+
+
+
+ + zgvdatum), 'd.m.Y') ?>" + name="zgvdatum"> +
+
+
+
+ + widgetlib->widget( + 'Nation_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvnation_code), + array('name' => 'zgvnation', 'id' => 'zgvnation') + ); ?> +
+
+
+ + studiengangtyp === 'm') : ?> +
+
+
+ widgetlib->widget( + 'Zgvmaster_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code), + array('name' => 'zgvmas', 'id' => 'zgvmas') + ); ?> +
+
+
+
+ +
+
+
+
+ zgvmadatum), 'd.m.Y') ?>" + name="zgvmadatum"> +
+
+
+
+ widgetlib->widget( + 'Nation_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code), + array('name' => 'zgvmanation', 'id' => 'zgvmanation') + ); ?> +
+
+
+ + +
+
+ +
+
+
- + prestudentstatus->bestaetigtam) && $zgvpruefung->prestudentstatus->status_kurzbz != 'Abgewiesener') : + ?> +
+
+
+
+
+ + +
+ + + + +
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+

Notizen & Aktivitäten

+
+
+
+
+
+
+ +
+
+ +
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + +
DatumNotizUser
insertamum), 'd.m.Y H:i:s') ?>titel ?>verfasser_uid ?>
+
+
+ + + + + + + + + + + + + + + +
DatumAktivitätUser
zeitpunkt), 'd.m.Y H:i:s') ?>logdata->name) ? $log->logdata->name : '' ?>insertvon ?>
+
+
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index f55048fdc..c2d88a6bb 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -11,8 +11,8 @@ $customJSs = isset($customJSs) ? $customJSs : null; $jquery3 = isset($jquery3) ? $jquery3 : false; $jqueryui = isset($jqueryui) ? $jqueryui : false; $bootstrap = isset($bootstrap) ? $bootstrap : false; -$fontawesome= isset($fontawesome) ? $fontawesome : false; -$datatables= isset($datatables) ? $datatables : false; +$fontawesome = isset($fontawesome) ? $fontawesome : false; +$datatables = isset($datatables) ? $datatables : false; $tablesorter = isset($tablesorter) ? $tablesorter : false; /** @@ -97,7 +97,6 @@ function _generateJSsInclude($JSs) // datatables CSS if ($datatables === true) { - _generateCSSsInclude('vendor/datatables/datatables/media/css/jquery.dataTables.min.css'); _generateCSSsInclude('vendor/datatables/datatables/media/css/dataTables.bootstrap.min.css'); } // Table sorter CSS @@ -122,7 +121,6 @@ function _generateJSsInclude($JSs) _generateJSsInclude('vendor/datatables/datatables/media/js/dataTables.bootstrap.min.js'); _generateJSsInclude('vendor/moment/moment/min/moment.min.js'); _generateJSsInclude('vendor/datatables/plugins/sorting/datetime-moment.js'); - } // Table sorter JS if ($tablesorter === true) _generateJSsInclude('vendor/christianbach/tablesorter/jquery.tablesorter.min.js'); diff --git a/application/widgets/Nation_widget.php b/application/widgets/Nation_widget.php index 2c20b8691..8337a92c1 100644 --- a/application/widgets/Nation_widget.php +++ b/application/widgets/Nation_widget.php @@ -13,8 +13,8 @@ class Nation_widget extends DropdownWidget $this->setElementsArray( $this->NationModel->load(), true, - 'Select a nation...', - 'No nation found' + 'Nation wählen...', + 'keine Nation gefunden' ); $this->loadDropDownView($widgetData); diff --git a/application/widgets/Zgv_widget.php b/application/widgets/Zgv_widget.php index 8858d3206..a2500a1e9 100644 --- a/application/widgets/Zgv_widget.php +++ b/application/widgets/Zgv_widget.php @@ -13,8 +13,8 @@ class Zgv_widget extends DropdownWidget $this->setElementsArray( $this->ZgvModel->load(), true, - 'Select a zgv...', - 'No zgv found' + 'Zgv wählen...', + 'keine Zgv gefunden' ); $this->loadDropDownView($widgetData); diff --git a/application/widgets/Zgvmaster_widget.php b/application/widgets/Zgvmaster_widget.php index 8ac331109..357a4273c 100644 --- a/application/widgets/Zgvmaster_widget.php +++ b/application/widgets/Zgvmaster_widget.php @@ -13,8 +13,8 @@ class Zgvmaster_widget extends DropdownWidget $this->setElementsArray( $this->ZgvmasterModel->load(), true, - 'Select a zgv...', - 'No zgv found' + 'Zgv wählen...', + 'keine Zgv gefunden' ); $this->loadDropDownView($widgetData); From 6919255d013213dccf063a015a7f13b3956c0338 Mon Sep 17 00:00:00 2001 From: oesi Date: Mon, 8 Jan 2018 15:44:05 +0100 Subject: [PATCH 9/9] =?UTF-8?q?Fehler=20behoben=20wodurch=20das=20laden=20?= =?UTF-8?q?der=20Studienpl=C3=A4ne=20im=20IE=20und=20Seamonkey=20nicht=20k?= =?UTF-8?q?orrekt=20funktionierte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/lehre/studienordnung.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vilesci/lehre/studienordnung.js b/vilesci/lehre/studienordnung.js index 0eddc9aa1..f93cd6c21 100644 --- a/vilesci/lehre/studienordnung.js +++ b/vilesci/lehre/studienordnung.js @@ -125,8 +125,8 @@ function loadStudienordnung() $("#studienplan").html("Bitte wählen Sie zuerst eine Studienordnung aus!"); drawStudienordnungen(data.result); //jqUi( "#menueLinks" ).accordion("option","active",1); - } - neueStudienordnung(); + } + neueStudienordnung(); }); } @@ -138,12 +138,12 @@ function drawStudienordnungen(data) { var obj='Neue Studienordnung
    '; - for(i in data) + for(i in data) { if(data[i].studienordnung_id !== null) { obj = obj + '
  • ' - +' '+data[i].bezeichnung+' ' + +' '+data[i].bezeichnung+' ' +'    ' +' ' +' ' @@ -174,7 +174,7 @@ function loadStudienplanSTO(neue_studienordnung_id, studienplan_id,bezeichnung) "typ": "json", "class": "studienplan", "method": "loadStudienplanSTO", - "parameter_0": global_studienordnung_id + "parameter_0": global_studienordnung_id }, error: loadError }).success(function(data) @@ -1455,7 +1455,7 @@ function writeOverallSum(root) */ function semesterSTPLZuordnung() { - drawHeader('Neue Studienplan Zuordnung'); + drawHeader('Neue Studienplan Zuordnung'); $("#data").load('studienordnung.inc.php?method=semesterSTPLZuordnung&studienplan_id='+global_studienplan_id); }