From ade1c110b3368a281b1de629e06b2984da1cbbd0 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Mon, 28 Aug 2023 22:06:34 +0000 Subject: [PATCH] update --- Admin/Install/Navigation.install.json | 22 ++-- Admin/Install/db.json | 15 ++- Admin/Routes/Web/Api.php | 6 +- Admin/Routes/Web/Backend.php | 10 +- Controller/ApiEquipmentController.php | 151 ++++++++++++++++++++++++-- Controller/BackendController.php | 4 +- Models/Inspection.php | 14 ++- Models/InspectionMapper.php | 7 +- tests/Autoloader.php | 4 +- 9 files changed, 196 insertions(+), 37 deletions(-) diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 058f811..9987e05 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -19,7 +19,7 @@ "type": 2, "subtype": 1, "name": "Equipments", - "uri": "{/base}/equipment/equipment/list", + "uri": "{/base}/equipment/list", "target": "self", "icon": null, "order": 1, @@ -29,11 +29,11 @@ "children": [ { "id": 1008402101, - "pid": "/equipment/equipment", + "pid": "/equipment", "type": 3, "subtype": 1, "name": "List", - "uri": "{/base}/equipment/equipment/list", + "uri": "{/base}/equipment/list", "target": "self", "icon": null, "order": 1, @@ -44,11 +44,11 @@ }, { "id": 1008402201, - "pid": "/equipment/equipment", + "pid": "/equipment", "type": 3, "subtype": 1, "name": "Create", - "uri": "{/base}/equipment/equipment/create?{?}", + "uri": "{/base}/equipment/create?{?}", "target": "self", "icon": null, "order": 1, @@ -94,7 +94,7 @@ "type": 3, "subtype": 1, "name": "EquipmentInspectionTypes", - "uri": "{/base}/equipment/equipment/inspection/type/list?{?}", + "uri": "{/base}/equipment/inspection/type/list?{?}", "target": "self", "icon": null, "order": 5, @@ -111,7 +111,7 @@ "type": 2, "subtype": 1, "name": "EquipmentAttributes", - "uri": "{/base}/equipment/equipment/attribute/type/list?{?}", + "uri": "{/base}/equipment/attribute/type/list?{?}", "target": "self", "icon": null, "order": 5, @@ -121,11 +121,11 @@ "children": [ { "id": 1008405101, - "pid": "/equipment/equipment/attribute", + "pid": "/equipment/attribute", "type": 3, "subtype": 1, "name": "Types", - "uri": "{/base}/equipment/equipment/attribute/type/list?{?}", + "uri": "{/base}/equipment/attribute/type/list?{?}", "target": "self", "icon": null, "order": 15, @@ -136,11 +136,11 @@ }, { "id": 1008405201, - "pid": "/equipment/equipment/attribute", + "pid": "/equipment/attribute", "type": 3, "subtype": 1, "name": "Values", - "uri": "{/base}/equipment/equipment/attribute/value/list?{?}", + "uri": "{/base}/equipment/attribute/value/list?{?}", "target": "self", "icon": null, "order": 15, diff --git a/Admin/Install/db.json b/Admin/Install/db.json index b33da18..03ee792 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -171,7 +171,7 @@ }, "equipmgmt_equipment_inspection_interval": { "name": "equipmgmt_equipment_inspection_interval", - "type": "TINYINT(3)", + "type": "INT", "null": false }, "equipmgmt_equipment_inspection_next": { @@ -180,12 +180,25 @@ "null": true, "default": null }, + "equipmgmt_equipment_inspection_date": { + "name": "equipmgmt_equipment_inspection_date", + "type": "DATETIME", + "null": true, + "default": null + }, "equipmgmt_equipment_inspection_type": { "name": "equipmgmt_equipment_inspection_type", "type": "INT", "null": false, "foreignTable": "equipmgmt_inspection_type", "foreignKey": "equipmgmt_inspection_type_id" + }, + "equipmgmt_equipment_inspection_driver": { + "name": "equipmgmt_equipment_inspection_driver", + "type": "INT", + "null": false, + "foreignTable": "equipmgmt_equipment", + "foreignKey": "equipmgmt_equipment_id" } } }, diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 45f6828..885b5bc 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; return [ - '^.*/equipment/equipment/find.*$' => [ + '^.*/equipment/find.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentController:apiEquipmentFind', 'verb' => RouteVerb::GET, @@ -30,7 +30,7 @@ return [ ], ], - '^.*/equipment/equipment/attribute.*$' => [ + '^.*/equipment/attribute.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiEquipmentAttributeCreate', 'verb' => RouteVerb::PUT, @@ -51,7 +51,7 @@ return [ ], ], - '^.*/equipment/equipment/note.*$' => [ + '^.*/equipment/note.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiNoteCreate', 'verb' => RouteVerb::PUT, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 3d4ea1d..85776ec 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; return [ - '^.*/equipment/equipment/attribute/type/list.*$' => [ + '^.*/equipment/attribute/type/list.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeTypeList', 'verb' => RouteVerb::GET, @@ -29,7 +29,7 @@ return [ ], ], ], - '^.*/equipment/equipment/attribute/type\?.*$' => [ + '^.*/equipment/attribute/type\?.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeType', 'verb' => RouteVerb::GET, @@ -41,7 +41,7 @@ return [ ], ], - '^.*/equipment/equipment/list.*$' => [ + '^.*/equipment/list.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentList', 'verb' => RouteVerb::GET, @@ -52,7 +52,7 @@ return [ ], ], ], - '^.*/equipment/equipment/create.*$' => [ + '^.*/equipment/create.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentCreate', 'verb' => RouteVerb::GET, @@ -63,7 +63,7 @@ return [ ], ], ], - '^.*/equipment/equipment/profile.*$' => [ + '^.*/equipment/profile.*$' => [ [ 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentProfile', 'verb' => RouteVerb::GET, diff --git a/Controller/ApiEquipmentController.php b/Controller/ApiEquipmentController.php index a093b47..3220c61 100755 --- a/Controller/ApiEquipmentController.php +++ b/Controller/ApiEquipmentController.php @@ -40,6 +40,7 @@ use phpOMS\Message\ResponseAbstract; */ final class ApiEquipmentController extends Controller { + /** * Api method to create a equipment * @@ -90,7 +91,7 @@ final class ApiEquipmentController extends Controller $equipment->name = $request->getDataString('name') ?? ''; $equipment->info = $request->getDataString('info') ?? ''; $equipment->type = new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)); - $equipment->status = (int) ($request->getDataInt('status') ?? EquipmentStatus::INACTIVE); + $equipment->status = $request->getDataInt('status') ?? EquipmentStatus::INACTIVE; $equipment->unit = $request->getDataInt('unit') ?? $this->app->unitId; return $equipment; @@ -267,7 +268,7 @@ final class ApiEquipmentController extends Controller virtualPath: $path, pathSettings: PathSettings::FILE_PATH, hasAccountRelation: false, - readContent: (bool) ($request->getData('parse_content') ?? false) + readContent: $request->getDataBool('parse_content') ?? false ); $collection = null; @@ -435,7 +436,7 @@ final class ApiEquipmentController extends Controller } /** - * Api method to update note + * Api method to update Equipment * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -447,17 +448,151 @@ final class ApiEquipmentController extends Controller * * @since 1.0.0 */ - public function apiNoteEdit(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + public function apiEquipmentUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { - $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + if (!empty($val = $this->validateEquipmentUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); - if ($response->header->status !== RequestStatusCode::R_200) { return; } - $responseData = $response->get($request->uri->__toString()); - if (!\is_array($responseData)) { + /** @var \Modules\EquipmentManagement\Models\Equipment $old */ + $old = EquipmentMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateEquipmentFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, EquipmentMapper::class, 'equipment', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Method to update Equipment from request. + * + * @param RequestAbstract $request Request + * @param Equipment $new Model to modify + * + * @return Equipment + * + * @todo: implement + * + * @since 1.0.0 + */ + public function updateEquipmentFromRequest(RequestAbstract $request, Equipment $new) : Equipment + { + $new->name = $request->getDataString('name') ?? $new->name; + $new->info = $request->getDataString('info') ?? $new->info; + $new->type = $request->hasData('type') ? new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)) : $new->type; + $new->status = $request->getDataInt('status') ?? $new->status; + $new->unit = $request->getDataInt('unit') ?? $this->app->unitId; + + return $new; + } + + /** + * Validate Equipment update request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @todo: implement + * + * @since 1.0.0 + */ + private function validateEquipmentUpdate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id'))) { + return $val; + } + + return []; + } + + /** + * Api method to delete Equipment + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEquipmentDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateEquipmentDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + return; } + + /** @var \Modules\EquipmentManagement\Models\Equipment $equipment */ + $equipment = EquipmentMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $equipment, EquipmentMapper::class, 'equipment', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $equipment); + } + + /** + * Validate Equipment delete request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @todo: implement + * + * @since 1.0.0 + */ + private function validateEquipmentDelete(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id'))) { + return $val; + } + + return []; + } + + /** + * Api method to update Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocUpdate($request, $response, $data); + } + + /** + * Api method to delete Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocDelete($request, $response, $data); } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index e8ecf3c..461ba01 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -16,8 +16,8 @@ namespace Modules\EquipmentManagement\Controller; use Modules\Admin\Models\LocalizationMapper; use Modules\Admin\Models\SettingsEnum; -use Modules\EquipmentManagement\Models\EquipmentAttributeTypeL11nMapper; -use Modules\EquipmentManagement\Models\EquipmentAttributeTypeMapper; +use Modules\EquipmentManagement\Models\Attribute\EquipmentAttributeTypeL11nMapper; +use Modules\EquipmentManagement\Models\Attribute\EquipmentAttributeTypeMapper; use Modules\EquipmentManagement\Models\EquipmentMapper; use Modules\EquipmentManagement\Models\EquipmentTypeMapper; use Modules\Media\Models\MediaMapper; diff --git a/Models/Inspection.php b/Models/Inspection.php index 84ac830..e45a2ce 100644 --- a/Models/Inspection.php +++ b/Models/Inspection.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Modules\EquipmentManagement\Models; +use Modules\Admin\Models\Account; use phpOMS\Localization\BaseStringL11nType; /** @@ -38,14 +39,25 @@ class Inspection implements \JsonSerializable // Alternatively define default interval from inspection type? public ?\DateTime $next = null; + public ?\DateTime $date = null; + /** - * Inspectio interval in months + * Inspection duration in hours + */ + public int $duration = 0; + + /** + * Inspection interval in months * * @var int * @since 1.0.0 */ public int $interval = 0; + public int $reference = 0; + + public ?Account $responsible = null; + /** * Constructor * diff --git a/Models/InspectionMapper.php b/Models/InspectionMapper.php index 3a27226..843ef39 100644 --- a/Models/InspectionMapper.php +++ b/Models/InspectionMapper.php @@ -15,7 +15,6 @@ declare(strict_types=1); namespace Modules\EquipmentManagement\Models; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; -use phpOMS\Localization\BaseStringL11n; /** * mapper class. @@ -25,7 +24,7 @@ use phpOMS\Localization\BaseStringL11n; * @link https://jingga.app * @since 1.0.0 * - * @template T of BaseStringL11n + * @template T of Inspection * @extends DataMapperFactory */ final class InspectionMapper extends DataMapperFactory @@ -38,10 +37,12 @@ final class InspectionMapper extends DataMapperFactory */ public const COLUMNS = [ 'equipmgmt_equipment_inspection_id' => ['name' => 'equipmgmt_equipment_inspection_id', 'type' => 'int', 'internal' => 'id'], + 'equipmgmt_equipment_inspection_vehicle' => ['name' => 'equipmgmt_equipment_inspection_vehicle', 'type' => 'int', 'internal' => 'reference'], 'equipmgmt_equipment_inspection_description' => ['name' => 'equipmgmt_equipment_inspection_description', 'type' => 'string', 'internal' => 'description'], 'equipmgmt_equipment_inspection_status' => ['name' => 'equipmgmt_equipment_inspection_status', 'type' => 'int', 'internal' => 'status'], 'equipmgmt_equipment_inspection_interval' => ['name' => 'equipmgmt_equipment_inspection_interval', 'type' => 'int', 'internal' => 'interval'], 'equipmgmt_equipment_inspection_next' => ['name' => 'equipmgmt_equipment_inspection_next', 'type' => 'DateTime', 'internal' => 'next'], + 'equipmgmt_equipment_inspection_date' => ['name' => 'equipmgmt_equipment_inspection_date', 'type' => 'DateTime', 'internal' => 'date'], 'equipmgmt_equipment_inspection_type' => ['name' => 'equipmgmt_equipment_inspection_type', 'type' => 'int', 'internal' => 'type'], ]; @@ -54,7 +55,7 @@ final class InspectionMapper extends DataMapperFactory public const OWNS_ONE = [ 'type' => [ 'mapper' => InspectionTypeMapper::class, - 'external' => 'equipmgmt_equipment_inspection_type', + 'external' => 'equipmgmt_equipment_type', ], ]; diff --git a/tests/Autoloader.php b/tests/Autoloader.php index 80a0a1e..d2d0080 100755 --- a/tests/Autoloader.php +++ b/tests/Autoloader.php @@ -71,14 +71,12 @@ final class Autoloader * * @return void * - * @throws AutoloadException Throws this exception if the class to autoload doesn't exist. This could also be related to a wrong namespace/file path correlation. - * * @since 1.0.0 */ public static function defaultAutoloader(string $class) : void { $class = \ltrim($class, '\\'); - $class = \str_replace(['_', '\\'], '/', $class); + $class = \strtr($class, '_\\', '//'); foreach (self::$paths as $path) { $file = $path . $class . '.php';