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
*

View File

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

View File

@ -19,6 +19,7 @@ use Modules\HumanResourceManagement\Models\EmployeeMapper;
use Modules\HumanResourceTimeRecording\Models\NullSession;
use Modules\HumanResourceTimeRecording\Models\SessionMapper;
use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
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->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);
$start = new SmartDateTime('now');
@ -76,7 +83,11 @@ final class BackendController extends Controller implements DashboardElementInte
$limit = $start->getEndOfMonth();
$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('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));
$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) {
$view->addData('session', new NullSession());

View File

@ -16,6 +16,7 @@ namespace Modules\HumanResourceTimeRecording\Controller;
use Modules\HumanResourceTimeRecording\Models\SessionMapper;
use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Views\View;
@ -48,7 +49,7 @@ final class TimerecordingController extends Controller
$view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Timeterminal/overview');
$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);
return $view;

View File

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

View File

@ -52,10 +52,10 @@ final class SessionMapper extends DataMapperFactory
*/
public const HAS_MANY = [
'sessionElements' => [
'mapper' => SessionElementMapper::class,
'table' => 'hr_timerecording_session_element',
'self' => 'hr_timerecording_session_element_session',
'external' => null,
'mapper' => SessionElementMapper::class,
'table' => 'hr_timerecording_session_element',
'self' => 'hr_timerecording_session_element_session',
'external' => null,
],
];
@ -67,8 +67,8 @@ final class SessionMapper extends DataMapperFactory
*/
public const BELONGS_TO = [
'employee' => [
'mapper' => EmployeeMapper::class,
'external' => 'hr_timerecording_session_employee',
'mapper' => EmployeeMapper::class,
'external' => 'hr_timerecording_session_employee',
],
];
@ -160,41 +160,4 @@ final class SessionMapper extends DataMapperFactory
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));
// @todo implement
//self::assertGreaterThan(0, \count(SessionMapper::getSessionListForEmployee(1, (new \DateTime('now'))->modify('+1 month'))));
// self::assertGreaterThan(0, SessionMapper::getMostPlausibleOpenSessionForEmployee(1)->getId());
}
}