diff --git a/Admin/Install/db.json b/Admin/Install/db.json index f790e47..d4e3a9a 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -548,8 +548,8 @@ "primary": true, "autoincrement": true }, - "fleetmgmt_vehicle_note_item": { - "name": "fleetmgmt_vehicle_note_item", + "fleetmgmt_vehicle_note_vehicle": { + "name": "fleetmgmt_vehicle_note_vehicle", "type": "INT", "null": false, "foreignTable": "fleetmgmt_vehicle", diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 2fa0585..b52eeb4 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -1323,4 +1323,62 @@ final class ApiController extends Controller 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['vehicle_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, VehicleMapper::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/BackendController.php b/Controller/BackendController.php index cd8ed46..3baac73 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -187,6 +187,7 @@ final class BackendController extends Controller $view->setTemplate('/Modules/FleetManagement/Theme/Backend/vehicle-profile'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + // @todo: This langauge filtering doesn't work. But it was working with the old mappers. Maybe there is a bug in the where() definition. Need to inspect the actual query. $vehicle = VehicleMapper::get() ->with('attributes') ->with('attributes/type') diff --git a/Models/Vehicle.php b/Models/Vehicle.php index fb1b779..80f67a0 100644 --- a/Models/Vehicle.php +++ b/Models/Vehicle.php @@ -44,8 +44,6 @@ class Vehicle implements \JsonSerializable public array $milage = []; - public array $notes = []; - public int $unit = 0; public ?int $responsible = null; @@ -76,7 +74,8 @@ 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 ea732e4..6c2659f 100644 --- a/Models/VehicleMapper.php +++ b/Models/VehicleMapper.php @@ -16,6 +16,7 @@ namespace Modules\FleetManagement\Models; use Modules\Media\Models\MediaMapper; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; +use Modules\Editor\Models\EditorDocMapper; /** * Mapper class. @@ -67,6 +68,12 @@ final class VehicleMapper extends DataMapperFactory 'self' => 'fleetmgmt_vehicle_attr_item', 'external' => null, ], + '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', + ], ]; /**