From 733386df2d4fb0ee840146e5f7a12ceaeaed2bbe Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Mon, 28 Aug 2023 22:06:34 +0000 Subject: [PATCH] update --- Admin/Install/Navigation.install.json | 17 +-- Admin/Install/db.json | 89 ++++++++++- Admin/Routes/Web/Backend.php | 15 +- Controller/ApiDriverController.php | 78 +++++++++- Controller/ApiVehicleController.php | 186 +++++++++++++++++++++-- Controller/BackendController.php | 43 +++++- Models/Driver/DriverInspection.php | 78 ---------- Models/Driver/DriverInspectionMapper.php | 8 +- Models/Driver/DriverInspectionStatus.php | 36 ----- Models/Driver/DriverMapper.php | 1 + Models/Inspection.php | 14 +- Models/InspectionMapper.php | 4 +- Models/Milage.php | 75 +++++++++ Models/MilageMapper.php | 91 +++++++++++ Theme/Backend/driver-list.tpl.php | 2 +- Theme/Backend/vehicle-profile.tpl.php | 6 +- tests/Autoloader.php | 4 +- 17 files changed, 585 insertions(+), 162 deletions(-) delete mode 100644 Models/Driver/DriverInspection.php delete mode 100644 Models/Driver/DriverInspectionStatus.php create mode 100644 Models/Milage.php create mode 100644 Models/MilageMapper.php diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index bb2027b..355e599 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -140,7 +140,7 @@ "type": 3, "subtype": 1, "name": "VehicleInspectionTypes", - "uri": "{/base}/fleet/vehicle/inspection/type/list?{?}", + "uri": "{/base}/fleet/inspection/type/list?{?}", "target": "self", "icon": null, "order": 5, @@ -148,21 +148,6 @@ "permission": { "permission": 4, "category": null, "element": null }, "parent": 1003504001, "children": [] - }, - { - "id": 1003504301, - "pid": "/fleet/inspection", - "type": 3, - "subtype": 1, - "name": "DriverInspectionTypes", - "uri": "{/base}/fleet/driver/inspection/type/list?{?}", - "target": "self", - "icon": null, - "order": 10, - "from": "FleetManagement", - "permission": { "permission": 4, "category": null, "element": null }, - "parent": 1003504001, - "children": [] } ] }, diff --git a/Admin/Install/db.json b/Admin/Install/db.json index e89eecf..25133e0 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -225,7 +225,7 @@ }, "fleetmgmt_vehicle_inspection_interval": { "name": "fleetmgmt_vehicle_inspection_interval", - "type": "TINYINT(3)", + "type": "INT", "null": false }, "fleetmgmt_vehicle_inspection_next": { @@ -234,12 +234,25 @@ "null": true, "default": null }, + "fleetmgmt_vehicle_inspection_date": { + "name": "fleetmgmt_vehicle_inspection_date", + "type": "DATETIME", + "null": true, + "default": null + }, "fleetmgmt_vehicle_inspection_type": { "name": "fleetmgmt_vehicle_inspection_type", "type": "INT", "null": false, "foreignTable": "fleetmgmt_inspection_type", "foreignKey": "fleetmgmt_inspection_type_id" + }, + "fleetmgmt_vehicle_inspection_vehicle": { + "name": "fleetmgmt_vehicle_inspection_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" } } }, @@ -338,7 +351,7 @@ }, "fleetmgmt_driver_inspection_interval": { "name": "fleetmgmt_driver_inspection_interval", - "type": "TINYINT(3)", + "type": "INT", "null": false }, "fleetmgmt_driver_inspection_next": { @@ -347,12 +360,25 @@ "null": true, "default": null }, + "fleetmgmt_driver_inspection_date": { + "name": "fleetmgmt_driver_inspection_date", + "type": "DATETIME", + "null": true, + "default": null + }, "fleetmgmt_driver_inspection_type": { "name": "fleetmgmt_driver_inspection_type", "type": "INT", "null": false, "foreignTable": "fleetmgmt_driver_inspection_type", "foreignKey": "fleetmgmt_driver_inspection_type_id" + }, + "fleetmgmt_driver_inspection_driver": { + "name": "fleetmgmt_driver_inspection_driver", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" } } }, @@ -957,5 +983,64 @@ "foreignKey": "editor_doc_id" } } + }, + "fleetmgmt_milage": { + "name": "fleetmgmt_milage", + "fields": { + "fleetmgmt_milage_id": { + "name": "fleetmgmt_milage_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_milage_status": { + "name": "fleetmgmt_milage_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_milage_description": { + "name": "fleetmgmt_milage_description", + "type": "TEXT", + "null": false + }, + "fleetmgmt_milage_start": { + "name": "fleetmgmt_milage_start", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_milage_end": { + "name": "fleetmgmt_milage_end", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_milage_milage": { + "name": "fleetmgmt_milage_milage", + "type": "INT", + "null": false + }, + "fleetmgmt_milage_fuel": { + "name": "fleetmgmt_milage_fuel", + "type": "INT", + "null": false + }, + "fleetmgmt_milage_driver": { + "name": "fleetmgmt_milage_driver", + "type": "INT", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_milage_vehicle": { + "name": "fleetmgmt_milage_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + } + } } } \ No newline at end of file diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 75728b0..50cca4e 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -134,7 +134,18 @@ return [ '^.*/fleet/inspection/list.*$' => [ [ - 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementVehicleList', + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/inspection/type/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionTypeList', 'verb' => RouteVerb::GET, 'permission' => [ 'module' => BackendController::NAME, @@ -145,7 +156,7 @@ return [ ], '^.*/fleet/inspection/create.*$' => [ [ - 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementVehicleCreate', + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionCreate', 'verb' => RouteVerb::GET, 'permission' => [ 'module' => BackendController::NAME, diff --git a/Controller/ApiDriverController.php b/Controller/ApiDriverController.php index c7cf6dd..12d97fa 100644 --- a/Controller/ApiDriverController.php +++ b/Controller/ApiDriverController.php @@ -18,8 +18,11 @@ use Modules\Admin\Models\NullAccount; use Modules\FleetManagement\Models\Driver\DriverInspectionTypeL11nMapper; use Modules\FleetManagement\Models\Driver\DriverInspectionTypeMapper; use Modules\FleetManagement\Models\Driver\Driver; +use Modules\FleetManagement\Models\Driver\DriverInspectionMapper; use Modules\FleetManagement\Models\Driver\DriverMapper; use Modules\FleetManagement\Models\Driver\DriverStatus; +use Modules\FleetManagement\Models\Inspection; +use Modules\FleetManagement\Models\InspectionStatus; use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\NullMedia; @@ -29,6 +32,7 @@ use Modules\Media\Models\ReferenceMapper; use phpOMS\Localization\BaseStringL11n; use phpOMS\Localization\BaseStringL11nType; use phpOMS\Localization\ISO639x1Enum; +use phpOMS\Localization\NullBaseStringL11nType; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; @@ -44,6 +48,76 @@ use phpOMS\Message\ResponseAbstract; */ final class ApiDriverController extends Controller { + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiInspectionCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateInspectionCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\DriverInspection $inspection */ + $inspection = $this->createInspectionFromRequest($request); + $this->createModel($request->header->account, $inspection, DriverInspectionMapper::class, 'inspection', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Inspection Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createInspectionFromRequest(RequestAbstract $request) : Inspection + { + $inspection = new Inspection(); + $inspection->reference = (int) $request->getData('ref'); + $inspection->description = $request->getDataString('description') ?? ''; + $inspection->status = (int) $request->getDataInt('status') ?? InspectionStatus::TODO; + $inspection->next = $request->getDataDateTime('next') ?? null; + $inspection->date = $request->getDataDateTime('date') ?? null; + $inspection->interval = $request->getDataInt('interval') ?? 0; + $inspection->type = new NullBaseStringL11nType((int) $request->getData('type')); + + return $inspection; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateInspectionCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['ref'] = !$request->hasData('ref'))) { + return $val; + } + + return []; + } + /** * Api method to create a driver * @@ -92,7 +166,7 @@ final class ApiDriverController extends Controller { $driver = new Driver(); $driver->account = new NullAccount($request->getDataInt('account') ?? 1); - $driver->status = (int) ($request->getDataInt('status') ?? DriverStatus::INACTIVE); + $driver->status = $request->getDataInt('status') ?? DriverStatus::INACTIVE; return $driver; } @@ -267,7 +341,7 @@ final class ApiDriverController extends Controller virtualPath: $path, pathSettings: PathSettings::FILE_PATH, hasAccountRelation: false, - readContent: (bool) ($request->getData('parse_content') ?? false) + readContent: $request->getDataBool('parse_content') ?? false ); $collection = null; diff --git a/Controller/ApiVehicleController.php b/Controller/ApiVehicleController.php index 411dc17..54fc498 100755 --- a/Controller/ApiVehicleController.php +++ b/Controller/ApiVehicleController.php @@ -15,10 +15,16 @@ declare(strict_types=1); namespace Modules\FleetManagement\Controller; use Modules\Admin\Models\NullAccount; +use Modules\FleetManagement\Models\Driver\NullDriver; +use Modules\FleetManagement\Models\InspectionStatus; use Modules\FleetManagement\Models\FuelTypeL11nMapper; use Modules\FleetManagement\Models\FuelTypeMapper; +use Modules\FleetManagement\Models\Inspection; +use Modules\FleetManagement\Models\InspectionMapper; use Modules\FleetManagement\Models\InspectionTypeL11nMapper; use Modules\FleetManagement\Models\InspectionTypeMapper; +use Modules\FleetManagement\Models\Milage; +use Modules\FleetManagement\Models\MilageMapper; use Modules\FleetManagement\Models\Vehicle; use Modules\FleetManagement\Models\VehicleMapper; use Modules\FleetManagement\Models\VehicleStatus; @@ -49,6 +55,149 @@ use phpOMS\Message\ResponseAbstract; */ final class ApiVehicleController extends Controller { + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMilageCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateMilageCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Milage $milage */ + $milage = $this->createMilageFromRequest($request); + $this->createModel($request->header->account, $milage, MilageMapper::class, 'milage', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $milage); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Milage Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createMilageFromRequest(RequestAbstract $request) : Milage + { + $milage = new Milage(); + $milage->vehicle = (int) $request->getData('vehicle'); + $milage->driver = $request->hasData('driver') ? new NullDriver((int) $request->getData('driver')) : null; + $milage->milage = $request->getDataInt('milage') ?? 0; + $milage->status = $request->getDataInt('status') ?? 0; + $milage->fuelUsage = $request->getDataInt('fuel') ?? 0; + $milage->description = $request->getDataString('description') ?? ''; + $milage->from = $request->getDataString('from') ?? ''; + $milage->to = $request->getDataString('to') ?? ''; + $milage->start = $request->getDataDateTime('start'); + $milage->end = $request->getDataDateTime('end'); + + return $milage; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateMilageCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['vehicle'] = !$request->hasData('vehicle'))) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiInspectionCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateInspectionCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Inspection $inspection */ + $inspection = $this->createInspectionFromRequest($request); + $this->createModel($request->header->account, $inspection, InspectionMapper::class, 'inspection', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Inspection Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createInspectionFromRequest(RequestAbstract $request) : Inspection + { + $inspection = new Inspection(); + $inspection->reference = (int) $request->getData('ref'); + $inspection->description = $request->getDataString('description') ?? ''; + $inspection->status = (int) $request->getDataInt('status') ?? InspectionStatus::TODO; + $inspection->next = $request->getDataDateTime('next') ?? null; + $inspection->date = $request->getDataDateTime('date') ?? null; + $inspection->interval = $request->getDataInt('interval') ?? 0; + $inspection->type = new NullBaseStringL11nType((int) $request->getData('type')); + + return $inspection; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateInspectionCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['ref'] = !$request->hasData('ref'))) { + return $val; + } + + return []; + } + /** * Api method to create a vehicle * @@ -372,7 +521,7 @@ final class ApiVehicleController extends Controller $vehicle->info = $request->getDataString('info') ?? ''; $vehicle->type = new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)); $vehicle->fuelType = new NullBaseStringL11nType((int) ($request->getDataInt('fuel') ?? 0)); - $vehicle->status = (int) ($request->getDataInt('status') ?? VehicleStatus::INACTIVE); + $vehicle->status = $request->getDataInt('status') ?? VehicleStatus::INACTIVE; $vehicle->unit = $request->getDataInt('unit') ?? $this->app->unitId; return $vehicle; @@ -549,7 +698,7 @@ final class ApiVehicleController extends Controller virtualPath: $path, pathSettings: PathSettings::FILE_PATH, hasAccountRelation: false, - readContent: (bool) ($request->getData('parse_content') ?? false) + readContent: $request->getDataBool('parse_content') ?? false ); $collection = null; @@ -853,7 +1002,7 @@ final class ApiVehicleController extends Controller } /** - * Api method to update note + * Api method to update Note * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -865,17 +1014,28 @@ final class ApiVehicleController extends Controller * * @since 1.0.0 */ - public function apiNoteEdit(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { - $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocUpdate($request, $response, $data); + } - if ($response->header->status !== RequestStatusCode::R_200) { - return; - } - - $responseData = $response->get($request->uri->__toString()); - if (!\is_array($responseData)) { - return; - } + /** + * Api method to delete Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocDelete($request, $response, $data); } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 30a5ab4..ab03c04 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -16,8 +16,10 @@ namespace Modules\FleetManagement\Controller; use Modules\Admin\Models\LocalizationMapper; use Modules\Admin\Models\SettingsEnum; -use Modules\FleetManagement\Models\VehicleAttributeTypeL11nMapper; -use Modules\FleetManagement\Models\VehicleAttributeTypeMapper; +use Modules\FleetManagement\Models\InspectionMapper; +use Modules\FleetManagement\Models\Attribute\VehicleAttributeTypeL11nMapper; +use Modules\FleetManagement\Models\Attribute\VehicleAttributeTypeMapper; +use Modules\FleetManagement\Models\Driver\DriverMapper; use Modules\FleetManagement\Models\VehicleMapper; use Modules\FleetManagement\Models\VehicleTypeMapper; use Modules\Media\Models\MediaMapper; @@ -129,6 +131,34 @@ final class BackendController extends Controller return $view; } + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementInspectionList(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/inspection-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = InspectionMapper::getAll() + ->sort('id', 'DESC') + ->execute(); + + $view->data['inspectionss'] = $list; + + return $view; + } + /** * Routing end-point for application behaviour. * @@ -236,6 +266,15 @@ final class BackendController extends Controller $view->data['vehicle'] = $vehicle; + $inspections = InspectionMapper::getAll() + ->with('type') + ->with('type/l11n') + ->where('reference', $vehicle->id) + ->where('type/l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['inspections'] = $inspections; + $query = new Builder($this->app->dbPool->get()); $results = $query->selectAs(VehicleMapper::HAS_MANY['files']['external'], 'file') ->from(VehicleMapper::TABLE) diff --git a/Models/Driver/DriverInspection.php b/Models/Driver/DriverInspection.php deleted file mode 100644 index 39e5d9a..0000000 --- a/Models/Driver/DriverInspection.php +++ /dev/null @@ -1,78 +0,0 @@ -type = new BaseStringL11nType(); - } - - /** - * {@inheritdoc} - */ - public function toArray() : array - { - return [ - 'id' => $this->id, - ]; - } - - /** - * {@inheritdoc} - */ - public function jsonSerialize() : mixed - { - return $this->toArray(); - } - - use \Modules\Media\Models\MediaListTrait; -} diff --git a/Models/Driver/DriverInspectionMapper.php b/Models/Driver/DriverInspectionMapper.php index b7a04ba..5b7ef65 100644 --- a/Models/Driver/DriverInspectionMapper.php +++ b/Models/Driver/DriverInspectionMapper.php @@ -14,8 +14,8 @@ declare(strict_types=1); namespace Modules\FleetManagement\Models\Driver; +use Modules\FleetManagement\Models\Inspection; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; -use phpOMS\Localization\BaseStringL11n; /** * mapper class. @@ -25,7 +25,7 @@ use phpOMS\Localization\BaseStringL11n; * @link https://jingga.app * @since 1.0.0 * - * @template T of DriverInspection + * @template T of Inspection * @extends DataMapperFactory */ final class DriverInspectionMapper extends DataMapperFactory @@ -38,10 +38,12 @@ final class DriverInspectionMapper extends DataMapperFactory */ public const COLUMNS = [ 'fleetmgmt_driver_inspection_id' => ['name' => 'fleetmgmt_driver_inspection_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_driver' => ['name' => 'fleetmgmt_driver_inspection_driver', 'type' => 'int', 'internal' => 'reference'], 'fleetmgmt_driver_inspection_description' => ['name' => 'fleetmgmt_driver_inspection_description', 'type' => 'string', 'internal' => 'description'], 'fleetmgmt_driver_inspection_status' => ['name' => 'fleetmgmt_driver_inspection_status', 'type' => 'int', 'internal' => 'status'], 'fleetmgmt_driver_inspection_interval' => ['name' => 'fleetmgmt_driver_inspection_interval', 'type' => 'int', 'internal' => 'interval'], 'fleetmgmt_driver_inspection_next' => ['name' => 'fleetmgmt_driver_inspection_next', 'type' => 'DateTime', 'internal' => 'next'], + 'fleetmgmt_driver_inspection_date' => ['name' => 'fleetmgmt_driver_inspection_date', 'type' => 'DateTime', 'internal' => 'date'], 'fleetmgmt_driver_inspection_type' => ['name' => 'fleetmgmt_driver_inspection_type', 'type' => 'int', 'internal' => 'type'], ]; @@ -80,5 +82,5 @@ final class DriverInspectionMapper extends DataMapperFactory * @var class-string * @since 1.0.0 */ - public const MODEL = DriverInspection::class; + public const MODEL = Inspection::class; } diff --git a/Models/Driver/DriverInspectionStatus.php b/Models/Driver/DriverInspectionStatus.php deleted file mode 100644 index 78b7e58..0000000 --- a/Models/Driver/DriverInspectionStatus.php +++ /dev/null @@ -1,36 +0,0 @@ - */ final class InspectionMapper extends DataMapperFactory @@ -38,10 +38,12 @@ final class InspectionMapper extends DataMapperFactory */ public const COLUMNS = [ 'fleetmgmt_vehicle_inspection_id' => ['name' => 'fleetmgmt_vehicle_inspection_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_inspection_vehicle' => ['name' => 'fleetmgmt_vehicle_inspection_vehicle', 'type' => 'int', 'internal' => 'reference'], 'fleetmgmt_vehicle_inspection_description' => ['name' => 'fleetmgmt_vehicle_inspection_description', 'type' => 'string', 'internal' => 'description'], 'fleetmgmt_vehicle_inspection_status' => ['name' => 'fleetmgmt_vehicle_inspection_status', 'type' => 'int', 'internal' => 'status'], 'fleetmgmt_vehicle_inspection_interval' => ['name' => 'fleetmgmt_vehicle_inspection_interval', 'type' => 'int', 'internal' => 'interval'], 'fleetmgmt_vehicle_inspection_next' => ['name' => 'fleetmgmt_vehicle_inspection_next', 'type' => 'DateTime', 'internal' => 'next'], + 'fleetmgmt_vehicle_inspection_date' => ['name' => 'fleetmgmt_vehicle_inspection_date', 'type' => 'DateTime', 'internal' => 'date'], 'fleetmgmt_vehicle_inspection_type' => ['name' => 'fleetmgmt_vehicle_inspection_type', 'type' => 'int', 'internal' => 'type'], ]; diff --git a/Models/Milage.php b/Models/Milage.php new file mode 100644 index 0000000..889aa71 --- /dev/null +++ b/Models/Milage.php @@ -0,0 +1,75 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/MilageMapper.php b/Models/MilageMapper.php new file mode 100644 index 0000000..361b740 --- /dev/null +++ b/Models/MilageMapper.php @@ -0,0 +1,91 @@ + + */ +final class MilageMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_milage_id' => ['name' => 'fleetmgmt_milage_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_milage_description' => ['name' => 'fleetmgmt_milage_description', 'type' => 'string', 'internal' => 'description'], + 'fleetmgmt_milage_status' => ['name' => 'fleetmgmt_milage_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_milage_driver' => ['name' => 'fleetmgmt_milage_driver', 'type' => 'int', 'internal' => 'driver'], + 'fleetmgmt_milage_vehicle' => ['name' => 'fleetmgmt_milage_vehicle', 'type' => 'int', 'internal' => 'vehicle'], + 'fleetmgmt_milage_start' => ['name' => 'fleetmgmt_milage_start', 'type' => 'DateTime', 'internal' => 'start'], + 'fleetmgmt_milage_end' => ['name' => 'fleetmgmt_milage_end', 'type' => 'DateTime', 'internal' => 'end'], + 'fleetmgmt_milage_milage' => ['name' => 'fleetmgmt_milage_milage', 'type' => 'int', 'internal' => 'milage'], + 'fleetmgmt_milage_fuel' => ['name' => 'fleetmgmt_milage_fuel', 'type' => 'int', 'internal' => 'fuelUsage'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'driver' => [ + 'mapper' => DriverMapper::class, + 'external' => 'fleetmgmt_milage_driver', + ], + 'vehicle' => [ + 'mapper' => VehicleMapper::class, + 'external' => 'fleetmgmt_milage_vehicle', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_milage'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_milage_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Milage::class; +} diff --git a/Theme/Backend/driver-list.tpl.php b/Theme/Backend/driver-list.tpl.php index 99d4394..feafd15 100644 --- a/Theme/Backend/driver-list.tpl.php +++ b/Theme/Backend/driver-list.tpl.php @@ -22,7 +22,7 @@ echo $this->data['nav']->render(); ?>
-
getHtml('Vehicles'); ?>
+
getHtml('Drivers'); ?>
diff --git a/Theme/Backend/vehicle-profile.tpl.php b/Theme/Backend/vehicle-profile.tpl.php index 79dd3d5..015d005 100755 --- a/Theme/Backend/vehicle-profile.tpl.php +++ b/Theme/Backend/vehicle-profile.tpl.php @@ -179,10 +179,12 @@ echo $this->data['nav']->render(); + data['inspections'] as $inspection) : ?> +
getHtml('Type'); ?> getHtml('Responsible'); ?>
next?->format('Y-m-d H:i') ?> + printHtml($inspection->type->getL11n()); ?> - - +
diff --git a/tests/Autoloader.php b/tests/Autoloader.php index 80a0a1e..d2d0080 100755 --- a/tests/Autoloader.php +++ b/tests/Autoloader.php @@ -71,14 +71,12 @@ final class Autoloader * * @return void * - * @throws AutoloadException Throws this exception if the class to autoload doesn't exist. This could also be related to a wrong namespace/file path correlation. - * * @since 1.0.0 */ public static function defaultAutoloader(string $class) : void { $class = \ltrim($class, '\\'); - $class = \str_replace(['_', '\\'], '/', $class); + $class = \strtr($class, '_\\', '//'); foreach (self::$paths as $path) { $file = $path . $class . '.php';