diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 12ec25e..bb2027b 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -110,7 +110,7 @@ "pid": "/", "type": 2, "subtype": 1, - "name": "Inspection", + "name": "Inspections", "uri": "{/base}/fleet/inspection/list", "target": "self", "icon": null, @@ -139,11 +139,26 @@ "pid": "/fleet/inspection", "type": 3, "subtype": 1, - "name": "Create", - "uri": "{/base}/fleet/inspection/create?{?}", + "name": "VehicleInspectionTypes", + "uri": "{/base}/fleet/vehicle/inspection/type/list?{?}", "target": "self", "icon": null, - "order": 1, + "order": 5, + "from": "FleetManagement", + "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, diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 1bc0a61..e89eecf 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -428,7 +428,7 @@ "null": false }, "fleetmgmt_attr_type_required": { - "description": "Every item must have this attribute type if set to true.", + "description": "Every vehicle must have this attribute type if set to true.", "name": "fleetmgmt_attr_type_required", "type": "TINYINT(1)", "null": false @@ -601,8 +601,8 @@ "primary": true, "autoincrement": true }, - "fleetmgmt_vehicle_attr_item": { - "name": "fleetmgmt_vehicle_attr_item", + "fleetmgmt_vehicle_attr_vehicle": { + "name": "fleetmgmt_vehicle_attr_vehicle", "type": "INT(11)", "null": false, "foreignTable": "fleetmgmt_vehicle", @@ -709,7 +709,7 @@ "null": false }, "fleetmgmt_driver_attr_type_required": { - "description": "Every item must have this attribute type if set to true.", + "description": "Every driver must have this attribute type if set to true.", "name": "fleetmgmt_driver_attr_type_required", "type": "TINYINT(1)", "null": false @@ -882,8 +882,8 @@ "primary": true, "autoincrement": true }, - "fleetmgmt_driver_attr_item": { - "name": "fleetmgmt_driver_attr_item", + "fleetmgmt_driver_attr_driver": { + "name": "fleetmgmt_driver_attr_driver", "type": "INT(11)", "null": false, "foreignTable": "fleetmgmt_driver", diff --git a/Admin/Install/driverinspectiontype.json b/Admin/Install/driverinspectiontype.json new file mode 100644 index 0000000..a9a1672 --- /dev/null +++ b/Admin/Install/driverinspectiontype.json @@ -0,0 +1,9 @@ +[ + { + "name": "license", + "l11n": { + "en": "License", + "de": "Führerschein" + } + } +] \ No newline at end of file diff --git a/Admin/Installer.php b/Admin/Installer.php index 7ada66c..0a2de51 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -87,6 +87,16 @@ final class Installer extends InstallerAbstract /** @var array $types */ $types = \json_decode($fileContent, true); $inspectionTypes = self::createInspectionTypes($app, $types); + + /* Inspection types */ + $fileContent = \file_get_contents(__DIR__ . '/Install/driverinspectiontype.json'); + if ($fileContent === false) { + return; + } + + /** @var array $types */ + $types = \json_decode($fileContent, true); + $inspectionTypes = self::createDriverInspectionTypes($app, $types); } /** @@ -272,6 +282,67 @@ final class Installer extends InstallerAbstract return $inspectionTypes; } + /** + * Install inspection type + * + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createDriverInspectionTypes(ApplicationAbstract $app, array $types) : array + { + /** @var array $inspectionTypes */ + $inspectionTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiDriver'); + + /** @var array $type */ + foreach ($types as $type) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $type['name'] ?? ''); + $request->setData('title', \reset($type['l11n'])); + $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); + + $module->apiDriverInspectionTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $inspectionTypes[$type['name']] = !\is_array($responseData['response']) + ? $responseData['response']->toArray() + : $responseData['response']; + + $isFirst = true; + foreach ($type['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $inspectionTypes[$type['name']]['id']); + + $module->apiDriverInspectionTypeL11nCreate($request, $response); + } + } + + return $inspectionTypes; + } + /** * Install default attribute types * diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 614fe96..95a61a8 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -58,12 +58,33 @@ return [ 'permission' => [ 'module' => Controller::NAME, 'type' => PermissionType::READ, - 'state' => PermissionCategory::VEHICLE, + 'state' => PermissionCategory::DRIVER, ], ], [ 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiDriverAttributeUpdate', 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + ], + + '^.*/fleet/vehicle/note.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiNoteEdit', + 'verb' => RouteVerb::SET, 'permission' => [ 'module' => Controller::NAME, 'type' => PermissionType::READ, @@ -71,4 +92,25 @@ return [ ], ], ], + + '^.*/fleet/driver/note.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiNoteEdit', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + ], ]; diff --git a/Controller/ApiDriverController.php b/Controller/ApiDriverController.php index a955901..b8ffd60 100644 --- a/Controller/ApiDriverController.php +++ b/Controller/ApiDriverController.php @@ -137,7 +137,7 @@ final class ApiDriverController extends Controller $driver->id, $media->id, DriverMapper::class, - 'media', + 'files', '', $request->getOrigin() ); @@ -179,7 +179,7 @@ final class ApiDriverController extends Controller $driver->id, $media->id, DriverMapper::class, - 'media', + 'files', '', $request->getOrigin() ); @@ -408,7 +408,7 @@ final class ApiDriverController extends Controller /** @var BaseStringL11nType $driver */ $driver = $this->createDriverInspectionTypeFromRequest($request); - $this->createModel($request->header->account, $driver, DriverInspectionTypeMapper::class, 'inspection_type', $request->getOrigin()); + $this->createModel($request->header->account, $driver, DriverInspectionTypeMapper::class, 'driver_inspection_type', $request->getOrigin()); $this->fillJsonResponse( $request, @@ -475,14 +475,14 @@ final class ApiDriverController extends Controller public function apiDriverInspectionTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateDriverInspectionTypeL11nCreate($request))) { - $response->data['inspection_type_l11n_create'] = new FormValidation($val); + $response->data['driver_inspection_type_l11n_create'] = new FormValidation($val); $response->header->status = RequestStatusCode::R_400; return; } $typeL11n = $this->createDriverInspectionTypeL11nFromRequest($request); - $this->createModel($request->header->account, $typeL11n, DriverInspectionTypeL11nMapper::class, 'inspection_type_l11n', $request->getOrigin()); + $this->createModel($request->header->account, $typeL11n, DriverInspectionTypeL11nMapper::class, 'driver_inspection_type_l11n', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $typeL11n); } @@ -529,7 +529,7 @@ final class ApiDriverController extends Controller } /** - * Api method to create item files + * Api method to create notes * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -550,7 +550,7 @@ final class ApiDriverController extends Controller return; } - $request->setData('virtualpath', '/Modules/FleetManagement/Items/' . $request->getData('id'), true); + $request->setData('virtualpath', '/Modules/FleetManagement/Driver/' . $request->getData('id'), true); $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); if ($response->header->status !== RequestStatusCode::R_200) { @@ -585,4 +585,31 @@ final class ApiDriverController extends Controller return []; } + + /** + * Api method to update note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteEdit(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + } } diff --git a/Controller/ApiVehicleController.php b/Controller/ApiVehicleController.php index 59c45d3..b7dc084 100755 --- a/Controller/ApiVehicleController.php +++ b/Controller/ApiVehicleController.php @@ -434,7 +434,7 @@ final class ApiVehicleController extends Controller $vehicle->id, $media->id, VehicleMapper::class, - 'media', + 'files', '', $request->getOrigin() ); @@ -476,7 +476,7 @@ final class ApiVehicleController extends Controller $vehicle->id, $media->id, VehicleMapper::class, - 'media', + 'files', '', $request->getOrigin() ); @@ -827,7 +827,7 @@ final class ApiVehicleController extends Controller } /** - * Api method to create item files + * Api method to create notes * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -848,7 +848,7 @@ final class ApiVehicleController extends Controller return; } - $request->setData('virtualpath', '/Modules/FleetManagement/Items/' . $request->getData('id'), true); + $request->setData('virtualpath', '/Modules/FleetManagement/Vehicle/' . $request->getData('id'), true); $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); if ($response->header->status !== RequestStatusCode::R_200) { @@ -883,4 +883,31 @@ final class ApiVehicleController extends Controller return []; } + + /** + * Api method to update note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteEdit(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 809ba4f..eb28661 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -100,6 +100,35 @@ 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 viewFleetManagementDriverList(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/driver-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = DriverMapper::getAll() + ->with('account') + ->sort('id', 'DESC') + ->execute(); + + $view->data['drivers'] = $list; + + return $view; + } + /** * Routing end-point for application behaviour. * @@ -254,4 +283,73 @@ 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 viewFleetManagementDriverProfile(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/driver-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + // @todo: This langauge filtering doesn't work. But it was working with the old mappers. Maybe there is a bug in the where() definition. Need to inspect the actual query. + $driver = DriverMapper::get() + ->with('attributes') + ->with('attributes/type') + ->with('attributes/value') + ->with('attributes/type/l11n') + ->with('files') + ->with('files/types') + ->where('id', (int) $request->getData('id')) + ->where('attributes/type/l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['driver'] = $driver; + + $query = new Builder($this->app->dbPool->get()); + $results = $query->selectAs(DriverMapper::HAS_MANY['files']['external'], 'file') + ->from(DriverMapper::TABLE) + ->leftJoin(DriverMapper::HAS_MANY['files']['table']) + ->on(DriverMapper::HAS_MANY['files']['table'] . '.' . DriverMapper::HAS_MANY['files']['self'], '=', DriverMapper::TABLE . '.' . DriverMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::TABLE) + ->on(DriverMapper::HAS_MANY['files']['table'] . '.' . DriverMapper::HAS_MANY['files']['external'], '=', MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::HAS_MANY['types']['table']) + ->on(MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD, '=', MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['self']) + ->leftJoin(MediaTypeMapper::TABLE) + ->on(MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['external'], '=', MediaTypeMapper::TABLE . '.' . MediaTypeMapper::PRIMARYFIELD) + ->where(DriverMapper::HAS_MANY['files']['self'], '=', $driver->id) + ->where(MediaTypeMapper::TABLE . '.' . MediaTypeMapper::getColumnByMember('name'), '=', 'driver_profile_image'); + + $driverImage = MediaMapper::get() + ->with('types') + ->where('id', $results) + ->limit(1) + ->execute(); + + $view->data['driverImage'] = $driverImage; + + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_LOCALIZATION, + ]); + + $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $view->data['attributeView']->data['defaultlocalization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute(); + + $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['driver-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); + + return $view; + } } diff --git a/Models/Driver/DriverAttributeMapper.php b/Models/Driver/DriverAttributeMapper.php index d60bc02..3b44abc 100644 --- a/Models/Driver/DriverAttributeMapper.php +++ b/Models/Driver/DriverAttributeMapper.php @@ -38,7 +38,7 @@ final class DriverAttributeMapper extends DataMapperFactory */ public const COLUMNS = [ 'fleetmgmt_driver_attr_id' => ['name' => 'fleetmgmt_driver_attr_id', 'type' => 'int', 'internal' => 'id'], - 'fleetmgmt_driver_attr_item' => ['name' => 'fleetmgmt_driver_attr_item', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_driver' => ['name' => 'fleetmgmt_driver_attr_driver', 'type' => 'int', 'internal' => 'ref'], 'fleetmgmt_driver_attr_type' => ['name' => 'fleetmgmt_driver_attr_type', 'type' => 'int', 'internal' => 'type'], 'fleetmgmt_driver_attr_value' => ['name' => 'fleetmgmt_driver_attr_value', 'type' => 'int', 'internal' => 'value'], ]; diff --git a/Models/Driver/DriverMapper.php b/Models/Driver/DriverMapper.php index bc3ff1f..4a389e3 100644 --- a/Models/Driver/DriverMapper.php +++ b/Models/Driver/DriverMapper.php @@ -60,7 +60,7 @@ final class DriverMapper extends DataMapperFactory 'attributes' => [ 'mapper' => DriverAttributeMapper::class, 'table' => 'fleetmgmt_driver_attr', - 'self' => 'fleetmgmt_driver_attr_item', + 'self' => 'fleetmgmt_driver_attr_driver', 'external' => null, ], 'notes' => [ diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index f13ab8f..bc7b523 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -32,9 +32,17 @@ abstract class PermissionCategory extends Enum public const VEHICLE_TYPE = 3; - public const INSPECTION_TYPE = 4; + public const VEHICLE_INSPECTION_TYPE = 4; - public const INSPECTION = 5; + public const VEHICLE_INSPECTION = 5; - public const ATTRIBUTE_TYPE = 6; + public const VEHICLE_ATTRIBUTE_TYPE = 6; + + public const DRIVER = 7; + + public const DRIVER_INSPECTION_TYPE = 8; + + public const DRIVER_INSPECTION = 9; + + public const DRIVER_ATTRIBUTE_TYPE = 10; } diff --git a/Models/VehicleAttributeMapper.php b/Models/VehicleAttributeMapper.php index fe17883..e4f889c 100644 --- a/Models/VehicleAttributeMapper.php +++ b/Models/VehicleAttributeMapper.php @@ -38,7 +38,7 @@ final class VehicleAttributeMapper extends DataMapperFactory */ public const COLUMNS = [ 'fleetmgmt_vehicle_attr_id' => ['name' => 'fleetmgmt_vehicle_attr_id', 'type' => 'int', 'internal' => 'id'], - 'fleetmgmt_vehicle_attr_item' => ['name' => 'fleetmgmt_vehicle_attr_item', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_vehicle_attr_vehicle' => ['name' => 'fleetmgmt_vehicle_attr_vehicle', 'type' => 'int', 'internal' => 'ref'], 'fleetmgmt_vehicle_attr_type' => ['name' => 'fleetmgmt_vehicle_attr_type', 'type' => 'int', 'internal' => 'type'], 'fleetmgmt_vehicle_attr_value' => ['name' => 'fleetmgmt_vehicle_attr_value', 'type' => 'int', 'internal' => 'value'], ]; diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php index e7ff236..b05f8d6 100755 --- a/Theme/Backend/Lang/Navigation.en.lang.php +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -15,5 +15,10 @@ declare(strict_types=1); return ['Navigation' => [ 'FleetManagement' => 'Fleet Management', 'Vehicles' => 'Vehicles', - 'Drivers' => 'Drivers', + 'Drivers' => 'Drivers', + 'Inspections' => 'Inspections', + 'VehicleInspectionTypes' => 'Vehicle Inspection Types', + 'DriverInspectionTypes' => 'Driver Inspection Types', + 'VehicleAttributes' => 'Vehicle Attributes', + 'DriverAttributes' => 'Driver Attributes', ]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 054fdc4..56b6929 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -32,6 +32,10 @@ return ['FleetManagement' => [ 'Milage' => 'Milage', 'Driver' => 'Driver', 'Vin' => 'Vin', + 'History' => 'History', + 'Upcoming' => 'Upcoming', + 'Responsible' => 'Responsible', + 'Date' => 'Date', 'PurchasePrice' => 'Purchase Price', 'LeasingFee' => 'Leasing Fee', ':status1' => 'Active', diff --git a/Theme/Backend/driver-list.tpl.php b/Theme/Backend/driver-list.tpl.php new file mode 100644 index 0000000..d099d55 --- /dev/null +++ b/Theme/Backend/driver-list.tpl.php @@ -0,0 +1,100 @@ +data['drivers'] ?? []; + +echo $this->data['nav']->render(); ?> +
+
+
+
getHtml('Vehicles'); ?>
+
+ + + + + $value) : + ++$count; + $url = UriFactory::build('{/base}/fleet/driver/profile?{?}&id=' . $value->id); + ?> + +
+ getHtml('ID', '0', '0'); ?> + + + + getHtml('Status'); ?> + + + + getHtml('Name'); ?> + + + + getHtml('Type'); ?> + + + +
+ printHtml((string) $value->id); ?> + getHtml(':status' . $value->status); ?> + printHtml($value->name); ?> + printHtml($value->type->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/driver-profile.tpl.php b/Theme/Backend/driver-profile.tpl.php new file mode 100644 index 0000000..caa5dac --- /dev/null +++ b/Theme/Backend/driver-profile.tpl.php @@ -0,0 +1,318 @@ +data['driver'] ?? new NullDriver(); +$files = $driver->files; +$driverImage = $this->data['driverImage'] ?? new NullMedia(); +$attributeView = $this->data['attributeView']; + +/** + * @var \phpOMS\Views\View $this + */ +echo $this->data['nav']->render(); +?> +
+
+ +
+
+ request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>> +
+
+
+
+
getHtml('Profile'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ id === 0) : ?> + + + + +
+
+
+ +
+
+
+ +
+
+
+
+
+ + request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>> +
+
+ render( + $driver->attributes, + $this->data['attributeTypes'] ?? [], + [], + '{/api}fleet/driver/attribute' + ); + ?> +
+
+ + request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> +
+ data['media-upload']->render('driver-file', 'files', '', $driver->files); ?> +
+ + request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>> +
+ data['driver-notes']->render('driver-notes', '', $driver->notes); ?> +
+ + request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>> +
+ +
+
+
+
getHtml('Upcoming'); ?>
+ + + + + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
+ + +
+
+
+ +
+
+
getHtml('History'); ?>
+ + + + + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
+ + +
+
+
+
+
+ + request->uri->fragment === 'c-tab-7' ? ' checked' : ''; ?>> +
+
+
+
+
+
getHtml('Milage'); ?>
+
+
+ + +
+ +
+ +
+
+ + + + +
+ 0) : ?> + + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +

