Zeiterfassung Anpassungen
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
class LoggingCommunication extends mfBaseModel
|
||||
{
|
||||
private $user;
|
||||
private $editor;
|
||||
private $creator;
|
||||
|
||||
|
||||
|
||||
public function getProperty($name)
|
||||
{
|
||||
if ($this->$name == null) {
|
||||
|
||||
if (!$this->id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($name == "creator") {
|
||||
$this->creator = mfValuecache::singleton()->get("Worker-id-" . $this->create_by);
|
||||
if ($this->creator === null) {
|
||||
$this->creator = new User($this->create_by);
|
||||
if ($this->creator->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator);
|
||||
}
|
||||
}
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
if ($name == "editor") {
|
||||
$this->editor = mfValuecache::singleton()->get("Worker-id-" . $this->edit_by);
|
||||
if ($this->editor === null) {
|
||||
$this->editor = new User($this->edit_by);
|
||||
if ($this->editor->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->edit_by, $this->editor);
|
||||
}
|
||||
}
|
||||
return $this->editor;
|
||||
}
|
||||
|
||||
$classname = ucfirst($name);
|
||||
$idfield = $name . "_id";
|
||||
$this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield);
|
||||
if (!$this->$name) {
|
||||
$this->$name = new $classname($this->$idfield);
|
||||
}
|
||||
|
||||
if ($this->$name->id) {
|
||||
mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name);
|
||||
return $this->$name;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
class LoggingCommunicationController extends mfBaseController
|
||||
{
|
||||
|
||||
protected function init()
|
||||
{
|
||||
$this->needlogin = true;
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
$this->me = $me;
|
||||
$this->layout()->set("me", $me);
|
||||
|
||||
if (!$me->is(["Admin"])) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
}
|
||||
|
||||
protected function indexAction()
|
||||
{
|
||||
|
||||
$this->layout()->setTemplate("LoggingCommunication/Index");
|
||||
$loggingcommunications = LoggingCommunicationModel::getAll();
|
||||
$this->layout()->set("loggingcommunications", $loggingcommunications);
|
||||
|
||||
}
|
||||
|
||||
protected function addAction()
|
||||
{
|
||||
|
||||
$this->layout()->setTemplate("LoggingCommunication/Form");
|
||||
|
||||
}
|
||||
|
||||
protected function editAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
|
||||
if (!is_numeric($id) || !$id) {
|
||||
$this->layout()->setFlash("Logging nicht gefunden", "error");
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
$loggingcommunications = new LoggingCommunication($id);
|
||||
if ($loggingcommunications->id != $id) {
|
||||
$this->layout()->setFlash("Logging nicht gefunden", "error");
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
$this->layout()->set("loggingcommunications", $loggingcommunications);
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
protected function saveAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
$id = $r->id;
|
||||
//var_dump($r->get());exit;
|
||||
if (is_numeric($id) && $id > 0) {
|
||||
$mode = "edit";
|
||||
$loggingcommunications = new LoggingCommunication($id);
|
||||
if (!$loggingcommunications->id) {
|
||||
$this->layout()->setFlash("Logging nicht gefunden", "error");
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
} else {
|
||||
$mode = "add";
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['type'] = trim($r->type);
|
||||
$data['message'] = trim($r->message);
|
||||
$data['response'] = trim($r->response);
|
||||
|
||||
|
||||
if (!$data['type']) {
|
||||
$data['type']=NULL;
|
||||
}
|
||||
if (!$data['message']) {
|
||||
$data['message']=NULL;
|
||||
}
|
||||
if (!$data['response']) {
|
||||
$data['response']=NULL;
|
||||
}
|
||||
|
||||
|
||||
// var_dump($_FILES);
|
||||
// var_dump($upload);
|
||||
// exit;
|
||||
|
||||
|
||||
if ($mode == "edit") {
|
||||
$loggingcommunications->update($data);
|
||||
|
||||
} else {
|
||||
$loggingcommunications = LoggingCommunicationModel::create($data);
|
||||
}
|
||||
// var_dump($filestore);
|
||||
// exit;
|
||||
$id = $loggingcommunications->save();
|
||||
|
||||
if (!$id) {
|
||||
$this->layout()->setFlash("Logging konnte nicht angelegt werden", "error");
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
if ($mode == "edit") {
|
||||
$this->layout()->setFlash("Logging erfolgreich geändert", "success");
|
||||
} else if ($mode = "add") {
|
||||
$this->layout()->setFlash("Logging erfolgreich angelegt", "success");
|
||||
}
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
|
||||
protected function deleteAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
$loggingcommunications = new LoggingCommunication($id);
|
||||
if (!$loggingcommunications->id || $loggingcommunications->id != $id) {
|
||||
$this->layout()->setFlash("Logging nicht gefunden.", "error");
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
$loggingcommunications->delete();
|
||||
$this->redirect("LoggingCommunication");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
class LoggingCommunicationModel
|
||||
{
|
||||
private $type;
|
||||
private $recipient;
|
||||
private $message;
|
||||
private $response;
|
||||
private $create_by;
|
||||
private $edit_by;
|
||||
|
||||
|
||||
public static function find($data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static function create(array $data)
|
||||
{
|
||||
$model = new LoggingCommunication();
|
||||
|
||||
foreach ($data as $field => $value) {
|
||||
if (property_exists(get_called_class(), $field)) {
|
||||
if (substr($field, 0, 5) == "vlan_" && !$value) {
|
||||
$model->$field = null;
|
||||
continue;
|
||||
}
|
||||
$model->$field = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$me = mfValuecache::singleton()->get("me");
|
||||
if (!$me) {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
mfValuecache::singleton()->set("me", $me);
|
||||
}
|
||||
|
||||
if ($model->create_by === null) {
|
||||
$model->create_by = $me->id;
|
||||
}
|
||||
if ($model->edit_by === null) {
|
||||
$model->edit_by = $me->id;
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public static function getOne($id)
|
||||
{
|
||||
if (!is_numeric($id) || !$id) {
|
||||
throw new Exception("Invalid number", 400);
|
||||
}
|
||||
$item = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("LoggingCommunication", "*", "id=$id LIMIT 1");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new LoggingCommunication($data);
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
public static function getAll()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("LoggingCommunication", "*", "1=1");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new LoggingCommunication($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getFirst()
|
||||
{
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("LoggingCommunication", "*", "$where ");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new LoggingCommunication($data);
|
||||
if ($item->id) {
|
||||
return $item;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function search($filter)
|
||||
{
|
||||
$items = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("LoggingCommunication", "*", "$where");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new LoggingCommunication($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
private static function getSqlFilter($filter)
|
||||
{
|
||||
$where = "1=1 ";
|
||||
|
||||
//var_dump($filter);exit;
|
||||
if (array_key_exists("network_id", $filter)) {
|
||||
$networkid = $filter['network_id'];
|
||||
if (is_numeric($networkid)) {
|
||||
$where .= " AND network_id=$networkid";
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,13 +18,38 @@ class TimerecordingController extends mfBaseController
|
||||
|
||||
protected function indexAction()
|
||||
{
|
||||
$this->layout()->setTemplate("Timerecording/Index");
|
||||
$timerecordingCategoriess = TimerecordingCategoryModel::getAll();
|
||||
$this->layout()->set("timerecordingCategoriess", $timerecordingCategoriess);
|
||||
$timerecordings = TimerecordingModel::search(['user_id' => $this->me->id]);
|
||||
$this->layout()->set("timerecordings", $timerecordings);
|
||||
$this->layout()->setTemplate("Timerecording/Index");
|
||||
}
|
||||
|
||||
protected function apiAction()
|
||||
{
|
||||
$do = $this->request->do;
|
||||
$datatype = $this->request->datatype;
|
||||
$dataweek = $this->request->dataweek;
|
||||
$datamonth = $this->request->datamonth;
|
||||
|
||||
$data = [];
|
||||
|
||||
switch ($do) {
|
||||
case "getTimerecordings":
|
||||
$return = $this->getTimerecordingsApi($datatype, $dataweek, $datamonth);
|
||||
break;
|
||||
default:
|
||||
$return = false;
|
||||
}
|
||||
|
||||
if (!is_array($return) || !count($return)) {
|
||||
$data = ["status" => "error"];
|
||||
$this->returnJson($data);
|
||||
}
|
||||
$data['status'] = "OK";
|
||||
$data['result'] = $return;
|
||||
$this->returnJson($data);
|
||||
}
|
||||
|
||||
|
||||
protected function addAction()
|
||||
{
|
||||
$timerecordingCategoriess = TimerecordingCategoryModel::getAll();
|
||||
@@ -52,6 +77,22 @@ class TimerecordingController extends mfBaseController
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
protected function checkTimerecording($starttime, $endtime, $id = NULL)
|
||||
{
|
||||
$searchArray = ['user_id' => $this->me->id, 'starttime' => $starttime, 'endtime' => $endtime];
|
||||
if ($id) {
|
||||
$searchArray['id'] = $id;
|
||||
}
|
||||
$timerecordings = TimerecordingModel::search($searchArray);
|
||||
if ($timerecordings) {
|
||||
$result['state'] = "error";
|
||||
$result['error'] = "Zeitüberschneidung mit anderer Buchung";
|
||||
} else {
|
||||
$result['state'] = "success";
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function saveAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
@@ -68,6 +109,17 @@ class TimerecordingController extends mfBaseController
|
||||
$endtime = NULL;
|
||||
}
|
||||
|
||||
$result = $this->checkTimerecording($starttime, $endtime, $id);
|
||||
if ($result['state'] == "error") {
|
||||
if ($r->ajax == 1) {
|
||||
echo json_encode($result);
|
||||
die();
|
||||
}
|
||||
$this->layout()->setFlash($result['error'], "error");
|
||||
$this->redirect("Timerecording");
|
||||
|
||||
}
|
||||
|
||||
if (is_numeric($id) && $id > 0) {
|
||||
$mode = "edit";
|
||||
$timerecordings = new Timerecording($id);
|
||||
@@ -110,25 +162,204 @@ class TimerecordingController extends mfBaseController
|
||||
|
||||
} else {
|
||||
$timerecordings = TimerecordingModel::create($data);
|
||||
|
||||
}
|
||||
// var_dump($filestore);
|
||||
// exit;
|
||||
$id = $timerecordings->save();
|
||||
|
||||
if (!$id) {
|
||||
$this->layout()->setFlash("Buchung konnte nicht angelegt werden", "error");
|
||||
$message = "Buchung konnte nicht angelegt werden";
|
||||
if ($r->ajax == 1) {
|
||||
$result['state'] = "error";
|
||||
$result['error'] = $message;
|
||||
echo json_encode($result);
|
||||
die();
|
||||
}
|
||||
$this->layout()->setFlash($message, "error");
|
||||
$this->redirect("Timerecording");
|
||||
|
||||
}
|
||||
if ($id) {
|
||||
$timerecordingCategoriess = TimerecordingCategoryModel::search(['id' => $data['timerecordingCategory_id']]);
|
||||
if ($timerecordingCategoriess[0]->approval == "1") {
|
||||
$body = 'Beantrag von: ' . $this->me->name . '
|
||||
';
|
||||
$body .= 'Buchungsart: ' . $timerecordingCategoriess[0]->name . '
|
||||
';
|
||||
if ($timerecordingCategoriess[0]->hourday == "1") {
|
||||
$body .= 'von: ' . date("d.m.Y H:i", $data['start']) . ' bis: ' . date("H:i", $data['end']);
|
||||
} else if ($timerecordingCategoriess[0]->hourday == "2") {
|
||||
$body .= 'von: ' . date("d.m.Y", $data['start']) . ' bis: ' . date("d.m.Y", $data['end']);
|
||||
}
|
||||
$email = new Emailnotification();
|
||||
$email->setSubject('Antrag für ' . $timerecordingCategoriess[0]->name . ' erstellt');
|
||||
$email->setBody($body);
|
||||
$email->setFrom('zeiterfassung@xinon.at', 'Xinon Zeiterfassung');
|
||||
$email->setTo('daniel.spitzer@inode.at');
|
||||
$email->send();
|
||||
}
|
||||
}
|
||||
|
||||
if ($mode == "edit") {
|
||||
$this->layout()->setFlash("Buchung erfolgreich geändert", "success");
|
||||
$message = "Buchung erfolgreich geändert";
|
||||
} else if ($mode = "add") {
|
||||
$this->layout()->setFlash("Buchung erfolgreich angelegt", "success");
|
||||
$message = "Buchung erfolgreich angelegt";
|
||||
}
|
||||
if ($r->ajax == 1) {
|
||||
$result['state'] = "success";
|
||||
$result['message'] = "$message";
|
||||
echo json_encode($result);
|
||||
die();
|
||||
}
|
||||
$this->layout()->setFlash($message, "success");
|
||||
$this->redirect("Timerecording");
|
||||
}
|
||||
|
||||
|
||||
protected function getTimerecordingsApi($datatype, $dataweek, $datamonth)
|
||||
{
|
||||
$mustSeconds = 0;
|
||||
$isSeconds=0;
|
||||
$rows = [];
|
||||
$workinghours = TimerecordingEmployeeWorkingHourModel::search(['user_id' => $this->me->id]);
|
||||
$holidays= TimerecordingHolidayModel::getAll();
|
||||
foreach ($workinghours as $workinghour) {
|
||||
|
||||
$whstart = strtotime(date('Y-m-d', time()) . " " . $workinghour->start . ":00");
|
||||
$whend = strtotime(date('Y-m-d', time()) . " " . $workinghour->end . ":00");
|
||||
if (!$workingHours[$workinghour->day]) {
|
||||
$workingHours[$workinghour->day] = $whend - $whstart;
|
||||
} else {
|
||||
$workingHours[$workinghour->day] = $workingHours[$workinghour->day] + $whend - $whstart;
|
||||
}
|
||||
}
|
||||
foreach ($holidays as $holiday) {
|
||||
$holiDay[date('Y-m-d', $holiday->timestamp)] = $holiday->timestamp;
|
||||
}
|
||||
|
||||
if ($datatype == 1) {
|
||||
$kw = date('W', $dataweek);
|
||||
$year = date('Y', $dataweek);
|
||||
$timestamp_montag = strtotime("{$year}-W{$kw}");
|
||||
$timestamp_sonntag = strtotime("{$year}-W{$kw}-7");
|
||||
$timestamp_sonntag = strtotime(date("Y-m-d", $timestamp_sonntag) . ' 23:59:59');
|
||||
$searchArray = ['user_id' => $this->me->id, 'start' => $timestamp_montag, 'end' => $timestamp_sonntag];
|
||||
|
||||
$daycounter = '0';
|
||||
|
||||
$timestamp = $timestamp_montag;
|
||||
for ($i = 1; $i <= 7; $i++) {
|
||||
$dDate = date('Y-m-d', $timestamp);
|
||||
$dDay = date('w', $timestamp);
|
||||
if (!$holiDay[$dDate]) {
|
||||
$mustSeconds = $mustSeconds + $workingHours[$dDay];
|
||||
}
|
||||
|
||||
$timestamp = $timestamp + 86400;
|
||||
}
|
||||
} else if ($datatype == 2) {
|
||||
$firstdate = strtotime(date("Y-m-01", $datamonth));
|
||||
$lastdate = strtotime(date("Y-m-t", $datamonth));
|
||||
$daycount=date("t", $datamonth);
|
||||
$lastdate = strtotime(date("Y-m-d", $lastdate) . ' 23:59:59');
|
||||
$searchArray = ['user_id' => $this->me->id, 'start' => $firstdate, 'end' => $lastdate];
|
||||
$timestamp = $firstdate;
|
||||
|
||||
for ($i = 1; $i <= $daycount; $i++) {
|
||||
$dDate = date('Y-m-d', $timestamp);
|
||||
$dDay = date('w', $timestamp);
|
||||
if (!$holiDay[$dDate]) {
|
||||
$mustSeconds = $mustSeconds + $workingHours[$dDay];
|
||||
}
|
||||
|
||||
$timestamp = $timestamp + 86400;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
$daysgerm = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
|
||||
$timerecordingCategoriess = TimerecordingCategoryModel::getAll();
|
||||
$timerecordings = TimerecordingModel::search($searchArray);
|
||||
$responsecount = count($timerecordings);
|
||||
foreach ($timerecordings as $timerecording):
|
||||
$state = "";
|
||||
$enddate = "";
|
||||
$sum = "-";
|
||||
$day = "";
|
||||
$orderdate = $timerecording->start;
|
||||
if ($timerecording->timerecordingCategory->hourday == 1) {
|
||||
$date = date("d.m.Y", $timerecording->start);
|
||||
$datadate = date("Y-m-d", $timerecording->start);
|
||||
$start = date("H:i", $timerecording->start);
|
||||
$end = date("H:i", $timerecording->end);
|
||||
$seconds = $timerecording->end - $timerecording->start;
|
||||
$minutes = floor(($seconds % 3600) / 60);
|
||||
$hours = floor($seconds / 3600);
|
||||
$sum = sprintf("%02d", $hours) . ":" . sprintf("%02d", $minutes);
|
||||
$day = $daysgerm[date("w", $timerecording->start)];
|
||||
$isSeconds=$isSeconds+$seconds;
|
||||
} else if ($timerecording->timerecordingCategory->hourday == 2) {
|
||||
$date = date("d.m.", $timerecording->start) . " - " . $daysgerm[date("w", $timerecording->end)] . " " . date("d.m.Y", $timerecording->end);
|
||||
$datadate = date("Y-m-d", $timerecording->start);
|
||||
$enddate = date("Y-m-d", $timerecording->end);
|
||||
$start = "-";
|
||||
$end = "-";
|
||||
$day = $daysgerm[date("w", $timerecording->start)];
|
||||
// echo $enddate-$datadate."<br>";
|
||||
} else if ($timerecording->timerecordingCategory->hourday == 3 || $timerecording->timerecordingCategory->hourday == 4) {
|
||||
$date = date("d.m.Y", $timerecording->start);
|
||||
$datadate = date("Y-m-d", $timerecording->start);
|
||||
$start = "-";
|
||||
$end = "-";
|
||||
$day = $daysgerm[date("w", $timerecording->start)];
|
||||
}
|
||||
|
||||
if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 0) {
|
||||
$state = '<i class="fa-regular fa-clock mr-1"></i>';
|
||||
} else if ($timerecording->timerecordingCategory->approval == 1 && $timerecording->approved == 1) {
|
||||
$state = '<i class="fa-regular fa-circle-check mr-1"></i>';
|
||||
}
|
||||
$edit = "";
|
||||
if ($timerecording->completed == 0 && $timerecording->timerecordingCategory->only_admin == 0):
|
||||
if ($timerecording->approved == 0) :
|
||||
$edit = '<i class="far fa-edit edit-button" data-id="' . $timerecording->id . '"
|
||||
data-date="' . $datadate . '"
|
||||
data-category="' . $timerecording->timerecordingCategory->id . '"
|
||||
data-start="' . $start . '"
|
||||
data-end="' . $end . '"
|
||||
data-enddate="' . $enddate . '"
|
||||
data-commend="' . $timerecording->commend . '"
|
||||
title="Bearbeiten"></i>';
|
||||
else :
|
||||
$edit .= '<div class="edit-placeholder"></div>';
|
||||
endif;
|
||||
$edit .= '<i data-id="' . $timerecording->id . '" class="fas fa-trash text-danger delete-item" ></i>';
|
||||
endif;
|
||||
|
||||
$rows[] = array(
|
||||
'date' => array('date' => $state . $day . " " . $date, 'order' => $orderdate),
|
||||
'start' => array('start' => $start, 'order' => $start),
|
||||
'end' => array('end' => $end, 'order' => $end),
|
||||
'sum' => array('sum' => $sum, 'order' => $sum),
|
||||
'category' => array('category' => $timerecording->timerecordingCategory->name, 'order' => $timerecording->timerecordingCategory->name),
|
||||
'commend' => array('commend' => $timerecording->commend, 'order' => $timerecording->commend),
|
||||
'edit' => array('edit' => $edit, 'order' => $edit),
|
||||
);
|
||||
endforeach;
|
||||
$json['success'] = true;
|
||||
$json['time']['is'] = sprintf('%02dh:%02dm',floor($isSeconds / 3600 ),floor($isSeconds / 60 % 60));
|
||||
$json['time']['must'] = sprintf('%02dh:%02dm',floor($mustSeconds / 3600 ),floor($mustSeconds / 60 % 60));
|
||||
$json['data'] = $rows;
|
||||
$json['recordsFiltered'] = $responsecount;
|
||||
$json['recordsTotal'] = $responsecount;
|
||||
$json = json_encode($json);
|
||||
echo trim($json);
|
||||
die();
|
||||
}
|
||||
|
||||
protected function deleteAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
@@ -139,6 +370,9 @@ class TimerecordingController extends mfBaseController
|
||||
}
|
||||
|
||||
$timerecordings->delete();
|
||||
if ($this->request->ajax == 1) {
|
||||
die();
|
||||
}
|
||||
$this->redirect("Timerecording");
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ class TimerecordingModel
|
||||
private $commend;
|
||||
private $approved;
|
||||
private $completed;
|
||||
|
||||
|
||||
|
||||
public static function find($data)
|
||||
{
|
||||
@@ -78,6 +78,7 @@ class TimerecordingModel
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getAllPermits()
|
||||
{
|
||||
$items = [];
|
||||
@@ -140,8 +141,27 @@ class TimerecordingModel
|
||||
$where .= " AND user_id=$userid";
|
||||
}
|
||||
}
|
||||
if (array_key_exists("start", $filter) && array_key_exists("end", $filter)) {
|
||||
$start = $filter['start'];
|
||||
$end = $filter['end'];
|
||||
if (is_numeric($start) && is_numeric($end)) {
|
||||
$where .= " AND `start` > $start AND `start` < $end";
|
||||
}
|
||||
}
|
||||
if (array_key_exists("starttime", $filter) && array_key_exists("endtime", $filter)) {
|
||||
$starttime = $filter['starttime'];
|
||||
$endtime = $filter['endtime'];
|
||||
$id = $filter['id'];
|
||||
if (is_numeric($starttime) && is_numeric($endtime)) {
|
||||
$where .= " AND ((`start` <= $starttime AND `end` >= $starttime ) || (`start` >= $endtime AND `end` <= $endtime) || (`start` >= $starttime AND `end` >= $starttime AND `start` <= $endtime AND `end` <= $endtime))";
|
||||
if ($id && is_numeric($id)) {
|
||||
$where .= " AND `id` != $id";
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
}
|
||||
}
|
||||
//
|
||||
// var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
}
|
||||
|
||||
|
||||
@@ -119,10 +119,10 @@ class TimerecordingCategoryModel
|
||||
$where = "1=1 ";
|
||||
|
||||
//var_dump($filter);exit;
|
||||
if (array_key_exists("network_id", $filter)) {
|
||||
$networkid = $filter['network_id'];
|
||||
if (is_numeric($networkid)) {
|
||||
$where .= " AND network_id=$networkid";
|
||||
if (array_key_exists("id", $filter)) {
|
||||
$id = $filter['id'];
|
||||
if (is_numeric($id)) {
|
||||
$where .= " AND id=$id";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
class TimerecordingEmployee extends mfBaseModel
|
||||
{
|
||||
private $editor;
|
||||
private $creator;
|
||||
private $user;
|
||||
|
||||
|
||||
|
||||
public function getProperty($name)
|
||||
{
|
||||
if ($this->$name == null) {
|
||||
|
||||
if (!$this->id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($name == "creator") {
|
||||
$this->creator = mfValuecache::singleton()->get("Worker-id-" . $this->create_by);
|
||||
if ($this->creator === null) {
|
||||
$this->creator = new User($this->create_by);
|
||||
if ($this->creator->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator);
|
||||
}
|
||||
}
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
if ($name == "editor") {
|
||||
$this->editor = mfValuecache::singleton()->get("Worker-id-" . $this->edit_by);
|
||||
if ($this->editor === null) {
|
||||
$this->editor = new User($this->edit_by);
|
||||
if ($this->editor->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->edit_by, $this->editor);
|
||||
}
|
||||
}
|
||||
return $this->editor;
|
||||
}
|
||||
|
||||
$classname = ucfirst($name);
|
||||
$idfield = $name . "_id";
|
||||
$this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield);
|
||||
if (!$this->$name) {
|
||||
$this->$name = new $classname($this->$idfield);
|
||||
}
|
||||
|
||||
if ($this->$name->id) {
|
||||
mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name);
|
||||
return $this->$name;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
class TimerecordingEmployeeController extends mfBaseController
|
||||
{
|
||||
|
||||
protected function init()
|
||||
{
|
||||
$this->needlogin = true;
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
$this->me = $me;
|
||||
$this->layout()->set("me", $me);
|
||||
|
||||
if (!$me->can(["Fibu"])) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
}
|
||||
|
||||
protected function indexAction()
|
||||
{
|
||||
|
||||
$this->layout()->setTemplate("TimerecordingEmployee/Index");
|
||||
$timerecordingemployees = TimerecordingEmployeeModel::getAllArray();
|
||||
$timerecordingusers = UserModel::search(['employee' => 'true']);
|
||||
$timerecordingworkinghours = TimerecordingEmployeeWorkingHourModel::getAllArray();
|
||||
$this->layout()->set("timerecordingemployees", $timerecordingemployees);
|
||||
$this->layout()->set("timerecordingworkinghours", $timerecordingworkinghours);
|
||||
$this->layout()->set("timerecordingusers", $timerecordingusers);
|
||||
|
||||
}
|
||||
|
||||
protected function addAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
$userid = $this->request->userid;
|
||||
$days = TimerecordingEmployeeWorkingHourModel::$days_definition;
|
||||
$timerecordingworkinghours = TimerecordingEmployeeWorkingHourModel::search(['user_id' => $userid]);
|
||||
$this->layout()->set("days", $days);
|
||||
$this->layout()->set("timerecordingworkinghours", $timerecordingworkinghours);
|
||||
$this->layout()->setTemplate("TimerecordingEmployee/Form");
|
||||
}
|
||||
|
||||
protected function editAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
$userid = $this->request->userid;
|
||||
if (!is_numeric($id) || !$id) {
|
||||
|
||||
|
||||
} else {
|
||||
$timerecordingemployees = new TimerecordingEmployee($id);
|
||||
if ($timerecordingemployees->id != $id) {
|
||||
$this->layout()->setFlash("Personaladministration nicht gefunden", "error");
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
|
||||
$this->layout()->set("timerecordingemployees", $timerecordingemployees);
|
||||
}
|
||||
$timerecordinguser = UserModel::search(['worker_id' => $userid]);
|
||||
$this->layout()->set("timerecordinguser", $timerecordinguser);
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
protected function saveAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
$id = $r->id;
|
||||
//var_dump($r->get());exit;
|
||||
if (is_numeric($id) && $id > 0) {
|
||||
$mode = "edit";
|
||||
$timerecordingemployees = new TimerecordingEmployee($id);
|
||||
if (!$timerecordingemployees->id) {
|
||||
$this->layout()->setFlash("Personaladministration nicht gefunden", "error");
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
} else {
|
||||
$mode = "add";
|
||||
}
|
||||
|
||||
|
||||
TimerecordingEmployeeWorkingHourModel::deleteUserHours($r->user_id);
|
||||
if ($r->day) {
|
||||
foreach ($r->day as $key => $day) {
|
||||
unset($dataWorkHours);
|
||||
$dataWorkHours = [];
|
||||
$starttime = $r->timestart[$key];
|
||||
$endtime = $r->timeend[$key];
|
||||
|
||||
if ($starttime && $endtime) {
|
||||
$dataWorkHours['user_id'] = $r->user_id;
|
||||
$dataWorkHours['day'] = $day;
|
||||
$dataWorkHours['start'] = $starttime;
|
||||
$dataWorkHours['end'] = $endtime;
|
||||
$timerecordingemployeesworkinghours = TimerecordingEmployeeWorkingHourModel::create($dataWorkHours);
|
||||
$timerecordingemployeesworkinghours->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
$plushours = $r->plushours;
|
||||
$plushours = str_replace(',', '.', $plushours);
|
||||
if (is_numeric($plushours)) {
|
||||
$plushours = $plushours * 3600;
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['user_id'] = trim($r->user_id);
|
||||
$data['auto_workinghours'] = trim($r->auto_workinghours);
|
||||
$data['holidays'] = trim($r->holidays);
|
||||
$data['plushours'] = $plushours;
|
||||
|
||||
|
||||
if (!$data['user_id']) {
|
||||
$this->layout()->setFlash("Mitarbeiter darf nicht leer sein", "error");
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
if (!$data['auto_workinghours']) {
|
||||
$data['auto_workinghours'] = 0;
|
||||
}
|
||||
|
||||
|
||||
if ($mode == "edit") {
|
||||
$timerecordingemployees->update($data);
|
||||
|
||||
} else {
|
||||
$timerecordingemployees = TimerecordingEmployeeModel::create($data);
|
||||
}
|
||||
// var_dump($filestore);
|
||||
// exit;
|
||||
$id = $timerecordingemployees->save();
|
||||
|
||||
if (!$id) {
|
||||
$this->layout()->setFlash("Personaladministration konnte nicht angelegt werden", "error");
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
|
||||
if ($mode == "edit") {
|
||||
$this->layout()->setFlash("Personaladministration erfolgreich geändert", "success");
|
||||
} else if ($mode = "add") {
|
||||
$this->layout()->setFlash("Personaladministration erfolgreich angelegt", "success");
|
||||
}
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
|
||||
|
||||
protected function deleteAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
$timerecordingemployees = new TimerecordingEmployee($id);
|
||||
if (!$timerecordingemployees->id || $timerecordingemployees->id != $id) {
|
||||
$this->layout()->setFlash("Personaladministration nicht gefunden.", "error");
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
|
||||
$timerecordingemployees->delete();
|
||||
$this->redirect("TimerecordingEmployee");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
class TimerecordingEmployeeModel
|
||||
{
|
||||
private $user_id;
|
||||
private $auto_workinghours;
|
||||
private $holidays;
|
||||
private $plushours;
|
||||
|
||||
|
||||
public static function find($data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static function create(array $data)
|
||||
{
|
||||
$model = new TimerecordingEmployee();
|
||||
|
||||
foreach ($data as $field => $value) {
|
||||
if (property_exists(get_called_class(), $field)) {
|
||||
if (substr($field, 0, 5) == "vlan_" && !$value) {
|
||||
$model->$field = null;
|
||||
continue;
|
||||
}
|
||||
$model->$field = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$me = mfValuecache::singleton()->get("me");
|
||||
if (!$me) {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
mfValuecache::singleton()->set("me", $me);
|
||||
}
|
||||
|
||||
if ($model->create_by === null) {
|
||||
$model->create_by = $me->id;
|
||||
}
|
||||
if ($model->edit_by === null) {
|
||||
$model->edit_by = $me->id;
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public static function getOne($id)
|
||||
{
|
||||
if (!is_numeric($id) || !$id) {
|
||||
throw new Exception("Invalid number", 400);
|
||||
}
|
||||
$item = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployee", "*", "id=$id LIMIT 1");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new TimerecordingEmployee($data);
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
public static function getAll()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployee", "*", "1=1");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new TimerecordingEmployee($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getAllArray()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployee", "*", "1=1");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_array($res)) {
|
||||
$items[$data['user_id']] = $data;
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getFirst()
|
||||
{
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("TimerecordingEmployee", "*", "$where ");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new TimerecordingEmployee($data);
|
||||
if ($item->id) {
|
||||
return $item;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function search($filter)
|
||||
{
|
||||
$items = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("TimerecordingEmployee", "*", "$where");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new TimerecordingEmployee($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
private static function getSqlFilter($filter)
|
||||
{
|
||||
$where = "1=1 ";
|
||||
|
||||
//var_dump($filter);exit;
|
||||
if (array_key_exists("network_id", $filter)) {
|
||||
$networkid = $filter['network_id'];
|
||||
if (is_numeric($networkid)) {
|
||||
$where .= " AND network_id=$networkid";
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
class TimerecordingEmployeeWorkingHour extends mfBaseModel
|
||||
{
|
||||
private $editor;
|
||||
private $creator;
|
||||
private $user;
|
||||
|
||||
|
||||
|
||||
public function getProperty($name)
|
||||
{
|
||||
if ($this->$name == null) {
|
||||
|
||||
if (!$this->id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($name == "creator") {
|
||||
$this->creator = mfValuecache::singleton()->get("Worker-id-" . $this->create_by);
|
||||
if ($this->creator === null) {
|
||||
$this->creator = new User($this->create_by);
|
||||
if ($this->creator->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator);
|
||||
}
|
||||
}
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
if ($name == "editor") {
|
||||
$this->editor = mfValuecache::singleton()->get("Worker-id-" . $this->edit_by);
|
||||
if ($this->editor === null) {
|
||||
$this->editor = new User($this->edit_by);
|
||||
if ($this->editor->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->edit_by, $this->editor);
|
||||
}
|
||||
}
|
||||
return $this->editor;
|
||||
}
|
||||
|
||||
$classname = ucfirst($name);
|
||||
$idfield = $name . "_id";
|
||||
$this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield);
|
||||
if (!$this->$name) {
|
||||
$this->$name = new $classname($this->$idfield);
|
||||
}
|
||||
|
||||
if ($this->$name->id) {
|
||||
mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name);
|
||||
return $this->$name;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
}
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
class TimerecordingEmployeeWorkingHourModel
|
||||
{
|
||||
private $user_id;
|
||||
private $day;
|
||||
private $start;
|
||||
private $end;
|
||||
public static $days_definition = array(1 => "Montag", 2 => "Dienstag", 3 => "Mittwoch", 4 => "Donnerstag", 5 => "Freitag", 6 => "Samstag", 0 => "Sonntag");
|
||||
public static $days_short = array(0 => "So", 1 => "Mo", 2 => "Di", 3 => "Mi", 4 => "Do", 5 => "Fr", 6 => "Sa");
|
||||
|
||||
public static function cleardays($days)
|
||||
{
|
||||
$days_short = TimerecordingEmployeeWorkingHourModel::$days_short;
|
||||
foreach ($days_short as $day_short) {
|
||||
$days = str_replace($day_short . " - " . $day_short, $day_short, $days);
|
||||
}
|
||||
return $days;
|
||||
}
|
||||
|
||||
public static function find($data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static function create(array $data)
|
||||
{
|
||||
$model = new TimerecordingEmployeeWorkingHour();
|
||||
|
||||
foreach ($data as $field => $value) {
|
||||
if (property_exists(get_called_class(), $field)) {
|
||||
if (substr($field, 0, 5) == "vlan_" && !$value) {
|
||||
$model->$field = null;
|
||||
continue;
|
||||
}
|
||||
$model->$field = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$me = mfValuecache::singleton()->get("me");
|
||||
if (!$me) {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
mfValuecache::singleton()->set("me", $me);
|
||||
}
|
||||
|
||||
if ($model->create_by === null) {
|
||||
$model->create_by = $me->id;
|
||||
}
|
||||
if ($model->edit_by === null) {
|
||||
$model->edit_by = $me->id;
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public static function getOne($id)
|
||||
{
|
||||
if (!is_numeric($id) || !$id) {
|
||||
throw new Exception("Invalid number", 400);
|
||||
}
|
||||
$item = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployeeWorkingHour", "*", "id=$id LIMIT 1");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new TimerecordingEmployeeWorkingHour($data);
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
public static function getAll()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployeeWorkingHour", "*", "1=1");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new TimerecordingEmployeeWorkingHour($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getAllArray()
|
||||
{
|
||||
$items = [];
|
||||
$daysshort = TimerecordingEmployeeWorkingHourModel::$days_short;
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("TimerecordingEmployeeWorkingHour", "*", "1=1 ORDER by `user_id`,`day`");
|
||||
if ($db->num_rows($res)) {
|
||||
$olduser = 0;
|
||||
$counter = 0;
|
||||
$oldend = "";
|
||||
$oldstart = "";
|
||||
$oldday = "";
|
||||
$datetimetext = "";
|
||||
$secondcounter = 0;
|
||||
|
||||
while ($data = $db->fetch_array($res)) {
|
||||
if ($olduser != $data['user_id']) {
|
||||
if ($counter > 0) {
|
||||
$secondcounter = 0;
|
||||
$datetimetext .= " - " . $daysshort[$oldday] . " " . $oldstart . " - " . $oldend;
|
||||
$datetimetext = TimerecordingEmployeeWorkingHourModel::cleardays($datetimetext);
|
||||
$items[$olduser]['datetimetext'] = $datetimetext;
|
||||
}
|
||||
$datetimetext = "";
|
||||
unset($oldstart);
|
||||
unset($oldend);
|
||||
unset($oldday);
|
||||
$items[$data['user_id']] = $data;
|
||||
}
|
||||
$secondcounter = $secondcounter + strtotime(date("Y-m-d " . $data['end'] . ":00")) - strtotime(date("Y-m-d " . $data['start'] . ":00"));
|
||||
|
||||
if (!$datetimetext) {
|
||||
$datetimetext = $daysshort[$data['day']];
|
||||
}
|
||||
echo $oldstart . $data['start'];
|
||||
if (($oldstart != $data['start'] || $oldend != $data['end']) && $oldend) {
|
||||
$datetimetext .= " - " . $daysshort[$oldday] . " " . $oldstart . " - " . $oldend;
|
||||
$datetimetext .= "<br> " . $daysshort[$data['day']];
|
||||
}
|
||||
|
||||
$items[$data['user_id']]['datetimetext'] = $datetimetext;
|
||||
$items[$data['user_id']]['secondcounter'] = $secondcounter;
|
||||
$olduser = $data['user_id'];
|
||||
$oldstart = $data['start'];
|
||||
$oldend = $data['end'];
|
||||
$oldday = $data['day'];
|
||||
$counter++;
|
||||
}
|
||||
$datetimetext .= " - " . $daysshort[$oldday] . " " . $oldstart . " - " . $oldend;
|
||||
$datetimetext = TimerecordingEmployeeWorkingHourModel::cleardays($datetimetext);
|
||||
$items[$olduser]['datetimetext'] = $datetimetext;
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function deleteUserHours($userid)
|
||||
{
|
||||
$db = FronkDB::singleton();
|
||||
$sql = "DELETE FROM `TimerecordingEmployeeWorkingHour` WHERE `user_id`='" . $userid . "'";
|
||||
$res = $db->query($sql);
|
||||
}
|
||||
|
||||
public static function getFirst()
|
||||
{
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("TimerecordingEmployeeWorkingHour", "*", "$where ");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new TimerecordingEmployeeWorkingHour($data);
|
||||
if ($item->id) {
|
||||
return $item;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function search($filter)
|
||||
{
|
||||
$items = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("TimerecordingEmployeeWorkingHour", "*", "$where ORDER by `day`,`start`");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new TimerecordingEmployeeWorkingHour($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
private static function getSqlFilter($filter)
|
||||
{
|
||||
$where = "1=1 ";
|
||||
|
||||
if (array_key_exists("user_id", $filter)) {
|
||||
$userid = $filter['user_id'];
|
||||
if (is_numeric($userid)) {
|
||||
$where .= " AND user_id=$userid";
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -27,7 +27,7 @@ class TimerecordingHolidayController extends mfBaseController
|
||||
|
||||
protected function addAction()
|
||||
{
|
||||
|
||||
|
||||
$this->layout()->setTemplate("TimerecordingHoliday/Form");
|
||||
|
||||
}
|
||||
@@ -66,11 +66,18 @@ class TimerecordingHolidayController extends mfBaseController
|
||||
} else {
|
||||
$mode = "add";
|
||||
}
|
||||
if ($r->timestamp) {
|
||||
$timestamp = strtotime($r->timestamp . " 00:00:00");
|
||||
if ($timestamp< 1577833200)
|
||||
{
|
||||
$timestamp="";
|
||||
}
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['timestamp'] = trim($r->timestamp);
|
||||
$data['timestamp'] = trim($timestamp);
|
||||
$data['description'] = trim($r->description);
|
||||
|
||||
|
||||
|
||||
if (!$data['timestamp']) {
|
||||
$this->layout()->setFlash("Datum darf nicht leer sein", "error");
|
||||
@@ -80,7 +87,7 @@ class TimerecordingHolidayController extends mfBaseController
|
||||
$this->layout()->setFlash("Name darf nicht leer sein", "error");
|
||||
$this->redirect("TimerecordingHoliday");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// var_dump($_FILES);
|
||||
// var_dump($upload);
|
||||
|
||||
Reference in New Issue
Block a user