Rev 512 | Rev 518 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Controller;
use Smalot\PdfParser\Parser;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Db\Sql\Select;
use Laminas\Db\Adapter\Adapter;
use Laminas\Db\Sql\Sql;
use Laminas\Db\ResultSet\HydratingResultSet;
use Laminas\Hydrator\ArraySerializableHydrator;
use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;
use LeadersLinked\Mapper\JobDescriptionMapper;
use LeadersLinked\Mapper\JobCategoryMapper;
use LeadersLinked\Mapper\LocationMapper;
use LeadersLinked\Mapper\QueryMapper;
use ArrayObject;
class RecruitmentCreateJobDescriptionController 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()
{
$request = $this->getRequest();
// 🔹 Obtener el ID desde la ruta (URL) con el formato /endpoint/:id
$vacancyId = $this->params()->fromRoute('id');
// 🔹 Verificar si el ID es válido
if (!$vacancyId) {
return new JsonModel([
'success' => false,
'message' => 'Missing vacancy ID'
]);
}
// 🔹 Obtener usuario y permisos ACL
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$acl = $this->getEvent()->getViewModel()->getVariable('acl');
// 🔹 Verificar si el usuario tiene permiso para extraer criterios
if (!$acl->isAllowed($currentUser->usertype_id, '')) {
return new JsonModel([
'success' => false,
'message' => 'Access denied'
]);
}
if ($request->isGet()) {
// Llamar a la función que obtiene los archivos de la vacante
$candidates = $this->getSelectionPreAplicationCandidates($vacancyId);
return new JsonModel([
'success' => true,
'data' => $candidates
]);
}
if ($request->isPost()) {
// 🔹 Obtener los CVs en Base64 desde el cuerpo de la solicitud
$bodyParams = json_decode($this->getRequest()->getContent(), true);
$cvs = $bodyParams['cvs'] ?? [];
// 🔹 Verificar si hay CVs
if (empty($cvs)) {
return new JsonModel([
'success' => false,
'message' => 'Missing CVs data'
]);
}
// 🔹 Obtener criterios desde la base de datos
$criteria = $this->getSelectionCriteriaVacancy($vacancyId);
// 🔹 Verificar si los criterios existen
if (!$criteria) {
return new JsonModel([
'success' => false,
'message' => 'No selection criteria found for this vacancy'
]);
}
// 🔹 Procesar los CVs y analizar compatibilidad con los criterios
try {
$processedCvs = $this->processCvs($cvs, $criteria, $vacancyId);
return new JsonModel([
'success' => true,
'data' => $processedCvs
]);
} catch (\Exception $e) {
return new JsonModel([
'success' => false,
'message' => 'Error processing CVs: ' . $e->getMessage()
]);
}
}
// Si el método no es GET ni POST
return new JsonModel([
'success' => false,
'message' => 'Invalid request method'
]);
}
}