diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 17e7dcc03..ac6cd2aa7 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,12 @@ class InfoCenter extends VileSci_Controller */ public function index() { - $listFiltersSent = array( - 'Sent 1' => 100, - 'Sent 2' => 200, - 'Sent 3' => 300 - ); + $listFiltersSent = array(); + $listFiltersNotSent = array(); - $listFiltersNotSent = array( - 'Not Sent 1' => 400, - 'Not Sent 2' => 500, - 'Not Sent 3' => 600 - ); + $listFiltersSent = $this->_getFilterList('%InfoCenterSentApplication%'); + + $listFiltersNotSent = $this->_getFilterList('%InfoCenterNotSentApplication%'); $this->load->view( 'system/infocenter/infocenter.php', @@ -36,4 +35,38 @@ class InfoCenter extends VileSci_Controller ) ); } + + /** + * + */ + 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'); + + $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/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/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 0c7b6bdba..a4776e14d 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -1,27 +1,71 @@ ' + SELECT * + FROM ( 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", + (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 p.person_id = k.person_id - AND k.kontakttyp = \'email\' - AND p.person_id < 1000 + 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' => true, - 'hideSave' => true, + '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/'), @@ -29,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; } ); @@ -41,9 +109,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/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/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; } } diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 4b4dcc511..c2d88a6bb 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,44 @@ function _generateJSsInclude($JSs) - - - _loadFilter(); + $filterSessionArray = $this->session->userdata(self::SESSION_NAME); + + // + if ($this->filterId == null && isset($filterSessionArray[self::FILTER_ID])) + { + $this->filterId = $filterSessionArray[self::FILTER_ID]; + } + + // + if ($filterSessionArray[self::FILTER_ID] != $this->filterId) + { + // + $this->_loadFilter(); + } // $this->_setSessionFilterData(); @@ -276,6 +291,8 @@ class FilterWidget extends Widget @@ -487,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); } @@ -957,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); } @@ -996,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; } } 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); 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 130dde64a..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); @@ -66,7 +72,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 +81,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 +104,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 +121,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 +151,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 +162,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 +211,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 +233,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 +273,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; @@ -283,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 @@ -309,6 +320,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 +366,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,9 +401,9 @@ $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; +$totalworktimewidth = 13; $worktimewidth = 8; $worksheet->setColumn(0, 1, $daywidth); $worksheet->setColumn(2, 2, $totalworktimewidth); @@ -412,35 +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; -//write global header -$lastspalte = ($nrProjects > 0) ? 2 + sizeof($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); +//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); +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); +$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, $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; @@ -451,20 +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, $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; @@ -477,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) @@ -492,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); } @@ -505,15 +539,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->writeString($zeile, $spalte, number_format(0, 2, $decpoint, $thousandsep), $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++; @@ -523,22 +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/composer.json b/composer.json index 40404beca..f0fea90e5 100644 --- a/composer.json +++ b/composer.json @@ -185,6 +185,30 @@ "reference": "b15ea33268b587d986371c0b6f215c36ffbb860c" } } + }, + { + "type": "package", + "package": { + "name": "datatables/plugins", + "version": "3.3.7", + "source": { + "url": "https://github.com/DataTables/Plugins.git", + "type": "git", + "reference": "master" + } + } + }, + { + "type": "package", + "package": { + "name": "BlackrockDigital/startbootstrap-sb-admin-2", + "version": "3.3.7", + "source": { + "url": "https://github.com/BlackrockDigital/startbootstrap-sb-admin-2.git", + "type": "git", + "reference": "master" + } + } } ], "require": { @@ -222,7 +246,12 @@ "jquery/sizzle": "^1.0", "tomazdragar/SimpleCropper": "^1.0", "nicolaskruchten/pivottable": "^2.15.0", - "jquery-archive/jquery-metadata": "^1.0" + "jquery-archive/jquery-metadata": "^1.0", + "BlackrockDigital/startbootstrap-sb-admin-2": "^3.3", + "components/font-awesome": "^4.7", + "moment/moment": "^2.20", + "datatables/datatables": "^1.10", + "datatables/plugins": "^3.3" }, "require-dev": { "squizlabs/php_codesniffer": "2.*" diff --git a/composer.lock b/composer.lock index 9fa4855d9..ffe6ab4f9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,9 +4,19 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "e528bc5e31312080d7db9b1b3ae4033b", - "content-hash": "69612123f7b612e61cf1e0368e01ee27", + "hash": "28942746c1b00b590a3d3cb43cd21606", + "content-hash": "2c99452d2bf338a1d1e3462197ab25b7", "packages": [ + { + "name": "BlackrockDigital/startbootstrap-sb-admin-2", + "version": "3.3.7", + "source": { + "type": "git", + "url": "https://github.com/BlackrockDigital/startbootstrap-sb-admin-2.git", + "reference": "master" + }, + "type": "library" + }, { "name": "alvaro-prieto/colResizable", "version": "1.6", @@ -462,6 +472,41 @@ ], "time": "2015-06-17 06:08:09" }, + { + "name": "components/font-awesome", + "version": "4.7.0", + "source": { + "type": "git", + "url": "https://github.com/components/font-awesome.git", + "reference": "885308b939369d147bec93174722786bc2c4eedd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/components/font-awesome/zipball/885308b939369d147bec93174722786bc2c4eedd", + "reference": "885308b939369d147bec93174722786bc2c4eedd", + "shasum": "" + }, + "type": "component", + "extra": { + "component": { + "styles": [ + "css/font-awesome.css" + ], + "files": [ + "css/font-awesome.min.css", + "css/font-awesome.css.map", + "fonts/*" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT", + "OFL-1.1" + ], + "description": "The iconic font designed for use with Twitter Bootstrap.", + "time": "2016-10-25 10:56:23" + }, { "name": "components/jquery", "version": "2.1.4", @@ -635,6 +680,39 @@ "description": "jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library. Whether you're building highly interactive web applications or you just need to add a date picker to a form control, jQuery UI is the perfect choice.", "time": "2016-09-16 05:47:55" }, + { + "name": "datatables/datatables", + "version": "1.10.16", + "source": { + "type": "git", + "url": "https://github.com/DataTables/DataTables.git", + "reference": "75a665f64f02982c0f4666b15a25c4670e5e6b18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DataTables/DataTables/zipball/75a665f64f02982c0f4666b15a25c4670e5e6b18", + "reference": "75a665f64f02982c0f4666b15a25c4670e5e6b18", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, based upon the foundations of progressive enhancement, which will add advanced interaction controls to any HTML table.", + "homepage": "http://www.datatables.net/", + "time": "2017-08-31 13:52:17" + }, + { + "name": "datatables/plugins", + "version": "3.3.7", + "source": { + "type": "git", + "url": "https://github.com/DataTables/Plugins.git", + "reference": "master" + }, + "type": "library" + }, { "name": "easyrdf/easyrdf", "version": "0.9.1", @@ -1198,6 +1276,60 @@ ], "time": "2016-10-10 08:57:56" }, + { + "name": "moment/moment", + "version": "2.20.1", + "source": { + "type": "git", + "url": "https://github.com/moment/moment.git", + "reference": "03073778ec18ee38e179208cd1af899e8d1848dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/moment/moment/zipball/03073778ec18ee38e179208cd1af899e8d1848dc", + "reference": "03073778ec18ee38e179208cd1af899e8d1848dc", + "shasum": "" + }, + "require": { + "robloach/component-installer": "*" + }, + "type": "component", + "extra": { + "component": { + "scripts": [ + "moment.js" + ], + "files": [ + "min/*.js", + "locale/*.js" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Wood", + "email": "washwithcare@gmail.com" + } + ], + "description": "Parse, validate, manipulate, and display dates in JavaScript.", + "homepage": "https://github.com/moment/moment", + "keywords": [ + "date", + "ender", + "format", + "i18n", + "l10n", + "moment", + "parse", + "time", + "validate" + ], + "time": "2017-12-19 04:36:30" + }, { "name": "netcarver/textile", "version": "v3.6.0", @@ -1840,16 +1972,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1861,7 +1993,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1895,7 +2027,7 @@ "portable", "shim" ], - "time": "2017-06-14 15:44:48" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/process", @@ -2008,16 +2140,16 @@ }, { "name": "tinymce/tinymce", - "version": "4.7.1", + "version": "4.7.2", "source": { "type": "git", "url": "https://github.com/tinymce/tinymce-dist.git", - "reference": "4fd91026d3765fee9b148b5e684b014a8e18ead1" + "reference": "2639396a6d5eb8db7457ed4f6de6f5d15303ef52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/4fd91026d3765fee9b148b5e684b014a8e18ead1", - "reference": "4fd91026d3765fee9b148b5e684b014a8e18ead1", + "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/2639396a6d5eb8db7457ed4f6de6f5d15303ef52", + "reference": "2639396a6d5eb8db7457ed4f6de6f5d15303ef52", "shasum": "" }, "type": "component", @@ -2050,7 +2182,7 @@ "tinymce", "wysiwyg" ], - "time": "2017-10-09 13:17:31" + "time": "2017-11-07 12:44:31" }, { "name": "tomazdragar/SimpleCropper", 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 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