bug fixes / dbmapper fixes

This commit is contained in:
Dennis Eichhorn 2021-12-19 20:20:39 +01:00
parent 155311f8de
commit bd0e9a9276
7 changed files with 52 additions and 56 deletions

View File

@ -1,4 +1,17 @@
<?php declare(strict_types=1); <?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package Template
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
/** /**
* Orange Management * Orange Management
* *

View File

@ -14,7 +14,6 @@ declare(strict_types=1);
namespace Modules\HumanResourceTimeRecording\Controller; namespace Modules\HumanResourceTimeRecording\Controller;
use DateTime;
use Modules\HumanResourceManagement\Models\EmployeeMapper; use Modules\HumanResourceManagement\Models\EmployeeMapper;
use Modules\HumanResourceManagement\Models\NullEmployee; use Modules\HumanResourceManagement\Models\NullEmployee;
use Modules\HumanResourceTimeRecording\Models\ClockingStatus; use Modules\HumanResourceTimeRecording\Models\ClockingStatus;
@ -26,7 +25,6 @@ use Modules\HumanResourceTimeRecording\Models\SessionElement;
use Modules\HumanResourceTimeRecording\Models\SessionElementMapper; use Modules\HumanResourceTimeRecording\Models\SessionElementMapper;
use Modules\HumanResourceTimeRecording\Models\SessionMapper; use Modules\HumanResourceTimeRecording\Models\SessionMapper;
use phpOMS\Account\PermissionType; use phpOMS\Account\PermissionType;
use phpOMS\DataStorage\Database\RelationType;
use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\NotificationLevel; use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
@ -92,9 +90,15 @@ final class ApiController extends Controller
{ {
$account = (int) ($request->getData('account') ?? $request->header->account); $account = (int) ($request->getData('account') ?? $request->header->account);
$employee = EmployeeMapper::getFromAccount($account)->limit(1)->execute(); $employee = EmployeeMapper::get()
$type = (int) ($request->getData('type') ?? ClockingType::OFFICE); ->with('profile')
$status = (int) ($request->getData('status') ?? ClockingStatus::START); ->with('profile/account')
->where('profile/account', $account)
->limit(1)
->execute();
$type = (int) ($request->getData('type') ?? ClockingType::OFFICE);
$status = (int) ($request->getData('status') ?? ClockingStatus::START);
if ($employee instanceof NullEmployee) { if ($employee instanceof NullEmployee) {
return null; return null;

View File

@ -19,6 +19,7 @@ use Modules\HumanResourceManagement\Models\EmployeeMapper;
use Modules\HumanResourceTimeRecording\Models\NullSession; use Modules\HumanResourceTimeRecording\Models\NullSession;
use Modules\HumanResourceTimeRecording\Models\SessionMapper; use Modules\HumanResourceTimeRecording\Models\SessionMapper;
use phpOMS\Contract\RenderableInterface; use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
use phpOMS\Stdlib\Base\SmartDateTime; use phpOMS\Stdlib\Base\SmartDateTime;
@ -68,7 +69,13 @@ final class BackendController extends Controller implements DashboardElementInte
$view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Backend/private-dashboard'); $view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Backend/private-dashboard');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006303001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006303001, $request, $response));
$employee = EmployeeMapper::getFromAccount($request->header->account)->limit(1)->execute()->getId(); $employee = EmployeeMapper::get()
->with('profile')
->with('profile/account')
->where('profile/account', $request->header->account)
->execute()
->getId();
$lastOpenSession = SessionMapper::getMostPlausibleOpenSessionForEmployee($employee); $lastOpenSession = SessionMapper::getMostPlausibleOpenSessionForEmployee($employee);
$start = new SmartDateTime('now'); $start = new SmartDateTime('now');
@ -76,7 +83,11 @@ final class BackendController extends Controller implements DashboardElementInte
$limit = $start->getEndOfMonth(); $limit = $start->getEndOfMonth();
$limit->smartModify(0, -2, 0); $limit->smartModify(0, -2, 0);
$list = SessionMapper::getSessionListForEmployee($employee, $start, 0); $list = SessionMapper::getAll()
->where('employee', $employee)
->where('createdAt', $start->format('Y-m-d H:i:s'), '<=')
->sort('id', OrderType::DESC)
->execute();
$view->addData('sessions', $list); $view->addData('sessions', $list);
$view->addData('lastSession', $lastOpenSession); $view->addData('lastSession', $lastOpenSession);
@ -104,7 +115,12 @@ final class BackendController extends Controller implements DashboardElementInte
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006303001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006303001, $request, $response));
$session = SessionMapper::get()->where('id', (int) $request->getData('id'))->execute(); $session = SessionMapper::get()->where('id', (int) $request->getData('id'))->execute();
$employee = EmployeeMapper::getFromAccount($request->header->account)->getId(); $employee = EmployeeMapper::get()
->with('profile')
->with('profile/account')
->where('profile/account', $request->header->account)
->execute()
->getId();
if ($session->getEmployee()->getId() !== $employee) { if ($session->getEmployee()->getId() !== $employee) {
$view->addData('session', new NullSession()); $view->addData('session', new NullSession());

View File

@ -16,6 +16,7 @@ namespace Modules\HumanResourceTimeRecording\Controller;
use Modules\HumanResourceTimeRecording\Models\SessionMapper; use Modules\HumanResourceTimeRecording\Models\SessionMapper;
use phpOMS\Contract\RenderableInterface; use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
use phpOMS\Views\View; use phpOMS\Views\View;
@ -48,7 +49,7 @@ final class TimerecordingController extends Controller
$view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Timeterminal/overview'); $view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Timeterminal/overview');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006301001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006301001, $request, $response));
$list = SessionMapper::getNewest(50); $list = SessionMapper::getAll()->sort('id', OrderType::DESC)->limit(50)->execute();
$view->addData('sessions', $list); $view->addData('sessions', $list);
return $view; return $view;

View File

@ -47,8 +47,8 @@ final class SessionElementMapper extends DataMapperFactory
*/ */
public const BELONGS_TO = [ public const BELONGS_TO = [
'session' => [ 'session' => [
'mapper' => SessionMapper::class, 'mapper' => SessionMapper::class,
'external' => 'hr_timerecording_session_element_session', 'external' => 'hr_timerecording_session_element_session',
], ],
]; ];

