Returns the validation array of the request * * @since 1.0.0 */ private function validateReportCreate(RequestAbstract $request) : array { $val = []; if (($val['title'] = !$request->hasData('title')) || ($val['plain'] = !$request->hasData('plain')) ) { return $val; } return []; } /** * Api method to create a report * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiReportCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateReportCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $report = $this->createReportFromRequest($request); $this->createModel($request->header->account, $report, ReportMapper::class, 'report', $request->getOrigin()); $first = \reset($report->task->taskElements); if ($first !== false) { $this->app->moduleManager->get('Tasks', 'Api')->createNotifications($first, NotificationType::CREATE, $request); } $this->createStandardCreateResponse($request, $response, $report); } /** * Method to create report from request. * * @param RequestAbstract $request Request * * @return Report Returns the created report from the request * * @since 1.0.0 */ private function createReportFromRequest(RequestAbstract $request) : Report { $request->setData('redirect', 'qualitymanagement/report/view?for={$id}'); /** @var \Modules\Tasks\Models\Task $task */ $task = $this->app->moduleManager->get('Tasks', 'Api')->createTaskFromRequest($request); $task->unit ??= $this->app->unitId; $task->for = $request->hasData('account') ? new NullAccount((int) $request->getData('account')) : null; if (($value = $request->getDataString('bill')) !== null) { $attrType = TaskAttributeTypeMapper::get() ->where('name', 'bill') ->execute(); if ($attrType->id !== 0) { $internalRequest = new HttpRequest(); $internalRequest->setData('value', $value); $attribute = $this->app->moduleManager->get('Attribute', 'Api')->createAttributeFromRequest($internalRequest, $attrType); $task->attributes[] = $attribute; } } if (($value = $request->getDataString('item')) !== null) { $attrType = TaskAttributeTypeMapper::get() ->where('name', 'item') ->execute(); if ($attrType->id !== 0) { $internalRequest = new HttpRequest(); $internalRequest->setData('value', $value); $attribute = $this->app->moduleManager->get('Attribute', 'Api')->createAttributeFromRequest($internalRequest, $attrType); $task->attributes[] = $attribute; } } if (($value = $request->getDataString('lot')) !== null) { $attrType = TaskAttributeTypeMapper::get() ->where('name', 'lot_internal') ->execute(); if ($attrType->id !== 0) { $internalRequest = new HttpRequest(); $internalRequest->setData('value', $value); $attribute = $this->app->moduleManager->get('Attribute', 'Api')->createAttributeFromRequest($internalRequest, $attrType); $task->attributes[] = $attribute; } } return new Report($task); } /** * Api method to get a report * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiReportGet(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { /** @var \Modules\QualityManagement\Models\Report $report */ $report = ReportMapper::get()->where('id', $request->getDataInt('id') ?? 0)->execute(); $this->createStandardReturnResponse($request, $response, $report); } /** * Api method to update a report * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiReportSet(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { /** @var \Modules\QualityManagement\Models\Report $old */ $old = ReportMapper::get() ->with('task') ->where('id', $request->getDataInt('id') ?? 0) ->execute(); $new = $this->updateReportFromRequest($request, clone $old); $this->updateModel($request->header->account, $old, $new, ReportMapper::class, 'report', $request->getOrigin()); $this->createStandardUpdateResponse($request, $response, $new); } /** * Method to update an report from a request * * @param RequestAbstract $request Request * * @return Report Returns the updated report from the request * * @since 1.0.0 */ private function updateReportFromRequest(RequestAbstract $request, Report $new) : Report { return $new; } /** * Validate report element create request * * @param RequestAbstract $request Request * * @return array Returns the validation array of the request * * @since 1.0.0 */ private function validateReportElementCreate(RequestAbstract $request) : array { $val = []; if (($val['status'] = !TaskStatus::isValidValue((int) $request->getData('status'))) || ($val['due'] = !((bool) \strtotime((string) $request->getData('due')))) || ($val['report'] = !(\is_numeric($request->getData('report')))) || ($val['forward'] = !(\is_numeric($request->hasData('forward') ? $request->getData('forward') : $request->header->account))) ) { return $val; } return []; } /** * Api method to create a report element * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiReportElementCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateReportElementCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } // @question Consider to use the apiTaskElementCreate() function /** @var \Modules\QualityManagement\Models\Report $report */ $report = ReportMapper::get() ->with('task') ->where('id', (int) ($request->getData('report'))) ->execute(); $element = $this->app->moduleManager->get('Tasks')->createTaskElementFromRequest($request, $report->task); $old = clone $report->task; $report->task->status = $element->status; $report->task->priority = $element->priority; $report->task->due = $element->due; $this->createModel($request->header->account, $element, TaskElementMapper::class, 'report_element', $request->getOrigin()); $this->updateModel($request->header->account, $old, $report->task, TaskMapper::class, 'report', $request->getOrigin()); $report->task->taskElements[] = $element; $this->createStandardCreateResponse($request, $response, $element); } /** * Api method to update a report * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiReportElementSet(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { $this->app->moduleManager->get('Tasks')->apiTaskElementSet($request, $response); /** @var \Modules\Tasks\Models\TaskElement $new */ $new = $response->getDataArray($request->uri->__toString())['response'] ?? null; if ($new === null) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidUpdateResponse($request, $response, $new); return; } //$this->updateModel($request->header->account, $report, $report, ReportMapper::class, 'report', $request->getOrigin()); $this->createStandardUpdateResponse($request, $response, $new); } }