Proyectos de Subversion LeadersLinked - Services

Rev

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'
        ]);
    }
}