hasData('accounts')) { $this->apiEmployeeFromAccountCreate($request, $response, $data); return; } $this->apiEmployeeNewCreate($request, $response, $data); } /** * Api method to create an employee from an existing account * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiEmployeeFromAccountCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateEmployeeFromAccountCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $employees = $this->createEmployeeFromAccountFromRequest($request); $this->createModels($request->header->account, $employees, EmployeeMapper::class, 'employee', $request->getOrigin()); $this->createStandardCreateResponse($request, $response, $employees); } /** * Validate employee from profile create request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateEmployeeFromAccountCreate(RequestAbstract $request) : array { $val = []; if (($val['accounts'] = !$request->hasData('accounts'))) { return $val; } return []; } /** * Method to create employee from profile from request. * * @param RequestAbstract $request Request * * @return Employee[] * * @since 1.0.0 */ private function createEmployeeFromAccountFromRequest(RequestAbstract $request) : array { $accounts = $request->getDataList('accounts'); $employees = []; foreach ($accounts as $account) { /** @var Profile $profile Profile */ $profile = ProfileMapper::get()->where('account', (int) $account)->execute(); $employee = EmployeeMapper::get()->where('profile', $profile->id)->execute(); $employees[] = $employee->id === 0 ? new Employee($profile) : $employee; } return $employees; } /** * Api method to create a new employee * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiEmployeeNewCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateEmployeeNewCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $employee = $this->createEmployeeNewFromRequest($request); $this->createModel($request->header->account, $employee, EmployeeMapper::class, 'employee', $request->getOrigin()); $this->createStandardCreateResponse($request, $response, $employee); } /** * Validate employee create request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateEmployeeNewCreate(RequestAbstract $request) : array { $val = []; if (($val['name1'] = !$request->hasData('name1'))) { return $val; } return []; } /** * Method to create a new employee from request. * * @param RequestAbstract $request Request * * @return Employee * * @since 1.0.0 */ private function createEmployeeNewFromRequest(RequestAbstract $request) : Employee { $account = new Account(); $account->name1 = $request->getDataString('name1') ?? ''; $account->name2 = $request->getDataString('name2') ?? ''; $account->name3 = $request->getDataString('name3') ?? ''; $account->name3 = $request->getDataString('email') ?? ''; $profile = new Profile($account); $profile->birthday = new \DateTime($request->getDataString('birthday') ?? 'now'); return new Employee($profile); } /** * Api method to create an employee history * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiEmployeeHistoryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateEmployeeHistoryCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $history = $this->createEmployeeHistoryFromRequest($request); $this->createModel($request->header->account, $history, EmployeeHistoryMapper::class, 'history', $request->getOrigin()); $this->createStandardCreateResponse($request, $response, $history); } /** * Validate employee history * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateEmployeeHistoryCreate(RequestAbstract $request) : array { $val = []; if (($val['employee'] = !$request->hasData('employee')) || ($val['start'] = !$request->hasData('start')) || ($val['unit'] = !$request->hasData('unit')) || ($val['department'] = !$request->hasData('department')) || ($val['position'] = !$request->hasData('position')) ) { return $val; } return []; } /** * Method to create employee history from request. * * @param RequestAbstract $request Request * * @return EmployeeHistory * * @since 1.0.0 */ private function createEmployeeHistoryFromRequest(RequestAbstract $request) : EmployeeHistory { $history = new EmployeeHistory(); $history->employee = new NullEmployee($request->getDataInt('employee') ?? 0); $history->unit = new NullUnit($request->getDataInt('unit') ?? 0); $history->department = new NullDepartment($request->getDataInt('department') ?? 0); $history->position = new NullPosition($request->getDataInt('position') ?? 0); $history->start = $request->getDataDateTime('start') ?? new \DateTime('now'); $history->end = $request->getDataDateTime('end'); return $history; } /** * Api method to create an employee history * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiEmployeeWorkHistoryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateEmployeeWorkHistoryCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $history = $this->createEmployeeWorkHistoryFromRequest($request); $this->createModel($request->header->account, $history, EmployeeWorkHistoryMapper::class, 'history', $request->getOrigin()); $this->createStandardCreateResponse($request, $response, $history); } /** * Validate employee history * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateEmployeeWorkHistoryCreate(RequestAbstract $request) : array { $val = []; if (($val['employee'] = !$request->hasData('employee')) || ($val['start'] = !$request->hasData('start')) || ($val['title'] = !$request->hasData('title')) || ($val['name'] = !$request->hasData('name')) ) { return $val; } return []; } /** * Method to create employee history from request. * * @param RequestAbstract $request Request * * @return EmployeeWorkHistory * * @since 1.0.0 */ private function createEmployeeWorkHistoryFromRequest(RequestAbstract $request) : EmployeeWorkHistory { $history = new EmployeeWorkHistory($request->getDataInt('employee') ?? 0); $history->start = $request->getDataDateTime('start') ?? new \DateTime('now'); $history->end = $request->getDataDateTime('end'); $history->jobTitle = $request->getDataString('title') ?? ''; $history->address = $this->app->moduleManager->get('Admin', 'Api')->createAddressFromRequest($request); $history->address->type = AddressType::WORK; return $history; } /** * Api method to create an employee history * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiEmployeeEducationHistoryCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateEmployeeEducationHistoryCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $history = $this->createEmployeeEducationHistoryFromRequest($request); $this->createModel($request->header->account, $history, EmployeeEducationHistoryMapper::class, 'history', $request->getOrigin()); $this->createStandardCreateResponse($request, $response, $history); } /** * Validate employee history * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateEmployeeEducationHistoryCreate(RequestAbstract $request) : array { $val = []; if (($val['employee'] = !$request->hasData('employee')) || ($val['start'] = !$request->hasData('start')) || ($val['title'] = !$request->hasData('title')) || ($val['name'] = !$request->hasData('name')) ) { return $val; } return []; } /** * Method to create employee history from request. * * @param RequestAbstract $request Request * * @return EmployeeEducationHistory * * @since 1.0.0 */ private function createEmployeeEducationHistoryFromRequest(RequestAbstract $request) : EmployeeEducationHistory { $history = new EmployeeEducationHistory($request->getDataInt('employee') ?? 0); $history->start = $request->getDataDateTime('start') ?? new \DateTime('now'); $history->end = $request->getDataDateTime('end'); $history->educationTitle = $request->getDataString('title') ?? ''; $history->passed = $request->getDataBool('passed') ?? true; $history->score = !empty($request->getDataString('score') ?? '') && isset($_SERVER['OMS_PRIVATE_KEY_I']) && !empty($_SERVER['OMS_PRIVATE_KEY_I']) ? (EncryptionHelper::encryptShared($request->getDataString('score'), $_SERVER['OMS_PRIVATE_KEY_I'])) : ($request->getDataString('score') ?? ''); $history->address = $this->app->moduleManager->get('Admin', 'Api')->createAddressFromRequest($request); $history->address->type = AddressType::EDUCATION; return $history; } /** * Api method to create a bill * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiMediaAddToEmployee(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateMediaAddToEmployee($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidAddResponse($request, $response, $val); return; } /** @var \Modules\HumanResourceManagement\Models\Employee $employee */ $employee = EmployeeMapper::get()->where('id', (int) $request->getData('employee'))->execute(); $path = $this->createEmployeeDir($employee); $uploaded = new NullCollection(); if (!empty($request->files)) { $uploaded = $this->app->moduleManager->get('Media', 'Api')->uploadFiles( names: [], fileNames: [], files: $request->files, account: $request->header->account, basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, virtualPath: $path, encryptionKey: $_SERVER['OMS_PRIVATE_KEY_I'] ?? '', pathSettings: PathSettings::FILE_PATH, hasAccountRelation: false, readContent: $request->getDataBool('parse_content') ?? false, tag: $request->getDataInt('tag'), rel: $employee->id, mapper: EmployeeMapper::class, field: 'files' ); } if (!empty($media = $request->getDataJson('media'))) { $this->app->moduleManager->get('Media', 'Api')->addMediaToCollectionAndModel( $request->header->account, $media, $employee->id, EmployeeMapper::class, 'files', $path ); } $this->fillJsonResponse($request, $response, NotificationLevel::OK, '', $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'SuccessfulAdd'), [ 'upload' => $uploaded->sources, 'media' => $media, ]); } /** * Create media directory path * * @param Employee $employee Employee * * @return string * * @since 1.0.0 */ private function createEmployeeDir(Employee $employee) : string { return '/Modules/HumanResourceManagement/Employee/' . $this->app->unitId . '/' . $employee->id; } /** * Method to validate bill creation from request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateMediaAddToEmployee(RequestAbstract $request) : array { $val = []; if (($val['media'] = (!$request->hasData('media') && empty($request->files))) || ($val['employee'] = !$request->hasData('employee')) ) { return $val; } return []; } /** * Api method to create notes * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateNoteCreate($request))) { $response->header->status = RequestStatusCode::R_400; $this->createInvalidCreateResponse($request, $response, $val); return; } $request->setData('isencrypted', true, true); $request->setData('isvisible', false, true); $request->setData('virtualpath', '/Modules/HumanResourceManagement/Employee/' . $request->getData('id'), true); $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); if ($response->header->status !== RequestStatusCode::R_200) { return; } $responseData = $response->getDataArray($request->uri->__toString()); if (!\is_array($responseData)) { return; } $model = $responseData['response']; $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, EmployeeMapper::class, 'notes', '', $request->getOrigin()); } /** * Validate 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 []; } /** * Api method to update Note * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { $accountId = $request->header->account; if (!$this->app->accountManager->get($accountId)->hasPermission( PermissionType::MODIFY, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::EMPLOYEE_NOTE, $request->getDataInt('id')) ) { $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); $response->header->status = RequestStatusCode::R_403; return; } $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); } /** * Api method to delete Note * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param array $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { $accountId = $request->header->account; if (!$this->app->accountManager->get($accountId)->hasPermission( PermissionType::DELETE, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::EMPLOYEE_NOTE, $request->getDataInt('id')) ) { $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); $response->header->status = RequestStatusCode::R_403; return; } $this->app->moduleManager->get('Editor', 'Api')->apiEditorDelete($request, $response, $data); } }