From 364626bf8595e84a2596e699f0da9f795091d428 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 13 Jun 2023 18:55:51 +0000 Subject: [PATCH] Quick backup before crash --- Admin/Install/Navigation.install.json | 48 +- Admin/Install/db.json | 394 ++++++++++++ Admin/Installer.php | 113 +++- Admin/Routes/Web/Api.php | 36 +- Admin/Routes/Web/Backend.php | 23 + Controller/ApiDriverAttributeController.php | 534 ++++++++++++++++ Controller/ApiDriverController.php | 588 ++++++++++++++++++ Controller/ApiVehicleAttributeController.php | 534 ++++++++++++++++ ...ontroller.php => ApiVehicleController.php} | 518 +-------------- Controller/BackendController.php | 11 +- Models/Driver/Driver.php | 79 +++ Models/Driver/DriverAttributeMapper.php | 86 +++ .../Driver/DriverAttributeTypeL11nMapper.php | 69 ++ Models/Driver/DriverAttributeTypeMapper.php | 94 +++ .../Driver/DriverAttributeValueL11nMapper.php | 69 ++ Models/Driver/DriverAttributeValueMapper.php | 89 +++ Models/Driver/DriverInspection.php | 78 +++ Models/Driver/DriverInspectionMapper.php | 84 +++ Models/Driver/DriverInspectionStatus.php | 36 ++ .../Driver/DriverInspectionTypeL11nMapper.php | 69 ++ Models/Driver/DriverInspectionTypeMapper.php | 83 +++ Models/Driver/DriverMapper.php | 102 +++ Models/Driver/DriverStatus.php | 34 + Models/Driver/NullDriver.php | 46 ++ Models/Driver/NullDriverInspection.php | 46 ++ Models/Inspection.php | 27 +- Models/InspectionTypeMapper.php | 2 +- Models/License.php | 0 Models/LicenseType.php | 0 Models/NullInspection.php | 46 ++ Models/Vehicle.php | 7 +- Models/VehicleMapper.php | 6 +- 32 files changed, 3404 insertions(+), 547 deletions(-) create mode 100644 Controller/ApiDriverAttributeController.php create mode 100644 Controller/ApiDriverController.php create mode 100644 Controller/ApiVehicleAttributeController.php rename Controller/{ApiController.php => ApiVehicleController.php} (61%) create mode 100644 Models/Driver/Driver.php create mode 100644 Models/Driver/DriverAttributeMapper.php create mode 100644 Models/Driver/DriverAttributeTypeL11nMapper.php create mode 100644 Models/Driver/DriverAttributeTypeMapper.php create mode 100644 Models/Driver/DriverAttributeValueL11nMapper.php create mode 100644 Models/Driver/DriverAttributeValueMapper.php create mode 100644 Models/Driver/DriverInspection.php create mode 100644 Models/Driver/DriverInspectionMapper.php create mode 100644 Models/Driver/DriverInspectionStatus.php create mode 100644 Models/Driver/DriverInspectionTypeL11nMapper.php create mode 100644 Models/Driver/DriverInspectionTypeMapper.php create mode 100644 Models/Driver/DriverMapper.php create mode 100644 Models/Driver/DriverStatus.php create mode 100644 Models/Driver/NullDriver.php create mode 100644 Models/Driver/NullDriverInspection.php create mode 100644 Models/License.php create mode 100644 Models/LicenseType.php diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 3e31646..12ec25e 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -156,7 +156,7 @@ "pid": "/", "type": 2, "subtype": 1, - "name": "Attributes", + "name": "VehicleAttributes", "uri": "{/base}/fleet/vehicle/attribute/type/list?{?}", "target": "self", "icon": null, @@ -196,6 +196,52 @@ "children": [] } ] + }, + { + "id": 1003506001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "DriverAttributes", + "uri": "{/base}/fleet/driver/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003506101, + "pid": "/fleet/driver/attribute", + "type": 3, + "subtype": 1, + "name": "Types", + "uri": "{/base}/fleet/driver/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003506001, + "children": [] + }, + { + "id": 1003506201, + "pid": "/fleet/driver/attribute", + "type": 3, + "subtype": 1, + "name": "Values", + "uri": "{/base}/fleet/driver/attribute/value/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003506001, + "children": [] + } + ] } ] } diff --git a/Admin/Install/db.json b/Admin/Install/db.json index d4e3a9a..1bc0a61 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -243,6 +243,119 @@ } } }, + "fleetmgmt_driver_inspection_type": { + "name": "fleetmgmt_driver_inspection_type", + "fields": { + "fleetmgmt_driver_inspection_type_id": { + "name": "fleetmgmt_driver_inspection_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_type_name": { + "name": "fleetmgmt_driver_inspection_type_name", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_driver_inspection_type_l11n": { + "name": "fleetmgmt_driver_inspection_type_l11n", + "fields": { + "fleetmgmt_driver_inspection_type_l11n_id": { + "name": "fleetmgmt_driver_inspection_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_type_l11n_title": { + "name": "fleetmgmt_driver_inspection_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_inspection_type_l11n_type": { + "name": "fleetmgmt_driver_inspection_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_inspection_type", + "foreignKey": "fleetmgmt_driver_inspection_type_id" + }, + "fleetmgmt_driver_inspection_type_l11n_lang": { + "name": "fleetmgmt_driver_inspection_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver": { + "name": "fleetmgmt_driver", + "fields": { + "fleetmgmt_driver_id": { + "name": "fleetmgmt_driver_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_status": { + "name": "fleetmgmt_driver_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_account": { + "name": "fleetmgmt_driver_account", + "type": "INT", + "null": true, + "default": true, + "foreignTable": "account", + "foreignKey": "account_id" + } + } + }, + "fleetmgmt_driver_inspection": { + "name": "fleetmgmt_driver_inspection", + "fields": { + "fleetmgmt_driver_inspection_id": { + "name": "fleetmgmt_driver_inspection_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_description": { + "name": "fleetmgmt_driver_inspection_description", + "type": "TEXT", + "null": false + }, + "fleetmgmt_driver_inspection_status": { + "name": "fleetmgmt_driver_inspection_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_inspection_interval": { + "name": "fleetmgmt_driver_inspection_interval", + "type": "TINYINT(3)", + "null": false + }, + "fleetmgmt_driver_inspection_next": { + "name": "fleetmgmt_driver_inspection_next", + "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_vehicle_usage": { "name": "fleetmgmt_vehicle_usage", "fields": { @@ -563,5 +676,286 @@ "foreignKey": "editor_doc_id" } } + }, + "fleetmgmt_driver_attr_type": { + "name": "fleetmgmt_driver_attr_type", + "fields": { + "fleetmgmt_driver_attr_type_id": { + "name": "fleetmgmt_driver_attr_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_type_name": { + "name": "fleetmgmt_driver_attr_type_name", + "type": "VARCHAR(255)", + "null": false, + "unique": true + }, + "fleetmgmt_driver_attr_type_datatype": { + "name": "fleetmgmt_driver_attr_type_datatype", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_driver_attr_type_fields": { + "name": "fleetmgmt_driver_attr_type_fields", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_driver_attr_type_custom": { + "name": "fleetmgmt_driver_attr_type_custom", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_type_required": { + "description": "Every item must have this attribute type if set to true.", + "name": "fleetmgmt_driver_attr_type_required", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_type_pattern": { + "description": "This is a regex validation pattern.", + "name": "fleetmgmt_driver_attr_type_pattern", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_driver_attr_type_l11n": { + "name": "fleetmgmt_driver_attr_type_l11n", + "fields": { + "fleetmgmt_driver_attr_type_l11n_id": { + "name": "fleetmgmt_driver_attr_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_type_l11n_title": { + "name": "fleetmgmt_driver_attr_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_type_l11n_type": { + "name": "fleetmgmt_driver_attr_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_attr_type", + "foreignKey": "fleetmgmt_driver_attr_type_id" + }, + "fleetmgmt_driver_attr_type_l11n_lang": { + "name": "fleetmgmt_driver_attr_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver_attr_value": { + "name": "fleetmgmt_driver_attr_value", + "fields": { + "fleetmgmt_driver_attr_value_id": { + "name": "fleetmgmt_driver_attr_value_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_value_default": { + "name": "fleetmgmt_driver_attr_value_default", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_value_valueStr": { + "name": "fleetmgmt_driver_attr_value_valueStr", + "type": "VARCHAR(255)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueInt": { + "name": "fleetmgmt_driver_attr_value_valueInt", + "type": "INT(11)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueDec": { + "name": "fleetmgmt_driver_attr_value_valueDec", + "type": "DECIMAL(19,5)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueDat": { + "name": "fleetmgmt_driver_attr_value_valueDat", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_unit": { + "name": "fleetmgmt_driver_attr_value_unit", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_value_deptype": { + "name": "fleetmgmt_driver_attr_value_deptype", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver_attr_type", + "foreignKey": "fleetmgmt_driver_attr_type_id" + }, + "fleetmgmt_driver_attr_value_depvalue": { + "name": "fleetmgmt_driver_attr_value_depvalue", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver_attr_value", + "foreignKey": "fleetmgmt_driver_attr_value_id" + } + } + }, + "fleetmgmt_driver_attr_value_l11n": { + "name": "fleetmgmt_driver_attr_value_l11n", + "fields": { + "fleetmgmt_driver_attr_value_l11n_id": { + "name": "fleetmgmt_driver_attr_value_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_value_l11n_title": { + "name": "fleetmgmt_driver_attr_value_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_value_l11n_value": { + "name": "fleetmgmt_driver_attr_value_l11n_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_attr_value", + "foreignKey": "fleetmgmt_driver_attr_value_id" + }, + "fleetmgmt_driver_attr_value_l11n_lang": { + "name": "fleetmgmt_driver_attr_value_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver_attr_default": { + "name": "fleetmgmt_driver_attr_default", + "fields": { + "fleetmgmt_driver_attr_default_id": { + "name": "fleetmgmt_driver_attr_default_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_default_type": { + "name": "fleetmgmt_driver_attr_default_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_driver_attr_default_value": { + "name": "fleetmgmt_driver_attr_default_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_driver_attr": { + "name": "fleetmgmt_driver_attr", + "fields": { + "fleetmgmt_driver_attr_id": { + "name": "fleetmgmt_driver_attr_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_item": { + "name": "fleetmgmt_driver_attr_item", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_attr_type": { + "name": "fleetmgmt_driver_attr_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_driver_attr_value": { + "name": "fleetmgmt_driver_attr_value", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_driver_media": { + "name": "fleetmgmt_driver_media", + "fields": { + "fleetmgmt_driver_media_id": { + "name": "fleetmgmt_driver_media_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_media_vehicle": { + "name": "fleetmgmt_driver_media_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_media_media": { + "name": "fleetmgmt_driver_media_media", + "type": "INT", + "null": false, + "foreignTable": "media", + "foreignKey": "media_id" + } + } + }, + "fleetmgmt_driver_note": { + "name": "fleetmgmt_driver_note", + "fields": { + "fleetmgmt_driver_note_id": { + "name": "fleetmgmt_driver_note_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_note_driver": { + "name": "fleetmgmt_driver_note_driver", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_note_doc": { + "name": "fleetmgmt_driver_note_doc", + "type": "INT", + "null": false, + "foreignTable": "editor_doc", + "foreignKey": "editor_doc_id" + } + } } } \ No newline at end of file diff --git a/Admin/Installer.php b/Admin/Installer.php index d274d97..7ada66c 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -68,7 +68,7 @@ final class Installer extends InstallerAbstract $types = \json_decode($fileContent, true); $fuelTypes = self::createFuelTypes($app, $types); - /* Fuel types */ + /* Vehicle types */ $fileContent = \file_get_contents(__DIR__ . '/Install/vehicletype.json'); if ($fileContent === false) { return; @@ -77,15 +77,25 @@ final class Installer extends InstallerAbstract /** @var array $types */ $types = \json_decode($fileContent, true); $vehicleTypes = self::createVehicleTypes($app, $types); + + /* Inspection types */ + $fileContent = \file_get_contents(__DIR__ . '/Install/inspectiontype.json'); + if ($fileContent === false) { + return; + } + + /** @var array $types */ + $types = \json_decode($fileContent, true); + $inspectionTypes = self::createInspectionTypes($app, $types); } /** * Install fuel type * - * @param ApplicationAbstract $app Application - * @param array, is_required?:bool, is_custom_allowed?:bool, validation_pattern?:string, value_type?:string, values?:array}> $attributes Attribute definition + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition * - * @return array + * @return array * * @since 1.0.0 */ @@ -94,8 +104,8 @@ final class Installer extends InstallerAbstract /** @var array $fuelTypes */ $fuelTypes = []; - /** @var \Modules\FleetManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('FleetManagement'); + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); /** @var array $type */ foreach ($types as $type) { @@ -141,22 +151,22 @@ final class Installer extends InstallerAbstract } /** - * Install fuel type + * Install vehicle type * - * @param ApplicationAbstract $app Application - * @param array, is_required?:bool, is_custom_allowed?:bool, validation_pattern?:string, value_type?:string, values?:array}> $attributes Attribute definition + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition * - * @return array + * @return array * * @since 1.0.0 */ private static function createVehicleTypes(ApplicationAbstract $app, array $types) : array { - /** @var array $fuelTypes */ + /** @var array $vehicleTypes */ $vehicleTypes = []; - /** @var \Modules\FleetManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('FleetManagement'); + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); /** @var array $type */ foreach ($types as $type) { @@ -201,13 +211,74 @@ final class Installer extends InstallerAbstract return $vehicleTypes; } + /** + * Install inspection type + * + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createInspectionTypes(ApplicationAbstract $app, array $types) : array + { + /** @var array $inspectionTypes */ + $inspectionTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); + + /** @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->apiInspectionTypeCreate($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->apiInspectionTypeL11nCreate($request, $response); + } + } + + return $inspectionTypes; + } + /** * Install default attribute types * - * @param ApplicationAbstract $app Application - * @param array, is_required?:bool, is_custom_allowed?:bool, validation_pattern?:string, value_type?:string, values?:array}> $attributes Attribute definition + * @param ApplicationAbstract $app Application + * @param array $attributes Attribute definition * - * @return array + * @return array * * @since 1.0.0 */ @@ -216,8 +287,8 @@ final class Installer extends InstallerAbstract /** @var array $itemAttrType */ $itemAttrType = []; - /** @var \Modules\FleetManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('FleetManagement'); + /** @var \Modules\FleetManagement\Controller\ApiVehicleAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicleAttribute'); /** @var array $attribute */ foreach ($attributes as $attribute) { @@ -273,7 +344,7 @@ final class Installer extends InstallerAbstract * @param array $itemAttrType Attribute types * @param array, is_required?:bool, is_custom_allowed?:bool, validation_pattern?:string, value_type?:string, values?:array}> $attributes Attribute definition * - * @return array + * @return array * * @since 1.0.0 */ @@ -282,8 +353,8 @@ final class Installer extends InstallerAbstract /** @var array $itemAttrValue */ $itemAttrValue = []; - /** @var \Modules\FleetManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('FleetManagement'); + /** @var \Modules\FleetManagement\Controller\ApiVehicleAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicleAttribute'); foreach ($attributes as $attribute) { $itemAttrValue[$attribute['name']] = []; diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 0623738..614fe96 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -12,7 +12,7 @@ */ declare(strict_types=1); -use Modules\FleetManagement\Controller\ApiController; +use Modules\FleetManagement\Controller\Controller; use Modules\FleetManagement\Models\PermissionCategory; use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; @@ -20,30 +20,52 @@ use phpOMS\Router\RouteVerb; return [ '^.*/fleet/vehicle/find.*$' => [ [ - 'dest' => '\Modules\FleetManagement\Controller\ApiController:apiVehicleFind', + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleController:apiVehicleFind', 'verb' => RouteVerb::GET, 'permission' => [ - 'module' => ApiController::NAME, + 'module' => Controller::NAME, 'type' => PermissionType::READ, 'state' => PermissionCategory::VEHICLE, ], ], ], + '^.*/fleet/vehicle/attribute.*$' => [ [ - 'dest' => '\Modules\FleetManagement\Controller\ApiController:apiVehicleAttributeCreate', + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiVehicleAttributeCreate', 'verb' => RouteVerb::PUT, 'permission' => [ - 'module' => ApiController::NAME, + 'module' => Controller::NAME, 'type' => PermissionType::READ, 'state' => PermissionCategory::VEHICLE, ], ], [ - 'dest' => '\Modules\FleetManagement\Controller\ApiController:apiVehicleAttributeUpdate', + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiVehicleAttributeUpdate', 'verb' => RouteVerb::SET, 'permission' => [ - 'module' => ApiController::NAME, + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/driver/attribute.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiDriverAttributeCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiDriverAttributeUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, 'type' => PermissionType::READ, 'state' => PermissionCategory::VEHICLE, ], diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 5ba77d1..91b6c0c 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -75,6 +75,29 @@ return [ ], ], + '^.*/fleet/driver/attribute/type/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverAttributeTypeList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/driver/attribute/type\?.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverAttributeType', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/driver/list.*$' => [ [ 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverList', diff --git a/Controller/ApiDriverAttributeController.php b/Controller/ApiDriverAttributeController.php new file mode 100644 index 0000000..e00b002 --- /dev/null +++ b/Controller/ApiDriverAttributeController.php @@ -0,0 +1,534 @@ +validateDriverAttributeCreate($request))) { + $response->data['attribute_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attribute = $this->createDriverAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, DriverAttributeMapper::class, 'attribute', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); + } + + /** + * Method to create driver attribute from request. + * + * @param RequestAbstract $request Request + * + * @return Attribute + * + * @since 1.0.0 + */ + private function createDriverAttributeFromRequest(RequestAbstract $request) : Attribute + { + $attribute = new Attribute(); + $attribute->ref = (int) $request->getData('driver'); + $attribute->type = new NullAttributeType((int) $request->getData('type')); + + if ($request->hasData('value')) { + $attribute->value = new NullAttributeValue((int) $request->getData('value')); + } else { + $newRequest = clone $request; + $newRequest->setData('value', $request->getData('custom'), true); + + $value = $this->createAttributeValueFromRequest($newRequest); + + $attribute->value = $value; + } + + return $attribute; + } + + /** + * Validate driver attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = !$request->hasData('type')) + || ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom'))) + || ($val['driver'] = !$request->hasData('driver')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeUpdate($request))) { + $response->data['attribute_update'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $old = DriverAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateDriverAttributeFromRequest($request, $old->deepClone()); + $this->updateModel($request->header->account, $old, $new, DriverAttributeMapper::class, 'attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue()) { + $this->updateModel($request->header->account, $old->value, $new->value, DriverAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully updated', $new); + } + + /** + * Method to create driver attribute from request. + * + * @param RequestAbstract $request Request + * + * @return Attribute + * + * @since 1.0.0 + */ + private function updateDriverAttributeFromRequest(RequestAbstract $request, Attribute $attribute) : Attribute + { + if ($attribute->type->custom) { + if ($request->hasData('value')) { + // @question: we are overwriting the old value, could there be a use case where we want to create a new value and keep the old one? + $attribute->value->setValue($request->getData('value'), $attribute->type->datatype); + } + } else { + if ($request->hasData('value')) { + // @todo: fix by only accepting the value id to be used + // this is a workaround for now because the front end doesn't allow to dynamically show default values. + $value = $attribute->type->getDefaultByValue($request->getData('value')); + + if ($value->id !== 0) { + $attribute->value = $attribute->type->getDefaultByValue($request->getData('value')); + } + } + } + + return $attribute; + } + + /** + * Validate driver attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeUpdate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeTypeL11nCreate($request))) { + $response->data['attr_type_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createDriverAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, DriverAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create driver attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createDriverAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('type') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate driver attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeTypeCreate($request))) { + $response->data['attr_type_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, DriverAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); + } + + /** + * Method to create driver attribute from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeType + * + * @since 1.0.0 + */ + private function createAttributeTypeFromRequest(RequestAbstract $request) : AttributeType + { + $attrType = new AttributeType($request->getDataString('name') ?? ''); + $attrType->datatype = $request->getDataInt('datatype') ?? 0; + $attrType->custom = $request->getDataBool('custom') ?? false; + $attrType->isRequired = (bool) ($request->getData('is_required') ?? false); + $attrType->validationPattern = $request->getDataString('validation_pattern') ?? ''; + $attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + $attrType->setFields($request->getDataInt('fields') ?? 0); + + return $attrType; + } + + /** + * Validate driver attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['name'] = !$request->hasData('name')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeValueCreate($request))) { + $response->data['attr_value_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrValue = $this->createAttributeValueFromRequest($request); + $this->createModel($request->header->account, $attrValue, DriverAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + DriverAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); + } + + /** + * Method to create driver attribute value from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeValue + * + * @since 1.0.0 + */ + private function createAttributeValueFromRequest(RequestAbstract $request) : AttributeValue + { + /** @var AttributeType $type */ + $type = DriverAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = new AttributeValue(); + $attrValue->isDefault = $request->getDataBool('default') ?? false; + $attrValue->setValue($request->getData('value'), $type->datatype); + + if ($request->hasData('title')) { + $attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + } + + return $attrValue; + } + + /** + * Validate driver attribute value create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeValueCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = !$request->hasData('type')) + || ($val['value'] = !$request->hasData('value')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeValueL11nCreate($request))) { + $response->data['attr_value_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, DriverAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create driver attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('value') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate driver attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverAttributeValueL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['value'] = !$request->hasData('value')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to handle api driver attributes + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttribute(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverAttributeValueL11nCreate($request))) { + $response->data['attr_value_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, DriverAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } +} diff --git a/Controller/ApiDriverController.php b/Controller/ApiDriverController.php new file mode 100644 index 0000000..a955901 --- /dev/null +++ b/Controller/ApiDriverController.php @@ -0,0 +1,588 @@ +validateDriverCreate($request))) { + $response->data[$request->uri->__toString()] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + /** @var Driver $driver */ + $driver = $this->createDriverFromRequest($request); + $this->createModel($request->header->account, $driver, DriverMapper::class, 'driver', $request->getOrigin()); + + if (!empty($request->files) + || !empty($request->getDataJson('media')) + ) { + $this->createDriverMedia($driver, $request); + } + + $this->fillJsonResponse( + $request, + $response, + NotificationLevel::OK, + '', + $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'SucessfulCreate'), + $driver + ); + } + + /** + * Method to create driver from request. + * + * @param RequestAbstract $request Request + * + * @return Driver Returns the created driver from the request + * + * @since 1.0.0 + */ + public function createDriverFromRequest(RequestAbstract $request) : Driver + { + $driver = new Driver(); + $driver->account = new NullAccount($request->getDataInt('account') ?? 1); + $driver->status = (int) ($request->getDataInt('status') ?? DriverStatus::INACTIVE); + + return $driver; + } + + /** + * Create media files for driver + * + * @param Driver $driver Driver + * @param RequestAbstract $request Request incl. media do upload + * + * @return void + * + * @since 1.0.0 + */ + private function createDriverMedia(Driver $driver, RequestAbstract $request) : void + { + $path = $this->createDriverDir($driver); + + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'media', + '', + $request->getOrigin() + ); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + $collection = null; + + foreach ($mediaFiles as $file) { + /** @var \Modules\Media\Models\Media $media */ + $media = MediaMapper::get()->where('id', (int) $file)->limit(1)->execute(); + + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'media', + '', + $request->getOrigin() + ); + + $ref = new Reference(); + $ref->name = $media->name; + $ref->source = new NullMedia($media->id); + $ref->createdBy = new NullAccount($request->header->account); + $ref->setVirtualPath($path); + + $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $ref->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + } + + /** + * Validate driver create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateDriverCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['account'] = !$request->hasData('account')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a bill + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaAddToDriver(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateMediaAddToDriver($request))) { + $response->data[$request->uri->__toString()] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + /** @var \Modules\FleetManagement\Models\Driver\Driver $driver */ + $driver = DriverMapper::get()->where('id', (int) $request->getData('driver'))->execute(); + $path = $this->createDriverDir($driver); + + $uploaded = []; + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH, + hasAccountRelation: false, + readContent: (bool) ($request->getData('parse_content') ?? false) + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($request->hasData('type')) { + $this->createModelRelation( + $request->header->account, + $media->id, + $request->getDataInt('type'), + MediaMapper::class, + 'types', + '', + $request->getOrigin() + ); + } + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path, + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + foreach ($mediaFiles as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + (int) $media, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + } + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media added to driver.', [ + 'upload' => $uploaded, + 'media' => $mediaFiles, + ]); + } + + /** + * Create media directory path + * + * @param Driver $driver Driver + * + * @return string + * + * @since 1.0.0 + */ + private function createDriverDir(Driver $driver) : string + { + return '/Modules/FleetManagement/Driver/' + . $this->app->unitId . '/' + . $driver->id; + } + + /** + * Method to validate bill creation from request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateMediaAddToDriver(RequestAbstract $request) : array + { + $val = []; + if (($val['media'] = (!$request->hasData('media') && empty($request->files))) + || ($val['driver'] = !$request->hasData('driver')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a driver + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverInspectionTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDriverInspectionTypeCreate($request))) { + $response->data[$request->uri->__toString()] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + /** @var BaseStringL11nType $driver */ + $driver = $this->createDriverInspectionTypeFromRequest($request); + $this->createModel($request->header->account, $driver, DriverInspectionTypeMapper::class, 'inspection_type', $request->getOrigin()); + + $this->fillJsonResponse( + $request, + $response, + NotificationLevel::OK, + '', + $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'SucessfulCreate'), + $driver + ); + } + + /** + * Method to create driver from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11nType Returns the created driver from the request + * + * @since 1.0.0 + */ + public function createDriverInspectionTypeFromRequest(RequestAbstract $request) : BaseStringL11nType + { + $type = new BaseStringL11nType(); + $type->title = $request->getDataString('name') ?? ''; + $type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + + return $type; + } + + /** + * Validate driver create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateDriverInspectionTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['title'] = !$request->hasData('title')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + 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->header->status = RequestStatusCode::R_400; + + return; + } + + $typeL11n = $this->createDriverInspectionTypeL11nFromRequest($request); + $this->createModel($request->header->account, $typeL11n, DriverInspectionTypeL11nMapper::class, 'inspection_type_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $typeL11n); + } + + /** + * Method to create driver attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createDriverInspectionTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $typeL11n = new BaseStringL11n(); + $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $typeL11n->content = $request->getDataString('title') ?? ''; + + return $typeL11n; + } + + /** + * Validate driver attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverInspectionTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item files + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateNoteCreate($request))) { + $response->data['driver_note_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $request->setData('virtualpath', '/Modules/FleetManagement/Items/' . $request->getData('id'), true); + $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + + $model = $responseData['response']; + $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, DriverMapper::class, 'notes', '', $request->getOrigin()); + } + + /** + * Validate item note create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateNoteCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } +} diff --git a/Controller/ApiVehicleAttributeController.php b/Controller/ApiVehicleAttributeController.php new file mode 100644 index 0000000..841f726 --- /dev/null +++ b/Controller/ApiVehicleAttributeController.php @@ -0,0 +1,534 @@ +validateVehicleAttributeCreate($request))) { + $response->data['attribute_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attribute = $this->createVehicleAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, VehicleAttributeMapper::class, 'attribute', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); + } + + /** + * Method to create vehicle attribute from request. + * + * @param RequestAbstract $request Request + * + * @return Attribute + * + * @since 1.0.0 + */ + private function createVehicleAttributeFromRequest(RequestAbstract $request) : Attribute + { + $attribute = new Attribute(); + $attribute->ref = (int) $request->getData('vehicle'); + $attribute->type = new NullAttributeType((int) $request->getData('type')); + + if ($request->hasData('value')) { + $attribute->value = new NullAttributeValue((int) $request->getData('value')); + } else { + $newRequest = clone $request; + $newRequest->setData('value', $request->getData('custom'), true); + + $value = $this->createAttributeValueFromRequest($newRequest); + + $attribute->value = $value; + } + + return $attribute; + } + + /** + * Validate vehicle attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = !$request->hasData('type')) + || ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom'))) + || ($val['vehicle'] = !$request->hasData('vehicle')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeUpdate($request))) { + $response->data['attribute_update'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $old = VehicleAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateVehicleAttributeFromRequest($request, $old->deepClone()); + $this->updateModel($request->header->account, $old, $new, VehicleAttributeMapper::class, 'attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue()) { + $this->updateModel($request->header->account, $old->value, $new->value, VehicleAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully updated', $new); + } + + /** + * Method to create vehicle attribute from request. + * + * @param RequestAbstract $request Request + * + * @return Attribute + * + * @since 1.0.0 + */ + private function updateVehicleAttributeFromRequest(RequestAbstract $request, Attribute $attribute) : Attribute + { + if ($attribute->type->custom) { + if ($request->hasData('value')) { + // @question: we are overwriting the old value, could there be a use case where we want to create a new value and keep the old one? + $attribute->value->setValue($request->getData('value'), $attribute->type->datatype); + } + } else { + if ($request->hasData('value')) { + // @todo: fix by only accepting the value id to be used + // this is a workaround for now because the front end doesn't allow to dynamically show default values. + $value = $attribute->type->getDefaultByValue($request->getData('value')); + + if ($value->id !== 0) { + $attribute->value = $attribute->type->getDefaultByValue($request->getData('value')); + } + } + } + + return $attribute; + } + + /** + * Validate vehicle attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeUpdate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeTypeL11nCreate($request))) { + $response->data['attr_type_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createVehicleAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, VehicleAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create vehicle attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createVehicleAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('type') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate vehicle attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeTypeCreate($request))) { + $response->data['attr_type_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, VehicleAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); + } + + /** + * Method to create vehicle attribute from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeType + * + * @since 1.0.0 + */ + private function createAttributeTypeFromRequest(RequestAbstract $request) : AttributeType + { + $attrType = new AttributeType($request->getDataString('name') ?? ''); + $attrType->datatype = $request->getDataInt('datatype') ?? 0; + $attrType->custom = $request->getDataBool('custom') ?? false; + $attrType->isRequired = (bool) ($request->getData('is_required') ?? false); + $attrType->validationPattern = $request->getDataString('validation_pattern') ?? ''; + $attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + $attrType->setFields($request->getDataInt('fields') ?? 0); + + return $attrType; + } + + /** + * Validate vehicle attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['name'] = !$request->hasData('name')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeValueCreate($request))) { + $response->data['attr_value_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrValue = $this->createAttributeValueFromRequest($request); + $this->createModel($request->header->account, $attrValue, VehicleAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + VehicleAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); + } + + /** + * Method to create vehicle attribute value from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeValue + * + * @since 1.0.0 + */ + private function createAttributeValueFromRequest(RequestAbstract $request) : AttributeValue + { + /** @var AttributeType $type */ + $type = VehicleAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = new AttributeValue(); + $attrValue->isDefault = $request->getDataBool('default') ?? false; + $attrValue->setValue($request->getData('value'), $type->datatype); + + if ($request->hasData('title')) { + $attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + } + + return $attrValue; + } + + /** + * Validate vehicle attribute value create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeValueCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = !$request->hasData('type')) + || ($val['value'] = !$request->hasData('value')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeValueL11nCreate($request))) { + $response->data['attr_value_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, VehicleAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create vehicle attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('value') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate vehicle attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleAttributeValueL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['value'] = !$request->hasData('value')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to handle api vehicle attributes + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttribute(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateVehicleAttributeValueL11nCreate($request))) { + $response->data['attr_value_l11n_create'] = new FormValidation($val); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, VehicleAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } +} diff --git a/Controller/ApiController.php b/Controller/ApiVehicleController.php similarity index 61% rename from Controller/ApiController.php rename to Controller/ApiVehicleController.php index b52eeb4..59c45d3 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiVehicleController.php @@ -15,21 +15,11 @@ declare(strict_types=1); namespace Modules\FleetManagement\Controller; use Modules\Admin\Models\NullAccount; -use Modules\Attribute\Models\Attribute; -use Modules\Attribute\Models\AttributeType; -use Modules\Attribute\Models\AttributeValue; -use Modules\Attribute\Models\NullAttributeType; -use Modules\Attribute\Models\NullAttributeValue; use Modules\FleetManagement\Models\FuelTypeL11nMapper; use Modules\FleetManagement\Models\FuelTypeMapper; use Modules\FleetManagement\Models\InspectionTypeL11nMapper; use Modules\FleetManagement\Models\InspectionTypeMapper; use Modules\FleetManagement\Models\Vehicle; -use Modules\FleetManagement\Models\VehicleAttributeMapper; -use Modules\FleetManagement\Models\VehicleAttributeTypeL11nMapper; -use Modules\FleetManagement\Models\VehicleAttributeTypeMapper; -use Modules\FleetManagement\Models\VehicleAttributeValueL11nMapper; -use Modules\FleetManagement\Models\VehicleAttributeValueMapper; use Modules\FleetManagement\Models\VehicleMapper; use Modules\FleetManagement\Models\VehicleStatus; use Modules\FleetManagement\Models\VehicleTypeL11nMapper; @@ -39,6 +29,7 @@ use Modules\Media\Models\MediaMapper; use Modules\Media\Models\NullMedia; use Modules\Media\Models\PathSettings; use Modules\Media\Models\Reference; +use Modules\Media\Models\ReferenceMapper; use phpOMS\Localization\BaseStringL11n; use phpOMS\Localization\BaseStringL11nType; use phpOMS\Localization\ISO639x1Enum; @@ -57,7 +48,7 @@ use phpOMS\Model\Message\FormValidation; * @link https://jingga.app * @since 1.0.0 */ -final class ApiController extends Controller +final class ApiVehicleController extends Controller { /** * Api method to create a vehicle @@ -449,7 +440,7 @@ final class ApiController extends Controller ); if ($collection === null) { - /** @var \Modules\Media\Models\Media $media */ + /** @var \Modules\Media\Models\Collection $collection */ $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); if ($collection->id === 0) { @@ -499,7 +490,7 @@ final class ApiController extends Controller $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); if ($collection === null) { - /** @var \Modules\Media\Models\Media $media */ + /** @var \Modules\Media\Models\Collection $collection */ $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); if ($collection->id === 0) { @@ -545,496 +536,6 @@ final class ApiController extends Controller return []; } - /** - * Api method to create vehicle attribute - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeCreate($request))) { - $response->data['attribute_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attribute = $this->createVehicleAttributeFromRequest($request); - $this->createModel($request->header->account, $attribute, VehicleAttributeMapper::class, 'attribute', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); - } - - /** - * Method to create vehicle attribute from request. - * - * @param RequestAbstract $request Request - * - * @return Attribute - * - * @since 1.0.0 - */ - private function createVehicleAttributeFromRequest(RequestAbstract $request) : Attribute - { - $attribute = new Attribute(); - $attribute->ref = (int) $request->getData('vehicle'); - $attribute->type = new NullAttributeType((int) $request->getData('type')); - - if ($request->hasData('value')) { - $attribute->value = new NullAttributeValue((int) $request->getData('value')); - } else { - $newRequest = clone $request; - $newRequest->setData('value', $request->getData('custom'), true); - - $value = $this->createAttributeValueFromRequest($newRequest); - - $attribute->value = $value; - } - - return $attribute; - } - - /** - * Validate vehicle attribute create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['type'] = !$request->hasData('type')) - || ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom'))) - || ($val['vehicle'] = !$request->hasData('vehicle')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create vehicle attribute - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeUpdate($request))) { - $response->data['attribute_update'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $old = VehicleAttributeMapper::get() - ->with('type') - ->with('type/defaults') - ->with('value') - ->where('id', (int) $request->getData('id')) - ->execute(); - - $new = $this->updateVehicleAttributeFromRequest($request, $old->deepClone()); - $this->updateModel($request->header->account, $old, $new, VehicleAttributeMapper::class, 'attribute', $request->getOrigin()); - - if ($new->value->getValue() !== $old->value->getValue()) { - $this->updateModel($request->header->account, $old->value, $new->value, VehicleAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); - } - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully updated', $new); - } - - /** - * Method to create vehicle attribute from request. - * - * @param RequestAbstract $request Request - * - * @return Attribute - * - * @since 1.0.0 - */ - private function updateVehicleAttributeFromRequest(RequestAbstract $request, Attribute $attribute) : Attribute - { - if ($attribute->type->custom) { - if ($request->hasData('value')) { - // @question: we are overwriting the old value, could there be a use case where we want to create a new value and keep the old one? - $attribute->value->setValue($request->getData('value'), $attribute->type->datatype); - } - } else { - if ($request->hasData('value')) { - // @todo: fix by only accepting the value id to be used - // this is a workaround for now because the front end doesn't allow to dynamically show default values. - $value = $attribute->type->getDefaultByValue($request->getData('value')); - - if ($value->id !== 0) { - $attribute->value = $attribute->type->getDefaultByValue($request->getData('value')); - } - } - } - - return $attribute; - } - - /** - * Validate vehicle attribute create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeUpdate(RequestAbstract $request) : array - { - $val = []; - if (($val['id'] = !$request->hasData('id')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create vehicle attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeTypeL11nCreate($request))) { - $response->data['attr_type_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrL11n = $this->createVehicleAttributeTypeL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, VehicleAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); - } - - /** - * Method to create vehicle attribute l11n from request. - * - * @param RequestAbstract $request Request - * - * @return BaseStringL11n - * - * @since 1.0.0 - */ - private function createVehicleAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n - { - $attrL11n = new BaseStringL11n(); - $attrL11n->ref = $request->getDataInt('type') ?? 0; - $attrL11n->setLanguage( - $request->getDataString('language') ?? $request->header->l11n->language - ); - $attrL11n->content = $request->getDataString('title') ?? ''; - - return $attrL11n; - } - - /** - * Validate vehicle attribute l11n create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeTypeL11nCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['type'] = !$request->hasData('type')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create vehicle attribute type - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeTypeCreate($request))) { - $response->data['attr_type_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrType = $this->createAttributeTypeFromRequest($request); - $this->createModel($request->header->account, $attrType, VehicleAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); - } - - /** - * Method to create vehicle attribute from request. - * - * @param RequestAbstract $request Request - * - * @return AttributeType - * - * @since 1.0.0 - */ - private function createAttributeTypeFromRequest(RequestAbstract $request) : AttributeType - { - $attrType = new AttributeType($request->getDataString('name') ?? ''); - $attrType->datatype = $request->getDataInt('datatype') ?? 0; - $attrType->custom = $request->getDataBool('custom') ?? false; - $attrType->isRequired = (bool) ($request->getData('is_required') ?? false); - $attrType->validationPattern = $request->getDataString('validation_pattern') ?? ''; - $attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); - $attrType->setFields($request->getDataInt('fields') ?? 0); - - return $attrType; - } - - /** - * Validate vehicle attribute create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeTypeCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['name'] = !$request->hasData('name')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create vehicle attribute value - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeValueCreate($request))) { - $response->data['attr_value_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrValue = $this->createAttributeValueFromRequest($request); - $this->createModel($request->header->account, $attrValue, VehicleAttributeValueMapper::class, 'attr_value', $request->getOrigin()); - - if ($attrValue->isDefault) { - $this->createModelRelation( - $request->header->account, - (int) $request->getData('type'), - $attrValue->id, - VehicleAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() - ); - } - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); - } - - /** - * Method to create vehicle attribute value from request. - * - * @param RequestAbstract $request Request - * - * @return AttributeValue - * - * @since 1.0.0 - */ - private function createAttributeValueFromRequest(RequestAbstract $request) : AttributeValue - { - /** @var AttributeType $type */ - $type = VehicleAttributeTypeMapper::get() - ->where('id', $request->getDataInt('type') ?? 0) - ->execute(); - - $attrValue = new AttributeValue(); - $attrValue->isDefault = $request->getDataBool('default') ?? false; - $attrValue->setValue($request->getData('value'), $type->datatype); - - if ($request->hasData('title')) { - $attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); - } - - return $attrValue; - } - - /** - * Validate vehicle attribute value create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeValueCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['type'] = !$request->hasData('type')) - || ($val['value'] = !$request->hasData('value')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create vehicle attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeValueL11nCreate($request))) { - $response->data['attr_value_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrL11n = $this->createAttributeValueL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, VehicleAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); - } - - /** - * Method to create vehicle attribute l11n from request. - * - * @param RequestAbstract $request Request - * - * @return BaseStringL11n - * - * @since 1.0.0 - */ - private function createAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n - { - $attrL11n = new BaseStringL11n(); - $attrL11n->ref = $request->getDataInt('value') ?? 0; - $attrL11n->setLanguage( - $request->getDataString('language') ?? $request->header->l11n->language - ); - $attrL11n->content = $request->getDataString('title') ?? ''; - - return $attrL11n; - } - - /** - * Validate vehicle attribute l11n create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateVehicleAttributeValueL11nCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['value'] = !$request->hasData('value')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to handle api vehicle attributes - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiVehicleAttribute(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateVehicleAttributeValueL11nCreate($request))) { - $response->data['attr_value_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrL11n = $this->createAttributeValueL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, VehicleAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); - } - /** * Api method to create a bill * @@ -1100,6 +601,7 @@ final class ApiController extends Controller } if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); if ($collection->id === 0) { @@ -1202,9 +704,9 @@ final class ApiController extends Controller return; } - /** @var BaseStringL11nType $vehicle */ - $vehicle = $this->createInspectionTypeFromRequest($request); - $this->createModel($request->header->account, $vehicle, InspectionTypeMapper::class, 'inspection_type', $request->getOrigin()); + /** @var BaseStringL11nType $inspection */ + $inspection = $this->createInspectionTypeFromRequest($request); + $this->createModel($request->header->account, $inspection, InspectionTypeMapper::class, 'inspection_type', $request->getOrigin()); $this->fillJsonResponse( $request, @@ -1212,7 +714,7 @@ final class ApiController extends Controller NotificationLevel::OK, '', $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'SucessfulCreate'), - $vehicle + $inspection ); } @@ -1341,7 +843,7 @@ final class ApiController extends Controller { if (!empty($val = $this->validateNoteCreate($request))) { $response->data['vehicle_note_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; return; } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 3baac73..809ba4f 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -159,10 +159,10 @@ final class BackendController extends Controller SettingsEnum::DEFAULT_LOCALIZATION, ]); - $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $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['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); $view->data['vehicle-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); return $view; @@ -193,6 +193,8 @@ final class BackendController extends Controller ->with('attributes/type') ->with('attributes/value') ->with('attributes/type/l11n') + ->with('files') + ->with('files/types') ->with('type') ->with('type/l11n') ->with('fuelType') @@ -236,6 +238,7 @@ final class BackendController extends Controller $units = UnitMapper::getAll() ->execute(); + $view->data['units'] = $units; /** @var \Model\Setting $settings */ @@ -243,10 +246,10 @@ final class BackendController extends Controller SettingsEnum::DEFAULT_LOCALIZATION, ]); - $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $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['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); $view->data['vehicle-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); return $view; diff --git a/Models/Driver/Driver.php b/Models/Driver/Driver.php new file mode 100644 index 0000000..c08ddab --- /dev/null +++ b/Models/Driver/Driver.php @@ -0,0 +1,79 @@ + $this->id, + 'status' => $this->status, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } + + use \Modules\Media\Models\MediaListTrait; + use \Modules\Editor\Models\EditorDocListTrait; + use \Modules\Attribute\Models\AttributeHolderTrait; +} diff --git a/Models/Driver/DriverAttributeMapper.php b/Models/Driver/DriverAttributeMapper.php new file mode 100644 index 0000000..d60bc02 --- /dev/null +++ b/Models/Driver/DriverAttributeMapper.php @@ -0,0 +1,86 @@ + + */ +final class DriverAttributeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + 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_type' => ['name' => 'fleetmgmt_driver_attr_type', 'type' => 'int', 'internal' => 'type'], + 'fleetmgmt_driver_attr_value' => ['name' => 'fleetmgmt_driver_attr_value', 'type' => 'int', 'internal' => 'value'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => DriverAttributeTypeMapper::class, + 'external' => 'fleetmgmt_driver_attr_type', + ], + 'value' => [ + 'mapper' => DriverAttributeValueMapper::class, + 'external' => 'fleetmgmt_driver_attr_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Attribute::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_id'; +} diff --git a/Models/Driver/DriverAttributeTypeL11nMapper.php b/Models/Driver/DriverAttributeTypeL11nMapper.php new file mode 100644 index 0000000..2ef0efc --- /dev/null +++ b/Models/Driver/DriverAttributeTypeL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class DriverAttributeTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_type_l11n_id' => ['name' => 'fleetmgmt_driver_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_type_l11n_title' => ['name' => 'fleetmgmt_driver_attr_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_attr_type_l11n_type' => ['name' => 'fleetmgmt_driver_attr_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_type_l11n_lang' => ['name' => 'fleetmgmt_driver_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Driver/DriverAttributeTypeMapper.php b/Models/Driver/DriverAttributeTypeMapper.php new file mode 100644 index 0000000..a3fba64 --- /dev/null +++ b/Models/Driver/DriverAttributeTypeMapper.php @@ -0,0 +1,94 @@ + + */ +final class DriverAttributeTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_type_id' => ['name' => 'fleetmgmt_driver_attr_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_type_name' => ['name' => 'fleetmgmt_driver_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'fleetmgmt_driver_attr_type_datatype' => ['name' => 'fleetmgmt_driver_attr_type_datatype', 'type' => 'int', 'internal' => 'datatype'], + 'fleetmgmt_driver_attr_type_fields' => ['name' => 'fleetmgmt_driver_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], + 'fleetmgmt_driver_attr_type_custom' => ['name' => 'fleetmgmt_driver_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], + 'fleetmgmt_driver_attr_type_pattern' => ['name' => 'fleetmgmt_driver_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], + 'fleetmgmt_driver_attr_type_required' => ['name' => 'fleetmgmt_driver_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverAttributeTypeL11nMapper::class, + 'table' => 'fleetmgmt_driver_attr_type_l11n', + 'self' => 'fleetmgmt_driver_attr_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + 'defaults' => [ + 'mapper' => DriverAttributeValueMapper::class, + 'table' => 'fleetmgmt_driver_attr_default', + 'self' => 'fleetmgmt_driver_attr_default_type', + 'external' => 'fleetmgmt_driver_attr_default_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_type_id'; +} diff --git a/Models/Driver/DriverAttributeValueL11nMapper.php b/Models/Driver/DriverAttributeValueL11nMapper.php new file mode 100644 index 0000000..abd11de --- /dev/null +++ b/Models/Driver/DriverAttributeValueL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class DriverAttributeValueL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_value_l11n_id' => ['name' => 'fleetmgmt_driver_attr_value_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_value_l11n_title' => ['name' => 'fleetmgmt_driver_attr_value_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_attr_value_l11n_value' => ['name' => 'fleetmgmt_driver_attr_value_l11n_value', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_value_l11n_lang' => ['name' => 'fleetmgmt_driver_attr_value_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_value_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_value_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Driver/DriverAttributeValueMapper.php b/Models/Driver/DriverAttributeValueMapper.php new file mode 100644 index 0000000..08df185 --- /dev/null +++ b/Models/Driver/DriverAttributeValueMapper.php @@ -0,0 +1,89 @@ + + */ +final class DriverAttributeValueMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_value_id' => ['name' => 'fleetmgmt_driver_attr_value_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_value_default' => ['name' => 'fleetmgmt_driver_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], + 'fleetmgmt_driver_attr_value_valueStr' => ['name' => 'fleetmgmt_driver_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], + 'fleetmgmt_driver_attr_value_valueInt' => ['name' => 'fleetmgmt_driver_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], + 'fleetmgmt_driver_attr_value_valueDec' => ['name' => 'fleetmgmt_driver_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], + 'fleetmgmt_driver_attr_value_valueDat' => ['name' => 'fleetmgmt_driver_attr_value_valueDat', 'type' => 'DateTime', 'internal' => 'valueDat'], + 'fleetmgmt_driver_attr_value_unit' => ['name' => 'fleetmgmt_driver_attr_value_unit', 'type' => 'string', 'internal' => 'unit'], + 'fleetmgmt_driver_attr_value_deptype' => ['name' => 'fleetmgmt_driver_attr_value_deptype', 'type' => 'int', 'internal' => 'dependingAttributeType'], + 'fleetmgmt_driver_attr_value_depvalue' => ['name' => 'fleetmgmt_driver_attr_value_depvalue', 'type' => 'int', 'internal' => 'dependingAttributeValue'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverAttributeValueL11nMapper::class, + 'table' => 'fleetmgmt_driver_attr_value_l11n', + 'self' => 'fleetmgmt_driver_attr_value_l11n_value', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeValue::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_value'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_value_id'; +} diff --git a/Models/Driver/DriverInspection.php b/Models/Driver/DriverInspection.php new file mode 100644 index 0000000..d3212bf --- /dev/null +++ b/Models/Driver/DriverInspection.php @@ -0,0 +1,78 @@ +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 new file mode 100644 index 0000000..2803632 --- /dev/null +++ b/Models/Driver/DriverInspectionMapper.php @@ -0,0 +1,84 @@ + + */ +final class DriverInspectionMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_id' => ['name' => 'fleetmgmt_driver_inspection_id', 'type' => 'int', 'internal' => 'id'], + '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_type' => ['name' => 'fleetmgmt_driver_inspection_type', 'type' => 'int', 'internal' => 'type'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => DriverInspectionTypeMapper::class, + 'external' => 'fleetmgmt_driver_inspection_type', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = DriverInspection::class; +} diff --git a/Models/Driver/DriverInspectionStatus.php b/Models/Driver/DriverInspectionStatus.php new file mode 100644 index 0000000..d5b0364 --- /dev/null +++ b/Models/Driver/DriverInspectionStatus.php @@ -0,0 +1,36 @@ + + */ +final class DriverInspectionTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_type_l11n_id' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_type_l11n_title' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_inspection_type_l11n_type' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_inspection_type_l11n_lang' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Driver/DriverInspectionTypeMapper.php b/Models/Driver/DriverInspectionTypeMapper.php new file mode 100644 index 0000000..3a21278 --- /dev/null +++ b/Models/Driver/DriverInspectionTypeMapper.php @@ -0,0 +1,83 @@ + + */ +final class DriverInspectionTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_type_id' => ['name' => 'fleetmgmt_driver_inspection_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_type_name' => ['name' => 'fleetmgmt_driver_inspection_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverInspectionTypeL11nMapper::class, + 'table' => 'fleetmgmt_driver_inspection_type_l11n', + 'self' => 'fleetmgmt_driver_inspection_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11nType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_type_id'; +} diff --git a/Models/Driver/DriverMapper.php b/Models/Driver/DriverMapper.php new file mode 100644 index 0000000..bc3ff1f --- /dev/null +++ b/Models/Driver/DriverMapper.php @@ -0,0 +1,102 @@ + + */ +final class DriverMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_id' => ['name' => 'fleetmgmt_driver_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_status' => ['name' => 'fleetmgmt_driver_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_driver_account' => ['name' => 'fleetmgmt_driver_account', 'type' => 'int', 'internal' => 'account'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'files' => [ + 'mapper' => MediaMapper::class, + 'table' => 'fleetmgmt_driver_media', + 'external' => 'fleetmgmt_driver_media_media', + 'self' => 'fleetmgmt_driver_media_vehicle', + ], + 'attributes' => [ + 'mapper' => DriverAttributeMapper::class, + 'table' => 'fleetmgmt_driver_attr', + 'self' => 'fleetmgmt_driver_attr_item', + 'external' => null, + ], + 'notes' => [ + 'mapper' => EditorDocMapper::class, /* mapper of the related object */ + 'table' => 'fleetmgmt_driver_note', /* table of the related object, null if no relation table is used (many->1) */ + 'external' => 'fleetmgmt_driver_note_doc', + 'self' => 'fleetmgmt_driver_note_driver', + ], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'account' => [ + 'mapper' => AccountMapper::class, + 'external' => 'fleetmgmt_driver_account', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_id'; +} diff --git a/Models/Driver/DriverStatus.php b/Models/Driver/DriverStatus.php new file mode 100644 index 0000000..2a18e6b --- /dev/null +++ b/Models/Driver/DriverStatus.php @@ -0,0 +1,34 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/Driver/NullDriverInspection.php b/Models/Driver/NullDriverInspection.php new file mode 100644 index 0000000..746820f --- /dev/null +++ b/Models/Driver/NullDriverInspection.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/Inspection.php b/Models/Inspection.php index be899ab..c22e632 100644 --- a/Models/Inspection.php +++ b/Models/Inspection.php @@ -14,6 +14,8 @@ declare(strict_types=1); namespace Modules\FleetManagement\Models; +use phpOMS\Localization\BaseStringL11nType; + /** * Inspection class. * @@ -38,16 +40,39 @@ class Inspection implements \JsonSerializable /** * Inspectio interval in months - * + * * @var int * @since 1.0.0 */ public int $interval = 0; + /** + * Constructor + * + * @since 1.0.0 + */ public function __construct() { $this->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/InspectionTypeMapper.php b/Models/InspectionTypeMapper.php index f7df79f..36d02cc 100644 --- a/Models/InspectionTypeMapper.php +++ b/Models/InspectionTypeMapper.php @@ -38,7 +38,7 @@ final class InspectionTypeMapper extends DataMapperFactory */ public const COLUMNS = [ 'fleetmgmt_inspection_type_id' => ['name' => 'fleetmgmt_inspection_type_id', 'type' => 'int', 'internal' => 'id'], - 'fleetmgmt_inspection_type_name' => ['name' => 'fleetmgmt_inspection_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'fleetmgmt_inspection_type_name' => ['name' => 'fleetmgmt_inspection_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], ]; /** diff --git a/Models/License.php b/Models/License.php new file mode 100644 index 0000000..e69de29 diff --git a/Models/LicenseType.php b/Models/LicenseType.php new file mode 100644 index 0000000..e69de29 diff --git a/Models/NullInspection.php b/Models/NullInspection.php index e69de29..2b55a97 100644 --- a/Models/NullInspection.php +++ b/Models/NullInspection.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/Vehicle.php b/Models/Vehicle.php index 80f67a0..35f5c17 100644 --- a/Models/Vehicle.php +++ b/Models/Vehicle.php @@ -50,6 +50,11 @@ class Vehicle implements \JsonSerializable public \DateTimeImmutable $createdAt; + /** + * Constructor. + * + * @since 1.0.0 + */ public function __construct() { $this->createdAt = new \DateTimeImmutable('now'); @@ -74,7 +79,7 @@ class Vehicle implements \JsonSerializable { return $this->toArray(); } - + use \Modules\Media\Models\MediaListTrait; use \Modules\Editor\Models\EditorDocListTrait; use \Modules\Attribute\Models\AttributeHolderTrait; diff --git a/Models/VehicleMapper.php b/Models/VehicleMapper.php index 6c2659f..4b46bab 100644 --- a/Models/VehicleMapper.php +++ b/Models/VehicleMapper.php @@ -70,9 +70,9 @@ final class VehicleMapper extends DataMapperFactory ], 'notes' => [ 'mapper' => EditorDocMapper::class, /* mapper of the related object */ - 'table' => 'bizexpenses_expense_note', /* table of the related object, null if no relation table is used (many->1) */ - 'external' => 'bizexpenses_expense_note_doc', - 'self' => 'bizexpenses_expense_note_expense', + 'table' => 'fleetmgmt_vehicle_note', /* table of the related object, null if no relation table is used (many->1) */ + 'external' => 'fleetmgmt_vehicle_note_doc', + 'self' => 'fleetmgmt_vehicle_note_vehicle', ], ];