Rev 16788 | 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\JobDescription\JobDescriptionForm;use LeadersLinked\Model\Company;use LeadersLinked\Model\JobDescription;use LeadersLinked\Model\JobDescriptionCompetency;use LeadersLinked\Model\JobDescriptionCompetencyBehavior;use LeadersLinked\Mapper\BehaviorMapper;use LeadersLinked\Mapper\CompetencyMapper;use LeadersLinked\Mapper\CompetencyBehaviorMapper;use LeadersLinked\Mapper\CompetencyTypeMapper;use LeadersLinked\Mapper\JobDescriptionMapper;use LeadersLinked\Mapper\JobDescriptionCompetencyBehaviorMapper;use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;use LeadersLinked\Library\Functions;use LeadersLinked\Library\JobDescriptionPdf;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use LeadersLinked\Model\User;use Laminas\Http\Response;class JobDescriptionController 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->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 = JobDescriptionMapper::getInstance($this->adapter);$items = $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss);return new JsonModel(['success' => true,'data' => ['items' => $items,]]);} else {$form = new JobDescriptionForm($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 User $currentUser* @param Company $currentCompany* @param JobDescriptionMapper $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->fetchAllByCompanyIdAndJobDescriptionIdBoss($currentCompany->id, $jobDescriptionIdBoss);} else {$records = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($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 = JobDescriptionMapper::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 JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if ($form->isValid()) {$jobDescriptionMapper = JobDescriptionMapper::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']) ? JobDescription::STATUS_INACTIVE : $dataPost['status'];$hydrator = new ObjectPropertyHydrator();$jobDescription = new JobDescription();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 = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::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->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);if(!$jobDescriptionCompetency) {$jobDescriptionCompetency = new JobDescriptionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);}$jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();$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 = 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->isPost()) {$form = new JobDescriptionForm($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'] : JobDescription::STATUS_INACTIVE;$jobDescriptionMapper = JobDescriptionMapper::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 = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper->deleteAllBJobDescriptionId($jobDescription->id);$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($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->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);if(!$jobDescriptionCompetency) {$jobDescriptionCompetency = new JobDescriptionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);}$jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();$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 = JobDescriptionMapper::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 = JobDescriptionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($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->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($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 = 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->isPost()) {$jobDescriptionMapper->removeParentByJobDescriptionId($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 = JobDescriptionMapper::getInstance($this->adapter);$jobDescriptionsDefault = $jobDescriptionMapper->fetchAllByDefault();$new_records = 0;foreach ($jobDescriptionsDefault as $jobDescriptionDefault) {if ($jobDescriptionDefault->status == JobDescription::STATUS_INACTIVE) {continue;}$jobDescription = $jobDescriptionMapper->fetchOneByCompanyId($currentCompany->id, $jobDescriptionDefault->id);if (!$jobDescription) {$jobDescription = new JobDescription();$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 = JobDescription::STATUS_ACTIVE;$result = $jobDescriptionMapper->insert($jobDescription);if ($result) {//Add Competencies$competenceMapper = CompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescriptionDefault->id);if (count($jobDescriptionCompetencies) != 0) {foreach ($jobDescriptionCompetencies as $record) {$competence = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $record->competency_id);if ($competence) {$newDescriptionCompetency = new JobDescriptionCompetency();$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 reportAction(){$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()) {/*$filename = Functions::normalizeStringFilename($jobDescription->name . '-' . date('Y-m-d H:i a') . '.pdf');$content = base64_encode($this->renderPdf($currentCompany, $jobDescription));$data = ['success' => true,'data' => ['basename' => $filename,'content' => $content]];return new JsonModel($data);*/$content = $this->renderPdf($currentCompany, $jobDescription);$response = new Response();$response->setStatusCode(200);$response->setContent($content);$headers = $response->getHeaders();$headers->clearHeaders();$headers->addHeaderLine('Content-Description: File Transfer');$headers->addHeaderLine('Content-Type: application/pdf');//$headers->addHeaderLine('Content-Disposition: attachment; filename=' . $filename);$headers->addHeaderLine('Content-Transfer-Encoding: binary');$headers->addHeaderLine('Expires: 0');$headers->addHeaderLine('Cache-Control: must-revalidate');$headers->addHeaderLine('Pragma: public');return $response;} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}/*** Render PDF* @param Company $company;* @param JobDescription $jobDescription* @return mixed*/private function renderPDF($company, $jobDescription){//Generate New PDF$pdf = new JobDescriptionPdf();$pdf->SetTitle($jobDescription->name);$target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;$header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';if(empty($header) || !file_exists($header)) {$header = $this->config['leaderslinked.images_default.company_pdf_header'];}$footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';if(empty($footer) || !file_exists($footer)) {$footer = $this->config['leaderslinked.images_default.company_pdf_footer'];}$pdf->header = $header;$pdf->footer = $footer;$pdf->translator = $this->translator;$pdf->SetMargins(10, 0, 10);$pdf->AliasNbPages();$pdf->AddPage();// Add Title$pdf->customHeader();// Job Description Name$job_descrition[] = array('title' => $this->translator->translate('LABEL_PDF_JOB_DESCRIPTION_LABORAL_CATEGORY') . ' : ' ,'content' => ' ' . $jobDescription->name);$pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_TITLE_NAME') . ' : ', $job_descrition);//Hierarchical Relationship$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$subordinate = '';if($jobDescription->company_id) {$jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($jobDescription->company_id,$jobDescription->id);} else {$jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($jobDescription->id);}if ($jobDescriptionSubordinates) {foreach ($jobDescriptionSubordinates as $jobDescriptionSubordinate) {$subordinate .= $jobDescriptionSubordinate->name . ' ';}}$jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);$relationship = [['title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISES') . ': ','content' => $subordinate ? ' ' . $subordinate : ' No aplica'],['title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISED_BY') . ': ','content' => $jobDescriptionBoss ? ' ' . $jobDescriptionBoss->name : ' ' . $this->translator->translate('LABEL_PDF_JOB_DOES_NOT_APPLY'),]];$pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_HIERARCHICAL_RELATIONSHIP') . ' : ', $relationship);// Objetives$objetives[] = array('content' => strip_tags($jobDescription->objectives));$pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_OBJECTIVES') . ' : ', $objetives);// Functions$functions[] = array('content' => strip_tags($jobDescription->functions));$pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_PRINCIPAL_FUNCTIONS') . ' : ', $functions);// add section signature$pdf->sectionSignature();//Competencies$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($jobDescription->id);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);$competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);$jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$max = count($jobDescriptionCompetencies);if ($max) {// add new page$pdf->AddPage();$competencies_header[] = array('content' => 'De acuerdo a la siguiente escala, se deberá asignar un valor a cada conducta deseable correspondiente a cada una de las competencias requeridas para el cargo. La valoración refiere a las conductas deseables requeridas en cada cargo, y no refiere a la persona que lo ocupa');$pdf->singleTable('Competencias requeridas para el cargo:', $competencies_header);// Add scale section// $pdf->sectionScale();for ($i = 0; $i < $max; $i++) {$record = $jobDescriptionCompetencies[$i];$behaviorCompetencies = $competencyBehaviorMapper->fetchAllByCompetencyId($record->competency_id);$behaviors = [];foreach ($behaviorCompetencies as $rows) {$behavior = $behaviorMapper->fetchOne($rows->behavior_id);if ($behavior) {$jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $record->competency_id, $rows->behavior_id);if($jobDescriptionCompetencyBehavior) {$level = $jobDescriptionCompetencyBehavior->level;} else {$level = 0;}array_push($behaviors, ['description' => $behavior->description,'level' => $level]);}}$competency = $competencyMapper->fetchOne($record->competency_id);$competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);$j = $i + 1;$last = $j == $max;$pdf->competencyTable($j, $competenceType, $competency, $behaviors, $last);if(!$last) {$y = $pdf->getY();if($y >= JobDescriptionPdf::MAX_Y_ADD_PAGE) {$this->addPage();}}}}/*$temp_file = tempnam(sys_get_temp_dir(), 'job-description');$pdf->Output('F', $temp_file);return $temp_file;*/return $pdf->Output('S');}}