+                                
+
+
+ + + +
+
+
+
+ +
+
+
getHtml('Milage'); ?>
+
+ + + + + + $value) : ++$c; ?> + + +
+ getHtml('ID', '0', '0'); ?> + getHtml('Driver'); ?> + getHtml('Milage'); ?> + getHtml('Start'); ?> + getHtml('End'); ?> +
+ + type->isRequired) : ?> + + + + + + + + id; ?> + printHtml($value->type->getL11n()); ?> + value->getValue() instanceof \DateTime ? $value->value->getValue()->format('Y-m-d') : $this->printHtml((string) $value->value->getValue()); ?> + printHtml($value->value->unit); ?> + printHtml($value->value->unit); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
+
+ + request->uri->fragment === 'c-tab-8' ? ' checked' : ''; ?>> +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/vehicle-profile.tpl.php b/Theme/Backend/vehicle-profile.tpl.php index 5195d70..bf5f5f9 100755 --- a/Theme/Backend/vehicle-profile.tpl.php +++ b/Theme/Backend/vehicle-profile.tpl.php @@ -24,10 +24,10 @@ $vehicleStatus = VehicleStatus::getConstants(); /** * @var \Modules\FleetManagement\Models\Vehicle $vehicle */ -$vehicle = $this->data['vehicle'] ?? new NullVehicle(); -$files = $vehicle->files; -$vehicleImage = $this->data['vehicleImage'] ?? new NullMedia(); -$vehicleTypes = $this->data['types'] ?? []; +$vehicle = $this->data['vehicle'] ?? new NullVehicle(); +$files = $vehicle->files; +$vehicleImage = $this->data['vehicleImage'] ?? new NullMedia(); +$vehicleTypes = $this->data['types'] ?? []; $attributeView = $this->data['attributeView']; /** @@ -144,7 +144,7 @@ echo $this->data['nav']->render();
render( - $vehicle->getAttributes(), + $vehicle->attributes, $this->data['attributeTypes'] ?? [], $this->data['units'] ?? [], '{/api}fleet/vehicle/attribute' @@ -212,10 +212,10 @@ echo $this->data['nav']->render();
-
+
getHtml('Milage'); ?>