Rev 1320 | Rev 14276 | 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\Db\Adapter\AdapterInterface;use Laminas\Cache\Storage\Adapter\AbstractAdapter;use Laminas\Mvc\Controller\AbstractActionController;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Mapper\JobDescriptionMapper;use LeadersLinked\Mapper\CompetencyTypeMapper;use LeadersLinked\Model\JobDescription;use LeadersLinked\Form\JobDescriptionForm;use LeadersLinked\Mapper\CompetencyMapper;use LeadersLinked\Library\JobPdf;use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;use LeadersLinked\Mapper\JobDescriptionSubordinateMapper;use LeadersLinked\Model\JobDescriptionCompetency;use LeadersLinked\Model\JobDescriptionBehaviorCompetency;use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;use LeadersLinked\Model\JobDescriptionSubordinate;use LeadersLinked\Mapper\BehaviorCompetencyMapper;use LeadersLinked\Model\BehaviorCompetency;use LeadersLinked\Mapper\BehaviorMapper;use LeadersLinked\Model\Behavior;use LeadersLinked\Model\Company;class JobDescriptionController extends AbstractActionController {/**** @var AdapterInterface*/private $adapter;/**** @var AbstractAdapter*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @param AdapterInterface $adapter* @param AbstractAdapter $cache* @param LoggerInterface $logger* @param array $config*/public function __construct($adapter, $cache, $logger, $config) {$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;}public function indexAction() {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$headers = $request->getHeaders();$request = $this->getRequest();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) {$search = $this->params()->fromQuery('search', []);$search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);$page = intval($this->params()->fromQuery('start', 1), 10);$records_x_page = intval($this->params()->fromQuery('length', 10), 10);$order = $this->params()->fromQuery('order', []);$order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);$order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));$fields = ['name'];$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';if (!in_array($order_direction, ['ASC', 'DESC'])) {$order_direction = 'ASC';}$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);if ($currentCompany) {$paginator = $jobDescriptionMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);} else {$paginator = $jobDescriptionMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);}$items = [];$records = $paginator->getCurrentItems();foreach ($records as $record) {$item = ['name' => $record->name,'status' => $record->status,'actions' => ['link_report' => $this->url()->fromRoute('settings/jobs-description/report', ['id' => $record->uuid]),'link_edit' => $this->url()->fromRoute('settings/jobs-description/edit', ['id' => $record->uuid]),'link_delete' => $this->url()->fromRoute('settings/jobs-description/delete', ['id' => $record->uuid])]];array_push($items, $item);}return new JsonModel(['success' => true,'data' => ['items' => $items,'total' => $paginator->getTotalItemCount(),]]);} 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->setVariable('form', $form);return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);;}}public function addAction() {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if ($request->isGet()) {$data = ['competency_types' => [],'competencies' => [],'jobs_description' => [],];$competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);$records = $currentCompany ?$competencyTypeMapper->fetchAllByCompanyId($currentCompany->id) :$competencyTypeMapper->fetchAllActivesByDefault();$competencyTypesUUID = [];foreach ($records as $record) {array_push($data['competency_types'], ['competency_type_id' => $record->uuid,'name' => $record->name,]);$competencyTypesUUID[$record->id] = $record->uuid;}$competencyMapper = CompetencyMapper::getInstance($this->adapter);$behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$records = $currentCompany ?$competencyMapper->fetchAllActiveByCompanyId($currentCompany->id) :$competencyMapper->fetchAllByDefault();foreach ($records as $record) {if (isset($competencyTypesUUID[$record->competency_type_id])) {$behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->id);$behaviors = [];foreach ($behaviorCompetencies as $rows) {$behavior = $behaviorMapper->fetchOne($rows->behavior_id);if ($behavior) {array_push($behaviors, ['behavior_id' => $behavior->id,'competency_id' => $record->uuid,'description' => $behavior->description,'level' => 0]);}}array_push($data['competencies'], ['competency_type_id' => $competencyTypesUUID[$record->competency_type_id],'competency_id' => $record->uuid,'name' => $record->name,'behaviors' => $behaviors]);}}$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$records = $currentCompany ?$jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id) :$jobDescriptionMapper->fetchAllByDefault();foreach ($records as $record) {array_push($data['jobs_description'], ['job_description_id' => $record->uuid,'name' => $record->name]);}$data = ['success' => true,'data' => $data,];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()) {$dataPost = (array) $form->getData();$dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);if (!empty($dataPost['job_description_id_boss'])) {$jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);if ($jobDescriptionBoss) {if ($jobDescriptionBoss->company_id == $currentCompany ? $currentCompany->id : null) {$dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;} else {$dataPost['job_description_id_boss'] = null;}} else {$dataPost['job_description_id_boss'] = null;}}$hydrator = new ObjectPropertyHydrator();$jobDescription = new JobDescription();$hydrator->hydrate($dataPost, $jobDescription);if ($currentCompany) {$jobDescription->company_id = $currentCompany ? $currentCompany->id : null;}$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$result = $jobDescriptionMapper->insert($jobDescription);if ($result) {$jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);$jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);$jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);$jobDescriptionBehaviorCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);$competencies_selected = json_decode($dataPost['competencies_selected'], true);for ($i = 0; $i < count($competencies_selected); $i++) {$competency = $competencyMapper->fetchOneByUuid($competencies_selected[$i]['competency_id']);if ($competency) {$jobDescriptionCompetency = new JobDescriptionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);for ($b = 0; $b < count($competencies_selected[$i]['behaviors']); $b++) {$jobDescriptionBehaviorCompetency = new JobDescriptionBehaviorCompetency();$jobDescriptionBehaviorCompetency->competency_id = $competency->id;$jobDescriptionBehaviorCompetency->behavior_id = $competencies_selected[$i]['behaviors'][$b]['behavior_id'];$jobDescriptionBehaviorCompetency->level = $competencies_selected[$i]['behaviors'][$b]['level'];$jobDescriptionBehaviorCompetency->job_description_id = $jobDescription->id;$jobDescriptionBehaviorCompetencyMapper->insert($jobDescriptionBehaviorCompetency);}}}$subordinates_selected = json_decode($dataPost['subordinates_selected'], true);for ($i = 0; $i < count($subordinates_selected); $i++) {$jobDescriptionListingSubordinate = $jobDescriptionMapper->fetchOneByUuid($subordinates_selected[$i]['job_description_id']);if ($jobDescriptionListingSubordinate) {$jobDescriptionSubordinate = new JobDescriptionSubordinate();$jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;$jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;$jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);}}$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();$dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;if (!empty($dataPost['job_description_id_boss'])) {$jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);if ($jobDescriptionBoss) {if ($jobDescriptionBoss->id != $jobDescription->id && $jobDescriptionBoss->company_id == $currentCompany->id) {$dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;} else {$dataPost['job_description_id_boss'] = null;}} else {$dataPost['job_description_id_boss'] = null;}}$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $jobDescription);$result = $jobDescriptionMapper->update($jobDescription);if ($result) {$jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);$jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);$jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);$jobDescriptionBehaviorCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);$competencies_selected = json_decode($dataPost['competencies_selected'], true);for ($i = 0; $i < count($competencies_selected); $i++) {$competency = $competencyMapper->fetchOneByUuid($competencies_selected[$i]['competency_id']);if ($competency) {$jobDescriptionCompetency = new JobDescriptionCompetency();$jobDescriptionCompetency->competency_id = $competency->id;$jobDescriptionCompetency->job_description_id = $jobDescription->id;$jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);for ($b = 0; $b < count($competencies_selected[$i]['behaviors']); $b++) {$jobDescriptionBehaviorCompetency = new JobDescriptionBehaviorCompetency();$jobDescriptionBehaviorCompetency->competency_id = $competency->id;$jobDescriptionBehaviorCompetency->behavior_id = $competencies_selected[$i]['behaviors'][$b]['behavior_id'];$jobDescriptionBehaviorCompetency->level = $competencies_selected[$i]['behaviors'][$b]['level'];$jobDescriptionBehaviorCompetency->job_description_id = $jobDescription->id;$jobDescriptionBehaviorCompetencyMapper->insert($jobDescriptionBehaviorCompetency);}}}$subordinates_selected = json_decode($dataPost['subordinates_selected'], true);for ($i = 0; $i < count($subordinates_selected); $i++) {$jobDescriptionListingSubordinate = $jobDescriptionMapper->fetchOneByUuid($subordinates_selected[$i]['job_description_id']);if ($jobDescriptionListingSubordinate) {$jobDescriptionSubordinate = new JobDescriptionSubordinate();$jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;$jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;$jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);}}$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()) {$hydrator = new ObjectPropertyHydrator();$data = $hydrator->extract($jobDescription);if (!empty($data['job_description_id_boss'])) {$jobDescriptionBoss = $jobDescriptionMapper->fetchOne($data['job_description_id_boss']);if ($jobDescriptionBoss) {$data['job_description_id_boss'] = $jobDescriptionBoss->uuid;} else {$data['job_description_id_boss'] = '';}} else {$data['job_description_id_boss'] = '';}$data['competency_types'] = [];$competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);$records = $currentCompany ?$competencyTypeMapper->fetchAllByCompanyId($currentCompany->id) :$competencyTypeMapper->fetchAllActivesByDefault();$competencyTypesUUID = [];foreach ($records as $record) {array_push($data['competency_types'], ['competency_type_id' => $record->uuid,'name' => $record->name]);$competencyTypesUUID[$record->id] = $record->uuid;}$data['competencies'] = [];$data['competencies_selected'] = [];$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$records = $currentCompany ?$competencyMapper->fetchAllActiveByCompanyId($currentCompany->id) :$competencyMapper->fetchAllByDefault();foreach ($records as $record) {if (isset($competencyTypesUUID[$record->competency_type_id])) {$behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->id);$behaviors = [];$behaviors_selected = [];foreach ($behaviorCompetencies as $rows) {$behavior = $behaviorMapper->fetchOne($rows->behavior_id);if ($behavior) {array_push($behaviors, ['behavior_id' => $behavior->id,'competency_id' => $record->uuid,'description' => $behavior->description,'level' => 0]);}}$jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $record->id);if ($jobDescriptionCompetency) {foreach ($behaviorCompetencies as $rows) {$behavior = $behaviorMapper->fetchOne($rows->behavior_id);$jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($jobDescription->id, $record->id, $rows->behavior_id);if ($behavior && $jobDescriptionBehaviorCompetency) {array_push($behaviors_selected, ['behavior_id' => $behavior->id,'competency_id' => $record->uuid,'description' => $behavior->description,'level' => $jobDescriptionBehaviorCompetency->level]);}}array_push($data['competencies_selected'], ['competency_type_id' => $competencyTypesUUID[$record->competency_type_id],'competency_id' => $record->uuid,'name' => $record->name,'behaviors' => $behaviors_selected]);}array_push($data['competencies'], ['competency_type_id' => $competencyTypesUUID[$record->competency_type_id],'competency_id' => $record->uuid,'name' => $record->name,'behaviors' => $behaviors]);}}$data['jobs_description'] = [];$jobsDescriptionUUID = [];$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$records = $currentCompany ?$jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id) :$jobDescriptionMapper->fetchAllByDefault();foreach ($records as $record) {$jobsDescriptionUUID[$record->id] = $record->uuid;if ($record->id != $jobDescription->id) {array_push($data['jobs_description'], ['job_description_id' => $record->uuid,'name' => $record->name]);}}$data['subordinates_selected'] = [];$jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);$records = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);foreach ($records as $record) {if (isset($jobsDescriptionUUID[$record->job_description_id_low_level])) {$jobDescriptionSub = $jobDescriptionMapper->fetchOne($record->job_description_id_low_level);if ($jobDescriptionSub) {array_push($data['subordinates_selected'], ['job_description_id' => $jobDescriptionSub->uuid,'name' => $jobDescriptionSub->name]);}}}$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()) {$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()) {return $this->renderPdf($currentCompany, $jobDescription);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}/*** Render PDF* @param Company $currentCompany* @param JobDescription $jobDescription* @return mixed*/public function renderPDF($currentCompany, $jobDescription) {//Generate New PDF$pdf = new JobPdf();$pdf->header = '';$pdf->footer = '';if ($currentCompany) {//get company Data$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);$target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;$pdf->header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';$pdf->footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';}$pdf->SetMargins(10, 0, 10);$pdf->AliasNbPages();$pdf->AddPage();// Add Title$pdf->customHeader();// Job Description Name$job_descrition[] = array('title' => 'Categoría Laboral:','content' => ' ' . $jobDescription->name);$pdf->borderTable('Nombre del cargo de trabajo:', $job_descrition);//Hierarchical Relationship$jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);$jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);$jobDescriptionSubordinate = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);$subordinate = '';if ($jobDescriptionSubordinate) {foreach ($jobDescriptionSubordinate as $rs) {$jobSubordinate = $jobDescriptionMapper->fetchOne($rs->job_description_id_low_level);if ($jobSubordinate) {$subordinate .= $jobSubordinate->name . ' ';}}}$jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);$relationship = [array('title' => 'Depende de: ','content' => $subordinate ? ' ' . $subordinate : ' No aplica'),array('title' => 'Supervisa a: ','content' => $jobDescriptionBoss ? ' ' . $jobDescriptionBoss->name : ' No aplica')];$pdf->borderTable('Relación jerárquica:', $relationship);// Objetives$objetives[] = array('content' => strip_tags($jobDescription->objectives));$pdf->borderTable('Objetivos:', $objetives);// Functions$functions[] = array('content' => strip_tags($jobDescription->functions));$pdf->borderTable('Funciones principales:', $functions);// add section signature$pdf->sectionSignature();//Competencies$jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);$jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescription->id);$competencyMapper = CompetencyMapper::getInstance($this->adapter);$competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);$behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);$jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);$behaviorMapper = BehaviorMapper::getInstance($this->adapter);$countCompetencies = count($jobDescriptionCompetency);if ($countCompetencies != 0) {// 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();$i = 0;foreach ($jobDescriptionCompetency as $record) {$i = $i + 1;$behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->competency_id);$behaviors = [];foreach ($behaviorCompetencies as $rows) {$behavior = $behaviorMapper->fetchOne($rows->behavior_id);$jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($jobDescription->id, $record->competency_id, $rows->behavior_id);if ($behavior && $jobDescriptionBehaviorCompetency) {array_push($behaviors, ['description' => $behavior->description,'level' => $jobDescriptionBehaviorCompetency->level]);}}$competency = $competencyMapper->fetchOne($record->competency_id);$competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);$pdf->competencyTable($i, $competenceType, $competency, $behaviors);if ($i % 3 == 0 && $i < $countCompetencies) {$pdf->AddPage();}}}return $pdf->Output();}}