View File

@ -52,10 +52,10 @@ final class SessionMapper extends DataMapperFactory
*/ */
public const HAS_MANY = [ public const HAS_MANY = [
'sessionElements' => [ 'sessionElements' => [
'mapper' => SessionElementMapper::class, 'mapper' => SessionElementMapper::class,
'table' => 'hr_timerecording_session_element', 'table' => 'hr_timerecording_session_element',
'self' => 'hr_timerecording_session_element_session', 'self' => 'hr_timerecording_session_element_session',
'external' => null, 'external' => null,
], ],
]; ];
@ -67,8 +67,8 @@ final class SessionMapper extends DataMapperFactory
*/ */
public const BELONGS_TO = [ public const BELONGS_TO = [
'employee' => [ 'employee' => [
'mapper' => EmployeeMapper::class, 'mapper' => EmployeeMapper::class,
'external' => 'hr_timerecording_session_employee', 'external' => 'hr_timerecording_session_employee',
], ],
]; ];
@ -160,41 +160,4 @@ final class SessionMapper extends DataMapperFactory
return null; return null;
} }
/**
* Get sessions for employee
*
* @param int $employee Employee id
* @param \DateTime $start Start
* @param int $offset Offset
* @param int $limit Result limit
*
* @return Session[]
*
* @since 1.0.0
*/
public static function getSessionListForEmployee(int $employee, \DateTime $start, int $offset = 0, int $limit = 50) : array
{
$query = new Builder(self::$db);
$query = self::getQuery($query)
->where(self::TABLE . '_d1.hr_timerecording_session_employee', '=', $employee)
->andWhere(self::TABLE . '_d1.' . self::CREATED_AT, '<=', $start->format('Y-m-d H:i:s'))
->orderBy(self::TABLE . '_d1.' . self::CREATED_AT, 'DESC')
->offset($offset)
->limit($limit);
$sth = self::$db->con->prepare($query->toSql());
$sth->execute();
$results = $sth->fetchAll(\PDO::FETCH_ASSOC);
$objs = self::populateIterable($results === false ? [] : $results);
foreach ($objs as $obj) {
self::fillRelations($obj, RelationType::ALL, 6);
}
self::clear();
return $objs;
}
} }

View File

@ -49,7 +49,6 @@ final class SessionMapperTest extends \PHPUnit\Framework\TestCase
self::assertNull(SessionMapper::getMostPlausibleOpenSessionForEmployee(9999)); self::assertNull(SessionMapper::getMostPlausibleOpenSessionForEmployee(9999));
// @todo implement // @todo implement
//self::assertGreaterThan(0, \count(SessionMapper::getSessionListForEmployee(1, (new \DateTime('now'))->modify('+1 month'))));
// self::assertGreaterThan(0, SessionMapper::getMostPlausibleOpenSessionForEmployee(1)->getId()); // self::assertGreaterThan(0, SessionMapper::getMostPlausibleOpenSessionForEmployee(1)->getId());
} }
} }