File: /home/undanet/www/PortalEmpleo/src/Repository/DBCandidatoPerfilRepository.php
<?php
namespace PortalEmpleo\Repository;
require __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../../bootstrap.php';
use Dotenv\Dotenv;
use PortalEmpleo\Entity\DboCandidato;
use PortalEmpleo\Entity\DboCandidatoperfil;
use PortalEmpleo\Entity\DboRangoexperiencia;
use PortalEmpleo\Entity\DboPerfil;
use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class DBCandidatoPerfilRepository extends AbstractController
{
private $dotenv;
private $entityManager;
private const MAX_PERFILES = 5;
public function __construct()
{
}
private function loadEnv()
{
try{
$dotenv = Dotenv::createImmutable(__DIR__ . "/../../");
$dotenv->load();
$em = getEntityManager();
return $em;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
public function obtenerPerfiles($lang, $idCandidato)
{
try{
$entityManager = $this->loadEnv();
if(!isset($idCandidato))
{
$lperfiles = $entityManager->getRepository(DboCandidatoperfil::class)
->createQueryBuilder('c')
->where('c.baja = false')
->addOrderBy('c.codigocandidato', 'DESC')
->addOrderBy('c.codigoperfil', 'DESC')
->getQuery()
->execute();
}
else
{
$lperfiles = $entityManager->getRepository(DboCandidatoperfil::class)
->createQueryBuilder('c')
->where('c.baja = false')
->andWhere('c.codigocandidato = :idcandidato')
->setParameter('idcandidato', $idCandidato)
->getQuery()
->execute();
if (!$lperfiles) {
return;
/*throw $this->createNotFoundException(
'No se encuentran perfils para el usuario con el id'. $idCandidato
);*/
}
}
if($lang)
{
$ltraduccionesperfiles = $this->obtenerListaTraducciones($entityManager, "traduccion_perfil", "CodigoPerfil", "Perfil", "Descripcion", $lang, null);
if($ltraduccionesperfiles)
{
foreach ($lperfiles as $cperfil) {
foreach ($ltraduccionesperfiles as $traduccionperfil) {
if(($cperfil->getCodigoperfil())->getIdperfil() == $traduccionperfil["CodigoPerfil"])
{
($cperfil->getCodigoperfil())->setPerfil($traduccionperfil["Perfil"]);
//($cperfil->getCodigoperfil())->setDescripcion($traduccionperfil["Descripcion"]);
}
}
}
}
$ltraduccionesrangoexperiencia = $this->obtenerListaTraducciones($entityManager, "traduccion_rangoexperiencia", "CodigoRangoExperiencia", "RangoExperiencia", "Descripcion", $lang, null);
if($ltraduccionesrangoexperiencia)
{
foreach ($lperfiles as $cperfil) {
foreach ($ltraduccionesrangoexperiencia as $traduccionrangoexperiencia) {
if(($cperfil->getCodigorangoexperiencia())->getIdrangoexperiencia() == $traduccionrangoexperiencia["CodigoRangoExperiencia"])
{
($cperfil->getCodigorangoexperiencia())->setRangoexperiencia($traduccionrangoexperiencia["RangoExperiencia"]);
//($cperfil->getCodigonivelperfil())->setDescripcion($traduccionnivelperfil["Descripcion"]); ->DboNivelperfil no tiene descripción
}
}
}
}
}
$entityManager->getConnection()->close();
return $lperfiles; //$result;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
private function obtenerListaTraducciones($em, $nombretablatraduccion, $columnaid, $columnatexto, $columna2, $language, $id)
{
try{
$sql = "SELECT T." . $columnaid . " , T." . $columnatexto . " , T." . $columna2 . " , T.CodigoIdioma FROM " . $nombretablatraduccion . " T WHERE CodigoIdioma = '" . $language . "'";
if(isset($id))
{
$sql = $sql . " AND T." . $columnaid . " = " . $id;
}
$rs = $em->getConnection()->query($sql)->fetchAll();
return $rs;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
public function eliminarCandidatoPerfil($idCandperfil)
{
try
{
$entityManager = $this->loadEnv();
$cdtId = $entityManager->getRepository(DboCandidatoperfil::class)->find($idCandperfil);
if (!$cdtId) {
throw $this->createNotFoundException(
'No se encuentra el candidatoperfil con el id '. $idCandperfil
);
}
$cdtId = $cdtId->setBaja(true);
$entityManager->merge($cdtId);
$entityManager->flush();
$entityManager->clear();
$entityManager->getConnection()->close();
}
catch (Exception $ex)
{
echo $exception->getMessage();
}
}
//hay que hace la funcion de insertar y la de actualizar, el controller las llamará segun corresponda despues de comprobar si ya hay alguno de baja
public function comprobarCandidatoPerfil($codigocandidato, $codigoperfil)
{
try{
$entityManager = $this->loadEnv();
$lperfiles = $entityManager->getRepository(DboCandidatoperfil::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoperfil = :cprfl')
->setParameter('cdt', $codigocandidato)
->setParameter('cprfl', $codigoperfil)
->getQuery()
->execute();
if (!$lperfiles) {
return false;
}
$entityManager->getConnection()->close();
return $lperfiles; //$result;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
public function actualizarCandidatoPerfil($cperfil)
{
try
{
$entityManager = $this->loadEnv();
$cdtPerfil = $entityManager->getRepository(DboCandidatoperfil::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoperfil = :cprfl')
->setParameter('cdt', ($cperfil->getCodigocandidato())->getIdcandidato())
->setParameter('cprfl', ($cperfil->getCodigoperfil())->getIdperfil())
->getQuery()
->execute();
if (!$cdtPerfil) {
throw $this->createNotFoundException(
'No se encuentra el candidatoperfil para el candidato '. ($cperfil->getCodigocandidato())->getIdcandidato() . ' y el perfil ' . ($cperfil->getCodigoperfil())->getIdperfil()
);
}
if(is_array($cdtPerfil))
{
$cdtPerfil = reset($cdtPerfil);
}
$cdtPerfil = $cdtPerfil->setBaja(false);
$entityManager2 = $this->loadEnv();
$cdtRngExpe = $entityManager2->getRepository(DboRangoexperiencia::class)->find(($cperfil->getCodigorangoexperiencia())->getIdrangoexperiencia());
$entityManager2->clear();
if (!$cdtRngExpe) {
throw $this->createNotFoundException(
'No se encuentra el rango de experiencia con el id '.($cperfil->getCodigorangoexperiencia())->getIdrangoexperiencia()
);
}
$cdtPerfil = $cdtPerfil->setCodigorangoexperiencia2($cdtRngExpe);
$entityManager->merge($cdtPerfil);
$entityManager->flush();
$entityManager->clear();
$entityManager->getConnection()->close();
}
catch (Exception $ex)
{
echo $exception->getMessage();
}
}
public function nuevoCandidatoPerfil($cperfil)
{
try
{
$entityManager = $this->loadEnv();
$cdtperfil = new DboCandidatoperfil();
$cdtperfil = $cdtperfil->setBaja(false);
$entityManager->persist($cdtperfil);
$entityManager->flush();
$entityManager2 = $this->loadEnv();
$cdt = $entityManager2->getRepository(DboCandidato::class)->find(($cperfil->getCodigocandidato())->getIdcandidato());
$entityManager2->clear();
if (!$cdt) {
throw $this->createNotFoundException(
'No se encuentra el candidato con el id '.($cperfil->getCodigocandidato())->getIdcandidato()
);
}
$cdtperfil = $cdtperfil->setCodigocandidato2($cdt);
$Perfil = $entityManager2->getRepository(DboPerfil::class)->find(($cperfil->getCodigoperfil())->getIdperfil());
$entityManager2->clear();
if (!$Perfil) {
throw $this->createNotFoundException(
'No se encuentra el perfil con el id '.($cperfil->getCodigoperfil())->getIdperfil()
);
}
$cdtperfil = $cdtperfil->setCodigoperfil2($Perfil);
$entityManager2 = $this->loadEnv();
$cdtRngExpe = $entityManager2->getRepository(DboRangoexperiencia::class)->find(($cperfil->getCodigorangoexperiencia())->getIdrangoexperiencia());
$entityManager2->clear();
if (!$cdtRngExpe) {
throw $this->createNotFoundException(
'No se encuentra el rango de experiencia con el id '.($cperfil->getCodigorangoexperiencia())->getIdrangoexperiencia()
);
}
$cdtperfil = $cdtperfil->setCodigorangoexperiencia2($cdtRngExpe);
$entityManager->merge($cdtperfil);
$entityManager->flush();
$entityManager->clear();
$entityManager->getConnection()->close();
}
catch (Exception $ex)
{
echo $exception->getMessage();
}
}
}
?>