<?php
namespace App\Controller;
use App\Crud\Controller\crudPlainController;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Solicitud;
use App\Entity\SolicitudHistoria;
use App\Entity\Adjunto;
use App\Entity\TipoServicio;
use App\Entity\InstitucionFinanciera;
use App\Entity\PuntoImpresion;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
use Symfony\Component\Mime\Email;
use App\Entity\SeguridadUsuario;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Dompdf\Options;
use Dompdf\Dompdf;
use App\Entity\Pago;
use Symfony\Contracts\Translation\TranslatorInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\PuntoImpresionTurno;
class SolicitudController extends crudPlainController
{
public function __construct(TranslatorInterface $translator, LoggerInterface $logger, MailerInterface $mailer, RequestStack $requestStack, EntityManagerInterface $entityManager)
{
parent::__construct($translator, $logger, $mailer, $requestStack, $entityManager);
$this->dateFields['fechaServicioPlan'] = 1;
}
public function nuevaSolicitudAction($rol = 'anonimo')
{
$this->setUtilProperties();
$params = $this->getParamsForModification();
$params['rol']=$rol;
$plataforma=$this->getParameter('tipo_producto');
$params['plataforma']=$plataforma;
$params['temp_id'] = $this->session?$this->session->getId():'0000';
return $this->render("Solicitud/nuevaSolicitud.html.twig", $params);
//return $this->render("layout_deshabilitado.html.twig");
}
public function validarCaptchaAction($id='none')
{
$data = ['ok'=>true];
$solicitud = null;
$captcha = $this->request->get('captcha');
if ($id != 'none')
{
$solicitud = $this->em->getRepository(Solicitud::class)->find($id);
}
$savedCaptcha = $this->session->get('captcha_codigo');
if ($savedCaptcha == $captcha)
{
$servicios = $this->em->getRepository(TipoServicio::class)->findAll();
$data['html'] = $this->render('Solicitud/nuevaSolicitud_step1.html.twig',
['servicios'=>$servicios,
'solicitud'=>$solicitud,
])->getContent();
}
else
{
$data['ok'] = false;
}
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function verificarRegistroCivilAction($identificacion, $codigoDactilar, $identificacionSolicitante,$tipoSolicitud, $isfaa='true')
{
// $data = ['ok'=>true, 'nombres'=>'nombre', 'direccion'=>'direccion']; //WILLY: Usar esta línea para no llamar a WS
// $data = new Response(json_encode($data)); //WILLY: Usar esta línea para no llamar a WS
// $data->headers->set('Content-Type', 'application/json'); //WILLY: Usar esta línea para no llamar a WS
// return $data; //WILLY: Usar esta línea para no llamar a WS
$data = $this->verificaCodigoDactilar($identificacion, strtoupper($codigoDactilar), $identificacion != $identificacionSolicitante);
$this->logger->error('************rehisto'. json_encode($data));
if ($data['ok'])
{
if ($identificacion == $identificacionSolicitante)
{
if ($isfaa=='true')
{
$data = $this->verificaISSFA($identificacionSolicitante);
}
if(!$data['ok'] and $tipoSolicitud!=4){
$data = $this->verificaReservista($identificacion);
}
if($tipoSolicitud==4){
$data['ok']=true;
}
}
else
{
if ($isfaa=='true')
{
$data = $this->verificaISSFA($identificacionSolicitante, $identificacion);
}
}
}
if ($data['ok'])
{
$data = $this->recuperaDatosPersona($identificacion);
}
if ($data['ok'])
{
$dataFoto = $this->recuperaFotoCedulaPersona($identificacion);
if ($dataFoto['ok'])
{
$data['foto'] = $dataFoto['foto'];
}
else
{
$data['foto'] = 'no foto';
}
}
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
protected function verificaISSFA($identificacion, $identificacionDependiente = null)
{
$data = ['ok'=>true];
// return $data; //WILLY usar esta línea para no llamar a ws
$ws_issfa=$this->getParameter('issfa_ws');
$user_issfa = $this->getParameter('issfa_user');
$pass_issfa = $this->getParameter('issfa_pass');
$cliente = new \SoapClient($ws_issfa);//, array('login' => $user_issfa, 'password' => $pass_issfa));
try
{
$parametros = ['Identificacion'=>$identificacion,'Usuario'=>$user_issfa,'Clave'=>$pass_issfa];
$result = $cliente->__soapCall("ConsultarAfiliados", array($parametros));
$codigoRegCvil='';
$sexoRegCivil='';
$ceduISFA='';
if($result)
{
if($result->Mensaje != 'CORRECTO')
{
$data['ok']=false;
$data['msg']='Número de identificación no registrado en la institución';
}
else
{
$this->logger->error('************ISSFA'.$identificacion.' - '. json_encode($result));
$registrados= array();
if ($identificacionDependiente)
{
$parametros = ['Identificacion'=>$identificacionDependiente,'Usuario'=>$user_issfa,'Clave'=>$pass_issfa];
$result = $cliente->__soapCall("ConsultarAfiliados", array($parametros));
$codigoRegCvil='';
$sexoRegCivil='';
$ceduISFA='';
if($result)
{
if($result->Mensaje != 'CORRECTO')
{
$dependientes=$result->Dependientes->DetalleDependiente;
$ok = false;
foreach ($dependientes as $persona)
{
$this->logger->error('************persona'. json_encode($persona));
$persona= (array) $persona;
$ceduISFA=$persona['Cedula'];
$registrados[]=$persona['Nombres'];
if ($persona['Cedula'] == $identificacionDependiente)
{
$ok = true;
break;
}
}
}else{
$ok = true;
}
}
/*if(!$ok){
foreach ($dependientes as $dependiente)
{
foreach ($dependiente as $persona)
{
$persona= (array) $persona;
$ceduISFA=$persona->Cedula;
if ($persona['Cedula'] == $identificacionDependiente)
{
$ok = true;
break;
}
}
}
}*/
if (!$ok)
{
$data['ok']=false;
$data['msg']='La identificacion '.$identificacionDependiente.' del dependiente, no se encuentra registrada. Los Dependientes registrados son: '. json_encode($registrados);
}
}
}
}
else
{
$data['msg']='No pudo establecerse comunicación con el ISSFA...';
$data['ok']=false;
}
}
catch (\SoapFault $e)
{
$data['ok']=false;
$data['msg']= 'No pudo establecerse comunicación con el ISSFA... '.$e->faultstring;
}
return $data;
}
protected function verificaReservista($identificacion)
{
$data = ['ok'=>true];
// return $data; //WILLY: Usar esta línea para no llamar a los ws
$url = 'http://200.6.25.31/api/v1/get_data_reservista/'; //$ws_dynamo.'/RutaPorcOffline/'.$ruta->getId();
$params = array('cedula'=>$identificacion);
$method='POST';
try
{
$this->logger->error('************verifica reservista');
$header = [
'accept: application/json',
'Content-Type: application/json',
// 'Content-Length: ' . strlen($data),
// 'Authorization: Bearer '.$token,
];
if ($params && is_array($params))
{
$params = json_encode($params);
}
$handle = curl_init();
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
switch (strtoupper($method))
{
case "GET":
curl_setopt($handle, CURLOPT_HTTPGET, true);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
break;
case "POST":
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $params);
// $header[] = 'Content-Type: application/json';
break;
case "PUT":
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, $params);
break;
case "DELETE":
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'DELETE');
if ($params)
{
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($params));
// $url = sprintf("%s?%s", $url, http_build_query($params));
// $header[] = 'Content-Type: application/x-www-form-urlencoded';
}
break;
}
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
//$output->writeln('*********************url' . $url);
//$output->writeln('*********************httpCodeDYNAMO' . $httpCode);
//$output->writeln('*********************responseDYNAMO' . json_encode($response));
$res=['ok'=>true];
if(!$response || $httpCode != 200){
$this->logger->error('**********wwww** no existe reservista');
$res['ok']=false;
$ret['causa'] = 'NO_RESERVISTA';
$ret['msg']='No existe un militar o reservista registrado con la indentificación proporcionada';
$res['httpCode']=$httpCode;
$res['info'] = 'Error: No existe un militar o reservista registrado con la indentificación proporcionada';
return $res;
}
else
{
$this->logger->error('**********wwww** si existe reservista');
$response = json_decode($response, true);
$res['reservistaVerificado'] = $response['data'];
}
} catch(\Exception $exc) {
$this->logger->error('************error reservista'.$exc);
$res=array('ok'=>false,'info'=>'Error al consultar '.$exc, 'causa' => 'no es reservista o militar', 'msg'=>'No existe un militar o reservista registrado con la indentificación proporcionada');
}
return $res;
}
protected function verificaCodigoDactilar($identificacion, $codigoDactilar, $beneficiario=false)
{
// $data = ['ok'=>false, 'dactilarRegCivil'=>['individualDactilar'=>'$codigoRegCvil', 'sexo'=>'$sexoRegCivil']]; //WILLY: Usar esta línea para no llamar a los ws
// return $data; //WILLY: Usar esta línea para no llamar a los ws
$data = ['ok'=>true];
$ws_dinardap=$this->getParameter('dinardap_ws_2');
$user_dinardap = $this->getParameter('dinardap_user');
$pass_dinardap = $this->getParameter('dinardap_pass');
$cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap, 'password' => $pass_dinardap));
try
{
$parametros=array('parametros'=>array(array('nombre' => 'codigoPaquete','valor' => 1959),array('nombre' => 'identificacion','valor' => $identificacion)));
$result = $cliente->__soapCall("consultar", array($parametros));
$codigoRegCvil='';
$sexoRegCivil='';
if($result->paquete)
{
if($result->paquete->entidades->entidad)
{
$filas=$result->paquete->entidades->entidad->filas;
foreach ($filas as $fila)
{
foreach ($fila->columnas as $columna)
{
foreach ($columna as $item)
{
switch ($item->campo)
{
case 'individualDactilar':
$codigoRegCvil= $item->valor;
break;
case 'sexo':
$sexoRegCivil= $item->valor;
break;
}
}
}
}
$data['dactilarRegCivil']=array('individualDactilar'=>$codigoRegCvil, 'sexo'=>$sexoRegCivil);
if($codigoRegCvil!=$codigoDactilar and !$beneficiario)
{
$data['ok']=false;
$data['msg']='La información suministrada no es correcta'. json_encode($result);
}
}
}
else
{
$data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
$data['ok']=false;
}
}
catch (\SoapFault $e)
{
$data['ok']=false;
$data['msg']= 'No pudo establecerse comunicación con el Registro Civil para validar la información... '.$e->faultstring; ;
}
return $data;
}
protected function recuperaDatosPersona($identificacion)
{
// $data = ['ok'=>true, 'direccion'=>'direccion'] ; //WILLY: Usar esta línea para no llamar a los ws
// return $data; //WILLY: Usar esta línea para no llamar a los ws
$data = ['ok'=>true];
$ws_dinardap=$this->getParameter('dinardap_ws');
$user_dinardap = $this->getParameter('dinardap_user');
$pass_dinardap = $this->getParameter('dinardap_pass');
$cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap, 'password' => $pass_dinardap));
try
{
$result = $cliente->__soapCall(
"getFichaGeneral", array(array(
'codigoPaquete' => 82,
'numeroIdentificacion' => $identificacion
))
);
if ($result->return->instituciones)
{
$datos=$result->return->instituciones->datosPrincipales->registros;
foreach ($datos as $dato)
{
switch ($dato->campo)
{
case 'nombre':
$data['nombres']=$dato->valor;
break;
case 'domicilio':
$data['domicilio']=$dato->valor;
break;
case 'callesDomicilio':
$data['callesDomicilio']=$dato->valor;
break;
case 'numeroCasa':
$data['numeroCasa']=$dato->valor;
break;
}
}
$data['direccion'] = $data['domicilio'];
if ($data['direccion'])
{
$data['direccion'] .= ', '.$data['callesDomicilio'];
}
if ($data['direccion'] && $data['numeroCasa'])
{
$data['direccion'] .= ', # '.$data['numeroCasa'];
}
unset($data['domicilio']);
unset($data['callesDomicilio']);
unset($data['numeroCasa']);
}
else
{
$data['ok']=false; //se pudo comunicar con el ws
$data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
}
if ($data['ok'])
{
//Busco datos registrados antes en otras solicitudes
$data['movil'] = '_NONE_';
$data['email'] = '_NONE_';
$solicitudes = $this->em->getRepository(Solicitud::class)
->createQueryBuilder('s')
->where('s.solicitanteIdentificacion = :CEDULA')
->orderBy('s.fechaRegistro', 'desc')
->setParameter('CEDULA', $identificacion)
->setMaxResults(1)
->getQuery()->getResult();
if (!empty($solicitudes))
{
$solicitudes = $solicitudes[0];
$data['movil'] = $solicitudes->getSolicitanteMovil();
$data['email'] = $solicitudes->getSolicitanteEmail();
}
}
}
catch (\SoapFault $e)
{
$data['ok']=false;
$data['msg']= 'Error al codigo 82 '.$e->faultstring;
}
return $data;
}
protected function recuperaFotoCedulaPersona($identificacion)
{
// $data = ['ok'=>false]; //WILLY: Usar esta línea para no llamar a los ws
// return $data; //WILLY: Usar esta línea para no llamar a los ws
$data = ['ok'=>true];
$ws_dinardap=$this->getParameter('dinardap_ws_2');
$user_dinardap = $this->getParameter('dinardap_user');
$pass_dinardap = $this->getParameter('dinardap_pass');
$cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap, 'password' => $pass_dinardap));
try
{
$parametros=array('parametros'=>array(array('nombre' => 'codigoPaquete','valor' => 1961),array('nombre' => 'identificacion','valor' => $identificacion)));
$result = $cliente->__soapCall("consultar", array($parametros));
$data['foto'] = '';
if ($result->paquete)
{
if ($result->paquete->entidades->entidad)
{
$filas=$result->paquete->entidades->entidad->filas;
foreach ($filas as $fila)
{
foreach ($fila->columnas as $columna)
{
foreach ($columna as $item)
{
if ($item->campo=='foto')
{
$data['foto'] = $item->valor;
break;
}
}
}
}
}
}
else
{
$data['ok']=false;
$data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
}
}
catch (\SoapFault $e)
{
$data['ok']=false;
$data['msg']= $e->faultstring;
$data['foto'] =$e->faultstring;
}
return $data;
}
public function cargaPasoTurnosAction($id='none')
{
$puntos = $this->em->getRepository(PuntoImpresion::class)->findBy(['activo'=>true]);
$params = [
'puntos' => $puntos,
];
$solicitud = null;
if ($id != 'none')
{
$params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
}
return $this->render('Solicitud/nuevaSolicitud_step5.html.twig', $params);
}
public function cargaPasoPagosAction($id='none',$servicio)
{
$servicio = $this->em->getRepository(TipoServicio::class)->find($servicio);
$params = [
'servicio' => $servicio,
'bancos' => $this->em->getRepository(InstitucionFinanciera::class)
->createQueryBuilder('p')
->orderBy('p.nombre')
->getQuery()->getResult(),
];
$solicitud = null;
if ($id != 'none')
{
$params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
}
return $this->render('Solicitud/nuevaSolicitud_step2.html.twig', $params);
}
public function cargaPasoBeneficiariosAction($servicio, $tipo, $cantBeneficiarios, $id='none')
{
$servicio = $this->em->getRepository(TipoServicio::class)->find($servicio);
$totalBeneficiarios = $cantBeneficiarios;
if ($tipo != Solicitud::TIPO_SOLO_DEPENDIENTES)
{
$cantBeneficiarios--;
}
if ($tipo==Solicitud::TIPO_FUNCIONARIO_PUBLICO && $cantBeneficiarios>1)
{
$cantBeneficiarios = 1;
$totalBeneficiarios = 2;
}
$params = [
'tipo' => $tipo,
'personal' => $tipo != Solicitud::TIPO_SOLO_DEPENDIENTES,
'cantidadBeneficiarios' => $cantBeneficiarios,
'totalBeneficiarios'=>$totalBeneficiarios,
];
if ($id != 'none')
{
$params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
}
return $this->render('Solicitud/nuevaSolicitud_step4.html.twig', $params);
}
public function cargaPasoEmailAction()
{
return $this->render('Solicitud/nuevaSolicitud_step3.html.twig');
}
public function grabarSolicitudAction()
{
$ret = array('ok'=>true);
$fecha = new \DateTime();
$files = $this->request->files;
$files = $files->get('solicitud');
$data = $this->request->get('solicitud');
$ajax = $this->request->get('_xml_http_request');
$user = $this->getUser();
try
{
if ($data['id'])
{
$solicitud = $this->em->getRepository(Solicitud::class)->find($data['id']);
}
else
{
$solicitud = new Solicitud();
}
if ($solicitud)
{
$solicitud->setFechaRegistro($fecha);
$solicitud->setFechaEnvioRevision($fecha);
$solicitud->setEstado(Solicitud::ESTADO_REGISTRADA);
$tipoServicio = $this->em->getRepository(TipoServicio::class)->find($data['tipo']);
$solicitud->setTipoServicio($tipoServicio);
$puntoImpresion = $this->em->getRepository(PuntoImpresion::class)->find($data['puntoImpresion']);
$solicitud->setPuntoImpresion($puntoImpresion);
$fechaServicioPlan = \DateTime::createFromFormat('Y-m-d', $data['fechaServicioPlan']);
$fechaServicioPlan->setTime(0,0,0);
$solicitud->setFechaServicioPlan($fechaServicioPlan);
$solicitud->setTipo($data['tipoBeneficiario']);
// INFORMACIÖN SOLICITANTE
// $fechaExpedicion = \DateTime::createFromFormat('d-m-Y', $data['solicitante']['fecha_expedicion_codigo_dactilar']);
// $fechaExpedicion->setTime(0,0,0);
$solicitud->setSolicitanteCodigoDactilar(strtoupper($data['solicitante']['codigo_dactilar']));
$solicitud->setSolicitanteDireccion($data['solicitante']['direccion']);
$solicitud->setSolicitanteEmail($data['solicitante']['email']);
// $solicitud->setSolicitanteFechaExpedicionCodigoDactilar($fechaExpedicion);
$solicitud->setSolicitanteFoto($data['solicitante']['foto']);
$solicitud->setSolicitanteIdentificacion($data['solicitante']['identificacion']);
$solicitud->setSolicitanteMovil('5939'.$data['solicitante']['celular']);
$solicitud->setSolicitanteNombre($data['solicitante']['nombre']);
// $solicitud->setSolicitanteTelefono('5939'.$data['solicitante']['telefono_provincia'].$data['solicitante']['telefono']);
//INFORMACION PAGO
if($data['fecha_pago']){
$fechaPago = \DateTime::createFromFormat('Y-m-d', $data['fecha_pago']);
$fechaPago->setTime(0,0,0);
}else{
$fechaPago = new \DateTime();
$fechaPago->setTime(0,0,0);
}
$banco = $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco']);
$solicitud->setCostoServicio($tipoServicio->getPrecio());
$solicitud->setPagoBanco($banco);
$solicitud->setPagoComprobante($data['comprobante']);
$solicitud->setPagoValor($data['valor']);
$solicitud->setPagoValorReal(0);
$solicitud->setPagoFecha($fechaPago);
if (isset($files['comprobante_foto']) && $files['comprobante_foto'])
{
$this->setSolicitudAdjunto($files['comprobante_foto'], 'pagoComprobanteFoto', $solicitud);
}
if($data['comprobante2']!='' and $data['comprobante2']!=$data['comprobante']){
if($data['banco2']>0){
if($data['fecha_pago2']){
$fechaPago2 = \DateTime::createFromFormat('Y-m-d', $data['fecha_pago2']);
$fechaPago2->setTime(0,0,0);
}else{
$fechaPago2 = new \DateTime();
$fechaPago2->setTime(0,0,0);
}
$banco2 = $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco2']);
$solicitud->setPago2Banco($banco2);
$solicitud->setPago2Comprobante($data['comprobante2']);
$solicitud->setPago2Valor($data['valor2']);
$solicitud->setPago2Fecha($fechaPago2);
}
if (isset($files['comprobante_foto2']) && $files['comprobante_foto2'])
{
$this->setSolicitudAdjunto($files['comprobante_foto2'], 'pago2ComprobanteFoto', $solicitud);
}
}
// INFORMACIÖN BENEFICIARIO
if ($solicitud->getTipo() != Solicitud::TIPO_SOLO_DEPENDIENTES)
{
$solicitud->beneficiarioIgualSolicitante();
}
$cantidadBeneficiarios = $data['cantBeneficiario'];
$solicitud->setCantidadPaga($cantidadBeneficiarios);
if ($solicitud->getTipo() != Solicitud::TIPO_SOLO_DEPENDIENTES)
{
$cantidadBeneficiarios--;
}
else
{
//el primer beneficiario se pone en la solicitud padre
foreach ($data['beneficiario'] as $index => $beneficiario)
{
$solicitud->setCostoServicio($tipoServicio->getPrecio());
$this->guardaDatosBeneficiario($solicitud, $beneficiario);
unset($data['beneficiario'][$index]);
break;
}
}
$this->em->persist($solicitud);
$this->em->flush();
//guardar al resto de los beneficiarios en las solicitudes hijas
if (isset($data['beneficiario']))
{
foreach ($data['beneficiario'] as $index => $beneficiario)
{
$solicitudHija = $this->em->getRepository(Solicitud::class)
->findOneBy(['solicitudPadre'=>$solicitud->getId(),
'beneficiarioIdentificacion'=>$beneficiario['identificacion']
]);
if (!$solicitudHija)
{
$solicitudHija = new Solicitud();
$solicitudHija->setSolicitudPadre($solicitud);
$solicitudHija->setEstado($solicitud->getEstado());
}
$solicitudHija->setCostoServicio($tipoServicio->getPrecio());
$this->guardaDatosBeneficiario($solicitudHija, $beneficiario);
$this->em->persist($solicitudHija);
$this->em->flush();
}
}
if (!$solicitud->getCodigoAcceso())
{
$codigoAcceso = $solicitud->getFechaRegistro()->format('Ymd').$solicitud->getId().random_int(100, 999);
$solicitud->setCodigoAcceso($codigoAcceso);
}
$this->em->persist($solicitud);
$this->em->flush();
$this->asignaTurnos($data['turno'], $solicitud);
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha($fecha);
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Registrada');
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
$this->intentaAprobarSolicitud($solicitud);
$this->sendEmailEstado($solicitud);
$ret['id'] = $solicitud->getId();
$ret['codigoAcceso'] = $solicitud->getCodigoAcceso();
}
else
{
$ret['ok']=false;
$ret['info'] = 'No se encuentra la solicitud';
}
}
catch (\Exception $e)
{
$ret['ok']=false;
$ret['info'] = json_encode($data).$e->getMessage();
}
if ( $ajax )
{
if ($ret['ok'])
{
$ret['url'] = $this->generateUrl ('solicitud_estado', array('codigoAcceso'=>$solicitud->getCodigoAcceso(), 'checkMore'=>'false'));
}
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
else
{
return $this->redirect($this->generateUrl ('solicitud_estado', array('codigoAcceso'=>$solicitud->getCodigoAcceso())));
}
/*$ret['ok']=false;
$ret['info'] = 'La emisión turnos para obtención de credenciales se encuentra suspendida hasta el 3 de enero del 2023';
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;*/
}
protected function guardaDatosBeneficiario($solicitud, $beneficiario)
{
// $fechaExpedicion = \DateTime::createFromFormat('d-m-Y', $beneficiario['fecha_expedicion_codigo_dactilar']);
// $fechaExpedicion->setTime(0,0,0);
// $solicitud->setBeneficiarioCodigoDactilar(strtoupper($beneficiario['codigo_dactilar']));
// $solicitud->setBeneficiarioDireccion($beneficiario['direccion']);
// $solicitud->setBeneficiarioEmail($beneficiario['email']);
// $solicitud->setBeneficiarioFechaExpedicionCodigoDactilar($fechaExpedicion);
// $solicitud->setBeneficiarioFoto($beneficiario['foto']);
$solicitud->setBeneficiarioIdentificacion($beneficiario['identificacion']);
// $solicitud->setBeneficiarioMovil('5939'.$beneficiario['celular']);
$solicitud->setBeneficiarioNombre($beneficiario['nombre']);
// $solicitud->setBeneficiarioTelefono('5939'.$beneficiario['telefono_provincia'].$beneficiario['telefono']);
}
public function grabarResultadoSolicitudAction()
{
$ret = array('ok'=>true);
$fecha = new \DateTime();
$data = $this->request->get('solicitud');
$ajax = $this->request->get('_xml_http_request');
$user = $this->getUser();
$solicitud = $this->em->getRepository(Solicitud::class)->find($data['id']);
if ($solicitud)
{
$this->logger->error('************encuentra solicitud'.$data['resultado']);
if ($data['resultado']=='aprobada')
{
if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
$solicitud->setEstado(Solicitud::ESTADO_APROBADA);
$observaciones = 'Aprobada';
}
else
{
$solicitud->setEstado(Solicitud::ESTADO_RECHAZADA);
$observaciones = 'Rechazada';
}
if (isset($data['observaciones']))
{
$solicitud->setObservaciones($data['observaciones']);
$observaciones .='. '.$data['observaciones'];
}
$solicitud->setFechaResultadoRevision($fecha);
$this->logger->error('************valida hijas');
foreach ($solicitud->getHijas() as $hija)
{
$hija->setFechaResultadoRevision($fecha);
$hija->setEstado($solicitud->getEstado());
$hija->setObservaciones($solicitud->getObservaciones());
$this->em->persist($hija);
}
$this->em->persist($solicitud);
$this->em->flush();
$this->logger->error('************guarda');
if ($data['resultado']=='aprobada')
{
$this->intentaAprobarSolicitud($solicitud,true);
}
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha($fecha);
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Revisión terminada');
$solicitudHistoria->setObservaciones($observaciones);
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
try
{
$respuesta= $this->sendEmailEstado($solicitud);
if($respuesta!=true){
$ret['ok'] = false;
$ret['info'] = $respuesta;
}
}catch (\Exception $e)
{
$ret['ok'] = false;
$ret['info'] = $e->getMessage();
}
}
else
{
$ret['ok'] = false;
$ret['info'] = 'No se encontró la solicitud.';
}
if ($ajax)
{
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
else
{
if (!$ret['ok'])
{
$this->session->getFlashBag()
->set('error', 'No se encontró la solicitud.');
}
else
{
$this->session->getFlashBag()
->set('success', 'Revisión terminada.');
}
}
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$data['rol'], 'routeClassName' => 'revisar') ));
}
public function imprimirSolicitudAction($id, $rol)
{
$fecha = new \DateTime();
$user = $this->getUser();
try
{
$solicitud = $this->em->getRepository(Solicitud::class)->find($id);
if ($solicitud && $solicitud->getEstado()==Solicitud::ESTADO_APROBADA)
{
$puntoImpresion = $user->getPuntoImpresion();
if ($puntoImpresion->getId() != $solicitud->getPuntoImpresion()->getId())
{
$cambioTurno = $this->session->get('cambio_turno');
if ($cambioTurno && isset($cambioTurno[$solicitud->getId()]))
{
unset($cambioTurno[$solicitud->getId()]);
$this->session->set('cambio_turno', $cambioTurno);
$solicitudes = $solicitud->getHijas()->toArray();
$solicitudes[]=$solicitud;
foreach ($solicitudes as $solicitudCambiar)
{
/*$turno = $this->em->getRepository(PuntoImpresionTurno::class)
->findBy(array('solicitud' => $solicitudCambiar->getId()));
if ($turno)
{
$turno->setSolicitud(null);
$this->em->persist($turno);
}*/
$punto = $solicitudCambiar->getPuntoImpresion();
$solicitudCambiar->setPuntoImpresion($puntoImpresion);
$this->em->persist($solicitudCambiar);
$this->creaHistoria($solicitud, 'Cambio de punto de impresión<br>Punto origen: '.$punto->__toString().'<br>Punto destino: '.$puntoImpresion->__toString());
}
$this->em->flush();
}
}
$solicitud->setEstado(Solicitud::ESTADO_CERRADA);
$solicitud->setFechaServicioPrestado($fecha);
$solicitud->setUsuarioPrestaServicio($user);
$solicitud->setPuntoImpresion($user->getPuntoImpresion());
$this->em->persist($solicitud);
$this->em->flush();
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha($fecha);
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Servicio prestado');
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
$this->session->getFlashBag()
->set('warning', 'Se registró exitosamente la prestación del servicio.');
}
else
{
$this->session->getFlashBag()
->set('warning', 'La solicitud no puede imprimirse porque el pago no ha sido aprobado aún.');
}
}
catch (\Exception $e)
{
$this->session->getFlashBag()
->set('warning', 'Ha ocurrido un error: '.$e->getMessage());
}
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => 'imprimir') ));
}
protected function creaHistoria($solicitud, $accion)
{
$fecha = new \DateTime();
$user = $this->getUser();
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha($fecha);
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion($accion);
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
}
public function estadoSolicitudAction($codigoAcceso, $checkMore = 'true')
{
$params = array('codigoAcceso' => $codigoAcceso, 'checkMore' => $checkMore == 'true');
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud)
{
$params['email'] = $solicitud->getSolicitanteEmail();
$params['nombre'] = $solicitud->getSolicitanteNombre();
$params['celular'] = $solicitud->getSolicitanteMovil();
$params['solicitud'] = $solicitud;
$params['historia'] = $this->em->getRepository(SolicitudHistoria::class)->getLastStatus($solicitud);
$params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
$turno = $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
$params['turno'] =$turno?$turno[0]:null;
$view = 'Solicitud/homeSolicitud_'.$solicitud->getEstadoStrName().'.html.twig';
}
else
{
$view = 'Solicitud\\wrongAccessCode.html.twig';
}
return $this->render($view, $params);
}
public function sendEmailEstado($solicitud)
{
$params = [
'urlEstado' => $this->generateUrl('solicitud_estado', array('codigoAcceso' => $solicitud->getCodigoAcceso()), UrlGeneratorInterface::ABSOLUTE_URL),
'urlModificar' => $this->generateUrl('solicitud_modificar', array('codigoAcceso' => $solicitud->getCodigoAcceso()), UrlGeneratorInterface::ABSOLUTE_URL),
'solicitud' => $solicitud,
'turno' => $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]),
];
$subjects = [
Solicitud::ESTADO_REGISTRADA => 'Solicitud registrada',
Solicitud::ESTADO_REVISION => '',
Solicitud::ESTADO_APROBADA => 'Solicitud aprobada',
Solicitud::ESTADO_RECHAZADA => 'Solicitud rechazada',
Solicitud::ESTADO_CERRADA => 'Solicitud cerrada',
Solicitud::ESTADO_REPROCESO => '',
];
try
{
$message = new Email();
$subject = $subjects[$solicitud->getEstado()];
$template = 'Solicitud\PlantillasCorreo\email_notificacion_'.$solicitud->getEstadoStrName().'.html.twig';
$message
->from($this->getParameter('mailer_from'))
->to($solicitud->getSolicitanteEmail())
->subject($subject)
->embedFromPath('images/logo_plataforma.png', 'logo')
// ->setContentType('text/html')
->html($this->render($template,$params)->getContent());
$this->mailer->send($message);
/*$template = 'Solicitud\PlantillasCorreo\email_notificacion_'.$solicitud->getEstadoStrName().'.html.twig';
$template = $this->render($template, $params)->getContent();
$subject = $subjects[$solicitud->getEstado()];
$email = new Email();
$email->from($this->getParameter('mailer_from'))
->to($solicitud->getSolicitanteEmail())
//->cc('[email protected]')
//->bcc('[email protected]')
//->replyTo('[email protected]')
//->priority(Email::PRIORITY_HIGH)
->subject($subject)
->html();
$this->mailer->send($email);*/
} catch (\Exception $exc)
{
return $exc->getMessage();
}
return true;
}
public function modificarSolicitudAction($codigoAcceso, $rol = 'anonimo')
{
$user = $this->getUser();
$view = 'Solicitud\\wrongAccessCode.html.twig';
$params = array('rol'=>$rol, 'codigoAcceso'=>$codigoAcceso);
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud)
{
$params['solicitud'] = $solicitud;
if ($solicitud->getEstado() == Solicitud::ESTADO_RECHAZADA)
{
$solicitud->setEstado(Solicitud::ESTADO_REPROCESO);
foreach ($solicitud->getHijas() as $hija)
{
$hija->setEstado($solicitud->getEstado());
$hija->setObservaciones($solicitud->getObservaciones());
$this->em->persist($hija);
}
$this->em->persist($solicitud);
$this->em->flush();
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Modificando solicitud');
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
}
if ($solicitud->getEstado() != Solicitud::ESTADO_REPROCESO)
{
$params['checkMore'] ='false';
$params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
$turno = $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
if($turno)
$params['turno']=$turno[0];
$view='Solicitud\homeSolicitud_'.$solicitud->getEstadoStrName().'.html.twig';
$params['error'] = 'El estado de la solicitud "'.$solicitud->getCodigoAcceso().'" es "'.$solicitud->getEstadoStr().'" y en ese estado no se puede modificar.';
}
else
{
$params['turno']=null;
$params['temp_id'] = $this->session?$this->session->getId():'0000';
$params = array_merge($params, $this->getParamsForModification($solicitud) );
$view = 'Solicitud\\nuevaSolicitud.html.twig';
}
}
return $this->render($view, $params);
}
public function solicitudesPorEstadoAction($estado, $rol)
{
if ($estado=='facturar')
{
return $this->redirect($this->generateUrl('crud_index', array('rol'=> $rol, 'routeClassName'=>'facturar')));
}
$filtros = $this->session->get('solicitud');
$filtros['estado'] = $estado;
$this->session->set('solicitud', $filtros);
return $this->redirect($this->generateUrl('crud_index', array('rol'=> $rol, 'routeClassName'=>'solicitud')));
}
protected function getParamsForModification($solicitud = null)
{
$params = array();
$params['servicios'] = $this->em->getRepository(TipoServicio::class)->findAll();
$params['bancos'] = $this->em->getRepository(InstitucionFinanciera::class)
->createQueryBuilder('p')
->orderBy('p.nombre')
->getQuery()->getResult();
$params['puntosImpresion'] = $this->em->getRepository(PuntoImpresion::class)
->createQueryBuilder('p')
->where('p.activo = true')
->orderBy('p.nombre')
->getQuery()->getResult();
if ($solicitud)
{
$params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
}
$fecha = new \DateTime();
$dia =$fecha->format('D');
$fecha->add(new \DateInterval('P3D'));
$params['fecha'] = $fecha->format('d-m-Y');
return $params;
}
protected function setSolicitudAdjunto($file, $field, &$solicitud)
{
$getFunction = 'get'.ucfirst($field);
$setFunction = 'set'.ucfirst($field);
if ($file)
{
$fileName = $this->comunUpload($file, 'uploads', '');
if ($fileName)
{
$adjunto = $solicitud->$getFunction();
if ($adjunto)
{
if (file_exists($adjunto->getAccesoArchivo())){
unlink($adjunto->getAccesoArchivo());
}
}
else
{
$adjunto = new Adjunto();
}
//$file->getClientOriginalName()
$adjunto->setArchivo($solicitud->getSolicitanteIdentificacion().'_'.$field.'_'.$solicitud->getId().'.'.$file->getClientOriginalExtension());
$adjunto->setRuta('uploads');
$adjunto->setArchivoHash($fileName);
$adjunto->setSize(filesize('uploads/'.$fileName));
$contenido = base64_encode(file_get_contents('uploads/'.$fileName));
$adjunto->setContenido($contenido);
$this->em->persist($adjunto);
$solicitud->$setFunction($adjunto);
if (file_exists($adjunto->getAccesoArchivo())){
unlink($adjunto->getAccesoArchivo());
}
}
}
else
{
$adjunto = $solicitud->$getFunction();
if ($adjunto)
{
if (file_exists($adjunto->getAccesoArchivo())){
unlink($adjunto->getAccesoArchivo());
}
$this->em->remove($adjunto);
}
$solicitud->$setFunction(null);
}
}
public function sendValidacionEmailAction()
{
$ret = array('ok'=>true);
$email = $this->request->get('email');
try
{
$code = random_int(10000,99999);
$ret = array('ok'=>true,'code'=>$code);
//$code=2543;
$message = new Email();
$message
->from($this->getParameter('mailer_from'))
->to($email['email'])
->subject('Validación de correo electrónico')
->embedFromPath('images/logo_plataforma.png', 'logo')
// ->setContentType('text/html')
->html($this->render('Solicitud/PlantillasCorreo/email_validacion.html.twig',
array('nombre' => $email['nombre'], 'codigo'=>$code))->getContent());
$this->mailer->send($message);
$this->session->set('email_code', $code);
}
catch (\Exception $exc)
{
$ret['ok'] = false;
$ret['info'] = 'No fue posible enviar el correo electrónico, por favor intente más tarde. '.$exc->getMessage();
}
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function validacionCodigoAction()
{
$codigo = $this->request->get('codigo');
$emailCode = $this->session->get('email_code');
$ret = array('ok'=> $codigo==$emailCode );
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
/* protected function allowActionExecution($accion, $id=null)
{
$allowed = array(
'INDEX'=>array(
'superadmin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
// 'admin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
'operador' => array('solicitud_revisar','solicitud_enviar_anf'),
'asociado' => array('solicitud'),
),
'CREATE'=>array(
),
'UPDATE'=>array(
),
'DELETE'=>array(
),
'SHOW'=>array(
'superadmin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
// 'admin' => array('solicitud'),
'operador' => array('solicitud_revisar'),
),
);
if (isset($allowed[$accion][$this->rol]))
{
if (in_array($this->routeClassName, $allowed[$accion][$this->rol]))
{
//verificar $entity
return true;
}
}
return false;
}
*/
protected function setFiltros()
{
if ($this->routeClassName=='facturar')
{
$this->filterData['estado'] = [Solicitud::ESTADO_APROBADA, Solicitud::ESTADO_CERRADA];
}
if ($this->routeClassName=='facturadas')
{
$this->filterData['estado'] = [Solicitud::ESTADO_APROBADA, Solicitud::ESTADO_CERRADA];
}
if ($this->routeClassName=='revisar')
{
$this->filterData['estado'] = [Solicitud::ESTADO_REGISTRADA, Solicitud::ESTADO_REVISION];
}
if ($this->routeClassName=='imprimir')
{
if (!isset($this->filterData['fechaServicioPlan']) || !$this->filterData['fechaServicioPlan'])
{
$fecha = new \DateTime();
$this->filterData['fechaServicioPlan'] = $fecha->format('d-m-Y');
}
if ( (!isset($this->filterData['codigoAcceso']) || !$this->filterData['codigoAcceso']) &&
(!isset($this->filterData['solicitanteIdentificacion']) || !$this->filterData['solicitanteIdentificacion']) &&
(!isset($this->filterData['solicitanteNombre']) || !$this->filterData['solicitanteNombre']) &&
(!isset($this->filterData['beneficiarioIdentificacion']) || !$this->filterData['beneficiarioIdentificacion']) &&
(!isset($this->filterData['beneficiarioNombre']) || !$this->filterData['beneficiarioNombre'])
)
{
if (!isset($this->filterData['estado']) || !$this->filterData['estado'])
{
$this->filterData['estado'] = [Solicitud::ESTADO_APROBADA];
}
}
else
{
unset($this->filterData['estado']);
}
}
if ($this->routeClassName == 'facturar' || $this->routeClassName == 'facturadas')
{
$this->ajustaFiltroFecha('fechaEnvioRevision', 31);
$this->ajustaFiltroFecha('fechaResultadoRevision', 31);
}
if ($this->routeClassName == 'revisar')
{
$this->ajustaFiltroFecha('fechaEnvioRevision', 31);
}
if ($this->rol == 'financiero')
{
$this->ajustaFiltroFecha('fechaEnvioRevision', 31);
$this->ajustaFiltroFecha('fechaResultadoRevision', 31);
}
}
public function revisarSolicitudAction($rol, $codigoAcceso = 'none')
{
$this->setUtilProperties();
$ret = array('ok'=>true);
$user = $this->getUser();
if (!($user instanceof SeguridadUsuario))
{
return $this->redirect($this->generateUrl('app_login'));
}
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud)
{
$ok=true;
/*if ($solicitud->getUsuarioValida()){
if ($solicitud->getUsuarioValida()->getId() != $user->getId() && $rol != 'admin')
{
$ok=false;
}
}*/
if(!$ok)
{
$this->session->getFlashBag()
->set('warning', 'La solicitud está asignada a otro usuario.');
}
else
{
if ($solicitud->getEstado() == Solicitud::ESTADO_REGISTRADA or $solicitud->getEstado() == Solicitud::ESTADO_CERRADA or $solicitud->getEstado() == Solicitud::ESTADO_APROBADA)
{
if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA and $solicitud->getEstado() != Solicitud::ESTADO_APROBADA)
$solicitud->setEstado(Solicitud::ESTADO_REVISION);
$solicitud->setUsuarioValida($this->getUser());
foreach ($solicitud->getHijas() as $hija)
{
$hija->setEstado($solicitud->getEstado());
$hija->setObservaciones($solicitud->getObservaciones());
$this->em->persist($hija);
}
$this->em->persist($solicitud);
$this->em->flush();
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Comienza revisión');
$solicitudHistoria->setUsuario($user);
$this->em->persist($solicitudHistoria);
$this->em->flush();
}
if ($solicitud->getEstado() != Solicitud::ESTADO_REVISION and $solicitud->getEstado() != Solicitud::ESTADO_CERRADA and $solicitud->getEstado() != Solicitud::ESTADO_APROBADA)
{
$this->session->getFlashBag()
->set('warning', 'El estado de la solicitud "'.$solicitud->getCodigoAcceso().'" es "'.$solicitud->getEstadoStr().'" y en ese estado no se puede someter a revisión.');
}
else
{
$turno = $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
if($turno)
$turno=$turno[0];
$params = array( 'rol'=> $rol, 'entity'=>$solicitud, 'routeClassName'=>'revisar', 'revisar'=>true,'turno'=>$turno);
$params = array_merge($params, $this->getParamsForModification($solicitud));
return $this->render('Solicitud\\revisar.html.twig', $params);
}
}
}
else
{
$this->session->getFlashBag()
->set('warning', 'No se encontró una solicitud con el código "'.$codigoAcceso.'".');
}
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => 'revisar') ));
}
public function modificarPagoSolicitudAction($codigoAcceso, $rol)
{
$ret = array('ok'=>true);
$user = $this->getUser();
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud)
{
$ok=true;
/*if ($solicitud->getUsuarioValida()){
if($solicitud->getUsuarioValida()->getId() != $user->getId() && $rol != 'admin')
{
$ok=false;
}
}*/
if(!$ok)
{
$ret['ok'] = false;
$ret['info'] = 'La solicitud está asignada a otro usuario.';
}
else
{
$data = $this->request->get('solicitud');
$files = $this->request->files;
$files = $files->get('solicitud');
$ret = $this->compruebaPagoExistenteAction($data['banco'], $data['comprobante'], $solicitud->getId(), false);
if (!$ret['ok'])
{
$ret['info'] = 'El comprobante de pago ya está en uso en otra solicitud';
}
else
{
//INFORMACION PAGO
$fechaPago = \DateTime::createFromFormat('d-m-Y', $data['fecha_pago']);
$fechaPago->setTime(0,0,0);
$banco = $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco']);
$solicitud->setPagoBanco($banco);
$solicitud->setPagoComprobante($data['comprobante']);
$solicitud->setPagoValor($data['valor']);
$solicitud->setPagoFecha($fechaPago);
if (isset($files['comprobante_foto']) && $files['comprobante_foto'])
{
$this->setSolicitudAdjunto($files['comprobante_foto'], 'pagoComprobanteFoto', $solicitud);
}
}
if ($data['valor2'])
{
if($solicitud->getPagoComprobante()!=$data['comprobante2']){
$ret = $this->compruebaPagoExistenteAction($data['banco2'], $data['comprobante2'], $solicitud->getId(), false);
if (!$ret['ok'])
{
$ret['info'] = 'El comprobante del segundo pago ya está en uso en otra solicitud';
}
else
{
//INFORMACION PAGO
$fechaPago = \DateTime::createFromFormat('d-m-Y', $data['fecha_pago2']);
$fechaPago->setTime(0,0,0);
$banco = $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco2']);
$solicitud->setPago2Banco($banco);
$solicitud->setPago2Comprobante($data['comprobante2']);
$solicitud->setPago2Valor($data['valor2']);
$solicitud->setPago2Fecha($fechaPago);
if (isset($files['comprobante_foto2']) && $files['comprobante_foto2'])
{
$this->setSolicitudAdjunto($files['comprobante_foto2'], 'pago2ComprobanteFoto', $solicitud);
}
}
}else{
$ret['ok']=false;
$ret['info'] = 'El comprobante del segundo pago ya está registrado en el primer pago';
}
}
if ($ret['ok'])
{
$this->em->persist($solicitud);
$this->em->flush();
$res= $this->intentaAprobarSolicitud($solicitud);
if($res){
$this->sendEmailEstado($solicitud);
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Modificación del pago');
$solicitudHistoria->setUsuario($user);
$this->em->persist($solicitudHistoria);
$this->em->flush();
}else{
$ret['ok']=false;
$ret['info'] = 'El pago registrado no es correcto, no se encuentra en el estado de cuenta o está utilizado en otra solicitud. Revise el número de comprobante y la fecha. ';
}
}
}
}
else
{
$ret['ok'] = false;
$ret['info'] = 'No se encontró una solicitud con el código "'.$codigoAcceso.'".';
}
$data = new Response(json_encode($ret));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function generaPDFAction($solicitud)
{
$this->setInitialValues('financiero', 'solicitud');
$solicitud = $this->em->getRepository(Solicitud::class)->find($solicitud);
$params= $this->showCreateParamsForTwig($solicitud);
$params['entity'] = $solicitud;
$params['solicitud'] = $solicitud;
$params['pdf'] = true;
$html = $this->render('Solicitud/showPDF.html.twig',$params)->getContent();
// return $html;
$options = new Options();
$options->set('defaultFont', 'Roboto');
$dompdf = new Dompdf($options);
$data = array(
'headline' => 'my headline'
);
$dompdf->loadHtml($html);
$dompdf->setPaper('Letter', 'portrait');
$dompdf->render();
$dompdf->stream("testpdf.pdf", [
"Attachment" => true
]);
/* $pdfparam = [
'mode' => '',
'format' => 'letter',
'default_font_size' => 0,
'default_font' => '',
'margin_left' => 10,
'margin_right' => 10,
'margin_top' => 5,
'margin_bottom' => 5,
'margin_header' => 9,
'margin_footer' => 9,
'orientation' => 'P',
'setAutoBottomMargin' => 'stretch',
'setAutoTopMargin' => 'stretch',];
$mpdf = new \Mpdf\Mpdf($pdfparam);
$mpdf->SetAutoPageBreak(true, $mpdf->bMargin);
$mpdf->SetHTMLHeader();
$html = $this->renderView('App:Solicitud:solicitud_autorizacion.html.twig', array('solicitud'=>$solicitud, 'ip_address'=>$this->request->getClientIp()));
$mpdf->WriteHTML($html);
if ($solicitud->getTipoFirma()->getId()== TipoFirma::PERSONA_NATURAL)
{
$nombreArchivo = 'autorizacion_'.$solicitud->getIdentificacion().'.pdf';
}
else
{
$nombreArchivo = 'autorizacion_'.$solicitud->getRuc().'.pdf';
}
$mpdf->Output($nombreArchivo, 'D');*/
die();
}
public function compruebaSolicitudExistenteAction($identificacionSolicitante, /*$identificacionBeneficiario,*/ $servicio, $id = 'none', $ajax=true)
{
$data = array('ok'=>true, 'info'=>''); //significa que no existe la solicitud
/*try {
$solicitud = $this->em->getRepository(Solicitud::class)
->createQueryBuilder('s')
->innerJoin('s.tipoServicio','servicio')
->where('servicio.id = :SERVICIO')
->andWhere('s.solicitanteIdentificacion = :IDENTIFICACION_SOLICITANTE')
// ->andWhere('s.beneficiarioIdentificacion = :IDENTIFICACION_BENEFICIARIO')
->andWhere('s.estado <> :CERRADA')
->setParameter('SERVICIO',$servicio)
->setParameter('IDENTIFICACION_SOLICITANTE',$identificacionSolicitante)
// ->setParameter('IDENTIFICACION_BENEFICIARIO',$identificacionBeneficiario)
->setParameter('CERRADA', Solicitud::ESTADO_CERRADA);
if ($id != 'none')
{
$solicitud->andWhere('s.id <> :ID')
->setParameter('ID', $id);
}
$solicitud = $solicitud->getQuery()->getResult();
if (!empty($solicitud))
{
$data['ok']=false;
$solicitud=$solicitud[0];
$data['codigoAcceso'] = $solicitud->getCodigoAcceso();
$data['info'] = "Existe una solicitud en proceso para ese beneficiario. Redireccionando a la solicitud.";
}
}
catch (\Exception $e)
{
$data['ok'] = false;
$data['info'] = "Error => ".$e->getMessage();
}*/
if (!$ajax)
{
return $data;
}
else
{
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
}
public function compruebaPagoExistenteAction($banco, $comprobante, $id = 'none', $ajax=true)
{
$data = array('ok'=>true, 'info'=>''); //significa que no existe el pago
try {
$solicitud = $this->em->getRepository(Solicitud::class)
->createQueryBuilder('s')
->innerJoin('s.pagoBanco','banco')
->where('banco.id = :BANCO')
->andWhere('s.pagoComprobante = :COMPROBANTE')
->setParameter('BANCO',$banco)
->setParameter('COMPROBANTE',$comprobante);
if ($id != 'none')
{
$solicitud->andWhere('s.id <> :ID')
->setParameter('ID', $id);
}
$solicitud = $solicitud->getQuery()->getResult();
$data['ok'] = empty($solicitud);
if ($data['ok'])
{
$solicitud = $this->em->getRepository(Solicitud::class)
->createQueryBuilder('s')
->innerJoin('s.pago2Banco','banco')
->where('banco.id = :BANCO')
->andWhere('s.pago2Comprobante = :COMPROBANTE')
->setParameter('BANCO',$banco)
->setParameter('COMPROBANTE',$comprobante);
if ($id != 'none')
{
$solicitud->andWhere('s.id <> :ID')
->setParameter('ID', $id);
}
$solicitud = $solicitud->getQuery()->getResult();
$data['ok'] = empty($solicitud);
}
}
catch (\Exception $e)
{
$data['ok'] = false;
$data['info'] = "Error => ".$e->getMessage();
}
if (!$ajax)
{
return $data;
}
else
{
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
}
public function descargarAdjuntoAction($adjuntoId)
{
$this->setUtilProperties();
$adjunto = $this->em->getRepository(Adjunto::class)->find($adjuntoId);
// Provide a name for your file with extension
$fileName = 'uploads/'.$adjunto->getId().$adjunto->getArchivo();
$contenido = base64_decode($adjunto->getContenido());
$response = new Response($contenido);
file_put_contents($fileName, $contenido);
$mimeTypeGuesser = new FileinfoMimeTypeGuesser();
if($mimeTypeGuesser->isGuesserSupported())
{
$response->headers->set('Content-Type', $mimeTypeGuesser->guessMimeType($fileName));
}
else
{
$response->headers->set('Content-Type', 'text/plain');
}
unlink($fileName);
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$adjunto->getArchivo()
);
// Set the content disposition
if(strtolower(substr($adjunto->getArchivo(), -4))!='jpeg' and strtolower(substr($adjunto->getArchivo(), -3))!='pdf' and strtolower(substr($adjunto->getArchivo(), -3))!='png' and strtolower(substr($adjunto->getArchivo(), -3))!='jpg' and strtolower(substr($adjunto->getArchivo(), -3))!='mp4' )
$response->headers->set('Content-Disposition', $disposition);
else
$response->headers->set('Content-Disposition: inline', $disposition);
return $response;
}
protected function indexParamsForTwig()
{
$params = parent::indexParamsForTwig();
if ($this->rol=='operador')
{
$params['collapsed'] = false;
}
$params['filtrosOk'] = $this->filtrosOk();
return $params;
}
public function facturarSolicitudAction($codigoAcceso, $rol)
{
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud && ($solicitud->getEstado() == Solicitud::ESTADO_APROBADA || $solicitud->getEstado() == Solicitud::ESTADO_CERRADA) && !$solicitud->getFacturaId() )
{
$data = $this->facturarSolicitud($solicitud);
}
else
{
$data = ['ok'=>false, 'info' => 'El estado de la solicitud no permite que se emita la factura'];
}
$data = new Response(json_encode($data));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function cambiarTurnoAction($codigoAcceso, $rol)
{
$data = ['ok'=>true];
$solicitud = $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
if ($solicitud && $solicitud->getEstado() == Solicitud::ESTADO_APROBADA)
{
$id = $solicitud->getId();
$cambioTurno = $this->session->get('cambio_turno');
if (!$cambioTurno)
{
$cambioTurno = [];
}
$cambioTurno[$id]=$id;
$this->session->set('cambio_turno', $cambioTurno);
return $this->redirect($this->generateUrl('crud_plain_show', array('rol'=>$rol, 'routeClassName' => 'cambiarturno', 'id' => $id) ));
}
else
{
$this->session->getFlashBag()->set('error', 'El estado de la solicitud no permite realizar la operación');
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => 'cambiarturno') ));
}
}
protected function facturarSolicitud($solicitud)
{
$user = $this->getUser();
// $ret = ['ok'=>false, 'info'=>'INFO', 'id'=>'5', 'numeroSRI'=>'numeroSRI', 'claveAcceso'=>'claveAcceso'];
$ret = $this->emitirFacturaAPI($solicitud);
if ($ret['ok']) {
$solicitud->setFacturaId($ret['id']);
$solicitud->setFacturaNumero($ret['numeroSRI']);
$solicitud->setFacturaClaveAcceso($ret['claveAcceso']);
$observaciones = 'Id: '.$ret['id'].' Factura: '.$ret['numeroSRI'].' ClaveAcceso: '.$ret['claveAcceso'];
}
else
{
$observaciones = $ret['info'];
}
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Facturacion');
$solicitudHistoria->setObservaciones($observaciones);
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
return $ret;
}
function emitirFacturaAPI($solicitud)
{
$data = array();
$data['tipoIdentificacion'] = 1;
$data['idCliente'] = $this->getParameter('id_cliente')*1;
$data['identificacion'] = $solicitud->getSolicitanteIdentificacion();
$data['nombre'] = $solicitud->getSolicitanteNombre();
$data['direccion'] = $solicitud->getSolicitanteDireccion();
$data['email'] = 'brighittc@gmail.com'; //$solicitud->getSolicitanteEmail();
$data['telefono'] = $solicitud->getSolicitanteTelefono() ? $solicitud->getSolicitanteTelefono() : $solicitud->getSolicitanteMovil();
if ($solicitud->getFacturaId())
{
$data['factura'] = $solicitud->getFacturaId();
}
$valor = $solicitud->getPagoValorReal()*1;
$subtotal = ($valor)/1.12;
$data['subtotal'] = $subtotal;
$data['porcentajeIVA'] = 12;
$data['IVA'] = $subtotal*0.12;
$data['total'] = $data['subtotal']+$data['IVA'];
$data['servicios'] = array();
if ($valor > 0) {
$data['servicios'][] = array(
'tipoVenta' => $solicitud->getTipoServicio()->getTipoVenta(),
'descripcion' => $solicitud->getTipoServicio()->__toString().' - '.$solicitud->getBeneficiarioNombre(),
'cantidad' => 1,
'porcentajeIVA' => 12,
'precioUnitario' => $subtotal,
'iva' => $subtotal*0.12,
'subtotal' => $subtotal,
'total' => $valor);
}
$data['pago'][] = array(
'tipoPago' => 1, // TODO: ver si es este
'banco' => 92, //poner el ID de Banco que corresponda
'numeroComprobante' => $solicitud->getPagoComprobante(),
'valor' => $solicitud->getPagoValorReal(),
'fechaPago' => $solicitud->getPagoFecha()->format('Y-m-d')
);
try {
$res = ['ok' => true];
// autenticar primero
$url = $this->getParameter('api_autenticacion');
$curl = curl_init($url);
$auth_data = array(
'username' => $this->getParameter('api_factulisto_usr'),
'password' => $this->getParameter('api_factulisto_pwd')
);
$auth_data = json_encode($auth_data);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'accept: application/json',
'Content-Type: application/json',
'Content-Length: ' . strlen($auth_data),
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $auth_data);
curl_setopt($curl, CURLINFO_HEADER_OUT, 1);
$result = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if(!$result || $httpCode != 200){
$res['ok']=false;
$res['info'] = 'Error emitiendo factura: fallo en autenticación.'.curl_error($curl). json_encode($result);
}
curl_close($curl);
if (!$res['ok'])
{
return($res);
}
$result = json_decode($result, true);
$token = $result['token'];
$data = json_encode($data);
$url = $this->getParameter('api_facturacion');
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'accept: application/json',
'Content-Type: application/json',
'Authorization: Bearer ' . $token,
'Content-Length: ' . strlen($data),
));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$res = json_decode($result, true);
if(!$result || $httpCode != 200){
$res['ok']=false;
$res['info'] = 'Error emitiendo factura.'.curl_error($curl). json_encode($result).'DATOS ENVIADOS'.json_encode($data);
}
curl_close($curl);
if (!$res['ok'])
{
return($res);
}
$res = json_decode($result, true);
$res['ok'] = true;
}
catch (\Exception $e)
{
$res['ok']=false;
$res['info'] = 'Error emitiendo factura: '.$e->getMessage();
}
return $res;
}
protected function indexGetFields()
{
$fields = parent::indexGetFields();
unset($fields['solicitanteCodigoDactilar']);
unset($fields['solicitanteTelefono']);
unset($fields['solicitanteFoto']);
unset($fields['solicitanteMovil']);
unset($fields['solicitanteEmail']);
unset($fields['solicitanteDirección']);
unset($fields['solicitanteFechaExpedicionCodigoDactilar']);
unset($fields['solicitanteDireccion']);
unset($fields['beneficiarioCodigoDactilar']);
unset($fields['beneficiarioTelefono']);
unset($fields['beneficiarioFoto']);
unset($fields['beneficiarioMovil']);
unset($fields['beneficiarioEmail']);
unset($fields['beneficiarioDirección']);
unset($fields['beneficiarioFechaExpedicionCodigoDactilar']);
unset($fields['beneficiarioDireccion']);
unset($fields['solicitudPadre']);
unset($fields['pago2Valor']);
unset($fields['pago2ComprobanteFoto']);
unset($fields['emailEnviado']);
//unset($fields['pagoFecha']);
//unset($fields['pagoComprobante']);
unset($fields['pagoComprobanteFoto']);
unset($fields['pagoValor']);
unset($fields['pagoBanco']);
unset($fields['facturaId']);
//unset($fields['fechaServicioPlan']);
unset($fields['fechaEnvioRevision']);
unset($fields['fechaResultadoRevision']);
switch ($this->routeClassName)
{
case 'revisar':
unset($fields['codigoAcceso']);
unset($fields['usuarioPrestaServicio']);
unset($fields['fechaResultadoRevision']);
unset($fields['fechaServicioPrestado']);
unset($fields['puntoImpresion']);
unset($fields['facturaNumero']);
unset($fields['facturaClaveAcceso']);
break;
case 'facturar':
unset($fields['codigoAcceso']);
unset($fields['fechaRegistro']);
unset($fields['usuarioPrestaServicio']);
unset($fields['fechaServicioPrestado']);
unset($fields['fechaEnvioRevision']);
unset($fields['puntoImpresion']);
// unset($fields['observaciones']);
unset($fields['facturaNumero']);
unset($fields['facturaClaveAcceso']);
break;
case 'facturadas':
unset($fields['codigoAcceso']);
unset($fields['fechaRegistro']);
unset($fields['usuarioPrestaServicio']);
unset($fields['fechaServicioPrestado']);
unset($fields['fechaEnvioRevision']);
unset($fields['puntoImpresion']);
//unset($fields['observaciones']);
unset($fields['facturaClaveAcceso']);
break;
case 'imprimir':
case 'cambiarturno':
unset($fields['fechaRegistro']);
unset($fields['fechaEnvioRevision']);
unset($fields['fechaResultadoRevision']);
unset($fields['usuarioPrestaServicio']);
unset($fields['fechaServicioPrestado']);
unset($fields['usuarioValida']);
unset($fields['observaciones']);
unset($fields['facturaNumero']);
unset($fields['facturaClaveAcceso']);
unset($fields['tipo']);
unset($fields['pago2Banco']);
unset($fields['pago2Comprobante']);
unset($fields['pago2Fecha']);
unset($fields['pagoValorReal']);
unset($fields['costoServicio']);
unset($fields['pagoComprobante']);
unset($fields['pagoFecha']);
break;
}
$fields['estado']['nombre'] = 'estadoStr';
$orden = array('nombre'=>'id',
'type'=>'string',
'label'=>'ORDEN');
array_unshift($fields, $orden);
return $fields;
}
protected function showCreateParamsForTwig($entity)
{
$params = parent::showCreateParamsForTwig($entity);
$params['servicios'] = $this->em->getRepository(TipoServicio::class)->findAll();
$params['bancos'] = $this->em->getRepository(InstitucionFinanciera::class)
->createQueryBuilder('p')
->orderBy('p.nombre')
->getQuery()->getResult();
$params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$entity->getId()]);
$params['turno']=null;
$turno = $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$entity->getId()]);
if($turno)
$params['turno']=$turno[0];
return $params;
}
/*
public function cargaArchivoPagosAction($rol, $backRouteClassName)
{
$file = $this->request->files;
$file = $file->get('file_pagos');
$user = $this->getUser();
$pagos = [];
$fileName = $this->comunUpload($file, 'uploads', '');
if ($fileName)
{
$fileName = $this->fixFile($fileName);
$f = fopen('uploads/'.$fileName, 'r');
while (($data = fgetcsv($f, 1000, ",")) !== FALSE)
{
$documento= str_pad($data[4], 10, "0", STR_PAD_LEFT);
if ($data[3]=='C')
{
$fecha= explode('/', $data[0]);
$stringFecha=$fecha[2].'-'.$fecha[1].'-'.$fecha[0];
$pagos[$documento.''] = ['fecha'=>$stringFecha, 'valor'=> $data[6]*1, 'banco' => $data[5], 'concepto' => $data[2]];
}
}
fclose($f);
unlink('uploads/'.$fileName);
$this->setInitialValues($rol, 'revisar');
$paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
$paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
$this->indexPrepareFilterForm($paramsForFunctionInEntity);
$paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
$entities = $this->indexLoadEntities($paramsForFunctionInEntity);
foreach ($entities as $entity)
{
$key = $entity->getPagoComprobante().'';
if (isset($pagos[$key]))
{
if ($entity->getPagoFecha()->format('d-m-Y')==$pagos[$key]['fecha'] ||
$entity->getPagoFecha()->format('d-m-y')==$pagos[$key]['fecha'] ||
$entity->getPagoFecha()->format('d/m/Y')==$pagos[$key]['fecha'] ||
$entity->getPagoFecha()->format('d/m/y')==$pagos[$key]['fecha'] ||
$entity->getPagoFecha()->format('Y-m-d')==$pagos[$key]['fecha']
)
{
if ($pagos[$key]['valor']*1>=$entity->getPagoValor()*1)
{
$observaciones = '';
$entity->setEstado(Solicitud::ESTADO_APROBADA);
$entity->setUsuarioValida($this->getUser());
$entity->setFechaResultadoRevision(new \DateTime());
$entity->setPagoValorReal($pagos[$key]['valor']*1);
$pagos[$key]['solicitud'] = $entity;
}
else
{
$observaciones = 'No coincide el monto del pago realizado';
}
}
else
{
$observaciones = 'No coincide la fecha de pago registrada en la solicitud';
}
}
else
{
$observaciones = 'No se encontró el número de comprobante';
}
$entity->setObservaciones($observaciones);
foreach ($entity->getHijas() as $hija)
{
$hija->setEstado($entity->getEstado());
$hija->setObservaciones($entity->getObservaciones());
$this->em->persist($hija);
}
$this->em->persist($entity);
$this->em->flush();
if ($entity->getEstado()==Solicitud::ESTADO_APROBADA)
{
$this->sendEmailEstado($entity);
}
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($entity);
$solicitudHistoria->setEstado($entity->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Revisión automática');
$solicitudHistoria->setObservaciones($observaciones);
if (is_object($user))
{
$solicitudHistoria->setUsuario($user);
}
$this->em->persist($solicitudHistoria);
$this->em->flush();
}
foreach ($pagos as $key=>$pago)
{
$pagoEnBD = $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$key, 'fecha'=>$pago['fecha']]);
if (!$pagoEnBD)
{
$pagoEnBD = new Pago();
$pagoEnBD->setBanco($pago['banco']);
$pagoEnBD->setConcepto($pago['concepto']);
$pagoEnBD->setComprobante($key);
$pagoEnBD->setFecha($pago['fecha']);
$pagoEnBD->setValor($pago['valor']);
}else{
$pagoEnBD->setConcepto($pago['concepto'].'');
}
if(isset($pago['solicitud']))
{
if($pagoEnBD->getSolicitud()){
if($pagoEnBD->getSolicitud()->getId()!=$pago['solicitud']->getId()){
$pago['solicitud']->setEstado(Solicitud::ESTADO_REVISION);
$pago['solicitud']->setObservaciones('Pago utilizado en otra solicitud');
}
}else{
$pagoEnBD->setSolicitud($pago['solicitud']);
}
}
$this->em->persist($pagoEnBD);
}
$this->em->flush();
}
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => $backRouteClassName) ));
}
*/
public function cargaArchivoPagosAction($rol, $backRouteClassName)
{
$file = $this->request->files;
$file = $file->get('file_pagos');
$user = $this->getUser();
$pagos = [];
$fileName = $this->comunUpload($file, 'uploads', '');
if ($fileName)
{
try
{
$this->logger->error('************sube archivo');
$fileName = $this->fixFile($fileName);
$f = fopen('uploads/'.$fileName, 'r');
while (($data = fgetcsv($f, 1000, ",")) !== FALSE)
{
$documento= str_pad($data[4], 10, "0", STR_PAD_LEFT);
$this->logger->error('************Crédito: '. $data[3]);
if (trim($data[1])=='Crédito' or trim($data[1])=='C')
{
$data[0] = str_replace(' ', '-', $data[0]);
$this->logger->error('************fecha: '. $data[0]);
$fecha= explode('-', $data[0]);
switch ($fecha[1]) {
case 'ENE':
$fecha[1]='01';
break;
case 'FEB':
$fecha[1]='02';
break;
case 'MAR':
$fecha[1]='03';
break;
case 'ABR':
$fecha[1]='04';
break;
case 'MAY':
$fecha[1]='05';
break;
case 'JUN':
$fecha[1]='06';
break;
case 'JUL':
$fecha[1]='07';
break;
case 'AGO':
$fecha[1]='08';
break;
case 'SEP':
$fecha[1]='09';
break;
case 'OCT':
$fecha[1]='10';
break;
case 'NOV':
$fecha[1]='11';
break;
case 'DIC':
$fecha[1]='12';
break;
}
if( strlen($fecha[0])==4)
$stringFecha=$fecha[0].'-'.$fecha[1].'-'.$fecha[2];
else
$stringFecha=$fecha[2].'-'.$fecha[1].'-'.$fecha[0];
$this->logger->error('************String fecha: '. $stringFecha);
$fecha= \DateTime::createFromFormat('Y-m-d', $stringFecha);
$fecha->setTime(0,0,0);
$pagoEnBD = $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$documento, 'fecha'=>new \DateTime($stringFecha)]);
if (!$pagoEnBD)
{
$this->logger->error('************NO EXISTE PAGO');
$pagoEnBD = new Pago();
$pagoEnBD->setBanco($data[2]);
$pagoEnBD->setConcepto($data[3]);
$pagoEnBD->setComprobante($documento);
$pagoEnBD->setFecha($fecha);
$pagoEnBD->setValor($data[6]);
}else{
$this->logger->error('************SI EXISTE PAGO');
$pagoEnBD->setFecha($fecha);
$pagoEnBD->setValor($data[6]);
$pagoEnBD->setConcepto($data[3]);
}
$this->em->persist($pagoEnBD);
$this->logger->error('************GUARDA PAGO'.$pagoEnBD->getId());
$pagos[] = $pagoEnBD;
}
}
fclose($f);
unlink('uploads/'.$fileName);
$this->em->flush(); //pagos grabados a la BD;
$this->logger->error('************GRABA PAGOS');
//Cargar solicitudes en revisión o esperando revisión
$this->setInitialValues($rol, 'revisar');
$paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
$paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
$this->indexPrepareFilterForm($paramsForFunctionInEntity);
$paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
$entities = $this->indexLoadEntities($paramsForFunctionInEntity);
foreach ($entities as $entity)
{
$this->intentaAprobarSolicitud($entity);
}
}
catch (\Exception $e)
{
$this->logger->error('************ ERROR ****** '.$e);
foreach ($pagos as $pago)
{
$this->em->detach($pago);
}
}
}
return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => $backRouteClassName) ));
}
protected function fixFile($fileName)
{
$f = fopen('uploads/'.$fileName, 'r');
$f1 = fopen('uploads/fixed'.$fileName, 'w');
while (!feof($f))
{
$data = fgets($f);
$data = str_replace("\"", '', $data);
$data = str_replace(';',',', $data);
fwrite($f1,$data);
}
fclose($f);
fclose($f1);
unlink('uploads/'.$fileName);
return 'fixed'.$fileName;
}
protected function intentaAprobarSolicitud($solicitud, $aprobada=false)
{
$this->logger->error('************ENTRA APROBAR');
$totalxPagar=$solicitud->getCostoServicio()*$solicitud->getCantidadPaga();
$aprobadoPago1 = false;
$aprobadoPago2 = !$solicitud->getPago2Valor();
$pagado = 0;
$pago1 = $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$solicitud->getPagoComprobante()]);
$pago2 = null;
$observaciones='';
if ($solicitud->getPago2Valor())
{
$pago2 = $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$solicitud->getPago2Comprobante()]);
}
if ($pago1)
{
if(!$pago1->getSolicitud()){
$this->logger->error('************PAGO LIBRE');
$pagoFecha = $pago1->getFecha()->format('Y-m-d');
$this->logger->error('************PAGO 1 fecha'. $solicitud->getPagoFecha()->format('Y-m-d'));
$this->logger->error('************PAGO Real fecha'. $pagoFecha);
if ($solicitud->getPagoFecha()->format('Y-m-d')==$pagoFecha)
{
$this->logger->error('************PAGO VALOR:'. $pago1->getValor());
$this->logger->error('************PAGO SOLICITUD:'. $solicitud->getPagoValor());
$solicitud->setPagoValor($pago1->getValor());
$aprobadoPago1 = true;
}
else
{
$this->logger->error('************No coincide la fecha de pago registrada en la solicitud');
$observaciones = 'No coincide la fecha de pago registrada en la solicitud';
}
}else{
if($pago1->getSolicitud()->getId()==$solicitud->getId()){
$aprobadoPago1 = true;
}else{
$observaciones = $observaciones. ' Pago asignado a otra solicitud';
}
}
}
if ($pago2)
{
if(!$pago2->getSolicitud()){
$pagoFecha = $pago2->getFecha()->format('Y-m-d');
$this->logger->error('************PAGO 2 fecha'. $solicitud->getPago2Fecha()->format('Y-m-d'));
$this->logger->error('************PAGO Real fecha'. $pagoFecha);
if ($solicitud->getPago2Fecha()->format('Y-m-d')==$pagoFecha)
{
$this->logger->error('************PAGO VALOR:'. $pago2->getValor());
$this->logger->error('************PAGO SOLICITUD:'. $solicitud->getPago2Valor());
$aprobadoPago2 = true;
$solicitud->setPago2Valor($pago2->getValor());
}
else
{
$observaciones = $observaciones. ' No coincide la fecha del segundo pago registrado en la solicitud';
}
}else{
if($pago2->getSolicitud()->getId()==$solicitud->getId()){
$aprobadoPago2 = true;
}else{
$observaciones = $observaciones. ' Pago asignado a otra solicitud';
}
}
}
if ($aprobadoPago1 && $aprobadoPago2)
{
$this->logger->error('************CAMBIA ESTADO APROBADO'. $solicitud->getId());
$valorReal=0;
$valorReal=$pago1->getValor();
$pago1->setSolicitud($solicitud);
if ($pago2)
{
$valorReal=$valorReal+$pago2->getValor();
$pago2->setSolicitud($solicitud);
}
$solicitud->setPagoValorReal($valorReal);
$solicitud->setObservaciones($observaciones);
$this->em->persist($solicitud);
$totalxPagar= number_format($totalxPagar,2);
$valorReal= number_format($valorReal,2);
if(($totalxPagar*1)<=($valorReal*1)){
if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
$solicitud->setEstado(Solicitud::ESTADO_APROBADA);
$solicitud->setFechaResultadoRevision(new \DateTime());
foreach ($solicitud->getHijas() as $hija)
{
$hija->setEstado($solicitud->getEstado());
$hija->setObservaciones($solicitud->getObservaciones());
$this->em->persist($hija);
}
$this->em->flush();
$this->sendEmailEstado($solicitud);
if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA){
$solicitudHistoria = new SolicitudHistoria();
$solicitudHistoria->setSolicitud($solicitud);
$solicitudHistoria->setEstado($solicitud->getEstado());
$solicitudHistoria->setFecha(new \DateTime());
$solicitudHistoria->setIp($this->request->getClientIp());
$solicitudHistoria->setAccion('Revisión automática');
$solicitudHistoria->setObservaciones($observaciones);
if (is_object($this->getUser()))
{
$solicitudHistoria->setUsuario($this->getUser());
}
$this->em->persist($solicitudHistoria);
}
$this->em->flush();
return true;
}
}else{
if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
$solicitud->setEstado(Solicitud::ESTADO_REVISION);
$solicitud->setObservaciones($observaciones);
$this->em->persist($solicitud);
}
return false;
}
protected function indexLoadEntities($params)
{
if ($this->filtrosOk())
{
return parent::indexLoadEntities($params);
}
else
{
return [];
}
}
protected function filtrosOk()
{
if ($this->routeClassName=='revisar')
{
return true;
}
if ($this->routeClassName=='imprimir')
{
if (!isset($this->filterData['solicitanteIdentificacion']) &&
!isset($this->filterData['beneficiarioIdentificacion']) &&
!isset($this->filterData['fechaServicioPlan'])
)
{
$this->session->getFlashBag()
->set('info', 'Debe filtar al menos por la identificación del tramitante o por las fechas');
return false;
}else{
return true;
}
}
if ($this->routeClassName=='cambiarturno')
{
if ( !isset($this->filterData['codigoAcceso']) )
{
$this->session->getFlashBag()
->set('info', 'Debe filtar al menos por el código de acceso, la identificación del tramitante o la del beneficiario');
return false;
}else{
return true;
}
}
if (!isset($this->filterData['solicitanteIdentificacion']) &&
!isset($this->filterData['beneficiarioIdentificacion']) &&
!isset($this->filterData['pagoComprobante']) &&
!isset($this->filterData['pago2Comprobante']) &&
!isset($this->filterData['fechaEnvioRevision_WWdesdeWW']) &&
!isset($this->filterData['fechaEnvioRevision_WWhastaWW']) &&
!isset($this->filterData['fechaResultadoRevision_WWdesdeWW']) &&
!isset($this->filterData['fechaResultadoRevision_WWhastaWW']) &&
!isset($this->filterData['fechaServicioPlan_WWdesdeWW']) &&
!isset($this->filterData['fechaServicioPlan_WWhastaWW']) &&
!isset($this->filterData['fechaServicioPrestado_WWdesdeWW']) &&
!isset($this->filterData['fechaServicioPrestado_WWhastaWW'])
)
{
$this->session->getFlashBag()
->set('info', 'Debe filtar al menos por la identificación del tramitante o por las fechas');
return false;
}
if ($this->routeClassName!='imprimir')
{
return true;
}
return ($this->routeClassName!='imprimir') ||
(isset($this->filterData['codigoAcceso']) && $this->filterData['codigoAcceso']) ||
(isset($this->filterData['solicitanteIdentificacion']) && $this->filterData['solicitanteIdentificacion']) ||
(isset($this->filterData['solicitanteNombre']) && $this->filterData['solicitanteNombre']) ||
(isset($this->filterData['beneficiarioIdentificacion']) && $this->filterData['beneficiarioIdentificacion']) ||
(isset($this->filterData['beneficiarioNombre']) && $this->filterData['beneficiarioNombre'])||
(isset($this->filterData['fechaServicioPlan_WWdesdeWW']));
}
protected function getFormFilter()
{
$this->dateFields = ['fechaEnvioRevision', 'fechaResultadoRevision',
'fechaServicioPlan', 'fechaServicioPrestado','pagoFecha'];
$formulario = parent::getFormFilter();
unset($formulario['solicitanteCodigoDactilar']);
unset($formulario['solicitanteEmail']);
unset($formulario['solicitanteTelefono']);
unset($formulario['solicitanteNombre']);
unset($formulario['solicitanteFoto']);
unset($formulario['solicitanteMovil']);
unset($formulario['solicitanteDireccion']);
unset($formulario['solicitanteFechaExpedicionCodigoDactilar_WWdesdeWW']);
unset($formulario['solicitanteFechaExpedicionCodigoDactilar_WWhastaWW']);
unset($formulario['fechaResultadoRevision_WWdesdeWW']);
unset($formulario['fechaResultadoRevision_WWhastaWW']);
unset($formulario['fechaEnvioRevision_WWdesdeWW']);
unset($formulario['fechaEnvioRevision_WWhastaWW']);
unset($formulario['fechaRegistro_WWdesdeWW']);
unset($formulario['fechaRegistro_WWhastaWW']);
unset($formulario['cantidadPaga']);
unset($formulario['solicitudPadre']);
unset($formulario['beneficiarioCodigoDactilar']);
unset($formulario['beneficiarioEmail']);
unset($formulario['beneficiarioNombre']);
unset($formulario['beneficiarioTelefono']);
unset($formulario['beneficiarioFoto']);
unset($formulario['beneficiarioMovil']);
unset($formulario['beneficiarioDireccion']);
unset($formulario['beneficiarioFechaExpedicionCodigoDactilar_WWdesdeWW']);
unset($formulario['beneficiarioFechaExpedicionCodigoDactilar_WWhastaWW']);
/*unset($formulario['fechaRegistro_WWdesdeWW']);
unset($formulario['fechaRegistro_WWhastaWW']);*/
unset($formulario['emailEnviado']);
unset($formulario['pagoValor']);
unset($formulario['pagoValorReal']);
unset($formulario['facturaId']);
unset($formulario['facturaClaveAcceso']);
unset($formulario['observaciones']);
unset($formulario['fechaServicioPlan_WWhastaWW']);
unset($formulario['hijas']);
unset($formulario['costoServicio']);
unset($formulario['fechaPago']);
unset($formulario['tipo']);
unset($formulario['solicitudPadre']);
unset($formulario['pago2Fecha_WWdesdeWW']);
unset($formulario['pago2Fecha_WWhastaWW']);
unset($formulario['pago2Banco']);
unset($formulario['pago2Comprobante']);
unset($formulario['pago2Valor']);
$formulario['estado']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
$formulario['estado']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
$formulario['estado']['atributos']['empty_data'] = null;
$formulario['estado']['atributos']['attr']['class'] = 'chosen-select';
$formulario['estado']['atributos']['multiple'] = true;
$formulario['estado']['atributos']['choices']=array_flip(Solicitud::getEstadosStr());
if ($this->rol == 'operador' && $this->routeClassName == 'imprimir')
{
$formulario['fechaServicioPlan'] = $formulario['fechaServicioPlan_WWdesdeWW'];
$formulario['fechaServicioPlan']['nombre'] = 'fechaServicioPlan';
$formulario['fechaServicioPlan']['atributos']['label'] = $this->translator->trans($this->translatorBase.'.fields.fechaServicioPlan',[],'crud');
}
unset($formulario['fechaServicioPlan_WWdesdeWW']);
if ($this->rol != 'admin' || $this->routeClassName != 'solicitud')
{
$formulario['estado']['atributos']['disabled'] = true;
}
if ($this->routeClassName == 'facturar')
{
unset($formulario['usuarioPrestaServicio']);
unset($formulario['puntoImpresion']);
unset($formulario['facturaNumero']);
}
if ($this->routeClassName == 'facturadas')
{
/*unset($formulario['fechaServicioPrestado_WWdesdeWW']);
unset($formulario['fechaServicioPrestado_WWhastaWW']);*/
unset($formulario['usuarioPrestaServicio']);
unset($formulario['puntoImpresion']);
}
if ($this->routeClassName == 'revisar')
{
unset($formulario['fechaResultadoRevision_WWdesdeWW']);
unset($formulario['fechaResultadoRevision_WWhastaWW']);
unset($formulario['fechaServicioPrestado_WWdesdeWW']);
unset($formulario['fechaServicioPrestado_WWhastaWW']);
unset($formulario['usuarioPrestaServicio']);
unset($formulario['puntoImpresion']);
unset($formulario['facturaNumero']);
}
if ($this->routeClassName == 'imprimir')
{
unset($formulario['puntoImpresion']);
unset($formulario['facturaNumero']);
unset($formulario['fechaResultadoRevision_WWdesdeWW']);
unset($formulario['fechaResultadoRevision_WWhastaWW']);
unset($formulario['fechaEnvioRevision_WWdesdeWW']);
unset($formulario['fechaEnvioRevision_WWhastaWW']);
unset($formulario['pagoFecha_WWdesdeWW']);
unset($formulario['pagoFecha_WWhastaWW']);
unset($formulario['fechaServicioPrestado_WWdesdeWW']);
unset($formulario['fechaServicioPrestado_WWhastaWW']);
unset($formulario['pagoBanco']);
unset($formulario['pagoComprobante']);
unset($formulario['usuarioValida']);
unset($formulario['usuarioPrestaServicio']);
unset($formulario['tipo']);
}
if ($this->rol == 'financiero')
{
$queryBuilder = $this->em->getRepository(SeguridadUsuario::class)
->createQueryBuilder('u')
->where('u.id = :USER')
->setParameter('USER', $this->getUser()->getId());
$formulario['usuarioValida']['atributos']['query_builder'] = $queryBuilder;
}
/* if ($params['rol']=='operador')
{
$formulario['estado']['atributos']['choices']=array_flip(self::getEstadosOperadorStr());
$formulario['estado']['atributos']['disabled'] = true;
}
else //admin
{
$queryBuilder = $params['em']->getrepository(SeguridadUsuario::class)
->createQueryBuilder('u')
->innerJoin('u.assignedRoles', 'rol')
->where("rol.nombre = 'ROLE_FINANCIERO'")
->orWhere("rol.nombre = 'ROLE_ADMINISTRADOR'");
$formulario['usuarioValida']['atributos']['query_builder'] = $queryBuilder;
$queryBuilder = $params['em']->getrepository(SeguridadUsuario::class)
->createQueryBuilder('u')
->innerJoin('u.assignedRoles', 'rol')
->where("rol.nombre = 'ROLE_OPERADOR_PUNTO_IMPRESION'");
$formulario['usuarioPrestaServicio']['atributos']['query_builder'] = $queryBuilder;
}*/
if ($this->routeClassName=='cambiarturno')
{
unset($formulario['tipoServicio']);
unset($formulario['solicitanteIdentificacion']);
unset($formulario['beneficiarioIdentificacion']);
unset($formulario['pagoFecha_WWdesdeWW']);
unset($formulario['pagoFecha_WWhastaWW']);
unset($formulario['fechaServicioPrestado_WWdesdeWW']);
unset($formulario['fechaServicioPrestado_WWhastaWW']);
unset($formulario['pagoBanco']);
unset($formulario['pagoComprobante']);
unset($formulario['usuarioPrestaServicio']);
unset($formulario['usuarioValida']);
unset($formulario['puntoImpresion']);
unset($formulario['facturaNumero']);
$formulario['codigoAcceso']['atributos']['label'].=' / Identificación';
}
return $formulario;
}
protected function ajustaFiltroFecha($fieldName, $dias)
{
$hoy = new \DateTime();
$interval = new \DateInterval('P'.$dias.'D');
if (isset($this->filterData[$fieldName.'_WWdesdeWW']))
{
$fechaInicio = \DateTime::createFromFormat('d-m-Y', $this->filterData[$fieldName.'_WWdesdeWW']);
$fechaFin = clone $fechaInicio;
$fechaFin->add($interval);
if (isset($this->filterData[$fieldName.'_WWhastaWW']))
{
$fechaFin = \DateTime::createFromFormat('d-m-Y', $this->filterData[$fieldName.'_WWhastaWW']);
}
if ( $fechaFin > $hoy)
{
$fechaFin = $hoy;
$fechaInicio = clone $fechaFin;
$fechaInicio->sub($interval);
}
else
{
$diff = $fechaFin->diff($fechaInicio, true);
if ($diff>$interval)
{
$fechaInicio = clone $fechaFin;
$fechaInicio->sub($interval);
}
}
$this->filterData[$fieldName.'_WWdesdeWW'] = $fechaInicio->format('d-m-Y');
$this->filterData[$fieldName.'_WWhastaWW'] = $fechaFin->format('d-m-Y');
}
else
{
if (isset($this->filterData[$fieldName.'_WWhastaWW']))
{
$fechaFechaFin = \DateTime::createFromFormat('d-m-Y', $this->filterData[$fieldName.'_WWhastaWW']);
if ($fechaFin > $hoy)
{
$fechaFin = $hoy;
}
$fechaInicio = clone $fechaFin;
$fechaInicio->sub($interval);
$this->filterData[$fieldName.'_WWdesdeWW'] = $fechaInicio->format('d-m-Y');
$this->filterData[$fieldName.'_WWhastaWW'] = $fechaFin->format('d-m-Y');
}
}
}
public function buscarTurnosAction($servicio, $punto, $fecha, $cantImpresiones)
{
$return = [
'ok' => true,
];
try
{
$sessionId = $this->session->getId();
$fecha = \DateTime::createFromFormat('Y-m-d', $fecha);
$html = '';
if($fecha){
$fecha->setTime(0,0,0);
$fechaFin = clone $fecha;
$fechaFin->setTime(23,59,59);
$turnos = $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
->createQueryBuilder('t')
->innerJoin('t.servicio', 'servicio')
->innerJoin('t.puntoImpresion', 'puntoImpresion')
->where('t.tempId = :SESSION_ID')
->andWhere('servicio.id = :SERVICIO')
->andWhere('puntoImpresion.id = :PUNTO')
->setParameter('SESSION_ID', $sessionId)
->setParameter('SERVICIO', $servicio)
->setParameter('PUNTO', $punto)
->getQuery()->getResult();
foreach ($turnos as $turno)
{
$turno->setTempId(null);
$turno->setTempFecha(null);
$this->em->persist($turno);
}
$this->em->flush();
$turnos = $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
->createQueryBuilder('t')
->innerJoin('t.servicio', 'servicio')
->innerJoin('t.puntoImpresion', 'puntoImpresion')
->where('t.fechaIni>=:FECHA_INI')
->andWhere('t.fechaIni<=:FECHA_FIN')
->andWhere('t.solicitud is null')
->andWhere('(t.tempId is null or t.tempId = :SESSION_ID)')
->andWhere('servicio.id = :SERVICIO')
->andWhere('puntoImpresion.id = :PUNTO')
->orderBy('t.estacion, t.fechaIni')
->setParameter('FECHA_INI', $fecha)
->setParameter('FECHA_FIN', $fechaFin)
->setParameter('SESSION_ID', $sessionId)
->setParameter('SERVICIO', $servicio)
->setParameter('PUNTO', $punto)
->getQuery()->getResult();
$estacion = -1;
$turnosEstacion = [];
foreach ($turnos as $turno)
{
$turno->setTempId(null);
$turno->setTempFecha(null);
$this->em->persist($turno);
if ($estacion != $turno->getEstacion())
{
$estacion = $turno->getEstacion();
}
$turnosEstacion[$estacion][] = $turno;
}
$turnosPosibles = [];
foreach ($turnosEstacion as $estacion => $turnos)
{
if (count($turnos) >= $cantImpresiones)
{
$lastTurno = null;
$posibles = [];
$c=0;
foreach ($turnos as $turno)
{
if ($c==$cantImpresiones)
{
if (!empty($posibles) && count($posibles)==$cantImpresiones)
{
$turnosPosibles[$estacion][] = $posibles;
}
$posibles = [];
$c=0;
$lastTurno = null;
}
if (!$lastTurno || $lastTurno->getFechaFin()->format('Y-m-d H:i:s')==$turno->getFechaIni()->format('Y-m-d H:i:s'))
{
$posibles[] = $turno;
$lastTurno = $turno;
$c++;
}
else
{
$posibles = [];
$posibles[] = $turno;
$lastTurno = $turno;
$c=1;
}
}
if (!empty($posibles) && count($posibles)==$cantImpresiones)
{
$turnosPosibles[$estacion][] = $posibles;
}
}
}
$fecha = new \DateTime();
$horasUsadas = [];
foreach ($turnosPosibles as $estacion => $turnoPosible)
{
foreach ($turnoPosible as $key=>$turnos)
{
$txt = $turnos[0]->getFechaIni()->format('H:i');
if (!isset($horasUsadas[$txt]))
{
$horasUsadas[$txt] = 1;
$txt .= ' - Estación: '.$estacion;
$ids = [];
foreach ($turnos as $turno)
{
$turno->setTempId($sessionId);
$turno->setTempFecha($fecha);
$this->em->persist($turno);
$ids[] = $turno->getId();
}
$ids = implode('_', $ids);
$html .= '<option value="'.$ids.'">'.$txt.'</option>';
}
}
}
}else{
$return['ok'] =false;
}
$return['html'] = $html;
}
catch (\Exception $exc)
{
$return['ok'] = false;
$return['error'] = $exc->getMessage();
}
$data = new Response(json_encode($return));
$data->headers->set('Content-Type', 'application/json');
return $data;
}
public function asignaTurnos($turnos, $solicitud)
{
$sessionId = $this->session->getId();
$turnos = explode('_', $turnos);
$turnosBD = $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
->createQueryBuilder('t')
->where('t.tempId = :SESSION_ID')
->andWhere('t.id NOT IN (:TURNOS)')
->setParameter('SESSION_ID', $sessionId)
->setParameter('TURNOS', $turnos)
->getQuery()->getResult();
foreach ($turnosBD as $turno)
{
$turno->setTempId(null);
$turno->setTempFecha(null);
$this->em->persist($turno);
}
$this->em->flush();
$turnosBD = $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
->createQueryBuilder('t')
->where('t.id IN (:TURNOS)')
->setParameter('TURNOS', $turnos)
->getQuery()->getResult();
foreach ($turnosBD as $turno)
{
$turno->setTempId(null);
$turno->setTempFecha(null);
$turno->setSolicitud($solicitud);
$this->em->persist($turno);
}
$this->em->flush();
}
}