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}'); $task = $this->app->moduleManager->get('Tasks', 'Api')->createTaskFromRequest($request); $task->type = TaskType::HIDDEN; $task->unit ??= $this->app->unitId; $report = new Report($task); return $report; } /** * 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', (int) $request->getData('id'))->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', (int) $request->getData('id')) ->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); $new = $response->getData($request->uri->__toString())['response']; //$this->updateModel($request->header->account, $report, $report, ReportMapper::class, 'report', $request->getOrigin()); $this->createStandardUpdateResponse($request, $response, $new); } }