diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 7461f2421..94251ce12 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -33,6 +33,7 @@ require_once('../../../include/zeitaufzeichnung.class.php'); require_once('../../../include/zeitsperre.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/projekt.class.php'); +require_once('../../../include/projektphase.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/organisationseinheit.class.php'); require_once('../../../include/service.class.php'); @@ -110,13 +111,12 @@ else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GE else $gesperrt_bis = '2015-08-31'; -//var_dump($gesperrt_bis); - $sperrdatum = date('c', strtotime($gesperrt_bis)); // Uses urlencode to avoid XSS issues $zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:''); $projekt_kurzbz = (isset($_POST['projekt'])?$_POST['projekt']:''); +$projektphase_id = (isset($_POST['projektphase'])?$_POST['projektphase']:''); $oe_kurzbz_1 = (isset($_POST['oe_kurzbz_1'])?$_POST['oe_kurzbz_1']:''); $oe_kurzbz_2 = (isset($_POST['oe_kurzbz_2'])?$_POST['oe_kurzbz_2']:''); $aktivitaet_kurzbz = (isset($_POST['aktivitaet'])?$_POST['aktivitaet']:''); @@ -251,6 +251,13 @@ echo ' $("#kunde_uid").val(ui.item.uid); } }); + + $("#projekt").change( + function() + { + getProjektphasen($(this).val()); + } + ) }); @@ -489,6 +496,49 @@ echo ' } return true; } + + function getProjektphasen(projekt_kurzbz) + { + $.ajax + ( + { + type: "GET", + url: "zeitaufzeichnung_projektphasen.php", + dataType: "json", + data: + { + "projekt_kurzbz":projekt_kurzbz + }, + success: function(json) + { + //remove Projektphasen from html if any + $("#projektphase").children("option").each( + function() + { + if ($(this).prop("id") !== "projektphasekeineausw") + $(this).remove(); + } + ); + //append Projektphasen if any + if (json.length > 0) + { + var projphasenhtml = ""; + for (var i = 0; i < json.length; i++) + { + projphasenhtml += "'; sort($projekt->result); + $projektfound = false; foreach ($projekt->result as $row_projekt) { if ($projekt_kurzbz == $row_projekt->projekt_kurzbz || $filter == $row_projekt->projekt_kurzbz) + { + $projektfound = true; $selected = 'selected'; + } else $selected = ''; echo ''; } - echo ''; - echo ''; + echo ''; + + //Projektphase + $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; + $hiddentext = $showprojphases ? "" : " style='display:none'"; + + echo + '    '. + $p->t("zeitaufzeichnung/projektphase").' + '; + } + echo ''; } if ($za_simple == 0) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 17adfba97..b8b19a0a9 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -32,6 +32,7 @@ require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/zeitaufzeichnung.class.php'); require_once('../../../include/projekt.class.php'); +require_once('../../../include/projektphase.class.php'); if (!isset($_GET['projexpmonat'])) die("Parameter monat fehlt"); @@ -61,17 +62,19 @@ $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); $ztauf = new zeitaufzeichnung(); +$projektphaseclass = new projektphase(); $activitiesToIgnore = array('DienstreiseMT', 'Ersatzruhe');//aktivitaetstypen which shouldn't be added to worktime $ztauf->getListeUserFromTo($uid, $year.'-'.$month.'-01', $year.'-'.$month.'-'.$daysinmonth, $activitiesToIgnore); //objects for one projectline of list (corresponds to one day) -$projectlines = []; +$projektlines = array(); $dayStart = $dayEnd = ''; -$projectnames = $tosubtract = $allpauseranges = []; +$projektnames = $projektphasenames = $tosubtract = $allpauseranges = array(); $activitiesToSubtract = ['Pause', 'LehreExtern', 'Arztbesuch', 'Behoerde'];//aktivitaetstypen which should be subtracted fromworktime $ztaufdata = $ztauf->result; -$monthsums = [0 => 0.00]; +$totalmonthsum = 0.00; +$projektmonthsums = array(); //sort list by startdate ascending (if not already done in zeitaufzeichnung class) usort($ztaufdata, function ($ztaufa, $ztaufb) @@ -85,12 +88,13 @@ usort($ztaufdata, function ($ztaufa, $ztaufb) 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]); + $isFirstEntry = !isset($projektlines[$day]); //last entry for a day (next entry is different day) $isLastEntry = !array_key_exists($i + 1, $ztaufdata) || intval($date->formatDatum($ztaufdata[$i + 1]->ende, 'd')) != $day; @@ -137,18 +141,19 @@ for ($i = 0; $i < count($ztaufdata); $i++) if ($isFirstEntry) { - $projectlines[$day] = new stdClass(); - $projectlines[$day]->arbeitszeit = ''; - $projectlines[$day]->projekte = []; + $projektlines[$day] = new stdClass(); + $projektlines[$day]->arbeitszeit = ''; + $projektlines[$day]->projekte = []; } if (isset($ztaufrow->projekt_kurzbz)) { //Project already in projectline - add to worktime and description - if (array_key_exists($ztaufrow->projekt_kurzbz, $projectlines[$day]->projekte)) + if (array_key_exists($ztaufrow->projekt_kurzbz, $projektlines[$day]->projekte)) { - $laststart =& $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->laststart; - $lastende =& $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->lastende; + $currproj =& $projektlines[$day]->projekte[$ztaufrow->projekt_kurzbz]; + $laststart =& $currproj->laststart; + $lastende =& $currproj->lastende; $toadd = 0.00; //case 1: there is no overlap, just add project time difference @@ -157,56 +162,107 @@ for ($i = 0; $i < count($ztaufdata); $i++) $toadd = $date->convertTimeStringToHours($ztaufrow->diff); $laststart = $ztaufrow->start; $lastende = $ztaufrow->ende; - $newprojecttime = new stdClass(); - $newprojecttime->start = $ztaufrow->start; - $newprojecttime->ende = $ztaufrow->ende; - $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->alleZeiten[] = $newprojecttime; + $newprojekttime = new stdClass(); + $newprojekttime->start = $ztaufrow->start; + $newprojekttime->ende = $ztaufrow->ende; + $currproj->alleZeiten[] = $newprojekttime; + if (isset($ztaufrow->projektphase_id)) + $currproj->projektphasen[$ztaufrow->projektphase_id]->alleZeiten[] = $newprojekttime; } //case 2: overlap - add only part of the time 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; + + $alleZeiten =& $currproj->alleZeiten; $index = count($alleZeiten); $alleZeiten[$index - 1]->ende = $ztaufrow->ende; + + //check if overlap in projektphase, change ende accordingly + if (isset($ztaufrow->projektphase_id)) + { + $projektphaseAlleZeiten =& $currproj->projektphasen[$ztaufrow->projektphase_id]->alleZeiten; + $projektphaselastendeidx = count($projektphaseAlleZeiten); + $projektphaselastende =& $projektphaseAlleZeiten[$projektphaselastendeidx - 1]; + if ($ztaufrow->start < $projektphaselastende && $ztaufrow->ende > $projektphaselastende) + $projektphaselastende->ende = $ztaufrow->ende; + } + } + $currproj->stunden +=$toadd; + //add to projektphase + if (isset($ztaufrow->projektphase_id)) + { + $currproj->projektphasen[$ztaufrow->projektphase_id]->stunden += $toadd; } - $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->stunden += $toadd; //concatenate descriptions "working packages" for each project if (!empty($ztaufrow->beschreibung)) { - $packagecounter = ++$projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->arbeitspakete; + $packagecounter = ++$currproj->arbeitspakete; if ($packagecounter == 1) - $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->beschreibung = $ztaufrow->beschreibung; + $currproj->beschreibung = $ztaufrow->beschreibung; else - $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz]->beschreibung .= " | ".str_replace(array("\r\n", "\r", "\n"), " ", $ztaufrow->beschreibung); + $currproj->beschreibung .= " | ".str_replace(array("\r\n", "\r", "\n"), " ", $ztaufrow->beschreibung); } } else { //add new project to projectline - $newproject = new stdClass(); - $newproject->laststart = $ztaufrow->start; - $newproject->lastende = $ztaufrow->ende; - $newprojecttime = new stdClass(); - $newprojecttime->start = $ztaufrow->start; - $newprojecttime->ende = $ztaufrow->ende; - $newproject->alleZeiten = []; - $newproject->alleZeiten[] = $newprojecttime; - $newproject->stunden = $date->convertTimeStringToHours($ztaufrow->diff); - $newproject->arbeitspakete = 0;//counter for tracking number of descriptions (work packages) - $newproject->beschreibung = ''; + $stunden = $date->convertTimeStringToHours($ztaufrow->diff); + + $newprojekt = new stdClass(); + $newprojekt->laststart = $ztaufrow->start; + $newprojekt->lastende = $ztaufrow->ende; + $newprojekttime = new stdClass(); + $newprojekttime->start = $ztaufrow->start; + $newprojekttime->ende = $ztaufrow->ende; + $newprojekt->alleZeiten = []; + $newprojekt->alleZeiten[] = $newprojekttime; + $newprojekt->stunden = $stunden; + $newprojekt->arbeitspakete = 0;//counter for tracking number of descriptions (work packages) + $newprojekt->beschreibung = ''; if (!empty($ztaufrow->beschreibung)) { - $newproject->beschreibung = str_replace(array("\r\n", "\r", "\n"), " ", $ztaufrow->beschreibung); - $newproject->arbeitspakete++; + $newprojekt->beschreibung = str_replace(array("\r\n", "\r", "\n"), " ", $ztaufrow->beschreibung); + $newprojekt->arbeitspakete++; } - $projectlines[$day]->projekte[$ztaufrow->projekt_kurzbz] = $newproject; - //add new project to array with unique project names - if (!in_array($ztaufrow->projekt_kurzbz, $projectnames)) - $projectnames[] = $ztaufrow->projekt_kurzbz; + //add projektphasen of project + $projektphasen = array(); + + if ($projektphaseclass->getProjektphasen($ztaufrow->projekt_kurzbz)) + { + $projektphasenames[$ztaufrow->projekt_kurzbz] = array(); + + foreach ($projektphaseclass->result as $ppitem) + { + $phasetoadd = new stdClass(); + $phasetoadd->bezeichnung = $ppitem->bezeichnung; + $phasetoadd->stunden = 0; + $phasetoadd->alleZeiten = array(); + + if ($ppitem->projektphase_id == $ztaufrow->projektphase_id) + { + $phasetoadd->stunden += $stunden; + $phasetoadd->alleZeiten[] = $newprojekttime; + } + + $projektphasen[$ppitem->projektphase_id] = $phasetoadd; + + //add new projektphase to array with unique projekt phase names + if (!in_array($ppitem->bezeichnung, $projektphasenames[$ztaufrow->projekt_kurzbz])) + $projektphasenames[$ztaufrow->projekt_kurzbz][] = $ppitem->bezeichnung; + } + } + + $newprojekt->projektphasen = $projektphasen; + + $projektlines[$day]->projekte[$ztaufrow->projekt_kurzbz] = $newprojekt; + + //add new projekt to array with unique projekt names + if (!in_array($ztaufrow->projekt_kurzbz, $projektnames)) + $projektnames[] = $ztaufrow->projekt_kurzbz; } } @@ -215,7 +271,7 @@ for ($i = 0; $i < count($ztaufdata); $i++) $worktime_unix = $date->mktime_fromtimestamp($dayEnd) - $date->mktime_fromtimestamp($dayStart); $worktimehours = $worktime_unix / 3600; - $projectlines[$day]->arbeitszeit = $worktimehours; + $projektlines[$day]->arbeitszeit = $worktimehours; $pauseSubtracted = 0.00; $lehreExternExists = false; @@ -224,42 +280,71 @@ for ($i = 0; $i < count($ztaufdata); $i++) { if ($subtraction->typ == $activitiesToSubtract[0]) { - $projectlines[$day]->arbeitszeit -= $subtraction->diff; + $projektlines[$day]->arbeitszeit -= $subtraction->diff; $pauseSubtracted += $subtraction->diff; } elseif ($subtraction->typ == $activitiesToSubtract[1] && $subtraction->start >= $dayStart && $subtraction->ende <= $dayEnd) { - $projectlines[$day]->arbeitszeit -= $subtraction->diff; + $projektlines[$day]->arbeitszeit -= $subtraction->diff; $lehreExternExists = true; } elseif ($subtraction->typ == $activitiesToSubtract[2] || $subtraction->typ == $activitiesToSubtract[3]) { - $projectlines[$day]->arbeitszeit -= $subtraction->diff; + $projektlines[$day]->arbeitszeit -= $subtraction->diff; } } - //subtract pauses from project worktimes + //subtract pauses from projekt worktimes foreach ($allpauseranges as $pauserange) { - foreach ($projectlines[$day]->projekte as $name => $project) + foreach ($projektlines[$day]->projekte as $name => $projekt) { - foreach ($projectlines[$day]->projekte[$name]->alleZeiten as $zeit) + $proj =& $projektlines[$day]->projekte[$name]; + foreach ($proj->alleZeiten as $zeit) { - //pause between project start and end + $subtraction = 0.00; + + //pause between projekt 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; + $subtraction = $date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($pauserange->start); } - //pause and project time overlap at project time end + //pause and projekt time overlap at projekt 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; + $subtraction = $date->mktime_fromtimestamp($zeit->ende) - $date->mktime_fromtimestamp($pauserange->start); + //$proj->stunden -= ($date->mktime_fromtimestamp($zeit->ende) - $date->mktime_fromtimestamp($pauserange->start)) / 3600; } - //pause and project time overlap at project time start + //pause and projekt time overlap at projekt 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; + $subtraction = $date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($zeit->start); + } + $proj->stunden -= $subtraction / 3600; + } + + //subtract from projektphasen + foreach ($proj->projektphasen as $phase_id => $phase) + { + foreach ($phase->alleZeiten as $zeit) + { + $subtraction = 0.00; + //pause between projektphase start and end + if ($pauserange->start >= $zeit->start && $pauserange->ende <= $zeit->ende) + { + $subtraction = ($date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($pauserange->start)); + } + //pause and projekt time overlap at projektphase time end + elseif ($pauserange->start < $zeit->ende && $pauserange->start > $zeit->start) + { + $subtraction = $date->mktime_fromtimestamp($zeit->ende) - $date->mktime_fromtimestamp($pauserange->start); + } + //pause and projekt time overlap at projektphase time start + elseif ($pauserange->ende > $zeit->start && $pauserange->ende < $zeit->ende) + { + $subtraction = $date->mktime_fromtimestamp($pauserange->ende) - $date->mktime_fromtimestamp($zeit->start); + } + $proj->projektphasen[$phase_id]->stunden -= $subtraction / 3600; } } } @@ -268,29 +353,47 @@ for ($i = 0; $i < count($ztaufdata); $i++) //worktime with no break greater 6 -> compulsory break of half an hour if ($pauseSubtracted < 0.5 && !$lehreExternExists) { - if ($projectlines[$day]->arbeitszeit >= 6.5) - $projectlines[$day]->arbeitszeit -= 0.5; + if ($projektlines[$day]->arbeitszeit >= 6.5) + $projektlines[$day]->arbeitszeit -= 0.5; //ensure that no worktime gets smaller than 6 hours because of compulsory break - elseif ($projectlines[$day]->arbeitszeit > 6) - $projectlines[$day]->arbeitszeit -= $projectlines[$day]->arbeitszeit - 6; + elseif ($projektlines[$day]->arbeitszeit > 6) + $projektlines[$day]->arbeitszeit -= $projektlines[$day]->arbeitszeit - 6; } - $projectlines[$day]->arbeitszeit = round($projectlines[$day]->arbeitszeit, 2); + $projektlines[$day]->arbeitszeit = round($projektlines[$day]->arbeitszeit, 2); - foreach ($projectlines[$day]->projekte as $name => $project) + //calculate sums + foreach ($projektlines[$day]->projekte as $name => $projekt) { - $projecthours =& $projectlines[$day]->projekte[$name]->stunden; - $projecthours = round($projecthours, 2); - if (array_key_exists($name, $monthsums)) - $monthsums[$name] += $projecthours; + $projekthours =& $projektlines[$day]->projekte[$name]->stunden; + $projekthours = round($projekthours, 2); + + if (isset($projektmonthsums[$name]->sum)) + { + $projektmonthsums[$name]->sum += $projekthours; + foreach ($projekt->projektphasen as $projektphase) + { + $projektmonthsums[$name]->projektphasen[$projektphase->bezeichnung] += round($projektphase->stunden, 2, 0); + } + } else - $monthsums[$name] = $projecthours; + { + $monthsum = new stdClass(); + $monthsum->sum = $projekthours; + $monthsum->projektphasen = array(); + + foreach ($projekt->projektphasen as $projektphase) + { + $monthsum->projektphasen[$projektphase->bezeichnung] = round($projektphase->stunden, 2, 0); + } + $projektmonthsums[$name] = $monthsum; + } } $dayStart = $dayEnd = ''; $tosubtract = $allpauseranges = []; - $monthsums[0] += $projectlines[$day]->arbeitszeit; + $totalmonthsum += $projektlines[$day]->arbeitszeit; } } @@ -301,10 +404,6 @@ $workbook->setVersion(8); // sending HTTP headers $workbook->send('Projektliste_'.$month.'_'.$year.'.xls'); -// Creating a worksheet -$worksheet =& $workbook->addWorksheet($p->t('zeitaufzeichnung/projektliste')); -$worksheet->setInputEncoding('utf-8'); - // Define formats $format_heading_left =& $workbook->addFormat(); $format_heading_left->setBold(); @@ -365,6 +464,12 @@ $format_cell_rightline->setBorder(1); $format_cell_rightline->setVAlign('vcenter'); $format_cell_rightline->setRight(2); +$format_cell_leftrightline =& $workbook->addFormat(); +$format_cell_leftrightline->setBottom(1); +$format_cell_leftrightline->setVAlign('vcenter'); +$format_cell_leftrightline->setLeft(2); +$format_cell_leftrightline->setRight(2); + $format_cell_centered =& $workbook->addFormat(); $format_cell_centered->setBorder(1); $format_cell_centered->setAlign('center'); @@ -372,7 +477,6 @@ $format_cell_centered->setVAlign('vcenter'); $format_cell_centered_leftline =& $workbook->addFormat(); $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'); @@ -384,6 +488,20 @@ $format_cell_centered_rightline->setAlign('center'); $format_cell_centered_rightline->setVAlign('vcenter'); $format_cell_centered_rightline->setRight(2); +$format_cell_centered_leftrightline =& $workbook->addFormat(); +$format_cell_centered_leftrightline->setBottom(1); +$format_cell_centered_leftrightline->setAlign('center'); +$format_cell_centered_leftrightline->setVAlign('vcenter'); +$format_cell_centered_leftrightline->setLeft(2); +$format_cell_centered_leftrightline->setRight(2); + +$format_cell_centered_topbottomline =& $workbook->addFormat(); +$format_cell_centered_topbottomline->setBorder(1); +$format_cell_centered_topbottomline->setAlign('center'); +$format_cell_centered_topbottomline->setVAlign('vcenter'); +$format_cell_centered_topbottomline->setBottom(2); +$format_cell_centered_topbottomline->setTop(2); + $format_cell_centered_topbottomleftline =& $workbook->addFormat(); $format_cell_centered_topbottomleftline->setBorder(1); $format_cell_centered_topbottomleftline->setAlign('center'); @@ -406,178 +524,243 @@ $format_cell_centered_alllines->setAlign('center'); $format_cell_centered_alllines->setVAlign('vcenter'); //define column widths -$nrProjects = count($projectnames); +$nrProjects = count($projektnames); +$totalwidth = 150; $daywidth = 4; $totalworktimewidth = 13; -$worktimewidth = 8; -$worksheet->setColumn(0, 1, $daywidth); -$worksheet->setColumn(2, 2, $totalworktimewidth); +$worktimewidth = 14; +$timecolumnswidth = 2 * $daywidth + $totalworktimewidth + $worktimewidth; -//calculate max width for project descriptions -$maxwidthprojects = $totalworktimewidth * (12 - $nrProjects); -$projectcolumnwidths = array_fill_keys($projectnames, $worktimewidth); - -//set project column width depending on project description widths -foreach ($projectlines as $line) +if ($nrProjects < 1)//no projekts - merge all cells and write notice { - foreach ($line->projekte as $key => $project) + $projektnames[] = "Keine Projekte vorhanden"; +} + +foreach ($projektnames as $projektname) +{ + //Creating a worksheet + $worksheet =& $workbook->addWorksheet($projektname); + $worksheet->setInputEncoding('utf-8'); + + //general options + $worksheet->setLandscape(); + $worksheet->hideGridlines(); + $worksheet->hideScreenGridlines(); + $worksheet->setmargins(0.4); + + //fixed width columns + $worksheet->setColumn(0, 1, $daywidth); + $worksheet->setColumn(2, 2, $totalworktimewidth); + + //calculate number of columns of projekt with phases + $nrPhases = isset($projektphasenames[$projektname]) ? count($projektphasenames[$projektname]) : 0; + + //get taetigkeiten column width - + //minimum is wordlength, maximum restwidth after subraction of projektphase minimum width + $mintaetigkeitenwidth = strlen($p->t('zeitaufzeichnung/taetigkeit')); + $maxtaetigkeitenlimit = $totalwidth - $timecolumnswidth - $nrPhases * $worktimewidth; + + if (isset($projektlines->projekte[$projektname])) { - if ($projectcolumnwidths[$key] < strlen($project->beschreibung)) - $projectcolumnwidths[$key] = strlen($project->beschreibung); - } -} - -//distribute width remainder evenly among projects -if ($nrProjects != 0) - $remwidth = ($maxwidthprojects - array_sum($projectcolumnwidths)) / $nrProjects; - -foreach ($projectcolumnwidths as $projectname => $width) - $projectcolumnwidths[$projectname] += $remwidth; - -//calculating spaces for centering global header texts -$numberspaces = ($maxwidthprojects - 10 - strlen($username)); -$spacesstringFirst = ''; - -while ($numberspaces > 0) -{ - $spacesstringFirst .= ' '; - $numberspaces--; -} - -$numberspaces = ($maxwidthprojects - 14 - strlen($persnr)); -$spacesstringSecond = ''; -while ($numberspaces > 0) -{ - $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); -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, $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.$p->t('zeitaufzeichnung/personalnr').$persnr, $format_heading_right_bottomline); -$worksheet->write($zeile + 1, $lastspalte, '', $format_heading_right_bottomline); -$zeile += 3; - -//general options -$worksheet->setLandscape(); -$worksheet->hideGridlines(); -$worksheet->hideScreenGridlines(); - -//write table header -$worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 1); -$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, $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, $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; - -//write table body -for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) -{ - //write day and weekday - $spalte = 0; - $monthstr = ($month < 10) ? '0'.$month : $month; - $daystr = ($daysnmbr < 10) ? '0'.$daysnmbr : $daysnmbr; - $datestring = $year.'-'.$monthstr.'-'.$daystr; - $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->writeString($zeile, $spalte++, number_format($projectlines[$daysnmbr]->arbeitszeit, 2, $decpoint, $thousandsep), $format_cell_centered_rightline); - $spaltetemp = $spalte; - //write projects - foreach ($projectnames as $project) + foreach ($projektlines->projekte[$projektname] as $projekt) { - if (array_key_exists($project, $projectlines[$daysnmbr]->projekte)) + $projektbeschreibunglength = strlen($projekt->beschreibung); + if ($projektbeschreibunglength >= $maxtaetigkeitenlimit) { - $worksheet->setColumn($spalte, $spalte, $worktimewidth); - $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); - } - else - { - $worksheet->write($zeile, $spalte++, '', $format_cell_centered_leftline); - $worksheet->write($zeile, $spalte++, '', $format_cell_rightline); + $mintaetigkeitenwidth = $maxtaetigkeitenlimit; + break; } + elseif ($projektbeschreibunglength > $mintaetigkeitenwidth) + $mintaetigkeitenwidth = $projektbeschreibunglength; } } + + //get projektphase width, width depending on bezeichnung + $phasewidth = 0; + $phasewidthlimit = $nrPhases > 0 + ? ($totalwidth - $timecolumnswidth - $mintaetigkeitenwidth) / $nrPhases + : $totalwidth - 4 * $daywidth - $worktimewidth - $mintaetigkeitenwidth; + + if (isset($projektphasenames[$projektname])) + { + foreach ($projektphasenames[$projektname] as $projektphasename) + { + $projektphasewidth = strlen($projektphasename); + if ($projektphasewidth >= $phasewidthlimit) + { + $phasewidth = $phasewidthlimit; + break; + } + elseif ($projektphasewidth > $phasewidth) + $phasewidth = $projektphasewidth; + } + } + + //width remainder used for taetigkeit + $taetigkeitenwidth = $totalwidth - $timecolumnswidth - $phasewidth * $nrPhases; + + $lastspalte = 4 + $nrPhases; + + //calculating spaces for centering global header texts + $usernamelength = strlen($username) * 1.77; + $numberspacesfirstrow = $totalwidth - $daywidth * 2 - $worktimewidth - $usernamelength; + $numberspacessecondrow = $numberspacesfirstrow + $usernamelength - strlen($p->t('zeitaufzeichnung/personalnr').$persnr) - 4; + + $spacesstringfirstrow = str_repeat(' ', $numberspacesfirstrow); + $spacesstringsecondrow = str_repeat(' ', $numberspacessecondrow); + + $spalte = $zeile = 0; + + //set language options + $decpoint = $sprache_index === '2' ? '.' : ','; + $thousandsep = $sprache_index === '2' ? ',' : '.'; + + //write global header + $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, $p->t('zeitaufzeichnung/projektlistegedruckt').$spacesstringfirstrow.$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').$spacesstringsecondrow.$p->t('zeitaufzeichnung/personalnr').$persnr, $format_heading_right_bottomline); + $worksheet->write($zeile + 1, $lastspalte, '', $format_heading_right_bottomline); + $zeile += 3; + + $spalte = 0; + + //write table header + $worksheet->setMerge($zeile, $spalte, $zeile + 1, $spalte + 1); + $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, $p->t('zeitaufzeichnung/arbeitszeit'), $format_bold_centered_alllines); + $worksheet->write($zeile + 1, $spalte, '', $format_bold_centered_alllines); + $spalte++; + + if (isset($projektphasenames[$projektname])) + { + $phasenames = $projektphasenames[$projektname]; + $phasenameslength = count($phasenames); + } else { - //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); - else - $worksheet->write($zeile, $spalte, '', $format_cell_centered); - $spalte++; - } + $phasenames = array(); + $phasenameslength = 0; } - $zeile++; + $worksheet->write($zeile, $spalte + $phasenameslength + 1, '', $format_bold_centered_toprightline); + $worksheet->write($zeile + 1, $spalte, $p->t('zeitaufzeichnung/projektstunden'), $format_bold_centered_bottomline); + + for($i = 0; $i < $phasenameslength; $i++) + $worksheet->write($zeile, $spalte + 1 + $i, '', $format_bold_centered_toprightline); + + $worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1 + $phasenameslength); + $worksheet->write($zeile, $spalte, $projektname, $format_bold_centered_toprightline); + + for ($i = 0; $i < $phasenameslength; $i++) + $worksheet->write($zeile + 1, $spalte + 1 + $i, $phasenames[$i], $format_bold_centered_bottomline); + + $worksheet->setColumn($spalte + $phasenameslength + 1, $spalte + $phasenameslength + 1, $taetigkeitenwidth); + $worksheet->write($zeile + 1, $spalte + $phasenameslength + 1, $p->t('zeitaufzeichnung/taetigkeit'), $format_bold_centered_bottomrightline); + $spalte = $spalte + 2 + $phasenameslength; + $zeile += 2; + + //write table body + for ($daysnmbr = 1; $daysnmbr <= $daysinmonth; $daysnmbr++) + { + //write day and weekday + $spalte = 0; + $monthstr = ($month < 10) ? '0'.$month : $month; + $daystr = ($daysnmbr < 10) ? '0'.$daysnmbr : $daysnmbr; + $datestring = $year.'-'.$monthstr.'-'.$daystr; + $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, $projektlines)) + { + //write worktime + $worksheet->writeString($zeile, $spalte++, number_format($projektlines[$daysnmbr]->arbeitszeit, 2, $decpoint, $thousandsep), $format_cell_centered_rightline); + $spaltetemp = $spalte; + //write projekt + if (array_key_exists($projektname, $projektlines[$daysnmbr]->projekte)) + { + $projekt = $projektlines[$daysnmbr]->projekte[$projektname]; + + $worksheet->setColumn($spalte, $spalte, $worktimewidth); + $worksheet->writeString($zeile, $spalte++, number_format($projekt->stunden, 2, $decpoint, $thousandsep), $format_cell_centered_leftrightline); + + foreach ($projekt->projektphasen as $projektphase) + { + $worksheet->setColumn($spalte, $spalte, $phasewidth); + $worksheet->writeString($zeile, $spalte++, number_format($projektphase->stunden, 2, $decpoint, $thousandsep), $format_cell_centered); + } + + $worksheet->setColumn($spalte, $spalte, $phasewidth); + $worksheet->write($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); + } + } + else + { + $worksheet->writeString($zeile, $spalte++, number_format(0, 2, $decpoint, $thousandsep), $format_cell_centered_leftrightline); + } + + if (!array_key_exists($daysnmbr, $projektlines) || !array_key_exists($projektname, $projektlines[$daysnmbr]->projekte)) + { + if (isset($projektphasenames[$projektname])) + { + //write empty cells until end of table + $worksheet->write($zeile, $spalte, '', $format_cell_centered_leftrightline); + $toskip = count($projektphasenames[$projektname]); + for ($i = 0; $i <= $toskip; $i++) + { + if ($i == 0) + $format = $format_cell_centered_leftrightline; + else + $format = $format_cell_centered; + + $worksheet->write($zeile, $spalte++, '', $format); + } + $worksheet->write($zeile, $spalte, '', $format_cell_centered_leftrightline); + } + } + $zeile++; + } + + //write monthly sums + $spalte = 0; + $worksheet->setMerge($zeile, $spalte, $zeile, $spalte + 1); + $worksheet->write($zeile, $spalte, $p->t('zeitaufzeichnung/summe'), $format_bold_centered_alllines); + $worksheet->write($zeile, $spalte + 1, '', $format_bold_centered_alllines); + $spalte += 2; + $worksheet->writeString($zeile, $spalte++, number_format($totalmonthsum, 2, $decpoint, $thousandsep), $format_cell_centered_alllines); + + if (isset($projektmonthsums[$projektname])) + { + $worksheet->writeString($zeile, $spalte++, number_format($projektmonthsums[$projektname]->sum, 2, $decpoint, $thousandsep), $format_cell_centered_alllines); + + foreach ($projektmonthsums[$projektname]->projektphasen as $projektphase) + { + $worksheet->writeString($zeile, $spalte++, number_format($projektphase, 2, $decpoint, $thousandsep), $format_cell_centered_topbottomline); + } + + $worksheet->write($zeile, $spalte++, '', $format_cell_centered_alllines); + } + $zeile += 2; + + $worksheet->fitToPages(1, 1); } -if ($nrProjects < 1) - //no projects - merge all cells and write notice -{ - $worksheet->setMerge(3, 3, 4 + $daysinmonth, $lastspalte); - $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, $p->t('zeitaufzeichnung/summe'), $format_bold_centered_alllines); -$worksheet->write($zeile, $spalte + 1, '', $format_bold_centered_alllines); -$spalte += 2; -$worksheet->writeString($zeile, $spalte++, number_format($monthsums[0], 2, $decpoint, $thousandsep), $format_cell_centered_alllines); -foreach ($projectnames as $project) -{ - $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/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php new file mode 100644 index 000000000..8ec421395 --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -0,0 +1,28 @@ +getProjektphasen($projekt_kurzbz)) + { + $result_obj = array(); + foreach($projektphase->result as $row) + { + $item['projektphase_id']=$row->projektphase_id; + $item['bezeichnung']=$row->bezeichnung; + $result_obj[]=$item; + } + echo json_encode($result_obj); + } + exit; +} diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 3c99c59a4..c7e0c47af 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -1,800 +1,808 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -/** - * Klasse Zeitaufzeichnung - * @create 06-11-2007 - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); - -class zeitaufzeichnung extends basis_db -{ - public $new; // boolean - public $result = array(); // zeitaufzeichnung Objekt - public $done=false; // boolean - - //Tabellenspalten - public $zeitaufzeichnung_id; // serial - public $uid; // varchar(16) - public $aktivitaet_kurzbz; // varchar(16) - public $start; // timestamp - public $ende; // timestamp - public $beschreibung; // varchar(256) - public $oe_kurzbz_1; // varchar(32) ehemals studiengangs_kz - public $oe_kurzbz_2; // varchar(32) ehemals fachbereich_kurzbz - public $insertamum; // timestamp - public $insertvon; // varchar(16) - public $updateamum; // timestamp - public $updatevon; // varchar(16) - public $projekt_kurzbz; // varchar(16) - public $ext_id; // bigint - public $service_id; // integer - public $kunde_uid; // varchar(32) - - /** - * Konstruktor - * @param $zeitaufzeichnung_id ID der Zeitaufzeichnung die geladen werden soll (Default=null) - */ - public function __construct($zeitaufzeichnung_id=null) - { - parent::__construct(); - - if($zeitaufzeichnung_id != null) - $this->load($zeitaufzeichnung_id); - } - - /** - * Laedt die Zeitaufzeichnung mit der ID $zeitaufzeichnung_id - * @param $adress_id ID der zu ladenden Adresse - * @return true wenn ok, false im Fehlerfall - */ - public function load($zeitaufzeichnung_id) - { - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') - { - $this->errormsg = 'Zeitaufzeichnung_id muss eine Zahl sein'; - return false; - } - - //Daten aus der Datenbank lesen - $qry = "SELECT * FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER); - - if(!$this->db_query($qry)) - { - $this->errormsg = 'Fehler bei einer Datenbankabfrage'; - return false; - } - - if($row = $this->db_fetch_object()) - { - $this->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $this->uid = $row->uid; - $this->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $this->start = $row->start; - $this->ende = $row->ende; - $this->beschreibung = $row->beschreibung; - $this->oe_kurzbz_1 = $row->oe_kurzbz_1; - $this->oe_kurzbz_2 = $row->oe_kurzbz_2; - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - $this->projekt_kurzbz = $row->projekt_kurzbz; - $this->ext_id = $row->ext_id; - $this->service_id = $row->service_id; - $this->kunde_uid = $row->kunde_uid; - } - else - { - $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; - return false; - } - - return true; - } - - /** - * Prueft die Variablen auf Gueltigkeit - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - $this->errormsg = ''; - return true; - } - - /** - * Speichert den aktuellen Datensatz in die Datenbank - * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt - * andernfalls wird der Datensatz mit der ID in $adresse_id aktualisiert - * @return true wenn ok, false im Fehlerfall - */ - public function save() - { - //Variablen pruefen - if(!$this->validate()) - return false; - - // check ob identischer eintrag existiert - // DienstreiseMT-Einträge sind hier ausgenommen da eintägige Dienstreisen mit der identen Arbeitszeit eingetragen werden könnten - if ($this->aktivitaet_kurzbz != 'DienstreiseMT') - { - $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and aktivitaet_kurzbz != \'DienstreiseMT\' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); - if($this->db_query($check_qry) && $this->new) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Identischer Eintrag existiert!'; - return false; - } - } - } - } - - // ER - Checks - if ($this->aktivitaet_kurzbz == 'Ersatzruhe') - { - $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; - if ($this->zeitaufzeichnung_id) - $check_qry .= " and zeitaufzeichnung_id != ".$this->db_add_param($this->zeitaufzeichnung_id); - if($this->db_query($check_qry)) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Ersatzruhe darf nicht Überlappen!'; - return false; - } - } - } - } - if ($this->aktivitaet_kurzbz != 'Ersatzruhe') - { - $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz = 'Ersatzruhe' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; - if($this->db_query($check_qry)) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Eintrag darf nicht mit Ersatzruhe Überlappen!'; - return false; - } - } - } - } - - if($this->new) - { - //Neuen Datensatz einfuegen - $qry='BEGIN;INSERT INTO campus.tbl_zeitaufzeichnung (uid, aktivitaet_kurzbz, start, ende, beschreibung, - oe_kurzbz_1, oe_kurzbz_2, insertamum, insertvon, updateamum, updatevon, projekt_kurzbz, service_id, kunde_uid) VALUES('. - $this->db_add_param($this->uid).', '. - $this->db_add_param($this->aktivitaet_kurzbz).', '. - $this->db_add_param($this->start).', '. - $this->db_add_param($this->ende).', '. - $this->db_add_param($this->beschreibung).', '. - $this->db_add_param($this->oe_kurzbz_1).', '. - $this->db_add_param($this->oe_kurzbz_2).','. - $this->db_add_param($this->insertamum).', '. - $this->db_add_param($this->insertvon).', '. - $this->db_add_param($this->updateamum).', '. - $this->db_add_param($this->updatevon).', '. - $this->db_add_param($this->projekt_kurzbz).', '. - $this->db_add_param($this->service_id).', '. - $this->db_add_param($this->kunde_uid).');'; - } - else - { - //Updaten des bestehenden Datensatzes - - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($this->zeitaufzeichnung_id)) - { - $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; - return false; - } - - $qry='UPDATE campus.tbl_zeitaufzeichnung SET'. - ' uid='.$this->db_add_param($this->uid).', '. - ' aktivitaet_kurzbz='.$this->db_add_param($this->aktivitaet_kurzbz).', '. - ' start='.$this->db_add_param($this->start).', '. - ' ende='.$this->db_add_param($this->ende).', '. - ' beschreibung='.$this->db_add_param($this->beschreibung).', '. - ' oe_kurzbz_1='.$this->db_add_param($this->oe_kurzbz_1).', '. - ' oe_kurzbz_2='.$this->db_add_param($this->oe_kurzbz_2).', '. - ' updateamum='.$this->db_add_param($this->updateamum).', '. - ' updatevon='.$this->db_add_param($this->updatevon).', '. - ' projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '. - ' service_id='.$this->db_add_param($this->service_id).', '. - ' kunde_uid='.$this->db_add_param($this->kunde_uid).' '. - 'WHERE zeitaufzeichnung_id='.$this->db_add_param($this->zeitaufzeichnung_id, FHC_INTEGER, false); - } - - if($this->db_query($qry)) - { - if($this->new) - { - //naechste ID aus der Sequence holen - $qry="SELECT currval('campus.tbl_zeitaufzeichnung_zeitaufzeichnung_id_seq') as id;"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->zeitaufzeichnung_id = $row->id; - $this->db_query('COMMIT'); - return true; - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = "Fehler beim Auslesen der Sequence"; - return false; - } - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - } - else - { - $this->errormsg = 'Fehler beim Speichern'; - return false; - } - return true; - } - - /** - * Loescht den Datenensatz mit der ID die uebergeben wird - * @param $zeitaufzeichnnung_id ID die geloescht werden soll - * @return true wenn ok, false im Fehlerfall - */ - public function delete($zeitaufzeichnung_id) - { - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') - { - $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; - return false; - } - - //loeschen des Datensatzes - $qry="DELETE FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER, false); - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Loeschen der Daten'; - return false; - } - } - - /** - * Laedt die Datensaetze eines Projektes - * @param $projekt_kurzbz - */ - public function getListeProjekt($projekt_kurzbz) - { - $where = 'projekt_kurzbz='.$this->db_add_param($projekt_kurzbz); - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - - /** - * Laedt die Zeitaufzeichnungen eines Users in einer festgelegten Zeitspanne - * @param $user - * @param $from startdatum als String in Form Y-m-d - * @param $to enddatum als String in Form Y-m-d - * @param $excluded_activities zu ignorierende Aktivitätstypen - * @return bool - */ - public function getListeUserFromTo($user, $from = null, $to = null, $excluded_activities = null) - { - $where = "uid=".$this->db_add_param($user); - - //standard wenn kein Datum gegeben - letzter Monat - if(empty($from) && empty($to)) - { - $from = date('Y-m-d', strtotime('first day of previous month')); - $to = date('Y-m-d', strtotime('last day of previous month')); - } - else if(empty($to))//standard wenn ein Datum gegeben - datum +/- 40 tage - $to = date('Y-m-d', strtotime($from. ' + 40 days')); - else if(empty($from)) - $from = date('Y-m-d', strtotime($to. ' - 40 days')); - - //zusätzlicher Tag - SQL rechnet letzten Tag nicht hinein - $to = date('Y-m-d', strtotime($to. ' + 1 days')); - - $where.= " AND ((start >= ".$this->db_add_param($from)."::DATE AND start <= ".$this->db_add_param($to)."::DATE) - OR (ende >= ".$this->db_add_param($from)."::DATE AND ende <= ".$this->db_add_param($to)."::DATE))"; - - if (!empty($excluded_activities)) - { - $exactstring = is_array($excluded_activities) ? $this->db_implode4SQL($excluded_activities) : $this->db_add_param($excluded_activities); - $where .= " AND (aktivitaet_kurzbz NOT IN (" . $exactstring . ") OR aktivitaet_kurzbz IS NULL)"; - } - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->start; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users. Default: Die letzten 40 Tage - * @param string $user - * @param integer $days default: 40 Tage - */ - public function getListeUser($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->start; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. - * Default: Die letzten 40 Tage - * @param string $user - * @param integer $days deafult: 40 Tage - */ - public function getListeUserFull($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - $where_join = "and (z.aktivitaet_kurzbz != 'DienstreiseMT' or z.aktivitaet_kurzbz is null) and z.uid=".$this->db_add_param($user); - if ($days!='') - $where_join.= " AND z.ende>(now() - INTERVAL '".$days." days')"; - if ($days=='') - $max_anz = 180; - else - $max_anz = $days; - $qry = "SELECT - d.dates, z.*, to_char ((z.ende-z.start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where) as summe - FROM campus.tbl_zeitaufzeichnung z - right join (select current_date - s.a as dates from generate_series(0,$max_anz,1) as s(a)) d on date(z.ende) = d.dates $where_join order by d.dates desc, z.start desc - "; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->dates; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. - * Default: Die letzten 40 Tage - * @param string $user - * @param integer $days deafult: 40 Tage - */ - public function getDienstreisenUser($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - $where .= " AND aktivitaet_kurzbz = 'DienstreiseMT'"; - $qry = "SELECT - zeitaufzeichnung_id, start::date as starttag, TO_CHAR(start, 'HH24:MI') as startzeit, ende::date as endtag, TO_CHAR(ende, 'HH24:MI') as endzeit - FROM campus.tbl_zeitaufzeichnung - where $where - ORDER BY ende DESC - "; - - if($result = $this->db_query($qry)) - { - $dr_arr = array(); - while($row = $this->db_fetch_object($result)) - { - if (array_key_exists($row->starttag, $dr_arr)) - { - $dr_arr[$row->starttag]['start'] = $row->startzeit; - $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; - } - else - { - $dr_arr[$row->starttag] = array(); - $dr_arr[$row->starttag]['start'] = $row->startzeit; - $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; - } - if (array_key_exists($row->endtag, $dr_arr)) - { - $dr_arr[$row->endtag]['ende'] = $row->endzeit; - $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; - } - else - { - $dr_arr[$row->endtag] = array(); - $dr_arr[$row->endtag]['ende'] = $row->endzeit; - $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; - } - - $this->result = $dr_arr; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Löscht sämtliche Einträge eines Users für einen Tag - * @param string $user - * @param string $tag Y-m-d - */ - public function deleteEntriesForUser($user, $tag) - { - $where = "uid=".$this->db_add_param($user); - - $qry = "delete from campus.tbl_zeitaufzeichnung where $where and date_trunc('day', start) = '$tag'"; - if($result = $this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Löscht Pauseneinträge eines Users für einen Tag, die außerhalb der Arbeitszeit liegen - * Löscht Pauseneinträge an Tagen ohne Arbeitszeit - * @param string $user - * @param string $tag Y-m-d - */ - public function cleanPausenForUser($user, $tag) - { - $where = "uid=".$this->db_add_param($user); - - $qry = " - delete from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz = 'Pause' and start::date = '$tag' and $where and -( -start::time >= -(SELECT max(ende::time) as endzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') -or -ende::time<= -(SELECT min(start::time) as startzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') -or not exists -(select 1 from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz != 'LehreExtern' and aktivitaet_kurzbz != 'Pause' and start::date = '$tag' and $where ) -) - "; - - if($result = $this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Holt alle ZA-Einträge Typ LehreIntern und LehreExtern eines Users - * für das laufende Studienjahr und gibt die Summen in einem Array zurück - * @param string $user - * @return Array mit Key: LehreIntern, LehreExtern, LehreAuftraege, LehreInkludiert - */ - public function getLehreForUser($user,$sem) - { - $where = "uid=".$this->db_add_param($user); - $where_sem = "studiensemester_kurzbz=".$this->db_add_param($sem); - $lehre_arr = array("Lehre"=>0, "LehreExtern"=>0, "LehreAuftraege"=>0); - - $qry = " - select sum(extract(epoch from ende-start))/3600 as lehre, aktivitaet_kurzbz from campus.tbl_zeitaufzeichnung where $where and aktivitaet_kurzbz in ('Lehre', 'LehreExtern') and start > (select start from public.tbl_studiensemester where $where_sem) group by aktivitaet_kurzbz - "; - - if($result = $this->db_query($qry)) - { - - while($row = $this->db_fetch_object($result)) - { - $lehre_arr[$row->aktivitaet_kurzbz] = round($row->lehre,2); - } - } - else - { - return false; - } - $where = "mitarbeiter_uid=".$this->db_add_param($user); - $where_sem = "l.studiensemester_kurzbz=".$this->db_add_param($sem); - - $qry = " - SELECT sum(semstunden) AS stunden - FROM - ( - SELECT sum(m.semesterstunden) AS semstunden - FROM - lehre.tbl_lehreinheitmitarbeiter m, - lehre.tbl_lehreinheit l - JOIN - lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) - JOIN - public.tbl_studiengang s using (studiengang_kz) - WHERE - $where AND - $where_sem AND - l.lehreinheit_id = m.lehreinheit_id AND - m.stundensatz * m.semesterstunden > 0 AND - s.typ not in ('l') AND - lv.studiengang_kz > 0 - UNION - SELECT sum(pb.stunden) AS semstunden - FROM - lehre.tbl_projektarbeit pa, - lehre.tbl_projektbetreuer pb, - public.tbl_benutzer b, - lehre.tbl_lehreinheit l - JOIN - lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) - JOIN - public.tbl_studiengang s using (studiengang_kz) - - WHERE - pa.lehreinheit_id = l.lehreinheit_id AND - pb.projektarbeit_id = pa.projektarbeit_id AND - pb.person_id = b.person_id AND - b.uid = ".$this->db_add_param($user)." AND - pb.stunden * pb.stundensatz > 0 AND - s.typ not in ('l') AND - lv.studiengang_kz > 0 AND - $where_sem - ) AS semstunden - "; - - if($result = $this->db_query($qry)) - { - - while($row = $this->db_fetch_object($result)) - { - $lehre_arr["LehreAuftraege"] = round($row->stunden); - } - } - else - { - return false; - } - - return $lehre_arr; - } - - /** - * Holt das Datum bis zu dem die Eintragung für einen bestimmten User gesperrt ist - * @param string $user - * @return string $tag Y-m-d or false - */ - - public function getEintragungGesperrtBisForUser($user) - { - //check if addon casetime is installed - $qrytable = " - SELECT EXISTS( - SELECT 1 - FROM information_schema.tables - WHERE - table_schema = 'addon' AND - table_name = 'tbl_casetime_timesheet' - ); - "; - - $res = $this->db_query($qrytable); - if ($this->db_fetch_row($res)[0] == 't') - { - //check if sent timesheets for the UID exist - $where = "uid=".$this->db_add_param($user); - - $qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null"; - - if($result = $this->db_query($qry)) - { - $datum = $this->db_fetch_object($result); - return $datum->max; - } - else - { - return false; - } - } - else - { - return false; - } - } -} -?> +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/** + * Klasse Zeitaufzeichnung + * @create 06-11-2007 + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class zeitaufzeichnung extends basis_db +{ + public $new; // boolean + public $result = array(); // zeitaufzeichnung Objekt + public $done=false; // boolean + + //Tabellenspalten + public $zeitaufzeichnung_id; // serial + public $uid; // varchar(16) + public $aktivitaet_kurzbz; // varchar(16) + public $start; // timestamp + public $ende; // timestamp + public $beschreibung; // varchar(256) + public $oe_kurzbz_1; // varchar(32) ehemals studiengangs_kz + public $oe_kurzbz_2; // varchar(32) ehemals fachbereich_kurzbz + public $insertamum; // timestamp + public $insertvon; // varchar(16) + public $updateamum; // timestamp + public $updatevon; // varchar(16) + public $projekt_kurzbz; // varchar(16) + public $projektphase_id; // bigint + public $ext_id; // bigint + public $service_id; // integer + public $kunde_uid; // varchar(32) + + /** + * Konstruktor + * @param $zeitaufzeichnung_id ID der Zeitaufzeichnung die geladen werden soll (Default=null) + */ + public function __construct($zeitaufzeichnung_id=null) + { + parent::__construct(); + + if($zeitaufzeichnung_id != null) + $this->load($zeitaufzeichnung_id); + } + + /** + * Laedt die Zeitaufzeichnung mit der ID $zeitaufzeichnung_id + * @param $adress_id ID der zu ladenden Adresse + * @return true wenn ok, false im Fehlerfall + */ + public function load($zeitaufzeichnung_id) + { + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') + { + $this->errormsg = 'Zeitaufzeichnung_id muss eine Zahl sein'; + return false; + } + + //Daten aus der Datenbank lesen + $qry = "SELECT * FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $this->uid = $row->uid; + $this->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $this->start = $row->start; + $this->ende = $row->ende; + $this->beschreibung = $row->beschreibung; + $this->oe_kurzbz_1 = $row->oe_kurzbz_1; + $this->oe_kurzbz_2 = $row->oe_kurzbz_2; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->projekt_kurzbz = $row->projekt_kurzbz; + $this->projektphase_id = $row->projektphase_id; + $this->ext_id = $row->ext_id; + $this->service_id = $row->service_id; + $this->kunde_uid = $row->kunde_uid; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der Datensatz mit der ID in $adresse_id aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + //Variablen pruefen + if(!$this->validate()) + return false; + + // check ob identischer eintrag existiert + // DienstreiseMT-Einträge sind hier ausgenommen da eintägige Dienstreisen mit der identen Arbeitszeit eingetragen werden könnten + if ($this->aktivitaet_kurzbz != 'DienstreiseMT') + { + $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and aktivitaet_kurzbz != \'DienstreiseMT\' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); + if($this->db_query($check_qry) && $this->new) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Identischer Eintrag existiert!'; + return false; + } + } + } + } + + // ER - Checks + if ($this->aktivitaet_kurzbz == 'Ersatzruhe') + { + $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; + if ($this->zeitaufzeichnung_id) + $check_qry .= " and zeitaufzeichnung_id != ".$this->db_add_param($this->zeitaufzeichnung_id); + if($this->db_query($check_qry)) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Ersatzruhe darf nicht Überlappen!'; + return false; + } + } + } + } + if ($this->aktivitaet_kurzbz != 'Ersatzruhe') + { + $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz = 'Ersatzruhe' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; + if($this->db_query($check_qry)) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Eintrag darf nicht mit Ersatzruhe Überlappen!'; + return false; + } + } + } + } + + if($this->new) + { + //Neuen Datensatz einfuegen + $qry='BEGIN;INSERT INTO campus.tbl_zeitaufzeichnung (uid, aktivitaet_kurzbz, start, ende, beschreibung, + oe_kurzbz_1, oe_kurzbz_2, insertamum, insertvon, updateamum, updatevon, projekt_kurzbz, projektphase_id, service_id, kunde_uid) VALUES('. + $this->db_add_param($this->uid).', '. + $this->db_add_param($this->aktivitaet_kurzbz).', '. + $this->db_add_param($this->start).', '. + $this->db_add_param($this->ende).', '. + $this->db_add_param($this->beschreibung).', '. + $this->db_add_param($this->oe_kurzbz_1).', '. + $this->db_add_param($this->oe_kurzbz_2).','. + $this->db_add_param($this->insertamum).', '. + $this->db_add_param($this->insertvon).', '. + $this->db_add_param($this->updateamum).', '. + $this->db_add_param($this->updatevon).', '. + $this->db_add_param($this->projekt_kurzbz).', '. + $this->db_add_param($this->projektphase_id, FHC_INTEGER).', '. + $this->db_add_param($this->service_id).', '. + $this->db_add_param($this->kunde_uid).');'; + } + else + { + //Updaten des bestehenden Datensatzes + + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($this->zeitaufzeichnung_id)) + { + $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; + return false; + } + + $qry='UPDATE campus.tbl_zeitaufzeichnung SET'. + ' uid='.$this->db_add_param($this->uid).', '. + ' aktivitaet_kurzbz='.$this->db_add_param($this->aktivitaet_kurzbz).', '. + ' start='.$this->db_add_param($this->start).', '. + ' ende='.$this->db_add_param($this->ende).', '. + ' beschreibung='.$this->db_add_param($this->beschreibung).', '. + ' oe_kurzbz_1='.$this->db_add_param($this->oe_kurzbz_1).', '. + ' oe_kurzbz_2='.$this->db_add_param($this->oe_kurzbz_2).', '. + ' updateamum='.$this->db_add_param($this->updateamum).', '. + ' updatevon='.$this->db_add_param($this->updatevon).', '. + ' projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '. + ' projektphase_id='.$this->db_add_param($this->projektphase_id, FHC_INTEGER).', '. + ' service_id='.$this->db_add_param($this->service_id).', '. + ' kunde_uid='.$this->db_add_param($this->kunde_uid).' '. + 'WHERE zeitaufzeichnung_id='.$this->db_add_param($this->zeitaufzeichnung_id, FHC_INTEGER, false); + } + + if($this->db_query($qry)) + { + if($this->new) + { + //naechste ID aus der Sequence holen + $qry="SELECT currval('campus.tbl_zeitaufzeichnung_zeitaufzeichnung_id_seq') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->zeitaufzeichnung_id = $row->id; + $this->db_query('COMMIT'); + return true; + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = "Fehler beim Auslesen der Sequence"; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + } + else + { + $this->errormsg = 'Fehler beim Speichern'; + return false; + } + return true; + } + + /** + * Loescht den Datenensatz mit der ID die uebergeben wird + * @param $zeitaufzeichnnung_id ID die geloescht werden soll + * @return true wenn ok, false im Fehlerfall + */ + public function delete($zeitaufzeichnung_id) + { + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') + { + $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; + return false; + } + + //loeschen des Datensatzes + $qry="DELETE FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER, false); + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Loeschen der Daten'; + return false; + } + } + + /** + * Laedt die Datensaetze eines Projektes + * @param $projekt_kurzbz + */ + public function getListeProjekt($projekt_kurzbz) + { + $where = 'projekt_kurzbz='.$this->db_add_param($projekt_kurzbz); + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->projektphase_id = $row->projektphase_id; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + + /** + * Laedt die Zeitaufzeichnungen eines Users in einer festgelegten Zeitspanne + * @param $user + * @param $from startdatum als String in Form Y-m-d + * @param $to enddatum als String in Form Y-m-d + * @param $excluded_activities zu ignorierende Aktivitätstypen + * @return bool + */ + public function getListeUserFromTo($user, $from = null, $to = null, $excluded_activities = null) + { + $where = "uid=".$this->db_add_param($user); + + //standard wenn kein Datum gegeben - letzter Monat + if(empty($from) && empty($to)) + { + $from = date('Y-m-d', strtotime('first day of previous month')); + $to = date('Y-m-d', strtotime('last day of previous month')); + } + else if(empty($to))//standard wenn ein Datum gegeben - datum +/- 40 tage + $to = date('Y-m-d', strtotime($from. ' + 40 days')); + else if(empty($from)) + $from = date('Y-m-d', strtotime($to. ' - 40 days')); + + //zusätzlicher Tag - SQL rechnet letzten Tag nicht hinein + $to = date('Y-m-d', strtotime($to. ' + 1 days')); + + $where.= " AND ((start >= ".$this->db_add_param($from)."::DATE AND start <= ".$this->db_add_param($to)."::DATE) + OR (ende >= ".$this->db_add_param($from)."::DATE AND ende <= ".$this->db_add_param($to)."::DATE))"; + + if (!empty($excluded_activities)) + { + $exactstring = is_array($excluded_activities) ? $this->db_implode4SQL($excluded_activities) : $this->db_add_param($excluded_activities); + $where .= " AND (aktivitaet_kurzbz NOT IN (" . $exactstring . ") OR aktivitaet_kurzbz IS NULL)"; + } + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->projektphase_id = $row->projektphase_id; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->start; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users. Default: Die letzten 40 Tage + * @param string $user + * @param integer $days default: 40 Tage + */ + public function getListeUser($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->projektphase_id = $row->projektphase_id; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->start; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. + * Default: Die letzten 40 Tage + * @param string $user + * @param integer $days deafult: 40 Tage + */ + public function getListeUserFull($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + $where_join = "and (z.aktivitaet_kurzbz != 'DienstreiseMT' or z.aktivitaet_kurzbz is null) and z.uid=".$this->db_add_param($user); + if ($days!='') + $where_join.= " AND z.ende>(now() - INTERVAL '".$days." days')"; + if ($days=='') + $max_anz = 180; + else + $max_anz = $days; + $qry = "SELECT + d.dates, z.*, to_char ((z.ende-z.start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where) as summe + FROM campus.tbl_zeitaufzeichnung z + right join (select current_date - s.a as dates from generate_series(0,$max_anz,1) as s(a)) d on date(z.ende) = d.dates $where_join order by d.dates desc, z.start desc + "; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->projektphase_id = $row->projektphase_id; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->dates; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. + * Default: Die letzten 40 Tage + * @param string $user + * @param integer $days deafult: 40 Tage + */ + public function getDienstreisenUser($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + $where .= " AND aktivitaet_kurzbz = 'DienstreiseMT'"; + $qry = "SELECT + zeitaufzeichnung_id, start::date as starttag, TO_CHAR(start, 'HH24:MI') as startzeit, ende::date as endtag, TO_CHAR(ende, 'HH24:MI') as endzeit + FROM campus.tbl_zeitaufzeichnung + where $where + ORDER BY ende DESC + "; + + if($result = $this->db_query($qry)) + { + $dr_arr = array(); + while($row = $this->db_fetch_object($result)) + { + if (array_key_exists($row->starttag, $dr_arr)) + { + $dr_arr[$row->starttag]['start'] = $row->startzeit; + $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; + } + else + { + $dr_arr[$row->starttag] = array(); + $dr_arr[$row->starttag]['start'] = $row->startzeit; + $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; + } + if (array_key_exists($row->endtag, $dr_arr)) + { + $dr_arr[$row->endtag]['ende'] = $row->endzeit; + $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; + } + else + { + $dr_arr[$row->endtag] = array(); + $dr_arr[$row->endtag]['ende'] = $row->endzeit; + $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; + } + + $this->result = $dr_arr; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Löscht sämtliche Einträge eines Users für einen Tag + * @param string $user + * @param string $tag Y-m-d + */ + public function deleteEntriesForUser($user, $tag) + { + $where = "uid=".$this->db_add_param($user); + + $qry = "delete from campus.tbl_zeitaufzeichnung where $where and date_trunc('day', start) = '$tag'"; + if($result = $this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Löscht Pauseneinträge eines Users für einen Tag, die außerhalb der Arbeitszeit liegen + * Löscht Pauseneinträge an Tagen ohne Arbeitszeit + * @param string $user + * @param string $tag Y-m-d + */ + public function cleanPausenForUser($user, $tag) + { + $where = "uid=".$this->db_add_param($user); + + $qry = " + delete from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz = 'Pause' and start::date = '$tag' and $where and +( +start::time >= +(SELECT max(ende::time) as endzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or +ende::time<= +(SELECT min(start::time) as startzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or not exists +(select 1 from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz != 'LehreExtern' and aktivitaet_kurzbz != 'Pause' and start::date = '$tag' and $where ) +) + "; + + if($result = $this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Holt alle ZA-Einträge Typ LehreIntern und LehreExtern eines Users + * für das laufende Studienjahr und gibt die Summen in einem Array zurück + * @param string $user + * @return Array mit Key: LehreIntern, LehreExtern, LehreAuftraege, LehreInkludiert + */ + public function getLehreForUser($user,$sem) + { + $where = "uid=".$this->db_add_param($user); + $where_sem = "studiensemester_kurzbz=".$this->db_add_param($sem); + $lehre_arr = array("Lehre"=>0, "LehreExtern"=>0, "LehreAuftraege"=>0); + + $qry = " + select sum(extract(epoch from ende-start))/3600 as lehre, aktivitaet_kurzbz from campus.tbl_zeitaufzeichnung where $where and aktivitaet_kurzbz in ('Lehre', 'LehreExtern') and start > (select start from public.tbl_studiensemester where $where_sem) group by aktivitaet_kurzbz + "; + + if($result = $this->db_query($qry)) + { + + while($row = $this->db_fetch_object($result)) + { + $lehre_arr[$row->aktivitaet_kurzbz] = round($row->lehre,2); + } + } + else + { + return false; + } + $where = "mitarbeiter_uid=".$this->db_add_param($user); + $where_sem = "l.studiensemester_kurzbz=".$this->db_add_param($sem); + + $qry = " + SELECT sum(semstunden) AS stunden + FROM + ( + SELECT sum(m.semesterstunden) AS semstunden + FROM + lehre.tbl_lehreinheitmitarbeiter m, + lehre.tbl_lehreinheit l + JOIN + lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + JOIN + public.tbl_studiengang s using (studiengang_kz) + WHERE + $where AND + $where_sem AND + l.lehreinheit_id = m.lehreinheit_id AND + m.stundensatz * m.semesterstunden > 0 AND + s.typ not in ('l') AND + lv.studiengang_kz > 0 + UNION + SELECT sum(pb.stunden) AS semstunden + FROM + lehre.tbl_projektarbeit pa, + lehre.tbl_projektbetreuer pb, + public.tbl_benutzer b, + lehre.tbl_lehreinheit l + JOIN + lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + JOIN + public.tbl_studiengang s using (studiengang_kz) + + WHERE + pa.lehreinheit_id = l.lehreinheit_id AND + pb.projektarbeit_id = pa.projektarbeit_id AND + pb.person_id = b.person_id AND + b.uid = ".$this->db_add_param($user)." AND + pb.stunden * pb.stundensatz > 0 AND + s.typ not in ('l') AND + lv.studiengang_kz > 0 AND + $where_sem + ) AS semstunden + "; + + if($result = $this->db_query($qry)) + { + + while($row = $this->db_fetch_object($result)) + { + $lehre_arr["LehreAuftraege"] = round($row->stunden); + } + } + else + { + return false; + } + + return $lehre_arr; + } + + /** + * Holt das Datum bis zu dem die Eintragung für einen bestimmten User gesperrt ist + * @param string $user + * @return string $tag Y-m-d or false + */ + + public function getEintragungGesperrtBisForUser($user) + { + //check if addon casetime is installed + $qrytable = " + SELECT EXISTS( + SELECT 1 + FROM information_schema.tables + WHERE + table_schema = 'addon' AND + table_name = 'tbl_casetime_timesheet' + ); + "; + + $res = $this->db_query($qrytable); + if ($this->db_fetch_row($res)[0] == 't') + { + //check if sent timesheets for the UID exist + $where = "uid=".$this->db_add_param($user); + + $qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null"; + + if($result = $this->db_query($qry)) + { + $datum = $this->db_fetch_object($result); + return $datum->max; + } + else + { + return false; + } + } + else + { + return false; + } + } +} +?> diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index 4634459dd..0692a5f8b 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -1,60 +1,61 @@ -phrasen['zeitaufzeichnung/zeitaufzeichnung']='Zeitaufzeichnung'; -$this->phrasen['zeitaufzeichnung/benutzerWurdeNichtGefunden']='Benutzer %s wurde nicht gefunden'; -$this->phrasen['zeitaufzeichnung/zeitaufzeichnungVon']='Zeitaufzeichnung von'; -$this->phrasen['zeitaufzeichnung/neu']='NEU'; -$this->phrasen['zeitaufzeichnung/projekt']='Projekt'; -$this->phrasen['zeitaufzeichnung/keineAuswahl']='keine Auswahl'; -$this->phrasen['zeitaufzeichnung/aktivitaet']='Aktivität'; -$this->phrasen['zeitaufzeichnung/id']='ID'; -$this->phrasen['zeitaufzeichnung/user']='User'; -$this->phrasen['zeitaufzeichnung/start']='Start'; -$this->phrasen['zeitaufzeichnung/ende']='Ende'; -$this->phrasen['zeitaufzeichnung/dauer']='Dauer'; -$this->phrasen['zeitaufzeichnung/gesamtdauer']='Gesamtdauer'; -$this->phrasen['zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet']='Sie sind derzeit keinen Projekten zugeordnet'; -$this->phrasen['zeitaufzeichnung/fehlerBeimErmittelnDerProjekte']='Fehler beim Ermitteln der Projekte'; -$this->phrasen['zeitaufzeichnung/organisationseinheit1']='Organisationseinheit 1'; -$this->phrasen['zeitaufzeichnung/organisationseinheit2']='Organisationseinheit 2'; -$this->phrasen['zeitaufzeichnung/organisationseinheiten']='Organisationseinheit'; -$this->phrasen['zeitaufzeichnung/oe']='OE'; -$this->phrasen['zeitaufzeichnung/service']='Service'; -$this->phrasen['zeitaufzeichnung/kunde']='Kunde'; -$this->phrasen['zeitaufzeichnung/alsNeuenEintragSpeichern']='Als neuen Eintrag speichern'; -$this->phrasen['zeitaufzeichnung/kartennummer']='Kartennummer'; -$this->phrasen['zeitaufzeichnung/oderKartennummerOptional']='oder Kartennummer (optional)'; -$this->phrasen['zeitaufzeichnung/nameEingeben']='Name eingeben'; -$this->phrasen['zeitaufzeichnung/aktuelleZeitLaden']='Aktuelle Zeit laden'; -$this->phrasen['zeitaufzeichnung/alsEndzeitUebernehmen']='Als Endzeit übernehmen'; -$this->phrasen['zeitaufzeichnung/alsStartzeitUebernehmen']='Als Startzeit übernehmen'; -$this->phrasen['zeitaufzeichnung/uebersicht']='Projektübersicht'; -$this->phrasen['zeitaufzeichnung/zeitraumAuffallendHoch']='Achtung, eingegebener Zeitraum ist auffallend hoch. \nWollen Sie die Daten dennoch speichern?'; -$this->phrasen['zeitaufzeichnung/bisDatumKleinerAlsVonDatum']='Das Bis-Datum darf nicht kleiner als das Von-Datum sein'; -$this->phrasen['zeitaufzeichnung/tagessumme']='Tagessumme:'; -$this->phrasen['zeitaufzeichnung/wochensumme']='Wochensumme:'; -$this->phrasen['zeitaufzeichnung/wochensummeEintraege']='Wochensumme Einträge'; -$this->phrasen['zeitaufzeichnung/wochensummeArbeitszeit']='Wochensumme Arbeitszeit'; -$this->phrasen['zeitaufzeichnung/xTageAnsicht']='%s Tage Ansicht'; -$this->phrasen['zeitaufzeichnung/endeXTageAnsicht']='Ende der %s Tage Ansicht'; -$this->phrasen['zeitaufzeichnung/alleAnzeigen']='Alle anzeigen'; -$this->phrasen['zeitaufzeichnung/alleEintraege']='Alle Einträge'; -$this->phrasen['zeitaufzeichnung/summeEintraege']='Summe Einträge'; -$this->phrasen['zeitaufzeichnung/arbeitszeit']='Arbeitszeit'; -$this->phrasen['zeitaufzeichnung/pause']='Pausen'; -$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:'; -$this->phrasen['zeitaufzeichnung/dienstreise']='Dienstreise'; +phrasen['zeitaufzeichnung/zeitaufzeichnung']='Zeitaufzeichnung'; +$this->phrasen['zeitaufzeichnung/benutzerWurdeNichtGefunden']='Benutzer %s wurde nicht gefunden'; +$this->phrasen['zeitaufzeichnung/zeitaufzeichnungVon']='Zeitaufzeichnung von'; +$this->phrasen['zeitaufzeichnung/neu']='NEU'; +$this->phrasen['zeitaufzeichnung/projekt']='Projekt'; +$this->phrasen['zeitaufzeichnung/projektphase']='Projektphase'; +$this->phrasen['zeitaufzeichnung/keineAuswahl']='keine Auswahl'; +$this->phrasen['zeitaufzeichnung/aktivitaet']='Aktivität'; +$this->phrasen['zeitaufzeichnung/id']='ID'; +$this->phrasen['zeitaufzeichnung/user']='User'; +$this->phrasen['zeitaufzeichnung/start']='Start'; +$this->phrasen['zeitaufzeichnung/ende']='Ende'; +$this->phrasen['zeitaufzeichnung/dauer']='Dauer'; +$this->phrasen['zeitaufzeichnung/gesamtdauer']='Gesamtdauer'; +$this->phrasen['zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet']='Sie sind derzeit keinen Projekten zugeordnet'; +$this->phrasen['zeitaufzeichnung/fehlerBeimErmittelnDerProjekte']='Fehler beim Ermitteln der Projekte'; +$this->phrasen['zeitaufzeichnung/organisationseinheit1']='Organisationseinheit 1'; +$this->phrasen['zeitaufzeichnung/organisationseinheit2']='Organisationseinheit 2'; +$this->phrasen['zeitaufzeichnung/organisationseinheiten']='Organisationseinheit'; +$this->phrasen['zeitaufzeichnung/oe']='OE'; +$this->phrasen['zeitaufzeichnung/service']='Service'; +$this->phrasen['zeitaufzeichnung/kunde']='Kunde'; +$this->phrasen['zeitaufzeichnung/alsNeuenEintragSpeichern']='Als neuen Eintrag speichern'; +$this->phrasen['zeitaufzeichnung/kartennummer']='Kartennummer'; +$this->phrasen['zeitaufzeichnung/oderKartennummerOptional']='oder Kartennummer (optional)'; +$this->phrasen['zeitaufzeichnung/nameEingeben']='Name eingeben'; +$this->phrasen['zeitaufzeichnung/aktuelleZeitLaden']='Aktuelle Zeit laden'; +$this->phrasen['zeitaufzeichnung/alsEndzeitUebernehmen']='Als Endzeit übernehmen'; +$this->phrasen['zeitaufzeichnung/alsStartzeitUebernehmen']='Als Startzeit übernehmen'; +$this->phrasen['zeitaufzeichnung/uebersicht']='Projektübersicht'; +$this->phrasen['zeitaufzeichnung/zeitraumAuffallendHoch']='Achtung, eingegebener Zeitraum ist auffallend hoch. \nWollen Sie die Daten dennoch speichern?'; +$this->phrasen['zeitaufzeichnung/bisDatumKleinerAlsVonDatum']='Das Bis-Datum darf nicht kleiner als das Von-Datum sein'; +$this->phrasen['zeitaufzeichnung/tagessumme']='Tagessumme:'; +$this->phrasen['zeitaufzeichnung/wochensumme']='Wochensumme:'; +$this->phrasen['zeitaufzeichnung/wochensummeEintraege']='Wochensumme Einträge'; +$this->phrasen['zeitaufzeichnung/wochensummeArbeitszeit']='Wochensumme Arbeitszeit'; +$this->phrasen['zeitaufzeichnung/xTageAnsicht']='%s Tage Ansicht'; +$this->phrasen['zeitaufzeichnung/endeXTageAnsicht']='Ende der %s Tage Ansicht'; +$this->phrasen['zeitaufzeichnung/alleAnzeigen']='Alle anzeigen'; +$this->phrasen['zeitaufzeichnung/alleEintraege']='Alle Einträge'; +$this->phrasen['zeitaufzeichnung/summeEintraege']='Summe Einträge'; +$this->phrasen['zeitaufzeichnung/arbeitszeit']='Arbeitszeit'; +$this->phrasen['zeitaufzeichnung/pause']='Pausen'; +$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/projektstunden']='Projektstunden'; +$this->phrasen['zeitaufzeichnung/taetigkeit']='Tätigkeit'; +$this->phrasen['zeitaufzeichnung/keineprojekte']='keine Projekte vorhanden'; +$this->phrasen['zeitaufzeichnung/summe']='Summe:'; +$this->phrasen['zeitaufzeichnung/dienstreise']='Dienstreise'; diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php index bd887a5d0..cd460dc97 100644 --- a/locale/en-US/zeitaufzeichnung.php +++ b/locale/en-US/zeitaufzeichnung.php @@ -1,60 +1,61 @@ -phrasen['zeitaufzeichnung/zeitaufzeichnung']='Timesheet'; -$this->phrasen['zeitaufzeichnung/benutzerWurdeNichtGefunden']='User %s not found'; -$this->phrasen['zeitaufzeichnung/zeitaufzeichnungVon']='Timesheet for'; -$this->phrasen['zeitaufzeichnung/neu']='NEW'; -$this->phrasen['zeitaufzeichnung/projekt']='Project'; -$this->phrasen['zeitaufzeichnung/keineAuswahl']='no selection'; -$this->phrasen['zeitaufzeichnung/aktivitaet']='Activity'; -$this->phrasen['zeitaufzeichnung/id']='ID'; -$this->phrasen['zeitaufzeichnung/user']='User'; -$this->phrasen['zeitaufzeichnung/start']='Start'; -$this->phrasen['zeitaufzeichnung/ende']='End'; -$this->phrasen['zeitaufzeichnung/dauer']='Length'; -$this->phrasen['zeitaufzeichnung/gesamtdauer']='Total time'; -$this->phrasen['zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet']='You are not currently assigned to any projects'; -$this->phrasen['zeitaufzeichnung/fehlerBeimErmittelnDerProjekte']='Error retrieving project data'; -$this->phrasen['zeitaufzeichnung/organisationseinheit1']='Organisation Unit 1'; -$this->phrasen['zeitaufzeichnung/organisationseinheit2']='Organisation Unit 2'; -$this->phrasen['zeitaufzeichnung/organisationseinheiten']='Organisation Unit'; -$this->phrasen['zeitaufzeichnung/oe']='OU'; -$this->phrasen['zeitaufzeichnung/service']='Service'; -$this->phrasen['zeitaufzeichnung/kunde']='Client'; -$this->phrasen['zeitaufzeichnung/alsNeuenEintragSpeichern']='Save as new'; -$this->phrasen['zeitaufzeichnung/kartennummer']='Number'; -$this->phrasen['zeitaufzeichnung/oderKartennummerOptional']='or number of card (optional)'; -$this->phrasen['zeitaufzeichnung/nameEingeben']='Enter name'; -$this->phrasen['zeitaufzeichnung/aktuelleZeitLaden']='Load current time'; -$this->phrasen['zeitaufzeichnung/alsEndzeitUebernehmen']='Transfer to endtime'; -$this->phrasen['zeitaufzeichnung/alsStartzeitUebernehmen']='Transfer to starttime'; -$this->phrasen['zeitaufzeichnung/uebersicht']='Projectoverview'; -$this->phrasen['zeitaufzeichnung/zeitraumAuffallendHoch']='Warning! Period entered is noticeably long. \nDo you want to save the dates anyway?'; -$this->phrasen['zeitaufzeichnung/bisDatumKleinerAlsVonDatum']='The \'To\' date may not be earlier than the \'From\' date.'; -$this->phrasen['zeitaufzeichnung/tagessumme']='Total day:'; -$this->phrasen['zeitaufzeichnung/wochensumme']='Total week:'; -$this->phrasen['zeitaufzeichnung/wochensummeEintraege']='Total week'; -$this->phrasen['zeitaufzeichnung/wochensummeArbeitszeit']='Total week working time'; -$this->phrasen['zeitaufzeichnung/xTageAnsicht']='%s days view'; -$this->phrasen['zeitaufzeichnung/endeXTageAnsicht']='End of %s days view'; -$this->phrasen['zeitaufzeichnung/alleAnzeigen']='Show all'; -$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/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:'; -$this->phrasen['zeitaufzeichnung/dienstreise']='Business Trip'; +phrasen['zeitaufzeichnung/zeitaufzeichnung']='Timesheet'; +$this->phrasen['zeitaufzeichnung/benutzerWurdeNichtGefunden']='User %s not found'; +$this->phrasen['zeitaufzeichnung/zeitaufzeichnungVon']='Timesheet for'; +$this->phrasen['zeitaufzeichnung/neu']='NEW'; +$this->phrasen['zeitaufzeichnung/projekt']='Project'; +$this->phrasen['zeitaufzeichnung/projektphase']='Projectphase'; +$this->phrasen['zeitaufzeichnung/keineAuswahl']='no selection'; +$this->phrasen['zeitaufzeichnung/aktivitaet']='Activity'; +$this->phrasen['zeitaufzeichnung/id']='ID'; +$this->phrasen['zeitaufzeichnung/user']='User'; +$this->phrasen['zeitaufzeichnung/start']='Start'; +$this->phrasen['zeitaufzeichnung/ende']='End'; +$this->phrasen['zeitaufzeichnung/dauer']='Length'; +$this->phrasen['zeitaufzeichnung/gesamtdauer']='Total time'; +$this->phrasen['zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet']='You are not currently assigned to any projects'; +$this->phrasen['zeitaufzeichnung/fehlerBeimErmittelnDerProjekte']='Error retrieving project data'; +$this->phrasen['zeitaufzeichnung/organisationseinheit1']='Organisation Unit 1'; +$this->phrasen['zeitaufzeichnung/organisationseinheit2']='Organisation Unit 2'; +$this->phrasen['zeitaufzeichnung/organisationseinheiten']='Organisation Unit'; +$this->phrasen['zeitaufzeichnung/oe']='OU'; +$this->phrasen['zeitaufzeichnung/service']='Service'; +$this->phrasen['zeitaufzeichnung/kunde']='Client'; +$this->phrasen['zeitaufzeichnung/alsNeuenEintragSpeichern']='Save as new'; +$this->phrasen['zeitaufzeichnung/kartennummer']='Number'; +$this->phrasen['zeitaufzeichnung/oderKartennummerOptional']='or number of card (optional)'; +$this->phrasen['zeitaufzeichnung/nameEingeben']='Enter name'; +$this->phrasen['zeitaufzeichnung/aktuelleZeitLaden']='Load current time'; +$this->phrasen['zeitaufzeichnung/alsEndzeitUebernehmen']='Transfer to endtime'; +$this->phrasen['zeitaufzeichnung/alsStartzeitUebernehmen']='Transfer to starttime'; +$this->phrasen['zeitaufzeichnung/uebersicht']='Projectoverview'; +$this->phrasen['zeitaufzeichnung/zeitraumAuffallendHoch']='Warning! Period entered is noticeably long. \nDo you want to save the dates anyway?'; +$this->phrasen['zeitaufzeichnung/bisDatumKleinerAlsVonDatum']='The \'To\' date may not be earlier than the \'From\' date.'; +$this->phrasen['zeitaufzeichnung/tagessumme']='Total day:'; +$this->phrasen['zeitaufzeichnung/wochensumme']='Total week:'; +$this->phrasen['zeitaufzeichnung/wochensummeEintraege']='Total week'; +$this->phrasen['zeitaufzeichnung/wochensummeArbeitszeit']='Total week working time'; +$this->phrasen['zeitaufzeichnung/xTageAnsicht']='%s days view'; +$this->phrasen['zeitaufzeichnung/endeXTageAnsicht']='End of %s days view'; +$this->phrasen['zeitaufzeichnung/alleAnzeigen']='Show all'; +$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/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/projektstunden']='Project hours'; +$this->phrasen['zeitaufzeichnung/taetigkeit']='Activity'; +$this->phrasen['zeitaufzeichnung/keineprojekte']='no projects exist'; +$this->phrasen['zeitaufzeichnung/summe']='Sum:'; +$this->phrasen['zeitaufzeichnung/dienstreise']='Business Trip'; diff --git a/locale/it-IT/zeitaufzeichnung.php b/locale/it-IT/zeitaufzeichnung.php index 04f222b4a..21e081de0 100644 --- a/locale/it-IT/zeitaufzeichnung.php +++ b/locale/it-IT/zeitaufzeichnung.php @@ -29,6 +29,7 @@ $this->phrasen['zeitaufzeichnung/organisationseinheit2']=''; $this->phrasen['zeitaufzeichnung/organisationseinheiten']=''; $this->phrasen['zeitaufzeichnung/pause']=''; $this->phrasen['zeitaufzeichnung/projekt']=''; +$this->phrasen['zeitaufzeichnung/projektphase']=''; $this->phrasen['zeitaufzeichnung/service']=''; $this->phrasen['zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet']=''; $this->phrasen['zeitaufzeichnung/start']=''; diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 1c95190fb..0b50d8920 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -3031,7 +3031,8 @@ if(!$result = @$db->db_query("SELECT stufe FROM public.tbl_dokumentstudiengang L } // Create TABLE public.tbl_variablenname -if(!@$db->db_query("SELECT 0 FROM public.tbl_variablenname WHERE 0 = 1")) { +if(!@$db->db_query("SELECT 0 FROM public.tbl_variablenname WHERE 0 = 1")) +{ $qry = ' CREATE TABLE public.tbl_variablenname ( @@ -3083,6 +3084,18 @@ if(!@$db->db_query("SELECT 0 FROM public.tbl_variablenname WHERE 0 = 1")) { echo '
Granted privileges to vilesci on public.tbl_variablenname'; } +// Add column projektphase_id to tbl_zeitaufzeichnung +if(!$result = @$db->db_query("SELECT projektphase_id FROM campus.tbl_zeitaufzeichnung LIMIT 1")) +{ + $qry = "ALTER TABLE campus.tbl_zeitaufzeichnung ADD COLUMN projektphase_id bigint; + ALTER TABLE campus.tbl_zeitaufzeichnung ADD CONSTRAINT fk_zeitaufzeichnung_projektphase FOREIGN KEY (projektphase_id) REFERENCES fue.tbl_projektphase (projektphase_id) ON DELETE RESTRICT ON UPDATE CASCADE;"; + + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitaufzeichnung: '.$db->db_last_error().'
'; + else + echo '
campus.tbl_zeitaufzeichnung: Spalte projektphase_id hinzugefuegt'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

';