This commit is contained in:
Dennis Eichhorn 2023-08-28 22:06:34 +00:00
parent 39698b133d
commit ade1c110b3
9 changed files with 196 additions and 37 deletions

View File

@ -19,7 +19,7 @@
"type": 2, "type": 2,
"subtype": 1, "subtype": 1,
"name": "Equipments", "name": "Equipments",
"uri": "{/base}/equipment/equipment/list", "uri": "{/base}/equipment/list",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 1, "order": 1,
@ -29,11 +29,11 @@
"children": [ "children": [
{ {
"id": 1008402101, "id": 1008402101,
"pid": "/equipment/equipment", "pid": "/equipment",
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "List", "name": "List",
"uri": "{/base}/equipment/equipment/list", "uri": "{/base}/equipment/list",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 1, "order": 1,
@ -44,11 +44,11 @@
}, },
{ {
"id": 1008402201, "id": 1008402201,
"pid": "/equipment/equipment", "pid": "/equipment",
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "Create", "name": "Create",
"uri": "{/base}/equipment/equipment/create?{?}", "uri": "{/base}/equipment/create?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 1, "order": 1,
@ -94,7 +94,7 @@
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "EquipmentInspectionTypes", "name": "EquipmentInspectionTypes",
"uri": "{/base}/equipment/equipment/inspection/type/list?{?}", "uri": "{/base}/equipment/inspection/type/list?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 5, "order": 5,
@ -111,7 +111,7 @@
"type": 2, "type": 2,
"subtype": 1, "subtype": 1,
"name": "EquipmentAttributes", "name": "EquipmentAttributes",
"uri": "{/base}/equipment/equipment/attribute/type/list?{?}", "uri": "{/base}/equipment/attribute/type/list?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 5, "order": 5,
@ -121,11 +121,11 @@
"children": [ "children": [
{ {
"id": 1008405101, "id": 1008405101,
"pid": "/equipment/equipment/attribute", "pid": "/equipment/attribute",
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "Types", "name": "Types",
"uri": "{/base}/equipment/equipment/attribute/type/list?{?}", "uri": "{/base}/equipment/attribute/type/list?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 15, "order": 15,
@ -136,11 +136,11 @@
}, },
{ {
"id": 1008405201, "id": 1008405201,
"pid": "/equipment/equipment/attribute", "pid": "/equipment/attribute",
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "Values", "name": "Values",
"uri": "{/base}/equipment/equipment/attribute/value/list?{?}", "uri": "{/base}/equipment/attribute/value/list?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 15, "order": 15,

View File

@ -171,7 +171,7 @@
}, },
"equipmgmt_equipment_inspection_interval": { "equipmgmt_equipment_inspection_interval": {
"name": "equipmgmt_equipment_inspection_interval", "name": "equipmgmt_equipment_inspection_interval",
"type": "TINYINT(3)", "type": "INT",
"null": false "null": false
}, },
"equipmgmt_equipment_inspection_next": { "equipmgmt_equipment_inspection_next": {
@ -180,12 +180,25 @@
"null": true, "null": true,
"default": null "default": null
}, },
"equipmgmt_equipment_inspection_date": {
"name": "equipmgmt_equipment_inspection_date",
"type": "DATETIME",
"null": true,
"default": null
},
"equipmgmt_equipment_inspection_type": { "equipmgmt_equipment_inspection_type": {
"name": "equipmgmt_equipment_inspection_type", "name": "equipmgmt_equipment_inspection_type",
"type": "INT", "type": "INT",
"null": false, "null": false,
"foreignTable": "equipmgmt_inspection_type", "foreignTable": "equipmgmt_inspection_type",
"foreignKey": "equipmgmt_inspection_type_id" "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"
} }
} }
}, },

View File

@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb; use phpOMS\Router\RouteVerb;
return [ return [
'^.*/equipment/equipment/find.*$' => [ '^.*/equipment/find.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentController:apiEquipmentFind', 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentController:apiEquipmentFind',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,
@ -30,7 +30,7 @@ return [
], ],
], ],
'^.*/equipment/equipment/attribute.*$' => [ '^.*/equipment/attribute.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiEquipmentAttributeCreate', 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiEquipmentAttributeCreate',
'verb' => RouteVerb::PUT, 'verb' => RouteVerb::PUT,
@ -51,7 +51,7 @@ return [
], ],
], ],
'^.*/equipment/equipment/note.*$' => [ '^.*/equipment/note.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiNoteCreate', 'dest' => '\Modules\EquipmentManagement\Controller\ApiEquipmentAttributeController:apiNoteCreate',
'verb' => RouteVerb::PUT, 'verb' => RouteVerb::PUT,

View File

@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb; use phpOMS\Router\RouteVerb;
return [ return [
'^.*/equipment/equipment/attribute/type/list.*$' => [ '^.*/equipment/attribute/type/list.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeTypeList', 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeTypeList',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,
@ -29,7 +29,7 @@ return [
], ],
], ],
], ],
'^.*/equipment/equipment/attribute/type\?.*$' => [ '^.*/equipment/attribute/type\?.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeType', 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeType',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,
@ -41,7 +41,7 @@ return [
], ],
], ],
'^.*/equipment/equipment/list.*$' => [ '^.*/equipment/list.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentList', 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentList',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,
@ -52,7 +52,7 @@ return [
], ],
], ],
], ],
'^.*/equipment/equipment/create.*$' => [ '^.*/equipment/create.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentCreate', 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentCreate',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,
@ -63,7 +63,7 @@ return [
], ],
], ],
], ],
'^.*/equipment/equipment/profile.*$' => [ '^.*/equipment/profile.*$' => [
[ [
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentProfile', 'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementEquipmentProfile',
'verb' => RouteVerb::GET, 'verb' => RouteVerb::GET,

View File

@ -40,6 +40,7 @@ use phpOMS\Message\ResponseAbstract;
*/ */
final class ApiEquipmentController extends Controller final class ApiEquipmentController extends Controller
{ {
/** /**
* Api method to create a equipment * Api method to create a equipment
* *
@ -90,7 +91,7 @@ final class ApiEquipmentController extends Controller
$equipment->name = $request->getDataString('name') ?? ''; $equipment->name = $request->getDataString('name') ?? '';
$equipment->info = $request->getDataString('info') ?? ''; $equipment->info = $request->getDataString('info') ?? '';
$equipment->type = new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)); $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; $equipment->unit = $request->getDataInt('unit') ?? $this->app->unitId;
return $equipment; return $equipment;
@ -267,7 +268,7 @@ final class ApiEquipmentController extends Controller
virtualPath: $path, virtualPath: $path,
pathSettings: PathSettings::FILE_PATH, pathSettings: PathSettings::FILE_PATH,
hasAccountRelation: false, hasAccountRelation: false,
readContent: (bool) ($request->getData('parse_content') ?? false) readContent: $request->getDataBool('parse_content') ?? false
); );
$collection = null; $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 RequestAbstract $request Request
* @param ResponseAbstract $response Response * @param ResponseAbstract $response Response
@ -447,17 +448,151 @@ final class ApiEquipmentController extends Controller
* *
* @since 1.0.0 * @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; return;
} }
$responseData = $response->get($request->uri->__toString()); /** @var \Modules\EquipmentManagement\Models\Equipment $old */
if (!\is_array($responseData)) { $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<string, bool>
*
* @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; 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<string, bool>
*
* @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);
} }
} }

View File

@ -16,8 +16,8 @@ namespace Modules\EquipmentManagement\Controller;
use Modules\Admin\Models\LocalizationMapper; use Modules\Admin\Models\LocalizationMapper;
use Modules\Admin\Models\SettingsEnum; use Modules\Admin\Models\SettingsEnum;
use Modules\EquipmentManagement\Models\EquipmentAttributeTypeL11nMapper; use Modules\EquipmentManagement\Models\Attribute\EquipmentAttributeTypeL11nMapper;
use Modules\EquipmentManagement\Models\EquipmentAttributeTypeMapper; use Modules\EquipmentManagement\Models\Attribute\EquipmentAttributeTypeMapper;
use Modules\EquipmentManagement\Models\EquipmentMapper; use Modules\EquipmentManagement\Models\EquipmentMapper;
use Modules\EquipmentManagement\Models\EquipmentTypeMapper; use Modules\EquipmentManagement\Models\EquipmentTypeMapper;
use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaMapper;

View File

@ -14,6 +14,7 @@ declare(strict_types=1);
namespace Modules\EquipmentManagement\Models; namespace Modules\EquipmentManagement\Models;
use Modules\Admin\Models\Account;
use phpOMS\Localization\BaseStringL11nType; use phpOMS\Localization\BaseStringL11nType;
/** /**
@ -38,14 +39,25 @@ class Inspection implements \JsonSerializable
// Alternatively define default interval from inspection type? // Alternatively define default interval from inspection type?
public ?\DateTime $next = null; 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 * @var int
* @since 1.0.0 * @since 1.0.0
*/ */
public int $interval = 0; public int $interval = 0;
public int $reference = 0;
public ?Account $responsible = null;
/** /**
* Constructor * Constructor
* *

View File

@ -15,7 +15,6 @@ declare(strict_types=1);
namespace Modules\EquipmentManagement\Models; namespace Modules\EquipmentManagement\Models;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/** /**
* mapper class. * mapper class.
@ -25,7 +24,7 @@ use phpOMS\Localization\BaseStringL11n;
* @link https://jingga.app * @link https://jingga.app
* @since 1.0.0 * @since 1.0.0
* *
* @template T of BaseStringL11n * @template T of Inspection
* @extends DataMapperFactory<T> * @extends DataMapperFactory<T>
*/ */
final class InspectionMapper extends DataMapperFactory final class InspectionMapper extends DataMapperFactory
@ -38,10 +37,12 @@ final class InspectionMapper extends DataMapperFactory
*/ */
public const COLUMNS = [ public const COLUMNS = [
'equipmgmt_equipment_inspection_id' => ['name' => 'equipmgmt_equipment_inspection_id', 'type' => 'int', 'internal' => 'id'], '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_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_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_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_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'], '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 = [ public const OWNS_ONE = [
'type' => [ 'type' => [
'mapper' => InspectionTypeMapper::class, 'mapper' => InspectionTypeMapper::class,
'external' => 'equipmgmt_equipment_inspection_type', 'external' => 'equipmgmt_equipment_type',
], ],
]; ];

View File

@ -71,14 +71,12 @@ final class Autoloader
* *
* @return void * @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 * @since 1.0.0
*/ */
public static function defaultAutoloader(string $class) : void public static function defaultAutoloader(string $class) : void
{ {
$class = \ltrim($class, '\\'); $class = \ltrim($class, '\\');
$class = \str_replace(['_', '\\'], '/', $class); $class = \strtr($class, '_\\', '//');
foreach (self::$paths as $path) { foreach (self::$paths as $path) {
$file = $path . $class . '.php'; $file = $path . $class . '.php';