Proyectos de Subversion LeadersLinked - Services

Rev

Rev 512 | Rev 516 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
512 ariadna 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Smalot\PdfParser\Parser;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use Laminas\Db\Adapter\AdapterInterface;
13
use Laminas\Db\Sql\Select;
14
use Laminas\Db\Adapter\Adapter;
15
use Laminas\Db\Sql\Sql;
16
use Laminas\Db\ResultSet\HydratingResultSet;
17
use Laminas\Hydrator\ArraySerializableHydrator;
18
use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;
19
use LeadersLinked\Mapper\JobDescriptionMapper;
20
use LeadersLinked\Mapper\JobCategoryMapper;
21
use LeadersLinked\Mapper\LocationMapper;
22
use LeadersLinked\Mapper\QueryMapper;
23
use ArrayObject;
24
 
25
class RecruitmentCreateJobDescriptionController extends AbstractActionController
26
{
27
    /**
28
     *
29
     * @var \Laminas\Db\Adapter\AdapterInterface
30
     */
31
    private $adapter;
32
 
33
    /**
34
     *
35
     * @var \LeadersLinked\Cache\CacheInterface
36
     */
37
    private $cache;
38
 
39
 
40
    /**
41
     *
42
     * @var \Laminas\Log\LoggerInterface
43
     */
44
    private $logger;
45
 
46
    /**
47
     *
48
     * @var array
49
     */
50
    private $config;
51
 
52
 
53
    /**
54
     *
55
     * @var \Laminas\Mvc\I18n\Translator
56
     */
57
    private $translator;
58
 
59
 
60
    /**
61
     *
62
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
63
     * @param \LeadersLinked\Cache\CacheInterface $cache
64
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
65
     * @param array $config
66
     * @param \Laminas\Mvc\I18n\Translator $translator
67
     */
68
    public function __construct($adapter, $cache, $logger, $config, $translator)
69
    {
70
        $this->adapter      = $adapter;
71
        $this->cache        = $cache;
72
        $this->logger       = $logger;
73
        $this->config       = $config;
74
        $this->translator   = $translator;
75
    }
76
 
77
    public function indexAction()
78
    {
79
        $request = $this->getRequest();
80
 
81
        // 🔹 Obtener el ID desde la ruta (URL) con el formato /endpoint/:id
82
        $vacancyId = $this->params()->fromRoute('id');
83
 
84
        // 🔹 Verificar si el ID es válido
85
        if (!$vacancyId) {
86
            return new JsonModel([
87
                'success' => false,
88
                'message' => 'Missing vacancy ID'
89
            ]);
90
        }
91
 
92
        // 🔹 Obtener usuario y permisos ACL
93
        $currentUserPlugin = $this->plugin('currentUserPlugin');
94
        $currentUser = $currentUserPlugin->getUser();
95
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
96
 
97
        // 🔹 Verificar si el usuario tiene permiso para extraer criterios
514 ariadna 98
        if (!$acl->isAllowed($currentUser->usertype_id, '')) {
512 ariadna 99
            return new JsonModel([
100
                'success' => false,
101
                'message' => 'Access denied'
102
            ]);
103
        }
104
 
105
        if ($request->isGet()) {
106
 
107
            // Llamar a la función que obtiene los archivos de la vacante
108
            $candidates = $this->getSelectionPreAplicationCandidates($vacancyId);
109
 
110
            return new JsonModel([
111
                'success' => true,
112
                'data' => $candidates
113
            ]);
114
        }
115
 
116
        if ($request->isPost()) {
117
            // 🔹 Obtener los CVs en Base64 desde el cuerpo de la solicitud
118
            $bodyParams = json_decode($this->getRequest()->getContent(), true);
119
            $cvs = $bodyParams['cvs'] ?? [];
120
 
121
            // 🔹 Verificar si hay CVs
122
            if (empty($cvs)) {
123
                return new JsonModel([
124
                    'success' => false,
125
                    'message' => 'Missing CVs data'
126
                ]);
127
            }
128
 
129
            // 🔹 Obtener criterios desde la base de datos
130
            $criteria = $this->getSelectionCriteriaVacancy($vacancyId);
131
 
132
            // 🔹 Verificar si los criterios existen
133
            if (!$criteria) {
134
                return new JsonModel([
135
                    'success' => false,
136
                    'message' => 'No selection criteria found for this vacancy'
137
                ]);
138
            }
139
 
140
            // 🔹 Procesar los CVs y analizar compatibilidad con los criterios
141
            try {
142
                $processedCvs = $this->processCvs($cvs, $criteria, $vacancyId);
143
 
144
                return new JsonModel([
145
                    'success' => true,
146
                    'data' => $processedCvs
147
                ]);
148
            } catch (\Exception $e) {
149
                return new JsonModel([
150
                    'success' => false,
151
                    'message' => 'Error processing CVs: ' . $e->getMessage()
152
                ]);
153
            }
154
        }
155
 
156
        // Si el método no es GET ni POST
157
        return new JsonModel([
158
            'success' => false,
159
            'message' => 'Invalid request method'
160
        ]);
161
    }
162
}