diff --git a/Application/Timerecording/Application.php b/Application/Timerecording/Application.php index 53a9ba3..62dd069 100755 --- a/Application/Timerecording/Application.php +++ b/Application/Timerecording/Application.php @@ -31,7 +31,7 @@ use phpOMS\DataStorage\Cookie\CookieJar; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; use phpOMS\DataStorage\Database\DatabasePool; use phpOMS\DataStorage\Database\DatabaseStatus; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\DataStorage\Session\HttpSession; use phpOMS\Dispatcher\Dispatcher; use phpOMS\Event\EventManager; @@ -159,13 +159,13 @@ final class Application /** @var ConnectionAbstract $con */ $con = $this->app->dbPool->get(); - DataMapperAbstract::setConnection($con); + DataMapperFactory::db($con); $this->app->cachePool = new CachePool(); $this->app->appSettings = new CoreSettings(); $this->app->eventManager = new EventManager($this->app->dispatcher); $this->app->accountManager = new AccountManager($this->app->sessionManager); - $this->app->l11nServer = LocalizationMapper::get(1); + $this->app->l11nServer = LocalizationMapper::get()->where('id', 1)->execute(); $this->app->orgId = $this->getApplicationOrganization($request, $this->config); $pageView->setData('orgId', $this->app->orgId); @@ -435,8 +435,8 @@ final class Application */ private function createDefaultPageView(HttpRequest $request, HttpResponse $response, TimerecordingView $pageView) : void { - $pageView->setOrganizations(UnitMapper::getAll()); - $pageView->setProfile(ProfileMapper::getFor($request->header->account, 'account')); + $pageView->setOrganizations(UnitMapper::getAll()->execute()); + $pageView->setProfile(ProfileMapper::get()->where('account', $request->header->account)->execute()); $pageView->setData('nav', $this->getNavigation($request, $response)); $pageView->setTemplate('/Web/Timerecording/index'); diff --git a/Controller/ApiController.php b/Controller/ApiController.php index fe2d045..2b68e03 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -92,7 +92,7 @@ final class ApiController extends Controller { $account = (int) ($request->getData('account') ?? $request->header->account); - $employee = EmployeeMapper::getFromAccount($account); + $employee = EmployeeMapper::getFromAccount($account)->limit(1)->execute(); $type = (int) ($request->getData('type') ?? ClockingType::OFFICE); $status = (int) ($request->getData('status') ?? ClockingStatus::START); @@ -168,9 +168,9 @@ final class ApiController extends Controller } if ($element->getStatus() === ClockingStatus::END) { - $session = SessionMapper::get((int) $request->getData('session')); + $session = SessionMapper::get()->where('id', (int) $request->getData('session'))->execute(); $session->addSessionElement($element); - SessionMapper::update($session, depth: 1); + SessionMapper::update()->execute($session); } $this->createModel($request->header->account, $element, SessionElementMapper::class, 'element', $request->getOrigin()); @@ -211,7 +211,7 @@ final class ApiController extends Controller $account = (int) ($request->getData('account') ?? $request->header->account); /** @var Session $session */ - $session = SessionMapper::get((int) $request->getData('session'), RelationType::ALL, 6); + $session = SessionMapper::get()->where('id', (int) $request->getData('session'))->execute(); // cannot create session element for none existing session if ($session === null || $session instanceof NullSession) { diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 4e8a1cd..3f53d3e 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -68,7 +68,7 @@ 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)->getId(); + $employee = EmployeeMapper::getFromAccount($request->header->account)->limit(1)->execute()->getId(); $lastOpenSession = SessionMapper::getMostPlausibleOpenSessionForEmployee($employee); $start = new SmartDateTime('now'); @@ -103,7 +103,7 @@ final class BackendController extends Controller implements DashboardElementInte $view->setTemplate('/Modules/HumanResourceTimeRecording/Theme/Backend/private-session'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1006303001, $request, $response)); - $session = SessionMapper::get((int) $request->getData('id')); + $session = SessionMapper::get()->where('id', (int) $request->getData('id'))->execute(); $employee = EmployeeMapper::getFromAccount($request->header->account)->getId(); if ($session->getEmployee()->getId() !== $employee) { diff --git a/Models/SessionElementMapper.php b/Models/SessionElementMapper.php index 60fd9df..da816cc 100755 --- a/Models/SessionElementMapper.php +++ b/Models/SessionElementMapper.php @@ -14,7 +14,7 @@ declare(strict_types=1); namespace Modules\HumanResourceTimeRecording\Models; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Mapper class. @@ -24,7 +24,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract; * @link https://orange-management.org * @since 1.0.0 */ -final class SessionElementMapper extends DataMapperAbstract +final class SessionElementMapper extends DataMapperFactory { /** * Columns. @@ -32,7 +32,7 @@ final class SessionElementMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ 'hr_timerecording_session_element_id' => ['name' => 'hr_timerecording_session_element_id', 'type' => 'int', 'internal' => 'id'], 'hr_timerecording_session_element_status' => ['name' => 'hr_timerecording_session_element_status', 'type' => 'int', 'internal' => 'status'], 'hr_timerecording_session_element_dt' => ['name' => 'hr_timerecording_session_element_dt', 'type' => 'DateTime', 'internal' => 'datetime'], @@ -45,7 +45,7 @@ final class SessionElementMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $belongsTo = [ + public const BELONGS_TO = [ 'session' => [ 'mapper' => SessionMapper::class, 'external' => 'hr_timerecording_session_element_session', @@ -58,7 +58,7 @@ final class SessionElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'hr_timerecording_session_element'; + public const TABLE = 'hr_timerecording_session_element'; /** * Primary field name. @@ -66,5 +66,5 @@ final class SessionElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'hr_timerecording_session_element_id'; + public const PRIMARYFIELD ='hr_timerecording_session_element_id'; } diff --git a/Models/SessionMapper.php b/Models/SessionMapper.php index 7d45021..2c46caf 100755 --- a/Models/SessionMapper.php +++ b/Models/SessionMapper.php @@ -15,9 +15,8 @@ declare(strict_types=1); namespace Modules\HumanResourceTimeRecording\Models; use Modules\HumanResourceManagement\Models\EmployeeMapper; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\DataStorage\Database\Query\Builder; -use phpOMS\DataStorage\Database\RelationType; use phpOMS\Stdlib\Base\SmartDateTime; /** @@ -28,7 +27,7 @@ use phpOMS\Stdlib\Base\SmartDateTime; * @link https://orange-management.org * @since 1.0.0 */ -final class SessionMapper extends DataMapperAbstract +final class SessionMapper extends DataMapperFactory { /** * Columns. @@ -36,7 +35,7 @@ final class SessionMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ 'hr_timerecording_session_id' => ['name' => 'hr_timerecording_session_id', 'type' => 'int', 'internal' => 'id'], 'hr_timerecording_session_type' => ['name' => 'hr_timerecording_session_type', 'type' => 'int', 'internal' => 'type'], 'hr_timerecording_session_start' => ['name' => 'hr_timerecording_session_start', 'type' => 'DateTime', 'internal' => 'start'], @@ -51,7 +50,7 @@ final class SessionMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $hasMany = [ + public const HAS_MANY = [ 'sessionElements' => [ 'mapper' => SessionElementMapper::class, 'table' => 'hr_timerecording_session_element', @@ -66,7 +65,7 @@ final class SessionMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $belongsTo = [ + public const BELONGS_TO = [ 'employee' => [ 'mapper' => EmployeeMapper::class, 'external' => 'hr_timerecording_session_employee', @@ -79,7 +78,7 @@ final class SessionMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'hr_timerecording_session'; + public const TABLE = 'hr_timerecording_session'; /** * Primary field name. @@ -87,7 +86,7 @@ final class SessionMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'hr_timerecording_session_id'; + public const PRIMARYFIELD ='hr_timerecording_session_id'; /** * Created at column @@ -95,7 +94,7 @@ final class SessionMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $createdAt = 'hr_timerecording_session_start'; + public const CREATED_AT = 'hr_timerecording_session_start'; /** * Get last sessions from all employees @@ -111,18 +110,17 @@ final class SessionMapper extends DataMapperAbstract public static function getLastSessionsFromAllEmployees(\DateTime $dt = null) : array { $join = new Builder(self::$db); - $join->select(self::$table . '.hr_timerecording_session_employee') + $join->select(self::TABLE . '.hr_timerecording_session_employee') ->selectAs('MAX(hr_timerecording_session_start)', 'maxDate') - ->from(self::$table) - ->groupBy(self::$table . '.hr_timerecording_session_employee'); + ->from(self::TABLE) + ->groupBy(self::TABLE . '.hr_timerecording_session_employee'); - $depth = 3; $query = self::getQuery(); $query->innerJoin($join, 'tm') - ->on(self::$table . '_d' . $depth . '.hr_timerecording_session_employee', '=', 'tm.hr_timerecording_session_employee') - ->andOn(self::$table . '_d' . $depth . '.hr_timerecording_session_start', '=', 'tm.maxDate'); + ->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::getAllByQuery($query, RelationType::ALL, $depth); + return self::getAll()->execute($query); } /** @@ -143,15 +141,14 @@ final class SessionMapper extends DataMapperAbstract $dt = new SmartDateTime('now'); $dt->smartModify(0, 0, -32); - $depth = 3; $query = self::getQuery(); - $query->where(self::$table . '_d' . $depth . '.hr_timerecording_session_employee', '=', $employee) - ->andWhere(self::$table . '_d' . $depth . '.hr_timerecording_session_start', '>', $dt) - ->orderBy(self::$table . '_d' . $depth . '.hr_timerecording_session_start', 'DESC') + $query->where(self::TABLE . '_d1.hr_timerecording_session_employee', '=', $employee) + ->andWhere(self::TABLE . '_d1.hr_timerecording_session_start', '>', $dt) + ->orderBy(self::TABLE . '_d1.hr_timerecording_session_start', 'DESC') ->limit(1); /** @var Session[] $sessions */ - $sessions = self::getAllByQuery($query, RelationType::ALL, $depth); + $sessions = self::getAll()->execute($query); if (empty($sessions)) { return null; @@ -178,12 +175,11 @@ final class SessionMapper extends DataMapperAbstract */ public static function getSessionListForEmployee(int $employee, \DateTime $start, int $offset = 0, int $limit = 50) : array { - $depth = 3; $query = new Builder(self::$db); $query = self::getQuery($query) - ->where(self::$table . '_d' . $depth . '.hr_timerecording_session_employee', '=', $employee) - ->andWhere(self::$table . '_d' . $depth . '.' . self::$createdAt, '<=', $start->format('Y-m-d H:i:s')) - ->orderBy(self::$table . '_d' . $depth . '.' . self::$createdAt, 'DESC') + ->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); diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index f5fc99c..252a62f 100755 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -12,7 +12,7 @@ require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/Autoloader.php'; use phpOMS\DataStorage\Database\DatabasePool; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\DataStorage\Session\HttpSession; $CONFIG = [ @@ -329,7 +329,7 @@ $GLOBALS['dbpool']->create('delete', $CONFIG['db']['core']['masters']['delete']) $GLOBALS['dbpool']->create('insert', $CONFIG['db']['core']['masters']['insert']); $GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']); -DataMapperAbstract::setConnection($GLOBALS['dbpool']->get()); +DataMapperFactory::db($GLOBALS['dbpool']->get()); $GLOBALS['frameworkpath'] = '/phpOMS/'; diff --git a/tests/Models/SessionElementMapperTest.php b/tests/Models/SessionElementMapperTest.php index 042daa8..9c5546d 100755 --- a/tests/Models/SessionElementMapperTest.php +++ b/tests/Models/SessionElementMapperTest.php @@ -32,11 +32,11 @@ final class SessionElementMapperTest extends \PHPUnit\Framework\TestCase { $element = new SessionElement(new Session(new NullEmployee(1)), new \DateTime('now')); - $id = SessionElementMapper::create($element); + $id = SessionElementMapper::create()->execute($element); self::assertGreaterThan(0, $element->getId()); self::assertEquals($id, $element->getId()); - $elementR = SessionElementMapper::get($element->getId()); + $elementR = SessionElementMapper::get()->with('session')->with('employee')->where('id', $element->getId())->execute(); self::assertEquals($element->datetime->format('Y-m-d'), $elementR->datetime->format('Y-m-d')); self::assertEquals($element->getStatus(), $elementR->getStatus()); self::assertEquals($element->session->employee->getId(), $elementR->session->employee->getId()); diff --git a/tests/Models/SessionMapperTest.php b/tests/Models/SessionMapperTest.php index 45201aa..11d83f7 100755 --- a/tests/Models/SessionMapperTest.php +++ b/tests/Models/SessionMapperTest.php @@ -38,11 +38,11 @@ final class SessionMapperTest extends \PHPUnit\Framework\TestCase $element->setStatus(ClockingStatus::START); $session->addSessionElement($element); - $id = SessionMapper::create($session); + $id = SessionMapper::create()->execute($session); self::assertGreaterThan(0, $session->getId()); self::assertEquals($id, $session->getId()); - $sessionR = SessionMapper::get($session->getId()); + $sessionR = SessionMapper::get()->where('id', $session->getId())->execute(); self::assertEquals($session->getType(), $sessionR->getType()); self::assertGreaterThan(0, \count(SessionMapper::getLastSessionsFromAllEmployees()));