Rev 16770 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Form\OrganizationPosition\OrganizationPositionForm;use LeadersLinked\Model\Company;use LeadersLinked\Model\OrganizationPosition;use LeadersLinked\Model\OrganizationPositionCompetency;use LeadersLinked\Model\OrganizationPositionCompetencyBehavior;use LeadersLinked\Mapper\BehaviorMapper;use LeadersLinked\Mapper\CompetencyMapper;use LeadersLinked\Mapper\CompetencyBehaviorMapper;use LeadersLinked\Mapper\CompetencyTypeMapper;use LeadersLinked\Mapper\OrganizationPositionMapper;use LeadersLinked\Mapper\OrganizationPositionCompetencyBehaviorMapper;use LeadersLinked\Mapper\OrganizationPositionCompetencyMapper;use LeadersLinked\Library\Functions;use LeadersLinked\Library\OrganizationPositionPdf;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use LeadersLinked\Model\User;use Laminas\Http\Response;use LeadersLinked\Mapper\JobDescriptionMapper;class OrganizationPositionController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}public function indexAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$headers = $request->getHeaders();if ($request->isPost()) {$data = $this->params()->fromPost('data');if(!empty($data)) {$json = json_decode($data, true);if(is_array($json)) {$jobDescriptionIdBoss = 0;$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$position = 0;foreach($json as $item){$this->recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss, $item, $position);$position++;}}}return new JsonModel(['success' => true,]);} else if ($request->isGet()) {$headers = $request->getHeaders();$isJson = false;if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$items = [];$jobDescriptionIdBoss = 0;$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$items = $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss);return new JsonModel(['success' => true,'data' => ['items' => $items,]]);} else {$form = new OrganizationPositionForm($this->adapter, $currentCompany ? $currentCompany->id : null);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/jobs-description/index.phtml');$viewModel->setVariables(['form' => $form,'company_name' => $currentCompany->name,]);return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/**** @param Company $currentCompany* @param OrganizationPositionMapper $jobDescriptionMapper* @param int $jobDescriptionIdBoss* @param int $position* @param array $item*/private function recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss, $item, $position){if(!empty($item) && is_array($item)) {foreach($item as $subitem){$jobDescription = $jobDescriptionMapper->fetchOneByUuid($subitem['id']);if($jobDescriptionMapper) {if($jobDescriptionIdBoss) {$jobDescriptionMapper->setOrganizationPositionIdBossByJobDescripcionId($jobDescription->id, $jobDescriptionIdBoss, $position);} else {$jobDescriptionMapper->removeOrganizationPositionIdBossByOrganizationPositionId($jobDescription->id, $position);}$position++;if(!empty($subitem['children']) && is_array($subitem['children'])) {$position2 = 0;foreach($subitem['children'] as $subitem2){$this->recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescription->id, $subitem2, $position2);$position2++;}}}}}}/**** @param User $currentUser* @param Company $currentCompany* @param OrganizationPositionMapper $jobDescriptionMapper* @param int $jobDescriptionIdBoss* @return array*/private function recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss){$acl = $this->getEvent()->getViewModel()->getVariable('acl');$allowAdd = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/add') ? 1 : 0;$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/edit') ? 1 : 0;$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/delete') ? 1 : 0;$allowReport = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/report') ? 1 : 0;$items = [];if ($currentCompany) {$records = $jobDescriptionMapper->fetchAllByCompanyIdAndOrganizationPositionIdBoss($currentCompany->id, $jobDescriptionIdBoss);} else {$records = $jobDescriptionMapper->fetchAllDefaultAndOrganizationPositionIdBoss($jobDescriptionIdBoss);}foreach($records as $record){array_push($items, ['uuid' => $record->uuid,'name' => $record->name,'children' => $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $record->id),'status' => $record->status,'link_report' => $allowReport ? $this->url()->fromRoute('jobs-description/report', ['id' => $record->uuid]) : '','link_edit' => $allowEdit ? $this->url()->fromRoute('jobs-description/edit', ['id' => $record->uuid]) : '','link_delete' => $allowDelete ? $this->url()->fromRoute('jobs-description/delete', ['id' => $record->uuid]) : '','link_add' => $allowAdd ? $this->url()->fromRoute('jobs-description/add', ['id' => $record->uuid]) : '',]);}return $items;}public function addAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if ($request->isGet()) {$behaviors = [];$behaviorMapper = BehaviorMapper::getInstance($this->adapter);if($currentCompany) {$records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $behaviorMapper->fetchAllActiveByDefault();}$behaviorIds = [];foreach($records as $record){$behaviorIds[ $record->id ] = $record->uuid;array_push($behaviors, ['uuid' => $record->uuid,'description' => $record->description]);}$competencyTypes = [];$competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);if($currentCompany) {$records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $competencyTypeMapper->fetchAllActiveByDefault();}$competencyTypeIds = [];foreach($records as $record){$competencyTypeIds[ $record->id ] = $record->uuid;array_push($competencyTypes, ['uuid' => $record->uuid,'name' => $record->name,]);}$competencyMapper = CompetencyMapper::getInstance($this->adapter);if($currentCompany) {$records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $competencyMapper->fetchAllActiveByDefault();}$competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);$competencies = [];foreach($records as $record){if(!isset($competencyTypeIds[ $record->competency_type_id ])) {continue;}$behaviors_by_competency = [];$competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);foreach($competencyBehaviors as $competencyBehavior){if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {continue;}array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);}if($behaviors_by_competency) {array_push($competencies, ['competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],'uuid' => $record->uuid,'name' => $record->name,'behaviors' => $behaviors_by_competency,]);}}$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$records = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);$jobsDescription = [];foreach ($records as $record){$jobsDescription[ $record->uuid ] = $record->name;}$data = ['success' => true,'data' => ['jobs_description' => $jobsDescription,'behaviors' => $behaviors,'competency_types' => $competencyTypes,'competencies' => $competencies,]];return new JsonModel($data);} else if ($request->isPost()) {$form = new OrganizationPositionForm($this->adapter, $currentCompany ? $currentCompany->id : null);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if ($form->isValid()) {$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$dataPost = (array) $form->getData();if(!empty($dataPost['job_description_id_boss'])) {$jobDescriptionBoos = $jobDescriptionMapper->fetchOneByUuid(Functions::sanitizeFilterString($dataPost['job_description_id_boss']));if($jobDescriptionBoos && $jobDescriptionBoos->company_id == $currentCompany->id) {$dataPost['job_description_id_boss'] = $jobDescriptionBoos->id;} else {$dataPost['job_description_id_boss'] = 0;}}$dataPost['status'] = empty($dataPost['status']) ? OrganizationPosition::STATUS_INACTIVE : $dataPost['status'];$hydrator = new ObjectPropertyHydrator();$jobDescription = new OrganizationPosition();if ($currentCompany) {$jobDescription->company_id = $currentCompany ? $currentCompany->id : null;}$hydrator->hydrate($dataPost, $jobDescription);$result = $jobDescriptionMapper->insert($jobDescription);if ($result) {$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper = OrganizationPositionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = OrganizationPositionCompetencyMapper::getInstance($this->adapter);$competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];foreach($competencies_selected as $competency_selected){$competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';$competency = $competencyMapper->fetchOneByUuid($competency_uuid);if($competency) {if($currentCompany) {$ok = $competency->company_id == $currentCompany->id;} else {$ok = empty($competency->company_id);}} else {$ok = false;}if(!$ok) {continue;}$behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';$behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);if($behavior) {if($currentCompany) {$ok = $behavior->company_id == $currentCompany->id;} else {$ok = empty($behavior->company_id);}} else {$ok = false;}if($competency->company_id != $behavior->company_id) {continue;}$competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);if(!$competencyBehavior) {continue;}$level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;$level = intval($level, 10);$jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByOrganizationPositionIdAndCompetencyId($jobDescription->id, $competency->id);if(!$jobDescriptionCompetency) {$jobDescriptionCompetency = new OrganizationPositionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);}$jobDescriptionCompetencyBehavior = new OrganizationPositionCompetencyBehavior();$jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;$jobDescriptionCompetencyBehavior->competency_id = $competency->id;$jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;$jobDescriptionCompetencyBehavior->level = $level;$jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);}$this->logger->info('Se agrego el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_ADDED'];} else {$data = ['success' => false,'data' => $jobDescriptionMapper->getError()];}return new JsonModel($data);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach ($form_messages as $fieldname => $field_messages) {$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function editAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if (!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);if (!$jobDescription) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}if ($request->isPost()) {$form = new OrganizationPositionForm($this->adapter, $currentCompany ? $currentCompany->id : null, $jobDescription->id);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();if(!empty($dataPost['job_description_id_boss'])) {$jobDescriptionBoos = $jobDescriptionMapper->fetchOneByUuid(Functions::sanitizeFilterString($dataPost['job_description_id_boss']));if($jobDescriptionBoos && $jobDescriptionBoos->company_id == $currentCompany->id) {$dataPost['job_description_id_boss'] = $jobDescriptionBoos->id;} else {$dataPost['job_description_id_boss'] = 0;}}$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $jobDescription);$dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : OrganizationPosition::STATUS_INACTIVE;$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$result = $jobDescriptionMapper->update($jobDescription);if ($result) {$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper = OrganizationPositionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper->deleteAllBOrganizationPositionId($jobDescription->id);$jobDescriptionCompetencyMapper = OrganizationPositionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper->deleteAllBOrganizationPositionId($jobDescription->id);$competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];foreach($competencies_selected as $competency_selected){$competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';$competency = $competencyMapper->fetchOneByUuid($competency_uuid);if($competency) {if($currentCompany) {$ok = $competency->company_id == $currentCompany->id;} else {$ok = empty($competency->company_id);}} else {$ok = false;}if(!$ok) {continue;}$behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';$behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);if($behavior) {if($currentCompany) {$ok = $behavior->company_id == $currentCompany->id;} else {$ok = empty($behavior->company_id);}} else {$ok = false;}if($competency->company_id != $behavior->company_id) {continue;}$competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);if(!$competencyBehavior) {continue;}$level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;$level = intval($level, 10);$jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByOrganizationPositionIdAndCompetencyId($jobDescription->id, $competency->id);if(!$jobDescriptionCompetency) {$jobDescriptionCompetency = new OrganizationPositionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);}$jobDescriptionCompetencyBehavior = new OrganizationPositionCompetencyBehavior();$jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;$jobDescriptionCompetencyBehavior->competency_id = $competency->id;$jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;$jobDescriptionCompetencyBehavior->level = $level;$jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);}$this->logger->info('Se actualizo el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$data = ['success' => false,'data' => $jobDescriptionMapper->getError()];}return new JsonModel($data);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach ($form_messages as $fieldname => $field_messages) {$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}} else if ($request->isGet()) {$behaviors = [];$behaviorMapper = BehaviorMapper::getInstance($this->adapter);if($currentCompany) {$records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $behaviorMapper->fetchAllActiveByDefault();}$behaviorIds = [];foreach($records as $record){$behaviorIds[ $record->id ] = $record->uuid;array_push($behaviors, ['uuid' => $record->uuid,'description' => $record->description]);}$competencyTypes = [];$competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);if($currentCompany) {$records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $competencyTypeMapper->fetchAllActiveByDefault();}$competencyTypeIds = [];foreach($records as $record){$competencyTypeIds[ $record->id ] = $record->uuid;array_push($competencyTypes, ['uuid' => $record->uuid,'name' => $record->name,]);}$competencyMapper = CompetencyMapper::getInstance($this->adapter);if($currentCompany) {$records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);} else {$records = $competencyMapper->fetchAllActiveByDefault();}$competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);$competencies = [];foreach($records as $record){if(!isset($competencyTypeIds[ $record->competency_type_id ])) {continue;}$behaviors_by_competency = [];$competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);foreach($competencyBehaviors as $competencyBehavior){if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {continue;}array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);}if($behaviors_by_competency) {array_push($competencies, ['competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],'uuid' => $record->uuid,'name' => $record->name,'behaviors' => $behaviors_by_competency,]);}}$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$records = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);$jobsDescription = [];foreach ($records as $record){if($jobDescription->id == $record->id) {continue;}$jobsDescription[ $record->uuid ] = $record->name;}$job_description_id_boss = '';if($jobDescription->job_description_id_boss) {$jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);if($jobDescriptionBoss) {$job_description_id_boss = $jobDescriptionBoss->uuid;}}$data = ['id' => $jobDescription->uuid,'name' => $jobDescription->name,'functions' => $jobDescription->functions,'objectives' => $jobDescription->objectives,'status' => $jobDescription->status,'competencies_selected' => [],'behaviors' => $behaviors,'competency_types' => $competencyTypes,'competencies' => $competencies,'jobs_description' => $jobsDescription,'job_description_id_boss' => $job_description_id_boss,];$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);$competencyTypes = [];$jobDescriptionCompetencyMapper = OrganizationPositionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper = OrganizationPositionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByOrganizationPositionId($jobDescription->id);foreach($jobDescriptionCompetencies as $jobDescriptionCompetency){$competency = $competencyMapper->fetchOne($jobDescriptionCompetency->competency_id);if(!$competency) {continue;}if(isset($competencyTypes[$competency->competency_type_id])) {$competencyType = $competencyTypes[$competency->competency_type_id];} else {$competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);if(!$competencyType) {continue;}$competencyTypes[$competency->competency_type_id] = $competencyType;}$competency_selected = ['uuid' => $competency->uuid,'competency_type_uuid' => $competencyType->uuid,'behaviors' => []];foreach($competencies as $record_competency){if($record_competency['uuid'] == $competency->uuid) {foreach($record_competency['behaviors'] as $uuid_behavior){$behavior = $behaviorMapper->fetchOneByUuid($uuid_behavior);if($behavior) {$jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByOrganizationPositionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $competency->id, $behavior->id);if($jobDescriptionCompetencyBehavior) {$level = $jobDescriptionCompetencyBehavior->level;} else {$level = 0;}array_push($competency_selected['behaviors'], ['uuid' => $behavior->uuid, 'level' => $level]);}}}}array_push($data['competencies_selected'], $competency_selected);}$response = ['success' => true,'data' => $data];return new JsonModel($response);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function deleteAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if (!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);if (!$jobDescription) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}if ($request->isPost()) {$jobDescriptionMapper->removeAllOrganizationPositionIdBossByJobDescripcionId($jobDescription->id);$result = $jobDescriptionMapper->delete($jobDescription);if ($result) {$this->logger->info('Se borro el cargo de trabajo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$data = ['success' => false,'data' => $jobDescriptionMapper->getError()];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function importAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();if (!$currentCompany) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$request = $this->getRequest();if ($request->isPost()) {$jobDescriptionMapper = OrganizationPositionMapper::getInstance($this->adapter);$jobDescriptionsDefault = $jobDescriptionMapper->fetchAllByDefault();$new_records = 0;foreach ($jobDescriptionsDefault as $jobDescriptionDefault) {if ($jobDescriptionDefault->status == OrganizationPosition::STATUS_INACTIVE) {continue;}$jobDescription = $jobDescriptionMapper->fetchOneByCompanyId($currentCompany->id, $jobDescriptionDefault->id);if (!$jobDescription) {$jobDescription = new OrganizationPosition();$jobDescription->company_id = $currentCompany->id;$jobDescription->job_description_id_default = $jobDescriptionDefault->id;$jobDescription->name = $jobDescriptionDefault->name;$jobDescription->functions = $jobDescriptionDefault->functions;$jobDescription->objectives = $jobDescriptionDefault->objectives;$jobDescription->status = OrganizationPosition::STATUS_ACTIVE;$result = $jobDescriptionMapper->insert($jobDescription);if ($result) {//Add Competencies$competenceMapper = CompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = OrganizationPositionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByOrganizationPositionId($jobDescriptionDefault->id);if (count($jobDescriptionCompetencies) != 0) {foreach ($jobDescriptionCompetencies as $record) {$competence = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $record->competency_id);if ($competence) {$newDescriptionCompetency = new OrganizationPositionCompetency();$newDescriptionCompetency->competency_id = $competence->id;$newDescriptionCompetency->job_description_id = $jobDescription->id;$newDescriptionCompetency->level = $record->level;$jobDescriptionCompetencyMapper->insert($newDescriptionCompetency);}}}$new_records++;} else {$data = ['success' => false,'data' => 'ERROR_CANT_ADD_JOB_DESCRIPTION'];return new JsonModel($data);}}}if ($new_records) {if (1 == $new_records) {$data = ['success' => true,'data' => 'LABEL_1_JOB_DESCRIPTION_IMPORTED'];return new JsonModel($data);} else {$data = ['success' => true,'data' => $new_records . ' LABEL_MULTI_JOB_DESCRIPTION_IMPORTED'];return new JsonModel($data);}} else {$data = ['success' => true,'data' => 'LABEL_NO_JOB_DESCRIPTION_IMPORTED'];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function bossAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$uuid = $this->params()->fromRoute('id');if (!$uuid) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);if (!$jobDescription) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}if ($request->isGet()) {$data = [];if(!$jobDescription->job_description_id_boss) {$organizationPositionMapper = OrganizationPositionMapper::getInstance($this->adapter);$users = $organizationPositionMapper->fetchAllByJobDescriptionIdAndCompanyId($job_description_id, $company_id)}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}}