From a6a0c80d88fea7003333380010374850af49da0f Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Jan 2024 23:34:17 +0000 Subject: [PATCH] update --- Controller/ApiController.php | 28 +++++++++++---------- Controller/BackendController.php | 21 ++++++++++++---- Controller/TimerecordingController.php | 2 +- Models/ClockingType.php | 2 ++ Models/PermissionCategory.php | 2 +- Models/Session.php | 2 +- Models/SessionMapper.php | 5 ++-- Theme/Backend/Lang/de.lang.php | 1 + Theme/Backend/Lang/en.lang.php | 1 + Theme/Backend/dashboard.tpl.php | 33 ++++++++++++++----------- Theme/Backend/private-dashboard.tpl.php | 2 +- Theme/Backend/private-session.tpl.php | 2 +- Theme/Timeterminal/overview.tpl.php | 2 +- info.json | 1 - tests/Controller/ApiControllerTest.php | 1 + 15 files changed, 64 insertions(+), 41 deletions(-) diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 16c93a0..80ad967 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -94,27 +94,29 @@ final class ApiController extends Controller ->limit(1) ->execute(); + if ($employee->id === 0) { + return null; + } + $type = $request->getDataInt('type') ?? ClockingType::OFFICE; $status = $request->getDataInt('status') ?? ClockingStatus::START; - if ($employee->id === 0) { + if (!ClockingStatus::isValidValue($status)) { return null; } $session = new Session($employee); $session->setType(ClockingType::isValidValue($type) ? $type : ClockingType::OFFICE); - if (ClockingStatus::isValidValue($status)) { - // a custom datetime can only be set if the user is allowed to create a session for a foreign account or if the session is a vacation - $dt = $request->hasData('account') || $type === ClockingType::VACATION - ? ($request->getDataDateTime('datetime') ?? new \DateTime('now')) - : new \DateTime('now'); + // a custom datetime can only be set if the user is allowed to create a session for a foreign account or if the session is a vacation + $dt = $request->hasData('account') || $type === ClockingType::VACATION + ? ($request->getDataDateTime('datetime') ?? new \DateTime('now')) + : new \DateTime('now'); - $element = new SessionElement($session, $dt); - $element->setStatus($status); + $element = new SessionElement($session, $dt); + $element->setStatus($status); - $session->addSessionElement($element); - } + $session->addSessionElement($element); return $session; } @@ -147,7 +149,9 @@ final class ApiController extends Controller return; } - if ($request->hasData('account') && ((int) $request->getData('account')) !== $request->header->account && !$this->app->accountManager->get($request->header->account)->hasPermission( + if ($request->hasData('account') + && $request->getDataInt('account') !== $request->header->account + && !$this->app->accountManager->get($request->header->account)->hasPermission( PermissionType::CREATE, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::SESSION_ELEMENT_FOREIGN )) { $response->header->status = RequestStatusCode::R_403; @@ -205,8 +209,6 @@ final class ApiController extends Controller */ private function createSessionElementFromRequest(RequestAbstract $request) : ?SessionElement { - $account = $request->getDataInt('account') ?? $request->header->account; - /** @var Session $session */ $session = SessionMapper::get()->where('id', (int) $request->getData('session'))->execute(); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 0cd38ac..60a5f64 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -46,14 +46,25 @@ final class BackendController extends Controller implements DashboardElementInte $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1006301001, $request, $response); /** @var \Modules\HumanResourceTimeRecording\Models\Session[] $list */ - $list = SessionMapper::getLastSessionsFromAllEmployees(); - $view->data['sessions'] = $list; + $list = SessionMapper::getLastSessionsFromAllEmployees(); + + $sessions = []; + foreach ($list as $session) { + $sessions[$session->employee->id] = $session; + } + + $view->data['sessions'] = $sessions; + + $view->data['employees'] = EmployeeMapper::getAll() + ->with('profile') + ->with('profile/account') + ->execute(); return $view; } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -99,7 +110,7 @@ final class BackendController extends Controller implements DashboardElementInte } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -136,7 +147,7 @@ final class BackendController extends Controller implements DashboardElementInte } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response diff --git a/Controller/TimerecordingController.php b/Controller/TimerecordingController.php index f3710c1..a219055 100755 --- a/Controller/TimerecordingController.php +++ b/Controller/TimerecordingController.php @@ -32,7 +32,7 @@ use phpOMS\Views\View; final class TimerecordingController extends Controller { /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response diff --git a/Models/ClockingType.php b/Models/ClockingType.php index efcd605..77b9ab5 100755 --- a/Models/ClockingType.php +++ b/Models/ClockingType.php @@ -37,4 +37,6 @@ abstract class ClockingType extends Enum public const SICK = 5; public const ON_THE_MOVE = 6; + + public const NO_DATA = -1; } diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index 1e81e1a..0c80440 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -17,7 +17,7 @@ namespace Modules\HumanResourceTimeRecording\Models; use phpOMS\Stdlib\Base\Enum; /** - * Permision state enum. + * Permission category enum. * * @package Modules\HumanResourceTimeRecording\Models * @license OMS License 2.0 diff --git a/Models/Session.php b/Models/Session.php index f2c7a10..58c6876 100755 --- a/Models/Session.php +++ b/Models/Session.php @@ -65,7 +65,7 @@ class Session implements \JsonSerializable * @var int * @since 1.0.0 */ - public int $type = ClockingType::OFFICE; + public int $type = ClockingType::NO_DATA; /** * Session elements. diff --git a/Models/SessionMapper.php b/Models/SessionMapper.php index d80c266..83efe97 100755 --- a/Models/SessionMapper.php +++ b/Models/SessionMapper.php @@ -115,11 +115,12 @@ final class SessionMapper extends DataMapperFactory ->groupBy(self::TABLE . '.hr_timerecording_session_employee'); $query = self::getQuery(); - $query->innerJoin($join, 'tm') + $query->leftJoin($join, 'tm') ->on(self::TABLE . '_d1.hr_timerecording_session_employee', '=', 'tm.hr_timerecording_session_employee') ->andOn(self::TABLE . '_d1.hr_timerecording_session_start', '=', 'tm.maxDate'); - return self::getAll()->execute($query); + return self::getAll() + ->execute($query); } /** diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 59dc406..c74baa1 100755 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -24,6 +24,7 @@ return ['HumanResourceTimeRecording' => [ 'CT4' => 'Urlaub', 'CT5' => 'Krank', 'CT6' => 'Unterwegs', + 'CT-1' => 'Keine Daten', 'D0' => 'Sonntag', 'D1' => 'Montag', 'D2' => 'Dienstag', diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 32283b3..79457f0 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -24,6 +24,7 @@ return ['HumanResourceTimeRecording' => [ 'CT4' => 'Vacation', 'CT5' => 'Sick', 'CT6' => 'On the move', + 'CT-1' => 'No data', 'D0' => 'Sunday', 'D1' => 'Monday', 'D2' => 'Tuesday', diff --git a/Theme/Backend/dashboard.tpl.php b/Theme/Backend/dashboard.tpl.php index 75f5159..206c5b2 100755 --- a/Theme/Backend/dashboard.tpl.php +++ b/Theme/Backend/dashboard.tpl.php @@ -12,36 +12,41 @@ */ declare(strict_types=1); -$sessions = $this->data['sessions']; +use Modules\HumanResourceTimeRecording\Models\ClockingType; + +$date = new \DateTime('now'); echo $this->data['nav']->render(); ?>
-
- - +
+
getHtml('Status'); ?>download
+
+
getHtml('Recordings'); ?>download
- + data['employees'] as $employee) : + $session = $this->data['sessions'][$employee->id] ?? null; + ?> -
getHtml('Date'); ?> getHtml('Type'); ?> - getHtml('Employee'); ?> + getHtml('Employee'); ?> getHtml('Start'); ?> getHtml('Break'); ?> getHtml('End'); ?> getHtml('Total'); ?>
getStart()->format('Y-m-d'); ?> - getHtml('CT' . $session->getType()); ?> + getStart()->format('Y-m-d') ?? $date->format('Y-m-d H:i:s'); ?> + getHtml('CT' . ($session?->type ?? ClockingType::NO_DATA)); ?> - printHtml($session->getEmployee()->profile->account->name1); ?>, - printHtml($session->getEmployee()->profile->account->name2); ?> - getStart()->format('H:i:s'); ?> - getBreak() / 3600); ?>h getBreak() / 60) % 60); ?>m - getEnd() !== null ? $session->getEnd()->format('H:i') : ''; ?> - getBusy() / 3600); ?>h getBusy() / 60) % 60); ?>m + printHtml($employee->profile->account->name1); ?>, + printHtml($employee->profile->account->name2); ?> + getStart()->format('H:i:s'); ?> + getBreak() / 3600)) . 'h' : ''; ?> getBreak() / 60) % 60) . 'm' : ''; ?> + getEnd() !== null ? $session->getEnd()->format('H:i') : ''; ?> + getBusy() / 3600)) . 'h' : ''; ?> getBusy() / 60) % 60) . 'm' : ''; ?>
diff --git a/Theme/Backend/private-dashboard.tpl.php b/Theme/Backend/private-dashboard.tpl.php index 7cccdc8..42a93fa 100755 --- a/Theme/Backend/private-dashboard.tpl.php +++ b/Theme/Backend/private-dashboard.tpl.php @@ -113,7 +113,7 @@ echo $this->data['nav']->render(); ?>
getHtml('Recordings'); ?>download
- +
getHtml('Date'); ?> diff --git a/Theme/Backend/private-session.tpl.php b/Theme/Backend/private-session.tpl.php index 8fdb4b9..6e13f58 100755 --- a/Theme/Backend/private-session.tpl.php +++ b/Theme/Backend/private-session.tpl.php @@ -21,7 +21,7 @@ echo $this->data['nav']->render(); ?>
- +
diff --git a/Theme/Timeterminal/overview.tpl.php b/Theme/Timeterminal/overview.tpl.php index 548b24b..b699750 100755 --- a/Theme/Timeterminal/overview.tpl.php +++ b/Theme/Timeterminal/overview.tpl.php @@ -81,7 +81,7 @@ echo $this->data['nav']->render(); ?>
-
start->format('Y-m-d'); ?>download
+
diff --git a/info.json b/info.json index ae1bf73..0fe3c31 100755 --- a/info.json +++ b/info.json @@ -14,7 +14,6 @@ "name": "Jingga", "website": "jingga.app" }, - "description": "The administration module.", "directory": "HumanResourceTimeRecording", "dependencies": { "Admin": "1.0.0", diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php index 70f756c..7065374 100755 --- a/tests/Controller/ApiControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -61,6 +61,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase $this->app = new class() extends ApplicationAbstract { protected string $appName = 'Api'; + protected int $appId = 1; };
getHtml('Recordings'); ?>download