File: /home/undanet/www//PortalEmpleo/src/Repository/DBCandidatoIdiomaRepository.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\DboCandidatoidioma;
use PortalEmpleo\Entity\DboIdiomas;
use PortalEmpleo\Entity\DboNivelidioma;
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 DBCandidatoIdiomaRepository extends AbstractController
{
private $dotenv;
private $entityManager;
private const MAX_OTROIDIOMA = 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 obtenerIdiomas($lang, $idCandidato)
{
try{
$entityManager = $this->loadEnv();
if(!isset($idCandidato))
{
$lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.baja = false')
->addOrderBy('c.codigocandidato', 'DESC')
->addOrderBy('c.codigoidioma', 'DESC')
->getQuery()
->execute();
}
else
{
$lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.baja = false')
->andWhere('c.codigocandidato = :idcandidato')
->setParameter('idcandidato', $idCandidato)
->getQuery()
->execute();
if (!$lidiomas) {
return;
/*throw $this->createNotFoundException(
'No se encuentran idiomas para el usuario con el id'. $idCandidato
);*/
}
}
if($lang)
{
$ltraduccionesidiomas = $this->obtenerListaTraducciones($entityManager, "traduccion_idiomas", "CodigoIdiomas", "Idioma", "Descripcion", $lang, null);
if($ltraduccionesidiomas)
{
foreach ($lidiomas as $cidiomas) {
foreach ($ltraduccionesidiomas as $traduccionidiomas) {
if(($cidiomas->getCodigoidiomas())->getIdidiomas() == $traduccionidiomas["CodigoIdiomas"])
{
($cidiomas->getCodigoidiomas())->setIdioma($traduccionidiomas["Idioma"]);
($cidiomas->getCodigoidiomas())->setDescripcion($traduccionidiomas["Descripcion"]);
}
}
}
}
$ltraduccionesnivelidioma = $this->obtenerListaTraducciones($entityManager, "traduccion_nivelidioma", "CodigoNivelIdioma", "NivelIdioma", "Descripcion", $lang, null);
if($ltraduccionesnivelidioma)
{
foreach ($lidiomas as $cand) {
foreach ($ltraduccionesnivelidioma as $traduccionnivelidioma) {
if(($cand->getCodigonivelidioma())->getIdnivelidioma() == $traduccionnivelidioma["CodigoNivelIdioma"])
{
($cand->getCodigonivelidioma())->setNivelidioma($traduccionnivelidioma["NivelIdioma"]);
//($cand->getCodigonivelidioma())->setDescripcion($traduccionnivelidioma["Descripcion"]); ->DboNivelidioma no tiene descripción
}
}
}
}
}
/*foreach ($lidiomas as $c) {
echo $c->getIdcandidatoidioma();
echo ($c->getCodigocandidato())->getIdcandidato();
echo ($c->getCodigoidiomas())->getIdioma();
echo ($c->getCodigonivelidioma())->getNivelidioma();
echo $c->getOtroidioma();
echo $c->getBaja();
echo 'sale';
}*/
$entityManager->getConnection()->close();
return $lidiomas; //$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 eliminarCandidatoIdioma($idCandIdioma)
{
try
{
$entityManager = $this->loadEnv();
$cdtId = $entityManager->getRepository(DboCandidatoidioma::class)->find($idCandIdioma);
if (!$cdtId) {
throw $this->createNotFoundException(
'No se encuentra el candidatoidioma con el id '. $idCandIdioma
);
}
$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 comprobarCandidatoIdioma($codigocandidato, $codigoidioma)
{
try{
$entityManager = $this->loadEnv();
$lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoidiomas = :cidi')
->setParameter('cdt', $codigocandidato)
->setParameter('cidi', $codigoidioma)
->getQuery()
->execute();
if (!$lidiomas) {
return false;
}
$entityManager->getConnection()->close();
return $lidiomas; //$result;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
public function comprobarOtrosIdiomas($codigocandidatoidioma)
{
try{
$entityManager = $this->loadEnv();
$lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoidiomas = :cidi')
->andWhere('c.baja = false')
->setParameter('cdt', ($codigocandidatoidioma->getCodigocandidato())->getIdcandidato())
->setParameter('cidi', ($codigocandidatoidioma->getCodigoidiomas())->getIdidiomas())
->getQuery()
->execute();
if(count($lidiomas) >= self::MAX_OTROIDIOMA) //Para que no se puedan añadir indefinidos otros idiomas
{
return false;
}
$lidiomas = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoidiomas = :cidi')
->andWhere('c.otroidioma = :otridi')
->setParameter('cdt', ($codigocandidatoidioma->getCodigocandidato())->getIdcandidato())
->setParameter('cidi', ($codigocandidatoidioma->getCodigoidiomas())->getIdidiomas())
->setParameter('otridi', $codigocandidatoidioma->getOtroidioma())
->getQuery()
->execute();
if (!$lidiomas) {
$entityManager->getConnection()->close();
return true;
}
if(is_array($lidiomas))
{
$lidiomas = reset($lidiomas);
}
$entityManager->getConnection()->close();
return $lidiomas;
}
catch (Exception $ex){
echo $exception->getMessage();
return null;
}
}
public function actualizarCandidatoIdioma($candIdioma)
{
try
{
$entityManager = $this->loadEnv();
if($candIdioma->getOtroidioma()!=null && strlen(trim($candIdioma->getOtroidioma()))>0)
{
$cdtIdi = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoidiomas = :cidi')
->andWhere('c.otroidioma = :otridi')
->setParameter('cdt', ($candIdioma->getCodigocandidato())->getIdcandidato())
->setParameter('cidi', ($candIdioma->getCodigoidiomas())->getIdidiomas())
->setParameter('otridi', $candIdioma->getOtroidioma())
->getQuery()
->execute();
}
else
{
$cdtIdi = $entityManager->getRepository(DboCandidatoidioma::class)
->createQueryBuilder('c')
->where('c.codigocandidato = :cdt')
->andWhere('c.codigoidiomas = :cidi')
->setParameter('cdt', ($candIdioma->getCodigocandidato())->getIdcandidato())
->setParameter('cidi', ($candIdioma->getCodigoidiomas())->getIdidiomas())
->getQuery()
->execute();
}
if (!$cdtIdi) {
throw $this->createNotFoundException(
'No se encuentra el candidatoidioma para el candidato '. ($candIdioma->getCodigocandidato())->getIdcandidato() . ' y el idioma ' . ($candIdioma->getCodigoidiomas())->getIdidiomas()
);
}
if(is_array($cdtIdi))
{
$cdtIdi = reset($cdtIdi);
}
$cdtIdi = $cdtIdi->setOtroidioma($candIdioma->getOtroidioma());
$cdtIdi = $cdtIdi->setBaja(false);
$entityManager2 = $this->loadEnv();
$cdtNvlIdi = $entityManager2->getRepository(DboNivelidioma::class)->find(($candIdioma->getCodigonivelidioma())->getIdnivelidioma());
$entityManager2->clear();
if (!$cdtNvlIdi) {
throw $this->createNotFoundException(
'No se encuentra el nivel de idioma con el id '.($candIdioma->getCodigonivelidioma())->getIdnivelidioma()
);
}
$cdtIdi = $cdtIdi->setCodigonivelidioma2($cdtNvlIdi);
/*echo $cdtIdi->getIdcandidatoidioma() . ' //';
echo ($cdtIdi->getCodigocandidato())->getIdcandidato() . ' // ';
echo ($cdtIdi->getCodigoidiomas())->getIdidiomas() . ' // ';
echo $cdtIdi->getOtroidioma() . ' // ';
echo ($cdtIdi->getCodigonivelidioma())->getIdnivelidioma() . ' // ';
echo $cdtIdi->getBaja();*/
$entityManager->merge($cdtIdi);
$entityManager->flush();
$entityManager->clear();
$entityManager->getConnection()->close();
}
catch (Exception $ex)
{
echo $exception->getMessage();
}
}
public function nuevoCandidatoIdioma($candIdioma)
{
try
{
$entityManager = $this->loadEnv();
$cdtIdioma = new DboCandidatoidioma();
$cdtIdioma = $cdtIdioma->setOtroidioma($candIdioma->getOtroidioma());
$cdtIdioma = $cdtIdioma->setBaja(false);
$entityManager->persist($cdtIdioma);
$entityManager->flush();
$entityManager2 = $this->loadEnv();
$cdt = $entityManager2->getRepository(DboCandidato::class)->find(($candIdioma->getCodigocandidato())->getIdcandidato());
$entityManager2->clear();
if (!$cdt) {
throw $this->createNotFoundException(
'No se encuentra el candidato con el id '.($candIdioma->getCodigocandidato())->getIdcandidato()
);
}
$cdtIdioma = $cdtIdioma->setCodigocandidato2($cdt);
$cdtIdi = $entityManager2->getRepository(DboIdiomas::class)->find(($candIdioma->getCodigoidiomas())->getIdidiomas());
$entityManager2->clear();
if (!$cdtIdi) {
throw $this->createNotFoundException(
'No se encuentra el idioma de candidato con el id '.($candIdioma->getCodigoidiomas())->getIdidiomas()
);
}
$cdtIdioma = $cdtIdioma->setCodigoidiomas2($cdtIdi);
$cdtNvlIdi = $entityManager2->getRepository(DboNivelidioma::class)->find(($candIdioma->getCodigonivelidioma())->getIdnivelidioma());
$entityManager2->clear();
if (!$cdtNvlIdi) {
throw $this->createNotFoundException(
'No se encuentra el nivel de idioma con el id '.($candIdioma->getCodigonivelidioma())->getIdnivelidioma()
);
}
$cdtIdioma = $cdtIdioma->setCodigonivelidioma2($cdtNvlIdi);
$entityManager->merge($cdtIdioma);
$entityManager->flush();
$entityManager->clear();
$entityManager->getConnection()->close();
}
catch (Exception $ex)
{
echo $exception->getMessage();
}
}
}
?>