src/Controller/SolicitudController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Crud\Controller\crudPlainController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use App\Entity\Solicitud;
  6. use App\Entity\SolicitudHistoria;
  7. use App\Entity\Adjunto;
  8. use App\Entity\TipoServicio;
  9. use App\Entity\InstitucionFinanciera;
  10. use App\Entity\PuntoImpresion;
  11. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  12. use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
  13. use Symfony\Component\Mime\Email;
  14. use App\Entity\SeguridadUsuario;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. use Dompdf\Options;
  17. use Dompdf\Dompdf;
  18. use App\Entity\Pago;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. use Psr\Log\LoggerInterface;
  21. use Symfony\Component\Mailer\MailerInterface;
  22. use Symfony\Component\HttpFoundation\RequestStack;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use App\Entity\PuntoImpresionTurno;
  25. class SolicitudController extends crudPlainController
  26. {
  27.     public function __construct(TranslatorInterface $translatorLoggerInterface $loggerMailerInterface $mailerRequestStack $requestStackEntityManagerInterface $entityManager)
  28.     {
  29.         parent::__construct($translator$logger$mailer$requestStack$entityManager);
  30.         $this->dateFields['fechaServicioPlan'] = 1;
  31.     }
  32.     
  33.     public function nuevaSolicitudAction($rol 'anonimo')
  34.     {
  35.         $this->setUtilProperties();
  36.         $params $this->getParamsForModification();
  37.         $params['rol']=$rol;
  38.         $plataforma=$this->getParameter('tipo_producto');
  39.         $params['plataforma']=$plataforma;
  40.         $params['temp_id'] = $this->session?$this->session->getId():'0000';
  41.         return $this->render("Solicitud/nuevaSolicitud.html.twig"$params);
  42.         
  43.         //return $this->render("layout_deshabilitado.html.twig");
  44.         
  45.     }
  46.     public function validarCaptchaAction($id='none')
  47.     {
  48.         $data = ['ok'=>true];
  49.         $solicitud null;
  50.         $captcha $this->request->get('captcha');
  51.         if ($id != 'none')
  52.         {
  53.             $solicitud $this->em->getRepository(Solicitud::class)->find($id);
  54.         }
  55.         $savedCaptcha $this->session->get('captcha_codigo');
  56.         if ($savedCaptcha == $captcha)
  57.         {
  58.             $servicios $this->em->getRepository(TipoServicio::class)->findAll();
  59.             $data['html'] = $this->render('Solicitud/nuevaSolicitud_step1.html.twig',
  60.                 ['servicios'=>$servicios,
  61.                  'solicitud'=>$solicitud,
  62.                  ])->getContent();
  63.         }
  64.         else
  65.         {
  66.             $data['ok'] = false;
  67.         }
  68.         $data = new Response(json_encode($data));
  69.         $data->headers->set('Content-Type''application/json');
  70.         return $data;
  71.     }
  72.     
  73.     public function verificarRegistroCivilAction($identificacion$codigoDactilar$identificacionSolicitante,$tipoSolicitud$isfaa='true')
  74.     {
  75. //        $data = ['ok'=>true, 'nombres'=>'nombre', 'direccion'=>'direccion']; //WILLY: Usar esta línea para no llamar a WS
  76. //        $data = new Response(json_encode($data)); //WILLY: Usar esta línea para no llamar a WS
  77. //        $data->headers->set('Content-Type', 'application/json'); //WILLY: Usar esta línea para no llamar a WS
  78. //        return $data; //WILLY: Usar esta línea para no llamar a WS
  79.         $data $this->verificaCodigoDactilar($identificacionstrtoupper($codigoDactilar), $identificacion != $identificacionSolicitante); 
  80.         $this->logger->error('************rehisto'json_encode($data));
  81.        
  82.         if ($data['ok'])
  83.         {
  84.             if ($identificacion == $identificacionSolicitante)
  85.             {
  86.                 if ($isfaa=='true')
  87.                 {
  88.                     $data $this->verificaISSFA($identificacionSolicitante);
  89.                 }
  90.                 
  91.                 if(!$data['ok'] and $tipoSolicitud!=4){                    
  92.                     $data $this->verificaReservista($identificacion);
  93.                 }
  94.                 
  95.                 if($tipoSolicitud==4){
  96.                     $data['ok']=true;
  97.                 }
  98.             }
  99.             else
  100.             {
  101.                 if ($isfaa=='true')
  102.                 {
  103.                     $data $this->verificaISSFA($identificacionSolicitante$identificacion);
  104.                 }
  105.             }
  106.         }
  107.         if ($data['ok'])
  108.         {
  109.             $data $this->recuperaDatosPersona($identificacion);
  110.         }
  111.         if ($data['ok'])
  112.         {
  113.             $dataFoto $this->recuperaFotoCedulaPersona($identificacion);
  114.             if ($dataFoto['ok'])
  115.             {
  116.                 $data['foto'] = $dataFoto['foto'];
  117.             }
  118.             else
  119.             {
  120.                 $data['foto'] = 'no foto';
  121.             }
  122.         } 
  123.         
  124.         $data = new Response(json_encode($data));
  125.         $data->headers->set('Content-Type''application/json');
  126.         return $data;
  127.     }
  128.     
  129.     protected function verificaISSFA($identificacion$identificacionDependiente null)
  130.     {
  131.         $data = ['ok'=>true];
  132. //        return $data;  //WILLY usar esta línea para no llamar a ws
  133.         $ws_issfa=$this->getParameter('issfa_ws');  
  134.         $user_issfa $this->getParameter('issfa_user');
  135.         $pass_issfa $this->getParameter('issfa_pass');
  136.         
  137.         $cliente = new \SoapClient($ws_issfa);//, array('login' => $user_issfa, 'password' => $pass_issfa));       
  138.         try
  139.         {                                   
  140.             $parametros = ['Identificacion'=>$identificacion,'Usuario'=>$user_issfa,'Clave'=>$pass_issfa];
  141.              
  142.             $result $cliente->__soapCall("ConsultarAfiliados", array($parametros));
  143.             
  144.             $codigoRegCvil='';
  145.             $sexoRegCivil='';
  146.             $ceduISFA='';
  147.             if($result)
  148.             {
  149.                 if($result->Mensaje != 'CORRECTO')
  150.                 {
  151.                     $data['ok']=false;                          
  152.                     $data['msg']='Número de identificación no registrado en la institución';
  153.                 }
  154.                 else
  155.                 {                                   
  156.         
  157.                     $this->logger->error('************ISSFA'.$identificacion.' - 'json_encode($result)); 
  158.                     $registrados= array();
  159.                      
  160.                     if ($identificacionDependiente)
  161.                     {
  162.                         
  163.                         $parametros = ['Identificacion'=>$identificacionDependiente,'Usuario'=>$user_issfa,'Clave'=>$pass_issfa];
  164.              
  165.                         $result $cliente->__soapCall("ConsultarAfiliados", array($parametros));
  166.                         $codigoRegCvil='';
  167.                         $sexoRegCivil='';
  168.                         $ceduISFA='';
  169.                         if($result)
  170.                         {
  171.                             if($result->Mensaje != 'CORRECTO')
  172.                             {
  173.                                 $dependientes=$result->Dependientes->DetalleDependiente;
  174.                                 $ok false;
  175.                                 foreach ($dependientes as $persona
  176.                                 {   
  177.                                     $this->logger->error('************persona'json_encode($persona)); 
  178.                                         $persona= (array) $persona;
  179.                                         $ceduISFA=$persona['Cedula'];
  180.                                         $registrados[]=$persona['Nombres'];
  181.                                         if ($persona['Cedula'] == $identificacionDependiente)
  182.                                         {
  183.                                             $ok true;
  184.                                             break;
  185.                                         }
  186.                                 }
  187.                             }else{
  188.                                 $ok true;                                
  189.                             }
  190.                         }
  191.                         /*if(!$ok){
  192.                             foreach ($dependientes as $dependiente) 
  193.                             {   
  194.                                 foreach ($dependiente as $persona) 
  195.                                 {  
  196.                                     $persona= (array) $persona;
  197.                                     $ceduISFA=$persona->Cedula;
  198.                                     if ($persona['Cedula'] == $identificacionDependiente)
  199.                                     {
  200.                                         $ok = true;
  201.                                         break;
  202.                                     }
  203.                                 }
  204.                             }
  205.                             
  206.                         }*/
  207.                         
  208.                         
  209.                         if (!$ok)
  210.                         {
  211.                             $data['ok']=false;                          
  212.                             $data['msg']='La identificacion '.$identificacionDependiente.' del dependiente, no se encuentra registrada. Los Dependientes registrados son: 'json_encode($registrados);
  213.                         }
  214.                     }
  215.                 }
  216.             }
  217.             else
  218.             {
  219.                 $data['msg']='No pudo establecerse comunicación con el ISSFA...';
  220.                 $data['ok']=false;     
  221.             }
  222.         }
  223.         catch (\SoapFault $e)
  224.         {                       
  225.             $data['ok']=false
  226.             $data['msg']= 'No pudo establecerse comunicación con el ISSFA... '.$e->faultstring;   
  227.         }
  228.         return $data;
  229.     }
  230.     
  231.     protected function verificaReservista($identificacion)
  232.     {
  233.         $data = ['ok'=>true];
  234. //        return $data; //WILLY: Usar esta línea para no llamar a los ws
  235.         
  236.         $url 'http://200.6.25.31/api/v1/get_data_reservista/'//$ws_dynamo.'/RutaPorcOffline/'.$ruta->getId();
  237.         $params = array('cedula'=>$identificacion);
  238.         $method='POST';
  239.         
  240.         try 
  241.         {
  242.             
  243.             $this->logger->error('************verifica reservista'); 
  244.             
  245.             $header = [
  246.                 'accept: application/json',
  247.                 'Content-Type: application/json',
  248.     //            'Content-Length: ' . strlen($data),
  249.     //           'Authorization: Bearer '.$token,
  250.             ];
  251.             if ($params && is_array($params))
  252.             {
  253.                 $params json_encode($params);
  254.             }
  255.             $handle curl_init();
  256.             curl_setopt($handleCURLOPT_RETURNTRANSFERtrue);
  257.             switch (strtoupper($method))
  258.             {
  259.                 case "GET":
  260.                         curl_setopt($handleCURLOPT_HTTPGETtrue);
  261.                         curl_setopt($handleCURLOPT_FOLLOWLOCATIONtrue);                
  262.                     break;
  263.                 case "POST":
  264.                         curl_setopt($handleCURLOPT_POSTtrue);
  265.                         curl_setopt($handleCURLOPT_POSTFIELDS$params);
  266.     //                    $header[] = 'Content-Type: application/json';
  267.                     break;
  268.                 case "PUT":
  269.                         curl_setopt($handleCURLOPT_CUSTOMREQUEST'PUT');
  270.                         curl_setopt($handleCURLOPT_POSTFIELDS$params);
  271.                     break;
  272.                 case "DELETE":
  273.                         curl_setopt($handleCURLOPT_CUSTOMREQUEST'DELETE');
  274.                         if ($params)
  275.                         {
  276.                             curl_setopt($handleCURLOPT_POSTFIELDShttp_build_query($params));
  277.     //                        $url = sprintf("%s?%s", $url, http_build_query($params));
  278.     //                        $header[] = 'Content-Type: application/x-www-form-urlencoded';
  279.                         }
  280.                     break;
  281.             }
  282.             curl_setopt($handleCURLOPT_URL$url);
  283.             curl_setopt($handleCURLOPT_HTTPHEADER$header);
  284.             $response curl_exec($handle);
  285.             $httpCode curl_getinfo($handleCURLINFO_HTTP_CODE);
  286.             //$output->writeln('*********************url' . $url);
  287.             //$output->writeln('*********************httpCodeDYNAMO' . $httpCode);
  288.             //$output->writeln('*********************responseDYNAMO' . json_encode($response));
  289.             $res=['ok'=>true];
  290.             if(!$response || $httpCode != 200){
  291.                 
  292.                 $this->logger->error('**********wwww** no existe reservista'); 
  293.                 
  294.                 $res['ok']=false;
  295.                 $ret['causa'] = 'NO_RESERVISTA';
  296.                 $ret['msg']='No existe un militar o reservista registrado con la indentificación proporcionada';
  297.                 $res['httpCode']=$httpCode;
  298.                 $res['info'] = 'Error: No existe un militar o reservista registrado con la indentificación proporcionada';
  299.                 return $res;
  300.             }
  301.             else
  302.             {
  303.                 $this->logger->error('**********wwww** si existe reservista');
  304.                  
  305.                 $response json_decode($responsetrue);
  306.                 $res['reservistaVerificado'] = $response['data'];
  307.             }
  308.         } catch(\Exception $exc) {
  309.             
  310.             $this->logger->error('************error reservista'.$exc); 
  311.            $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');
  312.         }
  313.         return $res;
  314.     }
  315.     
  316.     protected function verificaCodigoDactilar($identificacion$codigoDactilar$beneficiario=false)
  317.     {  
  318. //        $data = ['ok'=>false, 'dactilarRegCivil'=>['individualDactilar'=>'$codigoRegCvil', 'sexo'=>'$sexoRegCivil']];  //WILLY: Usar esta línea para no llamar a los ws
  319. //        return $data;  //WILLY: Usar esta línea para no llamar a los ws
  320.         $data = ['ok'=>true];
  321.         
  322.         $ws_dinardap=$this->getParameter('dinardap_ws_2');  
  323.         $user_dinardap $this->getParameter('dinardap_user');
  324.         $pass_dinardap $this->getParameter('dinardap_pass');
  325.         
  326.         $cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap'password' => $pass_dinardap));   
  327.         
  328.         try
  329.         {
  330.             $parametros=array('parametros'=>array(array('nombre' => 'codigoPaquete','valor' => 1959),array('nombre' => 'identificacion','valor' => $identificacion)));
  331.                                      
  332.             $result $cliente->__soapCall("consultar", array($parametros));
  333.                                     
  334.             $codigoRegCvil='';
  335.             $sexoRegCivil='';
  336.             if($result->paquete)
  337.             {
  338.                 if($result->paquete->entidades->entidad)
  339.                 {
  340.                     $filas=$result->paquete->entidades->entidad->filas;
  341.                     foreach ($filas as $fila
  342.                     {       
  343.                         foreach ($fila->columnas as $columna
  344.                         {                     
  345.                             foreach ($columna as $item)
  346.                             {
  347.                                 switch ($item->campo)
  348.                                 {
  349.                                     case 'individualDactilar':
  350.                                         $codigoRegCvil$item->valor;                                
  351.                                         break;
  352.                                     case 'sexo':
  353.                                         $sexoRegCivil$item->valor;    
  354.                                         break;                                                
  355.                                 }                                                                                                         
  356.                             }
  357.                         }
  358.                     }
  359.                    
  360.                     
  361.                     $data['dactilarRegCivil']=array('individualDactilar'=>$codigoRegCvil'sexo'=>$sexoRegCivil); 
  362.                     
  363.                     if($codigoRegCvil!=$codigoDactilar and !$beneficiario)
  364.                     {                      
  365.                         $data['ok']=false;                          
  366.                         $data['msg']='La información suministrada no es correcta'json_encode($result);
  367.                     }
  368.                 }
  369.             }
  370.             else
  371.             {
  372.                 $data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
  373.                 $data['ok']=false;     
  374.             }
  375.         }
  376.         catch (\SoapFault $e)
  377.         {                       
  378.             $data['ok']=false
  379.             $data['msg']= 'No pudo establecerse comunicación con el Registro Civil para validar la información... '.$e->faultstring; ;   
  380.         }
  381.         return $data;
  382.     }
  383.     
  384.     protected function recuperaDatosPersona($identificacion)
  385.     {
  386. //        $data = ['ok'=>true, 'direccion'=>'direccion'] ; //WILLY: Usar esta línea para no llamar a los ws
  387. //        return $data; //WILLY: Usar esta línea para no llamar a los ws
  388.         
  389.         $data = ['ok'=>true];
  390.         
  391.         $ws_dinardap=$this->getParameter('dinardap_ws');  
  392.         $user_dinardap $this->getParameter('dinardap_user');
  393.         $pass_dinardap $this->getParameter('dinardap_pass');
  394.         
  395.         $cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap'password' => $pass_dinardap));       
  396.         try 
  397.         {
  398.             
  399.             $result $cliente->__soapCall(
  400.                 "getFichaGeneral", array(array(                         
  401.                 'codigoPaquete' => 82,
  402.                 'numeroIdentificacion' => $identificacion                   
  403.                 ))
  404.             );
  405.             
  406.             if ($result->return->instituciones)
  407.             {
  408.                 $datos=$result->return->instituciones->datosPrincipales->registros;
  409.                         
  410.                 foreach ($datos as $dato)
  411.                 {
  412.                     switch ($dato->campo)
  413.                     {
  414.                         case 'nombre':
  415.                             $data['nombres']=$dato->valor;
  416.                             break;
  417.                         case 'domicilio':
  418.                             $data['domicilio']=$dato->valor;                                    
  419.                             break;
  420.                         case 'callesDomicilio':
  421.                             $data['callesDomicilio']=$dato->valor;                                    
  422.                             break;
  423.                         case 'numeroCasa':
  424.                             $data['numeroCasa']=$dato->valor;                                    
  425.                             break;
  426.                     }                           
  427.                 }
  428.                 $data['direccion'] = $data['domicilio'];
  429.                 if ($data['direccion'])
  430.                 {
  431.                     $data['direccion'] .= ', '.$data['callesDomicilio'];
  432.                 }
  433.                 if ($data['direccion'] && $data['numeroCasa'])
  434.                 {
  435.                     $data['direccion'] .= ', # '.$data['numeroCasa'];
  436.                 }
  437.                 unset($data['domicilio']);
  438.                 unset($data['callesDomicilio']);
  439.                 unset($data['numeroCasa']);
  440.             }
  441.             else
  442.             {
  443.                 $data['ok']=false;  //se pudo comunicar con el ws
  444.                 $data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
  445.             } 
  446.             
  447.             if ($data['ok'])
  448.             {
  449.                 //Busco datos registrados antes en otras solicitudes
  450.                 $data['movil'] = '_NONE_';
  451.                 $data['email'] = '_NONE_';
  452.                 $solicitudes $this->em->getRepository(Solicitud::class)
  453.                         ->createQueryBuilder('s')
  454.                         ->where('s.solicitanteIdentificacion = :CEDULA')
  455.                         ->orderBy('s.fechaRegistro''desc')
  456.                         ->setParameter('CEDULA'$identificacion)
  457.                         ->setMaxResults(1)
  458.                         ->getQuery()->getResult();
  459.                 if (!empty($solicitudes))
  460.                 {
  461.                     $solicitudes $solicitudes[0];
  462.                     $data['movil'] = $solicitudes->getSolicitanteMovil();
  463.                     $data['email'] = $solicitudes->getSolicitanteEmail();
  464.                 }
  465.             }
  466.             
  467.         }
  468.         catch (\SoapFault $e)
  469.         {
  470.             $data['ok']=false;
  471.             $data['msg']= 'Error al codigo 82 '.$e->faultstring;            
  472.         }
  473.         return $data;
  474.     }
  475.     
  476.     protected function recuperaFotoCedulaPersona($identificacion)
  477.     {
  478. //        $data = ['ok'=>false];  //WILLY: Usar esta línea para no llamar a los ws
  479. //        return $data;  //WILLY: Usar esta línea para no llamar a los ws
  480.         $data = ['ok'=>true];
  481.         
  482.         $ws_dinardap=$this->getParameter('dinardap_ws_2');  
  483.         $user_dinardap $this->getParameter('dinardap_user');
  484.         $pass_dinardap $this->getParameter('dinardap_pass');
  485.         
  486.         $cliente = new \SoapClient($ws_dinardap,array('login' => $user_dinardap'password' => $pass_dinardap));       
  487.         try 
  488.         {
  489.              $parametros=array('parametros'=>array(array('nombre' => 'codigoPaquete','valor' => 1961),array('nombre' => 'identificacion','valor' => $identificacion)));
  490.                                      
  491.             $result $cliente->__soapCall("consultar", array($parametros));
  492.             $data['foto'] = '';          
  493.             
  494.             if ($result->paquete)
  495.             {
  496.                 if ($result->paquete->entidades->entidad)
  497.                 {
  498.                     $filas=$result->paquete->entidades->entidad->filas;
  499.                     foreach ($filas as $fila)
  500.                     {       
  501.                         foreach ($fila->columnas as $columna
  502.                         {                     
  503.                             foreach ($columna as $item)
  504.                             {
  505.                                 if ($item->campo=='foto')
  506.                                 {
  507.                                     $data['foto'] = $item->valor;                            
  508.                                     break;
  509.                                 }
  510.                             }
  511.                         }
  512.                     }
  513.                 }
  514.             }
  515.             else
  516.             {
  517.                 $data['ok']=false;     
  518.                 $data['msg']='No pudo establecerse comunicación con el Registro Civil para validar la información';
  519.             }
  520.         }
  521.         catch (\SoapFault $e)
  522.         {
  523.             $data['ok']=false;
  524.             $data['msg']= $e->faultstring;  
  525.             $data['foto'] =$e->faultstring;
  526.         }
  527.         return $data;
  528.     }
  529.     
  530.     public function cargaPasoTurnosAction($id='none')
  531.     {
  532.         $puntos $this->em->getRepository(PuntoImpresion::class)->findBy(['activo'=>true]);
  533.         $params = [
  534.             'puntos' => $puntos,
  535.         ];
  536.         $solicitud null;
  537.         if ($id != 'none')
  538.         {
  539.             $params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
  540.         }
  541.         
  542.         return $this->render('Solicitud/nuevaSolicitud_step5.html.twig'$params);
  543.     }
  544.     
  545.     public function cargaPasoPagosAction($id='none',$servicio)
  546.     {
  547.         
  548.         $servicio $this->em->getRepository(TipoServicio::class)->find($servicio);
  549.         
  550.         $params = [
  551.             'servicio' => $servicio,
  552.             'bancos' => $this->em->getRepository(InstitucionFinanciera::class)
  553.                 ->createQueryBuilder('p')
  554.                 ->orderBy('p.nombre')
  555.                 ->getQuery()->getResult(),
  556.         ];
  557.         $solicitud null;
  558.         if ($id != 'none')
  559.         {
  560.             $params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
  561.         }
  562.         
  563.         return $this->render('Solicitud/nuevaSolicitud_step2.html.twig'$params);
  564.     }
  565.     
  566.     public function cargaPasoBeneficiariosAction($servicio$tipo$cantBeneficiarios$id='none')
  567.     {
  568.         $servicio $this->em->getRepository(TipoServicio::class)->find($servicio);
  569.         
  570.         $totalBeneficiarios $cantBeneficiarios;                
  571.                 
  572.         if ($tipo != Solicitud::TIPO_SOLO_DEPENDIENTES)
  573.         {
  574.             $cantBeneficiarios--;
  575.         }
  576.         if ($tipo==Solicitud::TIPO_FUNCIONARIO_PUBLICO && $cantBeneficiarios>1)
  577.         {
  578.             $cantBeneficiarios 1;
  579.             $totalBeneficiarios 2;
  580.         }
  581.         
  582.         $params = [
  583.             'tipo' => $tipo,
  584.             'personal' => $tipo != Solicitud::TIPO_SOLO_DEPENDIENTES,
  585.             'cantidadBeneficiarios' => $cantBeneficiarios,
  586.             'totalBeneficiarios'=>$totalBeneficiarios,
  587.         ];
  588.         if ($id != 'none')
  589.         {
  590.             $params['solicitud'] = $this->em->getRepository(Solicitud::class)->find($id);
  591.         }
  592.         
  593.         return $this->render('Solicitud/nuevaSolicitud_step4.html.twig'$params);
  594.     }
  595.     
  596.     public function cargaPasoEmailAction()
  597.     {
  598.         return $this->render('Solicitud/nuevaSolicitud_step3.html.twig');
  599.     }
  600.     public function grabarSolicitudAction()
  601.     {
  602.         $ret = array('ok'=>true);
  603.         $fecha = new \DateTime();
  604.         $files $this->request->files;
  605.         $files $files->get('solicitud');
  606.         $data $this->request->get('solicitud');
  607.         $ajax $this->request->get('_xml_http_request');
  608.         $user $this->getUser();
  609.         try
  610.         {  
  611.             if ($data['id'])
  612.             {
  613.                 $solicitud $this->em->getRepository(Solicitud::class)->find($data['id']);
  614.             }
  615.             else
  616.             {
  617.                 $solicitud = new Solicitud();
  618.             }
  619.             if ($solicitud)
  620.             {
  621.                 $solicitud->setFechaRegistro($fecha);
  622.                 $solicitud->setFechaEnvioRevision($fecha);
  623.                 $solicitud->setEstado(Solicitud::ESTADO_REGISTRADA);
  624.                 $tipoServicio $this->em->getRepository(TipoServicio::class)->find($data['tipo']);
  625.                 $solicitud->setTipoServicio($tipoServicio);
  626.                 $puntoImpresion $this->em->getRepository(PuntoImpresion::class)->find($data['puntoImpresion']);
  627.                 $solicitud->setPuntoImpresion($puntoImpresion);
  628.                 $fechaServicioPlan \DateTime::createFromFormat('Y-m-d'$data['fechaServicioPlan']);
  629.                 $fechaServicioPlan->setTime(0,0,0);
  630.                 $solicitud->setFechaServicioPlan($fechaServicioPlan);
  631.                 $solicitud->setTipo($data['tipoBeneficiario']);
  632.                 // INFORMACIÖN SOLICITANTE
  633. //                $fechaExpedicion = \DateTime::createFromFormat('d-m-Y', $data['solicitante']['fecha_expedicion_codigo_dactilar']);
  634. //                $fechaExpedicion->setTime(0,0,0);
  635.                 $solicitud->setSolicitanteCodigoDactilar(strtoupper($data['solicitante']['codigo_dactilar']));
  636.                 $solicitud->setSolicitanteDireccion($data['solicitante']['direccion']);
  637.                 $solicitud->setSolicitanteEmail($data['solicitante']['email']);
  638. //                $solicitud->setSolicitanteFechaExpedicionCodigoDactilar($fechaExpedicion);
  639.                 $solicitud->setSolicitanteFoto($data['solicitante']['foto']);
  640.                 $solicitud->setSolicitanteIdentificacion($data['solicitante']['identificacion']);
  641.                 $solicitud->setSolicitanteMovil('5939'.$data['solicitante']['celular']);
  642.                 $solicitud->setSolicitanteNombre($data['solicitante']['nombre']);
  643. //                $solicitud->setSolicitanteTelefono('5939'.$data['solicitante']['telefono_provincia'].$data['solicitante']['telefono']);
  644.                 //INFORMACION PAGO
  645.                 if($data['fecha_pago']){
  646.                     $fechaPago \DateTime::createFromFormat('Y-m-d'$data['fecha_pago']);
  647.                     $fechaPago->setTime(0,0,0);
  648.                 }else{
  649.                     $fechaPago = new \DateTime();
  650.                     $fechaPago->setTime(0,0,0);
  651.                 }
  652.                 $banco $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco']);
  653.                 $solicitud->setCostoServicio($tipoServicio->getPrecio());
  654.                 
  655.                 $solicitud->setPagoBanco($banco);
  656.                 $solicitud->setPagoComprobante($data['comprobante']);
  657.                 $solicitud->setPagoValor($data['valor']);
  658.                 $solicitud->setPagoValorReal(0);
  659.                 $solicitud->setPagoFecha($fechaPago);
  660.                                                                 
  661.                 if (isset($files['comprobante_foto']) && $files['comprobante_foto'])
  662.                 {
  663.                     $this->setSolicitudAdjunto($files['comprobante_foto'], 'pagoComprobanteFoto'$solicitud);
  664.                 }
  665.                 
  666.                 
  667.                 
  668.                 if($data['comprobante2']!='' and $data['comprobante2']!=$data['comprobante']){
  669.                     if($data['banco2']>0){
  670.                         
  671.                         if($data['fecha_pago2']){
  672.                             $fechaPago2 \DateTime::createFromFormat('Y-m-d'$data['fecha_pago2']);
  673.                             $fechaPago2->setTime(0,0,0);
  674.                         }else{
  675.                             $fechaPago2 = new \DateTime();
  676.                             $fechaPago2->setTime(0,0,0);
  677.                         }
  678.                        
  679.                         $banco2 $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco2']);
  680.                         $solicitud->setPago2Banco($banco2);
  681.                         $solicitud->setPago2Comprobante($data['comprobante2']);
  682.                         $solicitud->setPago2Valor($data['valor2']);                       
  683.                         $solicitud->setPago2Fecha($fechaPago2);                                        
  684.                     }
  685.                     
  686.                     if (isset($files['comprobante_foto2']) && $files['comprobante_foto2'])
  687.                     {
  688.                         $this->setSolicitudAdjunto($files['comprobante_foto2'], 'pago2ComprobanteFoto'$solicitud);
  689.                     }
  690.                     
  691.                 }
  692.                
  693.                 
  694.                 // INFORMACIÖN BENEFICIARIO
  695.                 if ($solicitud->getTipo() != Solicitud::TIPO_SOLO_DEPENDIENTES)
  696.                 {
  697.                     $solicitud->beneficiarioIgualSolicitante();
  698.                 }
  699.                 
  700.                 $cantidadBeneficiarios $data['cantBeneficiario'];
  701.                 
  702.                 $solicitud->setCantidadPaga($cantidadBeneficiarios);
  703.                  
  704.                 if ($solicitud->getTipo() != Solicitud::TIPO_SOLO_DEPENDIENTES)
  705.                 {
  706.                     $cantidadBeneficiarios--;
  707.                 }
  708.                 else
  709.                 {
  710.                     //el primer beneficiario se pone en la solicitud padre
  711.                     foreach ($data['beneficiario'] as $index => $beneficiario)
  712.                     {
  713.                         $solicitud->setCostoServicio($tipoServicio->getPrecio());
  714.                         $this->guardaDatosBeneficiario($solicitud$beneficiario);
  715.                         unset($data['beneficiario'][$index]);
  716.                         break;
  717.                     }
  718.                 }
  719.                 $this->em->persist($solicitud);
  720.                 $this->em->flush();
  721.                 
  722.                 //guardar al resto de los beneficiarios en las solicitudes hijas
  723.                 if (isset($data['beneficiario']))
  724.                 {
  725.                     foreach ($data['beneficiario'] as $index => $beneficiario)
  726.                     {
  727.                         $solicitudHija $this->em->getRepository(Solicitud::class)
  728.                                 ->findOneBy(['solicitudPadre'=>$solicitud->getId(), 
  729.                                              'beneficiarioIdentificacion'=>$beneficiario['identificacion']
  730.                                             ]);
  731.                         if (!$solicitudHija)
  732.                         {
  733.                             $solicitudHija = new Solicitud();
  734.                             $solicitudHija->setSolicitudPadre($solicitud);
  735.                             $solicitudHija->setEstado($solicitud->getEstado());
  736.                         }
  737.                         
  738.                         $solicitudHija->setCostoServicio($tipoServicio->getPrecio());
  739.                         
  740.                         $this->guardaDatosBeneficiario($solicitudHija$beneficiario);
  741.                         $this->em->persist($solicitudHija);
  742.                         $this->em->flush();
  743.                     }
  744.                 }
  745.                 
  746.                 if (!$solicitud->getCodigoAcceso())
  747.                 {
  748.                     $codigoAcceso $solicitud->getFechaRegistro()->format('Ymd').$solicitud->getId().random_int(100999);
  749.                     $solicitud->setCodigoAcceso($codigoAcceso);
  750.                 }
  751.                 $this->em->persist($solicitud);
  752.                 $this->em->flush();
  753.                 $this->asignaTurnos($data['turno'], $solicitud);
  754.                 $solicitudHistoria = new SolicitudHistoria();
  755.                 $solicitudHistoria->setSolicitud($solicitud);
  756.                 $solicitudHistoria->setEstado($solicitud->getEstado());
  757.                 $solicitudHistoria->setFecha($fecha);
  758.                 $solicitudHistoria->setIp($this->request->getClientIp());
  759.                 $solicitudHistoria->setAccion('Registrada');
  760.                 if (is_object($user))
  761.                 {
  762.                     $solicitudHistoria->setUsuario($user);
  763.                 }
  764.                 $this->em->persist($solicitudHistoria);
  765.                 $this->em->flush();
  766.                 $this->intentaAprobarSolicitud($solicitud);
  767.                 $this->sendEmailEstado($solicitud);
  768.                 
  769.                 $ret['id'] = $solicitud->getId();
  770.                 $ret['codigoAcceso'] = $solicitud->getCodigoAcceso();
  771.             }
  772.             else
  773.             {
  774.                 $ret['ok']=false;
  775.                 $ret['info'] = 'No se encuentra la solicitud';
  776.             }
  777.             
  778.             
  779.         }
  780.         catch (\Exception $e)
  781.         {
  782.             $ret['ok']=false;
  783.             $ret['info'] = json_encode($data).$e->getMessage();
  784.         }
  785.         if ( $ajax )
  786.         {
  787.             if ($ret['ok'])
  788.             {
  789.                 $ret['url'] = $this->generateUrl ('solicitud_estado', array('codigoAcceso'=>$solicitud->getCodigoAcceso(), 'checkMore'=>'false'));
  790.             }
  791.             $data = new Response(json_encode($ret));
  792.             $data->headers->set('Content-Type''application/json');
  793.             return $data;
  794.         }
  795.         else
  796.         {
  797.             return $this->redirect($this->generateUrl ('solicitud_estado', array('codigoAcceso'=>$solicitud->getCodigoAcceso())));
  798.         }
  799.         
  800.         
  801.         /*$ret['ok']=false;
  802.         $ret['info'] = 'La emisión turnos para obtención de credenciales se encuentra suspendida hasta el 3 de enero del 2023';
  803.         $data = new Response(json_encode($ret));
  804.         $data->headers->set('Content-Type', 'application/json');
  805.         return $data;*/
  806.     }
  807.     
  808.     protected function guardaDatosBeneficiario($solicitud$beneficiario)
  809.     {
  810. //        $fechaExpedicion = \DateTime::createFromFormat('d-m-Y', $beneficiario['fecha_expedicion_codigo_dactilar']);
  811. //        $fechaExpedicion->setTime(0,0,0);
  812. //        $solicitud->setBeneficiarioCodigoDactilar(strtoupper($beneficiario['codigo_dactilar']));
  813. //        $solicitud->setBeneficiarioDireccion($beneficiario['direccion']);
  814. //        $solicitud->setBeneficiarioEmail($beneficiario['email']);
  815. //        $solicitud->setBeneficiarioFechaExpedicionCodigoDactilar($fechaExpedicion);
  816. //        $solicitud->setBeneficiarioFoto($beneficiario['foto']);
  817.         $solicitud->setBeneficiarioIdentificacion($beneficiario['identificacion']);
  818. //        $solicitud->setBeneficiarioMovil('5939'.$beneficiario['celular']);
  819.         $solicitud->setBeneficiarioNombre($beneficiario['nombre']);
  820. //        $solicitud->setBeneficiarioTelefono('5939'.$beneficiario['telefono_provincia'].$beneficiario['telefono']);
  821.     }
  822.     
  823.     public function grabarResultadoSolicitudAction()
  824.     {
  825.         $ret = array('ok'=>true);
  826.         $fecha = new \DateTime();
  827.         $data $this->request->get('solicitud');
  828.         $ajax $this->request->get('_xml_http_request');
  829.         $user $this->getUser();
  830.         $solicitud $this->em->getRepository(Solicitud::class)->find($data['id']);
  831.             
  832.         
  833.         if ($solicitud)
  834.         {
  835.              
  836.             $this->logger->error('************encuentra solicitud'.$data['resultado']); 
  837.              
  838.             if ($data['resultado']=='aprobada')
  839.             {
  840.                 if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
  841.                     $solicitud->setEstado(Solicitud::ESTADO_APROBADA);
  842.                 $observaciones 'Aprobada';
  843.             }
  844.             else
  845.             {
  846.                 $solicitud->setEstado(Solicitud::ESTADO_RECHAZADA);
  847.                 $observaciones 'Rechazada';
  848.             }
  849.             if (isset($data['observaciones']))
  850.             {
  851.                 $solicitud->setObservaciones($data['observaciones']);
  852.                 $observaciones .='. '.$data['observaciones'];
  853.             }
  854.             $solicitud->setFechaResultadoRevision($fecha);                
  855.             $this->logger->error('************valida hijas'); 
  856.             
  857.             foreach ($solicitud->getHijas() as $hija)
  858.             {
  859.                 $hija->setFechaResultadoRevision($fecha);   
  860.                 $hija->setEstado($solicitud->getEstado());
  861.                 $hija->setObservaciones($solicitud->getObservaciones());
  862.                 $this->em->persist($hija);
  863.             }
  864.             $this->em->persist($solicitud);
  865.             $this->em->flush();
  866.             
  867.             $this->logger->error('************guarda'); 
  868.             
  869.             if ($data['resultado']=='aprobada')
  870.             {
  871.                 $this->intentaAprobarSolicitud($solicitud,true);
  872.             }
  873.             
  874.             $solicitudHistoria = new SolicitudHistoria();
  875.             $solicitudHistoria->setSolicitud($solicitud);
  876.             $solicitudHistoria->setEstado($solicitud->getEstado());
  877.             $solicitudHistoria->setFecha($fecha);
  878.             $solicitudHistoria->setIp($this->request->getClientIp());
  879.             $solicitudHistoria->setAccion('Revisión terminada');
  880.             $solicitudHistoria->setObservaciones($observaciones);
  881.             if (is_object($user))
  882.             {
  883.                 $solicitudHistoria->setUsuario($user);
  884.             }
  885.             $this->em->persist($solicitudHistoria);
  886.             $this->em->flush();
  887.             try
  888.             {
  889.           
  890.                 $respuesta$this->sendEmailEstado($solicitud);
  891.                 
  892.                 if($respuesta!=true){
  893.                     $ret['ok'] = false;
  894.                     $ret['info'] = $respuesta;           
  895.                 }
  896.             
  897.             
  898.             }catch (\Exception $e)
  899.             {
  900.                 $ret['ok'] = false;
  901.                 $ret['info'] = $e->getMessage();
  902.             }
  903.         }
  904.         else
  905.         {
  906.             $ret['ok'] = false;
  907.             $ret['info'] = 'No se encontró la solicitud.';
  908.         }
  909.         if ($ajax)
  910.         {
  911.             $data = new Response(json_encode($ret));
  912.             $data->headers->set('Content-Type''application/json');
  913.             return $data;
  914.         }
  915.         else
  916.         {
  917.             if (!$ret['ok'])
  918.             {
  919.                 $this->session->getFlashBag()
  920.                     ->set('error''No se encontró la solicitud.');
  921.             }
  922.             else
  923.             {
  924.                 $this->session->getFlashBag()
  925.                     ->set('success''Revisión terminada.');
  926.             }
  927.         }
  928.         return $this->redirect($this->generateUrl('crud_index', array('rol'=>$data['rol'], 'routeClassName' => 'revisar') ));
  929.     }
  930.     public function imprimirSolicitudAction($id$rol)
  931.     {
  932.         $fecha = new \DateTime();
  933.         $user $this->getUser();
  934.         try
  935.         {
  936.             $solicitud $this->em->getRepository(Solicitud::class)->find($id);
  937.             
  938.             if ($solicitud && $solicitud->getEstado()==Solicitud::ESTADO_APROBADA)
  939.             {
  940.                 $puntoImpresion $user->getPuntoImpresion();
  941.                 if ($puntoImpresion->getId() != $solicitud->getPuntoImpresion()->getId())
  942.                 {
  943.                     $cambioTurno $this->session->get('cambio_turno');
  944.                     if ($cambioTurno && isset($cambioTurno[$solicitud->getId()]))
  945.                     {
  946.                         unset($cambioTurno[$solicitud->getId()]);
  947.                         $this->session->set('cambio_turno'$cambioTurno);
  948.                         $solicitudes $solicitud->getHijas()->toArray();
  949.                         $solicitudes[]=$solicitud;
  950.                         foreach ($solicitudes as $solicitudCambiar)
  951.                         {
  952.                             /*$turno = $this->em->getRepository(PuntoImpresionTurno::class)
  953.                                     ->findBy(array('solicitud' => $solicitudCambiar->getId()));
  954.                             if ($turno)
  955.                             {
  956.                                 $turno->setSolicitud(null);
  957.                                 $this->em->persist($turno);
  958.                             }*/
  959.                             $punto $solicitudCambiar->getPuntoImpresion();
  960.                             $solicitudCambiar->setPuntoImpresion($puntoImpresion);
  961.                             $this->em->persist($solicitudCambiar);
  962.                             $this->creaHistoria($solicitud'Cambio de punto de impresión<br>Punto origen:  '.$punto->__toString().'<br>Punto destino: '.$puntoImpresion->__toString());
  963.                         }
  964.                         $this->em->flush();
  965.                     }
  966.                     
  967.                 }
  968.                 
  969.                 $solicitud->setEstado(Solicitud::ESTADO_CERRADA);
  970.                 $solicitud->setFechaServicioPrestado($fecha);                
  971.                 $solicitud->setUsuarioPrestaServicio($user);
  972.                 $solicitud->setPuntoImpresion($user->getPuntoImpresion());
  973.                 $this->em->persist($solicitud);
  974.                 $this->em->flush();
  975.                 $solicitudHistoria = new SolicitudHistoria();
  976.                 $solicitudHistoria->setSolicitud($solicitud);
  977.                 $solicitudHistoria->setEstado($solicitud->getEstado());
  978.                 $solicitudHistoria->setFecha($fecha);
  979.                 $solicitudHistoria->setIp($this->request->getClientIp());
  980.                 $solicitudHistoria->setAccion('Servicio prestado');
  981.                 if (is_object($user))
  982.                 {
  983.                     $solicitudHistoria->setUsuario($user);
  984.                 }
  985.                 $this->em->persist($solicitudHistoria);
  986.                 $this->em->flush();
  987.                 
  988.                 $this->session->getFlashBag()
  989.                     ->set('warning''Se registró exitosamente la prestación del servicio.');
  990.                 
  991.             }
  992.             else
  993.             {
  994.                 $this->session->getFlashBag()
  995.                     ->set('warning''La solicitud no puede imprimirse porque el pago no ha sido aprobado aún.');
  996.             }
  997.         }
  998.         catch (\Exception $e)
  999.         {
  1000.             $this->session->getFlashBag()
  1001.                 ->set('warning''Ha ocurrido un error: '.$e->getMessage());
  1002.         }
  1003.         return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol'routeClassName' => 'imprimir') ));
  1004.     }
  1005.     protected function creaHistoria($solicitud$accion)
  1006.     {
  1007.         $fecha = new \DateTime();
  1008.         $user $this->getUser();
  1009.         
  1010.         $solicitudHistoria = new SolicitudHistoria();
  1011.         $solicitudHistoria->setSolicitud($solicitud);
  1012.         $solicitudHistoria->setEstado($solicitud->getEstado());
  1013.         $solicitudHistoria->setFecha($fecha);
  1014.         $solicitudHistoria->setIp($this->request->getClientIp());
  1015.         $solicitudHistoria->setAccion($accion);
  1016.         if (is_object($user))
  1017.         {
  1018.             $solicitudHistoria->setUsuario($user);
  1019.         }
  1020.         $this->em->persist($solicitudHistoria);
  1021.         $this->em->flush();
  1022.     }
  1023.     
  1024.     public function estadoSolicitudAction($codigoAcceso$checkMore 'true')
  1025.     {
  1026.         $params = array('codigoAcceso' => $codigoAcceso'checkMore' => $checkMore == 'true');
  1027.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1028.         if ($solicitud)
  1029.         {
  1030.             $params['email'] = $solicitud->getSolicitanteEmail();
  1031.             $params['nombre'] = $solicitud->getSolicitanteNombre();
  1032.             $params['celular'] = $solicitud->getSolicitanteMovil();
  1033.             $params['solicitud'] = $solicitud;
  1034.             $params['historia'] = $this->em->getRepository(SolicitudHistoria::class)->getLastStatus($solicitud);
  1035.             
  1036.             $params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
  1037.             $turno $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
  1038.             $params['turno'] =$turno?$turno[0]:null;
  1039.             $view 'Solicitud/homeSolicitud_'.$solicitud->getEstadoStrName().'.html.twig';
  1040.         }
  1041.         else
  1042.         {
  1043.             $view 'Solicitud\\wrongAccessCode.html.twig';
  1044.         }
  1045.         return $this->render($view$params);
  1046.     }  
  1047.     
  1048.     public function sendEmailEstado($solicitud)
  1049.     {
  1050.         $params = [
  1051.             'urlEstado' => $this->generateUrl('solicitud_estado', array('codigoAcceso' => $solicitud->getCodigoAcceso()), UrlGeneratorInterface::ABSOLUTE_URL),
  1052.             'urlModificar' => $this->generateUrl('solicitud_modificar', array('codigoAcceso' => $solicitud->getCodigoAcceso()), UrlGeneratorInterface::ABSOLUTE_URL),
  1053.             'solicitud' => $solicitud,
  1054.             'turno' => $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]),
  1055.         ];
  1056.         
  1057.         $subjects = [
  1058.             Solicitud::ESTADO_REGISTRADA => 'Solicitud registrada',
  1059.             Solicitud::ESTADO_REVISION => '',
  1060.             Solicitud::ESTADO_APROBADA => 'Solicitud aprobada',
  1061.             Solicitud::ESTADO_RECHAZADA => 'Solicitud rechazada',
  1062.             Solicitud::ESTADO_CERRADA => 'Solicitud cerrada',
  1063.             Solicitud::ESTADO_REPROCESO => '',
  1064.             
  1065.         ];
  1066.         try
  1067.         {
  1068.             
  1069.             $message = new Email();
  1070.             
  1071.             $subject $subjects[$solicitud->getEstado()];
  1072.             $template 'Solicitud\PlantillasCorreo\email_notificacion_'.$solicitud->getEstadoStrName().'.html.twig';
  1073.             
  1074.             $message
  1075.                 ->from($this->getParameter('mailer_from'))
  1076.                 ->to($solicitud->getSolicitanteEmail())
  1077.                 ->subject($subject)
  1078.                 ->embedFromPath('images/logo_plataforma.png''logo')
  1079. //                ->setContentType('text/html')
  1080.                 ->html($this->render($template,$params)->getContent());
  1081.             $this->mailer->send($message);
  1082.            
  1083.             
  1084.             /*$template = 'Solicitud\PlantillasCorreo\email_notificacion_'.$solicitud->getEstadoStrName().'.html.twig';
  1085.             $template = $this->render($template, $params)->getContent(); 
  1086.             $subject = $subjects[$solicitud->getEstado()];
  1087.             $email = new Email();
  1088.             $email->from($this->getParameter('mailer_from'))
  1089.                 ->to($solicitud->getSolicitanteEmail())
  1090.                 //->cc('[email protected]')
  1091.                 //->bcc('[email protected]')
  1092.                 //->replyTo('[email protected]')
  1093.                 //->priority(Email::PRIORITY_HIGH)
  1094.                 ->subject($subject)
  1095.                 ->html();
  1096.             $this->mailer->send($email);*/
  1097.             
  1098.         } catch (\Exception $exc)
  1099.         {
  1100.             return $exc->getMessage();
  1101.         }        
  1102.         return true;        
  1103.     }
  1104.     
  1105.     public function modificarSolicitudAction($codigoAcceso$rol 'anonimo')
  1106.     {
  1107.         $user $this->getUser();
  1108.         $view 'Solicitud\\wrongAccessCode.html.twig';
  1109.         
  1110.         $params = array('rol'=>$rol'codigoAcceso'=>$codigoAcceso);
  1111.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1112.         if ($solicitud)
  1113.         {
  1114.             $params['solicitud'] = $solicitud;
  1115.             if ($solicitud->getEstado() == Solicitud::ESTADO_RECHAZADA)
  1116.             {
  1117.                 $solicitud->setEstado(Solicitud::ESTADO_REPROCESO);
  1118.                 
  1119.                 foreach ($solicitud->getHijas() as $hija)
  1120.                 {
  1121.                     $hija->setEstado($solicitud->getEstado());
  1122.                     $hija->setObservaciones($solicitud->getObservaciones());
  1123.                     $this->em->persist($hija);
  1124.                 }
  1125.                 $this->em->persist($solicitud);
  1126.                 $this->em->flush();
  1127.                 
  1128.                 $solicitudHistoria = new SolicitudHistoria();
  1129.                 $solicitudHistoria->setSolicitud($solicitud);
  1130.                 $solicitudHistoria->setEstado($solicitud->getEstado());
  1131.                 $solicitudHistoria->setFecha(new \DateTime());
  1132.                 $solicitudHistoria->setIp($this->request->getClientIp());
  1133.                 $solicitudHistoria->setAccion('Modificando solicitud');
  1134.                 if (is_object($user))
  1135.                 {
  1136.                     $solicitudHistoria->setUsuario($user);
  1137.                 }
  1138.                 $this->em->persist($solicitudHistoria);
  1139.                 $this->em->flush();
  1140.             }
  1141.             if ($solicitud->getEstado() != Solicitud::ESTADO_REPROCESO)
  1142.             {
  1143.                 
  1144.                  $params['checkMore'] ='false';
  1145.                 $params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
  1146.                 $turno $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
  1147.                 if($turno)
  1148.                     $params['turno']=$turno[0];                
  1149.                 $view='Solicitud\homeSolicitud_'.$solicitud->getEstadoStrName().'.html.twig';
  1150.                 $params['error'] = 'El estado de la solicitud "'.$solicitud->getCodigoAcceso().'" es "'.$solicitud->getEstadoStr().'" y en ese estado no se puede modificar.';
  1151.             }  
  1152.             else
  1153.             {
  1154.                 
  1155.                 $params['turno']=null;                
  1156.                 $params['temp_id'] = $this->session?$this->session->getId():'0000';
  1157.                 $params array_merge($params$this->getParamsForModification($solicitud) );
  1158.                 $view 'Solicitud\\nuevaSolicitud.html.twig';
  1159.             }
  1160.         }
  1161.         return $this->render($view$params);
  1162.     }
  1163.     public function solicitudesPorEstadoAction($estado$rol)
  1164.     {
  1165.         if ($estado=='facturar')
  1166.         {
  1167.             return $this->redirect($this->generateUrl('crud_index', array('rol'=> $rol'routeClassName'=>'facturar')));
  1168.         }
  1169.         $filtros $this->session->get('solicitud');
  1170.         $filtros['estado'] = $estado;
  1171.         $this->session->set('solicitud'$filtros);
  1172.         return $this->redirect($this->generateUrl('crud_index', array('rol'=> $rol'routeClassName'=>'solicitud')));
  1173.     }
  1174.     
  1175.     protected function getParamsForModification($solicitud null)
  1176.     {
  1177.         $params = array();
  1178.         $params['servicios'] = $this->em->getRepository(TipoServicio::class)->findAll();
  1179.         $params['bancos'] = $this->em->getRepository(InstitucionFinanciera::class)
  1180.                 ->createQueryBuilder('p')
  1181.                 ->orderBy('p.nombre')
  1182.                 ->getQuery()->getResult();
  1183.         $params['puntosImpresion'] = $this->em->getRepository(PuntoImpresion::class)
  1184.                 ->createQueryBuilder('p')
  1185.                 ->where('p.activo = true')
  1186.                 ->orderBy('p.nombre')
  1187.                 ->getQuery()->getResult();
  1188.         
  1189.         if ($solicitud)
  1190.         { 
  1191.             $params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$solicitud->getId()]);
  1192.         }
  1193.         
  1194.         $fecha = new \DateTime();
  1195.         
  1196.         $dia =$fecha->format('D');
  1197.         
  1198.         
  1199.         $fecha->add(new \DateInterval('P3D'));
  1200.        
  1201.         $params['fecha'] = $fecha->format('d-m-Y');
  1202.         return $params;
  1203.     }
  1204.     protected function setSolicitudAdjunto($file$field, &$solicitud)
  1205.     {
  1206.         $getFunction 'get'.ucfirst($field);
  1207.         $setFunction 'set'.ucfirst($field);
  1208.         if ($file)
  1209.         {
  1210.             $fileName $this->comunUpload($file'uploads''');
  1211.             if ($fileName)
  1212.             {
  1213.                 $adjunto $solicitud->$getFunction();
  1214.                 if ($adjunto)
  1215.                 {
  1216.                     if (file_exists($adjunto->getAccesoArchivo())){
  1217.                         unlink($adjunto->getAccesoArchivo());                        
  1218.                     }                                                           
  1219.                 }
  1220.                 else
  1221.                 {
  1222.                     $adjunto = new Adjunto();
  1223.                 }
  1224.                 //$file->getClientOriginalName()
  1225.                 $adjunto->setArchivo($solicitud->getSolicitanteIdentificacion().'_'.$field.'_'.$solicitud->getId().'.'.$file->getClientOriginalExtension());
  1226.                 $adjunto->setRuta('uploads');
  1227.                 $adjunto->setArchivoHash($fileName);
  1228.                 $adjunto->setSize(filesize('uploads/'.$fileName));
  1229.                 $contenido base64_encode(file_get_contents('uploads/'.$fileName));
  1230.                 $adjunto->setContenido($contenido);
  1231.                 $this->em->persist($adjunto);
  1232.                 $solicitud->$setFunction($adjunto);
  1233.                 if (file_exists($adjunto->getAccesoArchivo())){
  1234.                     unlink($adjunto->getAccesoArchivo()); 
  1235.                 }
  1236.             }
  1237.         }
  1238.         else
  1239.         {
  1240.             $adjunto $solicitud->$getFunction();
  1241.             if ($adjunto)
  1242.             {
  1243.                 if (file_exists($adjunto->getAccesoArchivo())){
  1244.                     unlink($adjunto->getAccesoArchivo());
  1245.                 }   
  1246.                 $this->em->remove($adjunto);
  1247.             }
  1248.             $solicitud->$setFunction(null);
  1249.         }
  1250.     }
  1251.     public function sendValidacionEmailAction()
  1252.     {
  1253.         $ret = array('ok'=>true);
  1254.         $email $this->request->get('email');
  1255.         try
  1256.         {
  1257.             
  1258.             $code random_int(10000,99999);
  1259.             
  1260.             $ret = array('ok'=>true,'code'=>$code);
  1261.             
  1262.             //$code=2543;
  1263.             
  1264.             $message = new Email();
  1265.             $message
  1266.                 ->from($this->getParameter('mailer_from'))
  1267.                 ->to($email['email'])
  1268.                 ->subject('Validación de correo electrónico')
  1269.                 ->embedFromPath('images/logo_plataforma.png''logo')
  1270. //                ->setContentType('text/html')
  1271.                 ->html($this->render('Solicitud/PlantillasCorreo/email_validacion.html.twig',
  1272.                     array('nombre' => $email['nombre'], 'codigo'=>$code))->getContent());
  1273.             $this->mailer->send($message);
  1274.            
  1275.           
  1276.             $this->session->set('email_code'$code);
  1277.         }
  1278.         catch (\Exception $exc)
  1279.         {
  1280.             $ret['ok'] = false;
  1281.             $ret['info'] = 'No fue posible enviar el correo electrónico, por favor intente más tarde. '.$exc->getMessage();
  1282.         }
  1283.         $data = new Response(json_encode($ret));
  1284.         $data->headers->set('Content-Type''application/json');
  1285.         return $data;
  1286.     }
  1287.     
  1288.     public function validacionCodigoAction()
  1289.     {
  1290.         $codigo $this->request->get('codigo');
  1291.         $emailCode $this->session->get('email_code');
  1292.         $ret = array('ok'=> $codigo==$emailCode );
  1293.         $data = new Response(json_encode($ret));
  1294.         $data->headers->set('Content-Type''application/json');
  1295.         return $data;
  1296.     }
  1297. /*    protected function allowActionExecution($accion, $id=null)
  1298.     {
  1299.         $allowed = array(
  1300.             'INDEX'=>array(
  1301.                 'superadmin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
  1302. //                'admin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
  1303.                 'operador' => array('solicitud_revisar','solicitud_enviar_anf'),
  1304.                 'asociado' => array('solicitud'),
  1305.             ),
  1306.             'CREATE'=>array(
  1307.             ),
  1308.             'UPDATE'=>array(
  1309.             ),
  1310.             'DELETE'=>array(
  1311.             ),
  1312.             'SHOW'=>array(
  1313.                 'superadmin' => array('solicitud','solicitud_revisar','solicitud_enviar_anf'),
  1314. //                'admin' => array('solicitud'),
  1315.                 'operador' => array('solicitud_revisar'),
  1316.             ),
  1317.         );
  1318.         if (isset($allowed[$accion][$this->rol]))
  1319.         {
  1320.             if (in_array($this->routeClassName, $allowed[$accion][$this->rol]))
  1321.             {
  1322.                 //verificar $entity
  1323.                 return true;
  1324.             }
  1325.         }
  1326.         return false;
  1327.     }
  1328. */
  1329.     protected function setFiltros()
  1330.     {
  1331.         if ($this->routeClassName=='facturar')
  1332.         {
  1333.             $this->filterData['estado'] = [Solicitud::ESTADO_APROBADASolicitud::ESTADO_CERRADA];
  1334.         }
  1335.         if ($this->routeClassName=='facturadas')
  1336.         {
  1337.             $this->filterData['estado'] = [Solicitud::ESTADO_APROBADASolicitud::ESTADO_CERRADA];
  1338.         }
  1339.         if ($this->routeClassName=='revisar')
  1340.         {
  1341.             $this->filterData['estado'] = [Solicitud::ESTADO_REGISTRADASolicitud::ESTADO_REVISION];
  1342.         }
  1343.         if ($this->routeClassName=='imprimir')
  1344.         {
  1345.             if (!isset($this->filterData['fechaServicioPlan']) || !$this->filterData['fechaServicioPlan'])
  1346.             {
  1347.                 $fecha = new \DateTime();
  1348.                 $this->filterData['fechaServicioPlan'] = $fecha->format('d-m-Y');
  1349.             }
  1350.             
  1351.             if ( (!isset($this->filterData['codigoAcceso']) || !$this->filterData['codigoAcceso']) && 
  1352.                  (!isset($this->filterData['solicitanteIdentificacion']) || !$this->filterData['solicitanteIdentificacion']) &&
  1353.                  (!isset($this->filterData['solicitanteNombre']) || !$this->filterData['solicitanteNombre']) &&
  1354.                  (!isset($this->filterData['beneficiarioIdentificacion']) || !$this->filterData['beneficiarioIdentificacion']) &&
  1355.                  (!isset($this->filterData['beneficiarioNombre']) || !$this->filterData['beneficiarioNombre'])
  1356.             )
  1357.             {
  1358.                  if (!isset($this->filterData['estado']) || !$this->filterData['estado'])
  1359.                  {
  1360.                     $this->filterData['estado'] = [Solicitud::ESTADO_APROBADA];
  1361.                  }
  1362.             }
  1363.             else
  1364.             {
  1365.                 unset($this->filterData['estado']);
  1366.                 
  1367.             }
  1368.         }
  1369.         if ($this->routeClassName == 'facturar' || $this->routeClassName == 'facturadas')
  1370.         {
  1371.             $this->ajustaFiltroFecha('fechaEnvioRevision'31);
  1372.             $this->ajustaFiltroFecha('fechaResultadoRevision'31);
  1373.         }
  1374.         if ($this->routeClassName == 'revisar')
  1375.         {
  1376.             $this->ajustaFiltroFecha('fechaEnvioRevision'31);
  1377.         }
  1378.         if ($this->rol == 'financiero')
  1379.         {
  1380.             $this->ajustaFiltroFecha('fechaEnvioRevision'31);
  1381.             $this->ajustaFiltroFecha('fechaResultadoRevision'31);
  1382.         }        
  1383.     }
  1384.     public function revisarSolicitudAction($rol$codigoAcceso 'none')
  1385.     {
  1386.         $this->setUtilProperties();
  1387.         $ret = array('ok'=>true);
  1388.         $user $this->getUser();
  1389.         if (!($user instanceof SeguridadUsuario))
  1390.         {
  1391.             return $this->redirect($this->generateUrl('app_login'));
  1392.         }
  1393.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1394.         if ($solicitud)
  1395.         {
  1396.             $ok=true;
  1397.             /*if ($solicitud->getUsuarioValida()){
  1398.                 if ($solicitud->getUsuarioValida()->getId() != $user->getId() && $rol != 'admin')
  1399.                 {          
  1400.                     $ok=false;
  1401.                 }
  1402.             }*/
  1403.             
  1404.             if(!$ok)
  1405.             {
  1406.                 $this->session->getFlashBag()
  1407.                     ->set('warning''La solicitud está asignada a otro usuario.');
  1408.             }
  1409.             else
  1410.             {
  1411.                 if ($solicitud->getEstado() == Solicitud::ESTADO_REGISTRADA or $solicitud->getEstado() == Solicitud::ESTADO_CERRADA or $solicitud->getEstado() == Solicitud::ESTADO_APROBADA)
  1412.                 {
  1413.                     if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA and $solicitud->getEstado() != Solicitud::ESTADO_APROBADA)
  1414.                         $solicitud->setEstado(Solicitud::ESTADO_REVISION);
  1415.                     
  1416.                     $solicitud->setUsuarioValida($this->getUser());
  1417.                     foreach ($solicitud->getHijas() as $hija)
  1418.                     {
  1419.                         $hija->setEstado($solicitud->getEstado());
  1420.                         $hija->setObservaciones($solicitud->getObservaciones());
  1421.                         $this->em->persist($hija);
  1422.                     }
  1423.                     $this->em->persist($solicitud);
  1424.                     $this->em->flush();
  1425.                     $solicitudHistoria = new SolicitudHistoria();
  1426.                     $solicitudHistoria->setSolicitud($solicitud);
  1427.                     $solicitudHistoria->setEstado($solicitud->getEstado());
  1428.                     $solicitudHistoria->setFecha(new \DateTime());
  1429.                     $solicitudHistoria->setIp($this->request->getClientIp());
  1430.                     $solicitudHistoria->setAccion('Comienza revisión');
  1431.                     $solicitudHistoria->setUsuario($user);
  1432.                     $this->em->persist($solicitudHistoria);
  1433.                     $this->em->flush();
  1434.                 }
  1435.                 if ($solicitud->getEstado() != Solicitud::ESTADO_REVISION and $solicitud->getEstado() != Solicitud::ESTADO_CERRADA and $solicitud->getEstado() != Solicitud::ESTADO_APROBADA)
  1436.                 {
  1437.                     $this->session->getFlashBag()
  1438.                         ->set('warning''El estado de la solicitud "'.$solicitud->getCodigoAcceso().'" es "'.$solicitud->getEstadoStr().'" y en ese estado no se puede someter a revisión.');
  1439.                 }
  1440.                 else
  1441.                 {
  1442.                     
  1443.                     $turno $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$solicitud->getId()]);
  1444.                     if($turno)
  1445.                         $turno=$turno[0];
  1446.                     $params = array( 'rol'=> $rol'entity'=>$solicitud'routeClassName'=>'revisar''revisar'=>true,'turno'=>$turno);
  1447.                     $params array_merge($params$this->getParamsForModification($solicitud));
  1448.                     return $this->render('Solicitud\\revisar.html.twig'$params);
  1449.                 }
  1450.             }
  1451.         }
  1452.         else
  1453.         {
  1454.             $this->session->getFlashBag()
  1455.                 ->set('warning''No se encontró una solicitud con el código "'.$codigoAcceso.'".');
  1456.         }
  1457.         return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol'routeClassName' => 'revisar') ));
  1458.     }
  1459.     public function modificarPagoSolicitudAction($codigoAcceso$rol)
  1460.     {
  1461.         $ret = array('ok'=>true);
  1462.         $user $this->getUser();
  1463.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1464.         if ($solicitud)
  1465.         {                                   
  1466.             $ok=true;
  1467.             /*if ($solicitud->getUsuarioValida()){
  1468.                 if($solicitud->getUsuarioValida()->getId() != $user->getId() && $rol != 'admin')
  1469.                 {          
  1470.                     $ok=false;
  1471.                 }
  1472.             }*/
  1473.             
  1474.             if(!$ok)
  1475.             {
  1476.                 $ret['ok'] = false;
  1477.                 $ret['info'] = 'La solicitud está asignada a otro usuario.';
  1478.             }
  1479.             else
  1480.             {
  1481.                 $data $this->request->get('solicitud');
  1482.                 $files $this->request->files;
  1483.                 $files $files->get('solicitud');
  1484.                 
  1485.                 $ret $this->compruebaPagoExistenteAction($data['banco'], $data['comprobante'], $solicitud->getId(), false);
  1486.                 if (!$ret['ok'])
  1487.                 {
  1488.                     $ret['info'] = 'El comprobante de pago ya está en uso en otra solicitud';
  1489.                 }
  1490.                 else
  1491.                 {
  1492.                     //INFORMACION PAGO
  1493.                     $fechaPago \DateTime::createFromFormat('d-m-Y'$data['fecha_pago']);
  1494.                     $fechaPago->setTime(0,0,0);
  1495.                     $banco $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco']);
  1496.                     $solicitud->setPagoBanco($banco);
  1497.                     $solicitud->setPagoComprobante($data['comprobante']);
  1498.                     $solicitud->setPagoValor($data['valor']);
  1499.                     $solicitud->setPagoFecha($fechaPago);
  1500.                     if (isset($files['comprobante_foto']) && $files['comprobante_foto'])
  1501.                     {
  1502.                         $this->setSolicitudAdjunto($files['comprobante_foto'], 'pagoComprobanteFoto'$solicitud);
  1503.                     }
  1504.                 }
  1505.                 
  1506.                 if ($data['valor2'])
  1507.                 {
  1508.                     if($solicitud->getPagoComprobante()!=$data['comprobante2']){
  1509.                         $ret $this->compruebaPagoExistenteAction($data['banco2'], $data['comprobante2'], $solicitud->getId(), false);
  1510.                         if (!$ret['ok'])
  1511.                         {
  1512.                             $ret['info'] = 'El comprobante del segundo pago ya está en uso en otra solicitud';
  1513.                         }
  1514.                         else
  1515.                         {
  1516.                             //INFORMACION PAGO
  1517.                             $fechaPago \DateTime::createFromFormat('d-m-Y'$data['fecha_pago2']);
  1518.                             $fechaPago->setTime(0,0,0);
  1519.                             $banco $this->em->getRepository(InstitucionFinanciera::class)->find($data['banco2']);
  1520.                             $solicitud->setPago2Banco($banco);
  1521.                             $solicitud->setPago2Comprobante($data['comprobante2']);
  1522.                             $solicitud->setPago2Valor($data['valor2']);
  1523.                             $solicitud->setPago2Fecha($fechaPago);
  1524.                             if (isset($files['comprobante_foto2']) && $files['comprobante_foto2'])
  1525.                             {
  1526.                                 $this->setSolicitudAdjunto($files['comprobante_foto2'], 'pago2ComprobanteFoto'$solicitud);
  1527.                             }
  1528.                         }
  1529.                     }else{
  1530.                         $ret['ok']=false;
  1531.                         $ret['info'] = 'El comprobante del segundo pago ya está registrado en el primer pago';                        
  1532.                     }
  1533.                     
  1534.                 }
  1535.                 
  1536.                 if ($ret['ok'])
  1537.                 {
  1538.                     $this->em->persist($solicitud);
  1539.                     $this->em->flush();    
  1540.                     
  1541.                    
  1542.                      
  1543.                     $res$this->intentaAprobarSolicitud($solicitud);
  1544.                     
  1545.                     if($res){
  1546.                         
  1547.                         $this->sendEmailEstado($solicitud);
  1548.                         $solicitudHistoria = new SolicitudHistoria();
  1549.                         $solicitudHistoria->setSolicitud($solicitud);
  1550.                         $solicitudHistoria->setEstado($solicitud->getEstado());
  1551.                         $solicitudHistoria->setFecha(new \DateTime());
  1552.                         $solicitudHistoria->setIp($this->request->getClientIp());
  1553.                         $solicitudHistoria->setAccion('Modificación del pago');
  1554.                         $solicitudHistoria->setUsuario($user);
  1555.                         $this->em->persist($solicitudHistoria);
  1556.                         $this->em->flush();
  1557.                     }else{
  1558.                         
  1559.                         $ret['ok']=false;                        
  1560.                         $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. ';
  1561.                     }
  1562.                 }
  1563.             }
  1564.         }
  1565.         else
  1566.         {
  1567.             $ret['ok'] = false;
  1568.             $ret['info'] = 'No se encontró una solicitud con el código "'.$codigoAcceso.'".';
  1569.         }
  1570.         
  1571.         $data = new Response(json_encode($ret));
  1572.         $data->headers->set('Content-Type''application/json');
  1573.         return $data;
  1574.     }
  1575.     
  1576.     public function generaPDFAction($solicitud)
  1577.     {
  1578.         $this->setInitialValues('financiero''solicitud');
  1579.         $solicitud $this->em->getRepository(Solicitud::class)->find($solicitud);
  1580.         
  1581.         $params$this->showCreateParamsForTwig($solicitud);
  1582.         $params['entity'] = $solicitud;
  1583.         $params['solicitud'] = $solicitud;
  1584.         $params['pdf'] = true;
  1585.         $html $this->render('Solicitud/showPDF.html.twig',$params)->getContent();
  1586. //        return $html;
  1587.         $options = new Options();
  1588.         $options->set('defaultFont''Roboto');
  1589.         $dompdf = new Dompdf($options);
  1590.         $data = array(
  1591.         'headline' => 'my headline'
  1592.         );
  1593.         $dompdf->loadHtml($html);
  1594.         $dompdf->setPaper('Letter''portrait');
  1595.         $dompdf->render();
  1596.         $dompdf->stream("testpdf.pdf", [
  1597.         "Attachment" => true
  1598.         ]);
  1599.         
  1600.         
  1601.         
  1602. /*        $pdfparam = [
  1603.                 'mode' => '',
  1604.                 'format' => 'letter',
  1605.                 'default_font_size' => 0,
  1606.                 'default_font' => '',
  1607.                 'margin_left' => 10,
  1608.                 'margin_right' => 10,
  1609.                 'margin_top' => 5,
  1610.                 'margin_bottom' => 5,
  1611.                 'margin_header' => 9,
  1612.                 'margin_footer' => 9,
  1613.                 'orientation' => 'P',
  1614.                 'setAutoBottomMargin' => 'stretch',
  1615.                 'setAutoTopMargin' => 'stretch',];
  1616.         $mpdf = new \Mpdf\Mpdf($pdfparam);
  1617.         $mpdf->SetAutoPageBreak(true, $mpdf->bMargin);
  1618.         $mpdf->SetHTMLHeader();
  1619.         $html = $this->renderView('App:Solicitud:solicitud_autorizacion.html.twig', array('solicitud'=>$solicitud, 'ip_address'=>$this->request->getClientIp()));
  1620.         $mpdf->WriteHTML($html);
  1621.         if ($solicitud->getTipoFirma()->getId()== TipoFirma::PERSONA_NATURAL)
  1622.         {
  1623.             $nombreArchivo = 'autorizacion_'.$solicitud->getIdentificacion().'.pdf';
  1624.         }
  1625.         else
  1626.         {
  1627.             $nombreArchivo = 'autorizacion_'.$solicitud->getRuc().'.pdf';
  1628.         }
  1629.         $mpdf->Output($nombreArchivo, 'D');*/
  1630.         die();
  1631.     }
  1632.     public function compruebaSolicitudExistenteAction($identificacionSolicitante/*$identificacionBeneficiario,*/ $servicio$id 'none'$ajax=true)
  1633.     {
  1634.         $data = array('ok'=>true'info'=>'');  //significa que no existe la solicitud
  1635.         /*try {
  1636.             $solicitud = $this->em->getRepository(Solicitud::class)
  1637.                     ->createQueryBuilder('s')
  1638.                     ->innerJoin('s.tipoServicio','servicio')
  1639.                     ->where('servicio.id = :SERVICIO')
  1640.                     ->andWhere('s.solicitanteIdentificacion = :IDENTIFICACION_SOLICITANTE')
  1641. //                    ->andWhere('s.beneficiarioIdentificacion = :IDENTIFICACION_BENEFICIARIO')
  1642.                     ->andWhere('s.estado <> :CERRADA')
  1643.                     ->setParameter('SERVICIO',$servicio)
  1644.                     ->setParameter('IDENTIFICACION_SOLICITANTE',$identificacionSolicitante)
  1645. //                    ->setParameter('IDENTIFICACION_BENEFICIARIO',$identificacionBeneficiario)
  1646.                     ->setParameter('CERRADA', Solicitud::ESTADO_CERRADA);
  1647.             if ($id != 'none')
  1648.             {
  1649.                 $solicitud->andWhere('s.id <> :ID')
  1650.                     ->setParameter('ID', $id);
  1651.             }
  1652.             $solicitud = $solicitud->getQuery()->getResult();
  1653.             if (!empty($solicitud))
  1654.             {
  1655.                 
  1656.                 $data['ok']=false;
  1657.                 $solicitud=$solicitud[0];
  1658.                 $data['codigoAcceso'] = $solicitud->getCodigoAcceso();
  1659.                 $data['info'] = "Existe una solicitud en proceso para ese beneficiario. Redireccionando a la solicitud.";
  1660.             }
  1661.         }
  1662.         catch (\Exception $e)
  1663.         {
  1664.             $data['ok'] = false;
  1665.             $data['info'] = "Error => ".$e->getMessage();
  1666.         }*/
  1667.       
  1668.         if (!$ajax)
  1669.         {
  1670.             return $data;
  1671.         }
  1672.         else
  1673.         {
  1674.             $data = new Response(json_encode($data));
  1675.             $data->headers->set('Content-Type''application/json');
  1676.             return $data;
  1677.         }
  1678.     }
  1679.     public function compruebaPagoExistenteAction($banco$comprobante$id 'none'$ajax=true)
  1680.     {
  1681.         $data = array('ok'=>true'info'=>'');  //significa que no existe el pago
  1682.         try {
  1683.             $solicitud $this->em->getRepository(Solicitud::class)
  1684.                 ->createQueryBuilder('s')
  1685.                 ->innerJoin('s.pagoBanco','banco')
  1686.                 ->where('banco.id = :BANCO')
  1687.                 ->andWhere('s.pagoComprobante = :COMPROBANTE')
  1688.                 ->setParameter('BANCO',$banco)
  1689.                 ->setParameter('COMPROBANTE',$comprobante);
  1690.             if ($id != 'none')
  1691.             {
  1692.                 $solicitud->andWhere('s.id <> :ID')
  1693.                     ->setParameter('ID'$id);
  1694.             }
  1695.             $solicitud $solicitud->getQuery()->getResult();
  1696.             $data['ok'] = empty($solicitud); 
  1697.             
  1698.             if ($data['ok'])
  1699.             {
  1700.                 $solicitud $this->em->getRepository(Solicitud::class)
  1701.                     ->createQueryBuilder('s')
  1702.                     ->innerJoin('s.pago2Banco','banco')
  1703.                     ->where('banco.id = :BANCO')
  1704.                     ->andWhere('s.pago2Comprobante = :COMPROBANTE')
  1705.                     ->setParameter('BANCO',$banco)
  1706.                     ->setParameter('COMPROBANTE',$comprobante);
  1707.                 if ($id != 'none')
  1708.                 {
  1709.                     $solicitud->andWhere('s.id <> :ID')
  1710.                         ->setParameter('ID'$id);
  1711.                 }
  1712.                 $solicitud $solicitud->getQuery()->getResult();
  1713.                 $data['ok'] = empty($solicitud); 
  1714.             }
  1715.         }
  1716.         catch (\Exception $e)
  1717.         {
  1718.             $data['ok'] = false;
  1719.             $data['info'] = "Error => ".$e->getMessage();
  1720.         }
  1721.         
  1722.         if (!$ajax)
  1723.         {
  1724.             return $data;
  1725.         }
  1726.         else
  1727.         {
  1728.             $data = new Response(json_encode($data));
  1729.             $data->headers->set('Content-Type''application/json');
  1730.             return $data;
  1731.         }
  1732.     }
  1733.     
  1734.     public function descargarAdjuntoAction($adjuntoId)
  1735.     {
  1736.         $this->setUtilProperties();
  1737.         $adjunto $this->em->getRepository(Adjunto::class)->find($adjuntoId);
  1738.         // Provide a name for your file with extension
  1739.         $fileName 'uploads/'.$adjunto->getId().$adjunto->getArchivo();
  1740.         $contenido base64_decode($adjunto->getContenido());
  1741.         $response = new Response($contenido);
  1742.         file_put_contents($fileName$contenido);
  1743.         $mimeTypeGuesser = new FileinfoMimeTypeGuesser();
  1744.         if($mimeTypeGuesser->isGuesserSupported())
  1745.         {
  1746.             $response->headers->set('Content-Type'$mimeTypeGuesser->guessMimeType($fileName));
  1747.         }
  1748.         else
  1749.         {
  1750.             $response->headers->set('Content-Type''text/plain');
  1751.         }
  1752.         unlink($fileName);
  1753.         
  1754.         $disposition $response->headers->makeDisposition(
  1755.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1756.             $adjunto->getArchivo()
  1757.         );
  1758.         // Set the content disposition
  1759.         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' )
  1760.             $response->headers->set('Content-Disposition'$disposition);
  1761.         else                                                 
  1762.             $response->headers->set('Content-Disposition: inline'$disposition);
  1763.         return $response;
  1764.         
  1765.     }
  1766.         
  1767.     protected function indexParamsForTwig()
  1768.     {
  1769.         $params parent::indexParamsForTwig();
  1770.         
  1771.         if ($this->rol=='operador')
  1772.         { 
  1773.             $params['collapsed'] = false;
  1774.         }
  1775.         $params['filtrosOk'] = $this->filtrosOk();
  1776.         return $params;
  1777.     }
  1778.     
  1779.     public function facturarSolicitudAction($codigoAcceso$rol)
  1780.     {
  1781.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1782.         if ($solicitud && ($solicitud->getEstado() == Solicitud::ESTADO_APROBADA || $solicitud->getEstado() == Solicitud::ESTADO_CERRADA) && !$solicitud->getFacturaId() )
  1783.         {
  1784.             $data $this->facturarSolicitud($solicitud);
  1785.         }
  1786.         else
  1787.         {
  1788.             $data = ['ok'=>false'info' => 'El estado de la solicitud no permite que se emita la factura'];
  1789.         }
  1790.         $data = new Response(json_encode($data));
  1791.         $data->headers->set('Content-Type''application/json');
  1792.         return $data;        
  1793.     }
  1794.     
  1795.     public function cambiarTurnoAction($codigoAcceso$rol)
  1796.     {
  1797.         $data = ['ok'=>true];
  1798.         
  1799.         $solicitud $this->em->getRepository(Solicitud::class)->findOneBy(array('codigoAcceso'=>$codigoAcceso));
  1800.         
  1801.         if ($solicitud && $solicitud->getEstado() == Solicitud::ESTADO_APROBADA)
  1802.         {
  1803.             $id $solicitud->getId();
  1804.             $cambioTurno $this->session->get('cambio_turno');
  1805.             if (!$cambioTurno)
  1806.             {
  1807.                 $cambioTurno = [];
  1808.             }
  1809.             $cambioTurno[$id]=$id;
  1810.             $this->session->set('cambio_turno'$cambioTurno);
  1811.             return $this->redirect($this->generateUrl('crud_plain_show', array('rol'=>$rol'routeClassName' => 'cambiarturno''id' => $id) ));
  1812.         }
  1813.         else
  1814.         {
  1815.             $this->session->getFlashBag()->set('error''El estado de la solicitud no permite realizar la operación');           
  1816.             return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol'routeClassName' => 'cambiarturno') ));
  1817.         }
  1818.     }
  1819.     
  1820.     protected function facturarSolicitud($solicitud)
  1821.     {
  1822.         $user $this->getUser();
  1823. //        $ret = ['ok'=>false, 'info'=>'INFO', 'id'=>'5', 'numeroSRI'=>'numeroSRI', 'claveAcceso'=>'claveAcceso'];
  1824.         $ret $this->emitirFacturaAPI($solicitud);
  1825.         if ($ret['ok']) {
  1826.             $solicitud->setFacturaId($ret['id']);
  1827.             $solicitud->setFacturaNumero($ret['numeroSRI']);
  1828.             $solicitud->setFacturaClaveAcceso($ret['claveAcceso']);
  1829.             
  1830.             $observaciones 'Id: '.$ret['id'].'    Factura: '.$ret['numeroSRI'].'    ClaveAcceso: '.$ret['claveAcceso'];
  1831.         }
  1832.         else
  1833.         {
  1834.             $observaciones $ret['info'];
  1835.         }
  1836.         $solicitudHistoria = new SolicitudHistoria();
  1837.         $solicitudHistoria->setSolicitud($solicitud);
  1838.         $solicitudHistoria->setEstado($solicitud->getEstado());
  1839.         $solicitudHistoria->setFecha(new \DateTime());
  1840.         $solicitudHistoria->setIp($this->request->getClientIp());
  1841.         $solicitudHistoria->setAccion('Facturacion');
  1842.         $solicitudHistoria->setObservaciones($observaciones);
  1843.         if (is_object($user))
  1844.         {
  1845.             $solicitudHistoria->setUsuario($user);
  1846.         }
  1847.         $this->em->persist($solicitudHistoria);
  1848.         $this->em->flush();
  1849.         
  1850.         return $ret;
  1851.     }
  1852.     
  1853.     function emitirFacturaAPI($solicitud
  1854.     {
  1855.         $data = array();
  1856.         $data['tipoIdentificacion'] = 1;
  1857.         $data['idCliente'] = $this->getParameter('id_cliente')*1;
  1858.         $data['identificacion'] = $solicitud->getSolicitanteIdentificacion();  
  1859.         $data['nombre'] = $solicitud->getSolicitanteNombre();
  1860.         $data['direccion'] = $solicitud->getSolicitanteDireccion();
  1861.         $data['email'] = 'brighittc@gmail.com'//$solicitud->getSolicitanteEmail();
  1862.         $data['telefono'] = $solicitud->getSolicitanteTelefono() ? $solicitud->getSolicitanteTelefono() : $solicitud->getSolicitanteMovil();
  1863.         if ($solicitud->getFacturaId())
  1864.         {
  1865.             $data['factura'] = $solicitud->getFacturaId();
  1866.         }
  1867.         
  1868.         $valor $solicitud->getPagoValorReal()*1;
  1869.         $subtotal = ($valor)/1.12;
  1870.         $data['subtotal'] = $subtotal;
  1871.         $data['porcentajeIVA'] = 12;
  1872.         $data['IVA'] = $subtotal*0.12;
  1873.         $data['total'] = $data['subtotal']+$data['IVA'];
  1874.         $data['servicios'] = array();
  1875.         if ($valor 0) {
  1876.             $data['servicios'][] = array(
  1877.                 'tipoVenta' => $solicitud->getTipoServicio()->getTipoVenta(),
  1878.                 'descripcion' => $solicitud->getTipoServicio()->__toString().' - '.$solicitud->getBeneficiarioNombre(),
  1879.                 'cantidad' => 1,
  1880.                 'porcentajeIVA' => 12,
  1881.                 'precioUnitario' => $subtotal,
  1882.                 'iva' => $subtotal*0.12,
  1883.                 'subtotal' => $subtotal,
  1884.                 'total' => $valor);
  1885.         }
  1886.         $data['pago'][] = array(
  1887.             'tipoPago' => 1,  // TODO: ver si es este
  1888.             'banco' => 92,  //poner el ID de Banco que corresponda
  1889.             'numeroComprobante' => $solicitud->getPagoComprobante(),
  1890.             'valor' => $solicitud->getPagoValorReal(),
  1891.             'fechaPago' => $solicitud->getPagoFecha()->format('Y-m-d')
  1892.         );      
  1893.         
  1894.         try {
  1895.             $res = ['ok' => true];
  1896.             // autenticar primero
  1897.             $url $this->getParameter('api_autenticacion');
  1898.             $curl curl_init($url);
  1899.             $auth_data = array(
  1900.                 'username' => $this->getParameter('api_factulisto_usr'),
  1901.                 'password' => $this->getParameter('api_factulisto_pwd')
  1902.             );
  1903.             $auth_data json_encode($auth_data);
  1904.             curl_setopt($curlCURLOPT_HTTPHEADER, array(
  1905.                     'accept: application/json',
  1906.                     'Content-Type: application/json',
  1907.                     'Content-Length: ' strlen($auth_data),
  1908.                     ));
  1909.             curl_setopt($curlCURLOPT_RETURNTRANSFER1);
  1910.             curl_setopt($curlCURLOPT_POST1);
  1911.             curl_setopt($curlCURLOPT_POSTFIELDS$auth_data);
  1912.             curl_setopt($curlCURLINFO_HEADER_OUT1);
  1913.             $result curl_exec($curl);
  1914.             $httpCode curl_getinfo($curlCURLINFO_HTTP_CODE);
  1915.             if(!$result || $httpCode != 200){
  1916.                 $res['ok']=false;
  1917.                 $res['info'] = 'Error emitiendo factura: fallo en autenticación.'.curl_error($curl). json_encode($result);
  1918.             }
  1919.             curl_close($curl);
  1920.             if (!$res['ok'])
  1921.             {
  1922.                 return($res);
  1923.             }
  1924.             
  1925.             $result json_decode($resulttrue);
  1926.             $token $result['token'];
  1927.             $data json_encode($data);
  1928.             
  1929.             $url $this->getParameter('api_facturacion');
  1930.             $curl curl_init($url);
  1931.             curl_setopt($curlCURLOPT_HTTPHEADER, array(
  1932.                     'accept: application/json',
  1933.                     'Content-Type: application/json',
  1934.                     'Authorization: Bearer ' $token,
  1935.                     'Content-Length: ' strlen($data),
  1936.                     ));
  1937.             curl_setopt($curlCURLOPT_POST1);
  1938.             curl_setopt($curlCURLOPT_POSTFIELDS$data);
  1939.             curl_setopt($curlCURLOPT_RETURNTRANSFER1);
  1940.             $result curl_exec($curl);
  1941.             $httpCode curl_getinfo($curlCURLINFO_HTTP_CODE);
  1942.             
  1943.             $res json_decode($resulttrue);
  1944.              
  1945.             if(!$result || $httpCode != 200){
  1946.                
  1947.                 $res['ok']=false;
  1948.                 $res['info'] = 'Error emitiendo factura.'.curl_error($curl). json_encode($result).'DATOS ENVIADOS'.json_encode($data);
  1949.             }
  1950.             curl_close($curl);
  1951.             
  1952.             if (!$res['ok'])
  1953.             {
  1954.                return($res);
  1955.             }
  1956.             $res json_decode($resulttrue);
  1957.             $res['ok'] = true;
  1958.         }
  1959.         catch (\Exception $e)
  1960.         {
  1961.             $res['ok']=false;
  1962.             $res['info'] = 'Error emitiendo factura: '.$e->getMessage();
  1963.         }
  1964.         return $res;
  1965.     }    
  1966.     
  1967.     protected function indexGetFields()
  1968.     {
  1969.         $fields parent::indexGetFields();
  1970.         
  1971.         unset($fields['solicitanteCodigoDactilar']);       
  1972.         unset($fields['solicitanteTelefono']);       
  1973.         unset($fields['solicitanteFoto']);       
  1974.         unset($fields['solicitanteMovil']);       
  1975.         unset($fields['solicitanteEmail']);       
  1976.         unset($fields['solicitanteDirección']);       
  1977.         unset($fields['solicitanteFechaExpedicionCodigoDactilar']);       
  1978.         unset($fields['solicitanteDireccion']);  
  1979.         
  1980.         unset($fields['beneficiarioCodigoDactilar']);       
  1981.         unset($fields['beneficiarioTelefono']);       
  1982.         unset($fields['beneficiarioFoto']);       
  1983.         unset($fields['beneficiarioMovil']);       
  1984.         unset($fields['beneficiarioEmail']);       
  1985.         unset($fields['beneficiarioDirección']);       
  1986.         unset($fields['beneficiarioFechaExpedicionCodigoDactilar']);       
  1987.         unset($fields['beneficiarioDireccion']);
  1988.         unset($fields['solicitudPadre']);
  1989.         unset($fields['pago2Valor']);
  1990.         unset($fields['pago2ComprobanteFoto']);
  1991.         
  1992.         unset($fields['emailEnviado']);
  1993.         //unset($fields['pagoFecha']);
  1994.         //unset($fields['pagoComprobante']);
  1995.         unset($fields['pagoComprobanteFoto']);
  1996.         unset($fields['pagoValor']);
  1997.         unset($fields['pagoBanco']);
  1998.         unset($fields['facturaId']);
  1999.         //unset($fields['fechaServicioPlan']);
  2000.         unset($fields['fechaEnvioRevision']);
  2001.         unset($fields['fechaResultadoRevision']);
  2002.         
  2003.         switch ($this->routeClassName)
  2004.         {
  2005.             case 'revisar':
  2006.                 unset($fields['codigoAcceso']);
  2007.                 unset($fields['usuarioPrestaServicio']);
  2008.                 unset($fields['fechaResultadoRevision']);
  2009.                 unset($fields['fechaServicioPrestado']);
  2010.                 unset($fields['puntoImpresion']);
  2011.                 unset($fields['facturaNumero']);
  2012.                 unset($fields['facturaClaveAcceso']);
  2013.                 break;
  2014.             case 'facturar':
  2015.                 unset($fields['codigoAcceso']);
  2016.                 unset($fields['fechaRegistro']);
  2017.                 unset($fields['usuarioPrestaServicio']);
  2018.                 unset($fields['fechaServicioPrestado']);
  2019.                 unset($fields['fechaEnvioRevision']);
  2020.                 unset($fields['puntoImpresion']);
  2021. //                unset($fields['observaciones']);
  2022.                 unset($fields['facturaNumero']);
  2023.                 unset($fields['facturaClaveAcceso']);
  2024.                 break;
  2025.             case 'facturadas':
  2026.                 unset($fields['codigoAcceso']);
  2027.                 unset($fields['fechaRegistro']);
  2028.                 unset($fields['usuarioPrestaServicio']);
  2029.                 unset($fields['fechaServicioPrestado']);
  2030.                 unset($fields['fechaEnvioRevision']);
  2031.                 unset($fields['puntoImpresion']);
  2032.                 //unset($fields['observaciones']);
  2033.                 unset($fields['facturaClaveAcceso']);
  2034.                 break;
  2035.             case 'imprimir':
  2036.             case 'cambiarturno':
  2037.                 unset($fields['fechaRegistro']);
  2038.                 unset($fields['fechaEnvioRevision']);
  2039.                 unset($fields['fechaResultadoRevision']);
  2040.                 unset($fields['usuarioPrestaServicio']);
  2041.                 unset($fields['fechaServicioPrestado']);
  2042.                 unset($fields['usuarioValida']);
  2043.                 unset($fields['observaciones']);
  2044.                 unset($fields['facturaNumero']);
  2045.                 unset($fields['facturaClaveAcceso']);
  2046.                 unset($fields['tipo']);
  2047.                 unset($fields['pago2Banco']);
  2048.                 unset($fields['pago2Comprobante']);
  2049.                 unset($fields['pago2Fecha']);
  2050.                 unset($fields['pagoValorReal']);
  2051.                 unset($fields['costoServicio']);
  2052.                 unset($fields['pagoComprobante']);
  2053.                 unset($fields['pagoFecha']);
  2054.                 break;
  2055.         }
  2056.         
  2057.         $fields['estado']['nombre'] = 'estadoStr';
  2058.         $orden = array('nombre'=>'id',
  2059.                 'type'=>'string',
  2060.                 'label'=>'ORDEN');
  2061.         array_unshift($fields$orden);
  2062.         return $fields;
  2063.     }
  2064.     
  2065.     protected function showCreateParamsForTwig($entity)
  2066.     {
  2067.         $params parent::showCreateParamsForTwig($entity);
  2068.         $params['servicios'] = $this->em->getRepository(TipoServicio::class)->findAll();
  2069.         $params['bancos'] = $this->em->getRepository(InstitucionFinanciera::class)
  2070.                 ->createQueryBuilder('p')
  2071.                 ->orderBy('p.nombre')
  2072.                 ->getQuery()->getResult();
  2073.         $params['hijas'] = $this->em->getRepository(Solicitud::class)->findBy(['solicitudPadre'=>$entity->getId()]);
  2074.         $params['turno']=null;
  2075.         $turno $this->em->getRepository(PuntoImpresionTurno::class)->findBy(['solicitud'=>$entity->getId()]);
  2076.         if($turno)
  2077.             $params['turno']=$turno[0];
  2078.         return $params;
  2079.     }
  2080. /*    
  2081.     public function cargaArchivoPagosAction($rol, $backRouteClassName)
  2082.     {
  2083.         $file = $this->request->files;
  2084.         $file = $file->get('file_pagos');
  2085.         $user = $this->getUser();  
  2086.         $pagos = [];
  2087.         $fileName = $this->comunUpload($file, 'uploads', '');
  2088.         if ($fileName)
  2089.         {
  2090.             $fileName = $this->fixFile($fileName);
  2091.             $f = fopen('uploads/'.$fileName, 'r');
  2092.             while (($data = fgetcsv($f, 1000, ",")) !== FALSE)
  2093.             { 
  2094.                 $documento= str_pad($data[4], 10, "0", STR_PAD_LEFT);
  2095.                 if ($data[3]=='C')
  2096.                 {
  2097.                     
  2098.                     $fecha= explode('/', $data[0]);
  2099.                     $stringFecha=$fecha[2].'-'.$fecha[1].'-'.$fecha[0];
  2100.                     $pagos[$documento.''] = ['fecha'=>$stringFecha, 'valor'=> $data[6]*1, 'banco' => $data[5], 'concepto' => $data[2]]; 
  2101.                 }
  2102.             }
  2103.             fclose($f);
  2104.             unlink('uploads/'.$fileName);
  2105.             
  2106.             $this->setInitialValues($rol, 'revisar');
  2107.             $paramsForFunctionInEntity = $this->comunParamsForFunctionsInEntity();
  2108.             $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  2109.             $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  2110.             $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  2111.             $entities = $this->indexLoadEntities($paramsForFunctionInEntity);
  2112.             
  2113.             foreach ($entities as $entity)
  2114.             {
  2115.                 $key = $entity->getPagoComprobante().'';
  2116.                 if (isset($pagos[$key]))
  2117.                 {
  2118.                     if ($entity->getPagoFecha()->format('d-m-Y')==$pagos[$key]['fecha'] ||
  2119.                         $entity->getPagoFecha()->format('d-m-y')==$pagos[$key]['fecha'] ||
  2120.                         $entity->getPagoFecha()->format('d/m/Y')==$pagos[$key]['fecha'] ||
  2121.                         $entity->getPagoFecha()->format('d/m/y')==$pagos[$key]['fecha'] ||
  2122.                         $entity->getPagoFecha()->format('Y-m-d')==$pagos[$key]['fecha'] 
  2123.                        )
  2124.                     {
  2125.                         if ($pagos[$key]['valor']*1>=$entity->getPagoValor()*1)
  2126.                         {
  2127.                             $observaciones = '';
  2128.                             $entity->setEstado(Solicitud::ESTADO_APROBADA);
  2129.                             $entity->setUsuarioValida($this->getUser());
  2130.                             $entity->setFechaResultadoRevision(new \DateTime());
  2131.                             $entity->setPagoValorReal($pagos[$key]['valor']*1);
  2132.                             $pagos[$key]['solicitud'] = $entity;
  2133.                         }
  2134.                         else
  2135.                         {
  2136.                             $observaciones = 'No coincide el monto del pago realizado';
  2137.                         }
  2138.                     }
  2139.                     else
  2140.                     {
  2141.                         $observaciones = 'No coincide la fecha de pago registrada en la solicitud';
  2142.                     }
  2143.                 }
  2144.                 else
  2145.                 { 
  2146.                     $observaciones = 'No se encontró el número de comprobante';
  2147.                 }
  2148.                 
  2149.                 $entity->setObservaciones($observaciones);
  2150.                 foreach ($entity->getHijas() as $hija)
  2151.                 {
  2152.                     $hija->setEstado($entity->getEstado());
  2153.                     $hija->setObservaciones($entity->getObservaciones());
  2154.                     $this->em->persist($hija);
  2155.                 }
  2156.                             
  2157.                 $this->em->persist($entity);
  2158.                 $this->em->flush();
  2159.                 
  2160.                 if ($entity->getEstado()==Solicitud::ESTADO_APROBADA)
  2161.                 {
  2162.                     $this->sendEmailEstado($entity);
  2163.                 }
  2164.                 
  2165.                 $solicitudHistoria = new SolicitudHistoria();
  2166.                 $solicitudHistoria->setSolicitud($entity);
  2167.                 $solicitudHistoria->setEstado($entity->getEstado());
  2168.                 $solicitudHistoria->setFecha(new \DateTime());
  2169.                 $solicitudHistoria->setIp($this->request->getClientIp());
  2170.                 $solicitudHistoria->setAccion('Revisión automática');
  2171.                 $solicitudHistoria->setObservaciones($observaciones);
  2172.                 if (is_object($user))
  2173.                 {
  2174.                     $solicitudHistoria->setUsuario($user);
  2175.                 }
  2176.                 $this->em->persist($solicitudHistoria);
  2177.                 $this->em->flush();
  2178.             }
  2179.             
  2180.             foreach ($pagos as $key=>$pago)
  2181.             {
  2182.                 $pagoEnBD = $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$key, 'fecha'=>$pago['fecha']]);
  2183.                 if (!$pagoEnBD)
  2184.                 {
  2185.                     $pagoEnBD = new Pago();
  2186.                     $pagoEnBD->setBanco($pago['banco']);
  2187.                     $pagoEnBD->setConcepto($pago['concepto']);
  2188.                     $pagoEnBD->setComprobante($key);                   
  2189.                     $pagoEnBD->setFecha($pago['fecha']);                   
  2190.                     $pagoEnBD->setValor($pago['valor']);
  2191.                 }else{
  2192.                     $pagoEnBD->setConcepto($pago['concepto'].'');
  2193.                 }
  2194.                 if(isset($pago['solicitud']))
  2195.                 {
  2196.                     if($pagoEnBD->getSolicitud()){
  2197.                         if($pagoEnBD->getSolicitud()->getId()!=$pago['solicitud']->getId()){
  2198.                             $pago['solicitud']->setEstado(Solicitud::ESTADO_REVISION);
  2199.                             $pago['solicitud']->setObservaciones('Pago utilizado en otra solicitud');
  2200.                         }                        
  2201.                     }else{
  2202.                         $pagoEnBD->setSolicitud($pago['solicitud']);
  2203.                     }
  2204.                 }
  2205.                 $this->em->persist($pagoEnBD);
  2206.             }
  2207.             $this->em->flush();
  2208.         }
  2209.         
  2210.         return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol, 'routeClassName' => $backRouteClassName) ));
  2211.     }
  2212. */    
  2213.     public function cargaArchivoPagosAction($rol$backRouteClassName)
  2214.     {
  2215.         $file $this->request->files;
  2216.         $file $file->get('file_pagos');
  2217.         $user $this->getUser();  
  2218.         $pagos = [];
  2219.         $fileName $this->comunUpload($file'uploads''');
  2220.         if ($fileName)
  2221.         {
  2222.             try
  2223.             {
  2224.                 
  2225.                 $this->logger->error('************sube archivo'); 
  2226.                  
  2227.                 
  2228.                 $fileName $this->fixFile($fileName);
  2229.                 $f fopen('uploads/'.$fileName'r');
  2230.                 while (($data fgetcsv($f1000",")) !== FALSE)
  2231.                 { 
  2232.                     $documentostr_pad($data[4], 10"0"STR_PAD_LEFT);
  2233.                     
  2234.                     $this->logger->error('************Crédito: '$data[3]); 
  2235.                     
  2236.                     if (trim($data[1])=='Crédito' or trim($data[1])=='C')
  2237.                     {
  2238.                         $data[0] = str_replace(' ''-'$data[0]);
  2239.                         
  2240.                         $this->logger->error('************fecha: '$data[0]); 
  2241.                         
  2242.                         $fechaexplode('-'$data[0]);
  2243.                         
  2244.                         switch ($fecha[1]) {
  2245.                             case 'ENE':
  2246.                                     $fecha[1]='01';
  2247.                                 break;
  2248.                             case 'FEB':
  2249.                                     $fecha[1]='02';
  2250.                                 break;
  2251.                             case 'MAR':
  2252.                                     $fecha[1]='03';
  2253.                                 break;
  2254.                             case 'ABR':
  2255.                                     $fecha[1]='04';
  2256.                                 break;
  2257.                             case 'MAY':
  2258.                                     $fecha[1]='05';
  2259.                                 break;
  2260.                             case 'JUN':
  2261.                                     $fecha[1]='06';
  2262.                                 break;
  2263.                             case 'JUL':
  2264.                                     $fecha[1]='07';
  2265.                                 break;
  2266.                             case 'AGO':
  2267.                                     $fecha[1]='08';
  2268.                                 break;
  2269.                             case 'SEP':
  2270.                                     $fecha[1]='09';
  2271.                                 break;
  2272.                             case 'OCT':
  2273.                                     $fecha[1]='10';
  2274.                                 break;
  2275.                             case 'NOV':
  2276.                                     $fecha[1]='11';
  2277.                                 break;
  2278.                             case 'DIC':
  2279.                                     $fecha[1]='12';
  2280.                                 break;
  2281.                             
  2282.                         }
  2283.                         
  2284.                         if( strlen($fecha[0])==4)
  2285.                             $stringFecha=$fecha[0].'-'.$fecha[1].'-'.$fecha[2];
  2286.                         else
  2287.                             $stringFecha=$fecha[2].'-'.$fecha[1].'-'.$fecha[0];
  2288.                         
  2289.                         
  2290.                         $this->logger->error('************String fecha: '$stringFecha); 
  2291.                          
  2292.                         $fecha\DateTime::createFromFormat('Y-m-d'$stringFecha);
  2293.                         $fecha->setTime(0,0,0);
  2294.                             
  2295.                         $pagoEnBD $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$documento'fecha'=>new \DateTime($stringFecha)]);
  2296.                         
  2297.                                                         
  2298.                         if (!$pagoEnBD)
  2299.                         {
  2300.                             $this->logger->error('************NO EXISTE PAGO'); 
  2301.                                                     
  2302.                             
  2303.                             $pagoEnBD = new Pago();
  2304.                             $pagoEnBD->setBanco($data[2]);
  2305.                             $pagoEnBD->setConcepto($data[3]);
  2306.                             $pagoEnBD->setComprobante($documento);                   
  2307.                             $pagoEnBD->setFecha($fecha);                   
  2308.                             $pagoEnBD->setValor($data[6]);
  2309.                         }else{
  2310.                             
  2311.                             $this->logger->error('************SI EXISTE PAGO'); 
  2312.                             $pagoEnBD->setFecha($fecha);                   
  2313.                             $pagoEnBD->setValor($data[6]);
  2314.                             $pagoEnBD->setConcepto($data[3]);
  2315.                         }
  2316.                         $this->em->persist($pagoEnBD);
  2317.                         
  2318.                         $this->logger->error('************GUARDA PAGO'.$pagoEnBD->getId()); 
  2319.                         
  2320.                         $pagos[] = $pagoEnBD;
  2321.                     }
  2322.                 }
  2323.                 
  2324.                 fclose($f);
  2325.                 unlink('uploads/'.$fileName);
  2326.                 $this->em->flush();  //pagos grabados a la BD;
  2327.                 
  2328.                 $this->logger->error('************GRABA PAGOS'); 
  2329.                 
  2330.                 //Cargar solicitudes en revisión o esperando revisión
  2331.                 $this->setInitialValues($rol'revisar');
  2332.                 $paramsForFunctionInEntity $this->comunParamsForFunctionsInEntity();
  2333.                 $paramsForFunctionInEntity['showIdInForm'] = $this->showIdInForm;
  2334.                 $this->indexPrepareFilterForm($paramsForFunctionInEntity);
  2335.                 $paramsForFunctionInEntity['filterForm']= $this->formularioFiltro;
  2336.                 $entities $this->indexLoadEntities($paramsForFunctionInEntity);
  2337.                 foreach ($entities as $entity)
  2338.                 {
  2339.                     $this->intentaAprobarSolicitud($entity);
  2340.                 }                
  2341.             }
  2342.             catch (\Exception $e)
  2343.             {
  2344.                 
  2345.                 $this->logger->error('************ ERROR ****** '.$e); 
  2346.                 
  2347.                 foreach ($pagos as $pago)
  2348.                 {
  2349.                     $this->em->detach($pago);
  2350.                 }
  2351.             }
  2352.         }
  2353.         
  2354.         return $this->redirect($this->generateUrl('crud_index', array('rol'=>$rol'routeClassName' => $backRouteClassName) ));
  2355.     }
  2356.     
  2357.     protected function fixFile($fileName)
  2358.     {
  2359.         $f fopen('uploads/'.$fileName'r');
  2360.         $f1 fopen('uploads/fixed'.$fileName'w');
  2361.         while (!feof($f))
  2362.         { 
  2363.             $data fgets($f);
  2364.             $data str_replace("\""''$data); 
  2365.             $data str_replace(';',','$data); 
  2366.             fwrite($f1,$data);
  2367.         }
  2368.         fclose($f);
  2369.         fclose($f1);
  2370.         unlink('uploads/'.$fileName);
  2371.         return 'fixed'.$fileName;
  2372.     }
  2373.     
  2374.     protected function intentaAprobarSolicitud($solicitud$aprobada=false)
  2375.     {
  2376.         
  2377.         $this->logger->error('************ENTRA APROBAR'); 
  2378.         
  2379.         
  2380.         $totalxPagar=$solicitud->getCostoServicio()*$solicitud->getCantidadPaga();
  2381.          
  2382.         $aprobadoPago1 false;
  2383.         $aprobadoPago2 = !$solicitud->getPago2Valor();
  2384.         $pagado 0;
  2385.         $pago1 $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$solicitud->getPagoComprobante()]);  
  2386.         $pago2 null;
  2387.         $observaciones='';
  2388.         if ($solicitud->getPago2Valor())
  2389.         {
  2390.             $pago2 $this->em->getRepository(Pago::class)->findOneBy(['comprobante'=>$solicitud->getPago2Comprobante()]);  
  2391.         }
  2392.         if ($pago1)
  2393.         {
  2394.             if(!$pago1->getSolicitud()){
  2395.                 
  2396.                 $this->logger->error('************PAGO LIBRE'); 
  2397.                 
  2398.                 
  2399.                 $pagoFecha $pago1->getFecha()->format('Y-m-d');
  2400.                 
  2401.                 $this->logger->error('************PAGO 1 fecha'$solicitud->getPagoFecha()->format('Y-m-d'));  
  2402.                 $this->logger->error('************PAGO Real fecha'$pagoFecha);  
  2403.                 
  2404.                 if ($solicitud->getPagoFecha()->format('Y-m-d')==$pagoFecha)
  2405.                 {
  2406.                     $this->logger->error('************PAGO VALOR:'$pago1->getValor()); 
  2407.                     $this->logger->error('************PAGO SOLICITUD:'$solicitud->getPagoValor()); 
  2408.                                                               
  2409.                     $solicitud->setPagoValor($pago1->getValor());     
  2410.                     $aprobadoPago1 true;
  2411.                     
  2412.                    
  2413.                 }
  2414.                 else
  2415.                 {
  2416.                     $this->logger->error('************No coincide la fecha de pago registrada en la solicitud');      
  2417.                     $observaciones 'No coincide la fecha de pago registrada en la solicitud';
  2418.                 }
  2419.             }else{
  2420.                 if($pago1->getSolicitud()->getId()==$solicitud->getId()){
  2421.                     $aprobadoPago1 true;      
  2422.                 }else{
  2423.                     $observaciones $observaciones' Pago asignado a otra solicitud'
  2424.                 }
  2425.             }
  2426.         }
  2427.             
  2428.         if ($pago2)
  2429.         {
  2430.             if(!$pago2->getSolicitud()){
  2431.               
  2432.                 $pagoFecha $pago2->getFecha()->format('Y-m-d');
  2433.                 
  2434.                 $this->logger->error('************PAGO 2 fecha'$solicitud->getPago2Fecha()->format('Y-m-d'));  
  2435.                 $this->logger->error('************PAGO Real fecha'$pagoFecha);  
  2436.                 
  2437.                 if ($solicitud->getPago2Fecha()->format('Y-m-d')==$pagoFecha)
  2438.                 {
  2439.                    
  2440.                     $this->logger->error('************PAGO VALOR:'$pago2->getValor()); 
  2441.                     $this->logger->error('************PAGO SOLICITUD:'$solicitud->getPago2Valor());                     
  2442.                     $aprobadoPago2 true;                    
  2443.                     $solicitud->setPago2Valor($pago2->getValor());                                 
  2444.                    
  2445.                 }
  2446.                 else
  2447.                 {
  2448.                     $observaciones $observaciones' No coincide la fecha del segundo pago registrado en la solicitud';
  2449.                 }
  2450.             }else{
  2451.                 if($pago2->getSolicitud()->getId()==$solicitud->getId()){
  2452.                     $aprobadoPago2 true;      
  2453.                 }else{
  2454.                     $observaciones $observaciones' Pago asignado a otra solicitud'
  2455.                 }
  2456.             }
  2457.         }
  2458.         
  2459.         if ($aprobadoPago1 && $aprobadoPago2)
  2460.         {
  2461.             
  2462.             $this->logger->error('************CAMBIA ESTADO APROBADO'$solicitud->getId());      
  2463.             
  2464.             $valorReal=0;
  2465.             
  2466.             $valorReal=$pago1->getValor();
  2467.             
  2468.             $pago1->setSolicitud($solicitud);
  2469.             if ($pago2)
  2470.             {
  2471.                 $valorReal=$valorReal+$pago2->getValor();
  2472.                 $pago2->setSolicitud($solicitud);
  2473.             }
  2474.             $solicitud->setPagoValorReal($valorReal);
  2475.              
  2476.             $solicitud->setObservaciones($observaciones);
  2477.             $this->em->persist($solicitud);
  2478.             
  2479.                        
  2480.             $totalxPagarnumber_format($totalxPagar,2);
  2481.             $valorRealnumber_format($valorReal,2);
  2482.             
  2483.             if(($totalxPagar*1)<=($valorReal*1)){ 
  2484.                                                
  2485.                 
  2486.                
  2487.                 
  2488.                 
  2489.                 if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
  2490.                     $solicitud->setEstado(Solicitud::ESTADO_APROBADA);
  2491.                 
  2492.                 $solicitud->setFechaResultadoRevision(new \DateTime());
  2493.                 foreach ($solicitud->getHijas() as $hija)
  2494.                 {
  2495.                                         
  2496.                     $hija->setEstado($solicitud->getEstado());
  2497.                     $hija->setObservaciones($solicitud->getObservaciones());
  2498.                     $this->em->persist($hija);
  2499.                 }
  2500.             
  2501.             
  2502.                 $this->em->flush();
  2503.                 $this->sendEmailEstado($solicitud);
  2504.                 if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA){
  2505.                     $solicitudHistoria = new SolicitudHistoria();
  2506.                     $solicitudHistoria->setSolicitud($solicitud);
  2507.                     $solicitudHistoria->setEstado($solicitud->getEstado());
  2508.                     $solicitudHistoria->setFecha(new \DateTime());
  2509.                     $solicitudHistoria->setIp($this->request->getClientIp());
  2510.                     $solicitudHistoria->setAccion('Revisión automática');
  2511.                     $solicitudHistoria->setObservaciones($observaciones);
  2512.                     if (is_object($this->getUser()))
  2513.                     {
  2514.                         $solicitudHistoria->setUsuario($this->getUser());
  2515.                     }
  2516.                     $this->em->persist($solicitudHistoria);                
  2517.                 }
  2518.                 
  2519.                 $this->em->flush();
  2520.                 
  2521.                 return true;
  2522.                 
  2523.             }
  2524.             
  2525.         }else{
  2526.             
  2527.             if($solicitud->getEstado() != Solicitud::ESTADO_CERRADA)
  2528.                     $solicitud->setEstado(Solicitud::ESTADO_REVISION);
  2529.             
  2530.             $solicitud->setObservaciones($observaciones);
  2531.             $this->em->persist($solicitud);
  2532.             
  2533.         }
  2534.         return false;
  2535.     }
  2536.     
  2537.     protected function indexLoadEntities($params)
  2538.     {
  2539.         if ($this->filtrosOk())
  2540.         {
  2541.             return parent::indexLoadEntities($params);
  2542.         }
  2543.         else
  2544.         {
  2545.             return [];
  2546.         }
  2547.     }
  2548.     
  2549.     protected function filtrosOk()
  2550.     {
  2551.         if ($this->routeClassName=='revisar')
  2552.         {
  2553.             return true;
  2554.         }
  2555.         
  2556.         if ($this->routeClassName=='imprimir')
  2557.         {
  2558.             if (!isset($this->filterData['solicitanteIdentificacion']) &&
  2559.             !isset($this->filterData['beneficiarioIdentificacion']) &&     
  2560.             !isset($this->filterData['fechaServicioPlan'])        
  2561.             )
  2562.             {
  2563.                 $this->session->getFlashBag()
  2564.                     ->set('info''Debe filtar al menos por la identificación del tramitante o por las fechas');
  2565.                 return false;
  2566.             }else{
  2567.                 return true;                
  2568.             } 
  2569.         
  2570.             
  2571.         }
  2572.         
  2573.         if ($this->routeClassName=='cambiarturno')
  2574.         {
  2575.             if ( !isset($this->filterData['codigoAcceso']) )
  2576.             {
  2577.                 $this->session->getFlashBag()
  2578.                     ->set('info''Debe filtar al menos por el código de acceso, la identificación del tramitante o la del beneficiario');
  2579.                 return false;
  2580.             }else{
  2581.                 return true;                
  2582.             } 
  2583.         }
  2584.         
  2585.         if (!isset($this->filterData['solicitanteIdentificacion']) &&
  2586.             !isset($this->filterData['beneficiarioIdentificacion']) &&
  2587.             !isset($this->filterData['pagoComprobante']) &&
  2588.             !isset($this->filterData['pago2Comprobante']) &&
  2589.             !isset($this->filterData['fechaEnvioRevision_WWdesdeWW']) &&
  2590.             !isset($this->filterData['fechaEnvioRevision_WWhastaWW']) &&
  2591.             !isset($this->filterData['fechaResultadoRevision_WWdesdeWW']) &&
  2592.             !isset($this->filterData['fechaResultadoRevision_WWhastaWW']) &&
  2593.             !isset($this->filterData['fechaServicioPlan_WWdesdeWW']) &&
  2594.             !isset($this->filterData['fechaServicioPlan_WWhastaWW']) &&
  2595.             !isset($this->filterData['fechaServicioPrestado_WWdesdeWW']) &&
  2596.             !isset($this->filterData['fechaServicioPrestado_WWhastaWW'])
  2597.             )
  2598.         {
  2599.             $this->session->getFlashBag()
  2600.                 ->set('info''Debe filtar al menos por la identificación del tramitante o por las fechas');
  2601.             return false;
  2602.         }  
  2603.         
  2604.         if ($this->routeClassName!='imprimir')
  2605.         {
  2606.             return true;
  2607.         }
  2608.                              
  2609.        
  2610.         return ($this->routeClassName!='imprimir') ||
  2611.                (isset($this->filterData['codigoAcceso']) && $this->filterData['codigoAcceso']) ||
  2612.                (isset($this->filterData['solicitanteIdentificacion']) && $this->filterData['solicitanteIdentificacion']) ||
  2613.                (isset($this->filterData['solicitanteNombre']) && $this->filterData['solicitanteNombre']) ||
  2614.                (isset($this->filterData['beneficiarioIdentificacion']) && $this->filterData['beneficiarioIdentificacion']) ||
  2615.                (isset($this->filterData['beneficiarioNombre']) && $this->filterData['beneficiarioNombre'])||
  2616.                (isset($this->filterData['fechaServicioPlan_WWdesdeWW']));
  2617.     }
  2618.     
  2619.     protected function getFormFilter()
  2620.     {
  2621.         $this->dateFields = ['fechaEnvioRevision''fechaResultadoRevision'
  2622.                              'fechaServicioPlan''fechaServicioPrestado','pagoFecha'];
  2623.         $formulario parent::getFormFilter();
  2624.         unset($formulario['solicitanteCodigoDactilar']);
  2625.         unset($formulario['solicitanteEmail']);
  2626.         unset($formulario['solicitanteTelefono']);
  2627.         unset($formulario['solicitanteNombre']);         
  2628.         unset($formulario['solicitanteFoto']);
  2629.         unset($formulario['solicitanteMovil']);
  2630.         unset($formulario['solicitanteDireccion']);
  2631.         unset($formulario['solicitanteFechaExpedicionCodigoDactilar_WWdesdeWW']);
  2632.         unset($formulario['solicitanteFechaExpedicionCodigoDactilar_WWhastaWW']);
  2633.         unset($formulario['fechaResultadoRevision_WWdesdeWW']);
  2634.         unset($formulario['fechaResultadoRevision_WWhastaWW']);
  2635.         unset($formulario['fechaEnvioRevision_WWdesdeWW']);
  2636.         unset($formulario['fechaEnvioRevision_WWhastaWW']);
  2637.         
  2638.         unset($formulario['fechaRegistro_WWdesdeWW']);
  2639.         unset($formulario['fechaRegistro_WWhastaWW']);
  2640.         
  2641.         unset($formulario['cantidadPaga']);
  2642.         unset($formulario['solicitudPadre']);
  2643.         
  2644.         unset($formulario['beneficiarioCodigoDactilar']);
  2645.         unset($formulario['beneficiarioEmail']);
  2646.         unset($formulario['beneficiarioNombre']);
  2647.         unset($formulario['beneficiarioTelefono']);
  2648.         unset($formulario['beneficiarioFoto']);
  2649.         unset($formulario['beneficiarioMovil']);
  2650.         unset($formulario['beneficiarioDireccion']);
  2651.         unset($formulario['beneficiarioFechaExpedicionCodigoDactilar_WWdesdeWW']);
  2652.         unset($formulario['beneficiarioFechaExpedicionCodigoDactilar_WWhastaWW']);
  2653.         /*unset($formulario['fechaRegistro_WWdesdeWW']);
  2654.         unset($formulario['fechaRegistro_WWhastaWW']);*/
  2655.         unset($formulario['emailEnviado']);
  2656.         unset($formulario['pagoValor']);
  2657.         unset($formulario['pagoValorReal']);
  2658.         unset($formulario['facturaId']);
  2659.         unset($formulario['facturaClaveAcceso']);
  2660.         unset($formulario['observaciones']);
  2661.         unset($formulario['fechaServicioPlan_WWhastaWW']);
  2662.         unset($formulario['hijas']);
  2663.         unset($formulario['costoServicio']);
  2664.         unset($formulario['fechaPago']);
  2665.         unset($formulario['tipo']);
  2666.         unset($formulario['solicitudPadre']);
  2667.         unset($formulario['pago2Fecha_WWdesdeWW']);
  2668.         unset($formulario['pago2Fecha_WWhastaWW']);
  2669.         unset($formulario['pago2Banco']);
  2670.         unset($formulario['pago2Comprobante']);
  2671.         unset($formulario['pago2Valor']);
  2672.         
  2673.         $formulario['estado']['tipo'] = 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
  2674.         $formulario['estado']['atributos']['placeholder'] = $this->translator->trans('choice_value.empty_value',array(),'crud');
  2675.         $formulario['estado']['atributos']['empty_data'] = null;
  2676.         $formulario['estado']['atributos']['attr']['class'] = 'chosen-select';
  2677.         $formulario['estado']['atributos']['multiple'] = true;
  2678.         $formulario['estado']['atributos']['choices']=array_flip(Solicitud::getEstadosStr());
  2679.         if ($this->rol == 'operador' && $this->routeClassName == 'imprimir')
  2680.         {
  2681.             $formulario['fechaServicioPlan'] = $formulario['fechaServicioPlan_WWdesdeWW']; 
  2682.             $formulario['fechaServicioPlan']['nombre'] = 'fechaServicioPlan';
  2683.             $formulario['fechaServicioPlan']['atributos']['label'] = $this->translator->trans($this->translatorBase.'.fields.fechaServicioPlan',[],'crud');
  2684.         }
  2685.         
  2686.         unset($formulario['fechaServicioPlan_WWdesdeWW']);
  2687.         
  2688.         if ($this->rol != 'admin' || $this->routeClassName != 'solicitud')
  2689.         {
  2690.             $formulario['estado']['atributos']['disabled'] = true;
  2691.         }
  2692.         
  2693.         if ($this->routeClassName == 'facturar')
  2694.         {
  2695.             
  2696.             unset($formulario['usuarioPrestaServicio']);
  2697.             unset($formulario['puntoImpresion']);
  2698.             unset($formulario['facturaNumero']);
  2699.         }
  2700.         if ($this->routeClassName == 'facturadas')
  2701.         {
  2702.             /*unset($formulario['fechaServicioPrestado_WWdesdeWW']);
  2703.             unset($formulario['fechaServicioPrestado_WWhastaWW']);*/
  2704.             unset($formulario['usuarioPrestaServicio']);
  2705.             unset($formulario['puntoImpresion']);
  2706.         }
  2707.         if ($this->routeClassName == 'revisar')
  2708.         {
  2709.             unset($formulario['fechaResultadoRevision_WWdesdeWW']);
  2710.             unset($formulario['fechaResultadoRevision_WWhastaWW']);
  2711.             unset($formulario['fechaServicioPrestado_WWdesdeWW']);
  2712.             unset($formulario['fechaServicioPrestado_WWhastaWW']);
  2713.             unset($formulario['usuarioPrestaServicio']);
  2714.             unset($formulario['puntoImpresion']);
  2715.             unset($formulario['facturaNumero']);
  2716.         }
  2717.         if ($this->routeClassName == 'imprimir')
  2718.         {
  2719.             unset($formulario['puntoImpresion']);
  2720.             unset($formulario['facturaNumero']);
  2721.             unset($formulario['fechaResultadoRevision_WWdesdeWW']);
  2722.             unset($formulario['fechaResultadoRevision_WWhastaWW']);
  2723.             unset($formulario['fechaEnvioRevision_WWdesdeWW']);
  2724.             unset($formulario['fechaEnvioRevision_WWhastaWW']);
  2725.             unset($formulario['pagoFecha_WWdesdeWW']);
  2726.             unset($formulario['pagoFecha_WWhastaWW']);
  2727.             unset($formulario['fechaServicioPrestado_WWdesdeWW']);
  2728.             unset($formulario['fechaServicioPrestado_WWhastaWW']);
  2729.             unset($formulario['pagoBanco']);
  2730.             unset($formulario['pagoComprobante']);
  2731.             unset($formulario['usuarioValida']);
  2732.             unset($formulario['usuarioPrestaServicio']);
  2733.             unset($formulario['tipo']);
  2734.         }
  2735.         if ($this->rol == 'financiero')
  2736.         {
  2737.             $queryBuilder $this->em->getRepository(SeguridadUsuario::class)
  2738.                         ->createQueryBuilder('u')
  2739.                         ->where('u.id = :USER')
  2740.                         ->setParameter('USER'$this->getUser()->getId());
  2741.             $formulario['usuarioValida']['atributos']['query_builder'] = $queryBuilder;  
  2742.         }        
  2743. /*      if ($params['rol']=='operador')
  2744.         {
  2745.             $formulario['estado']['atributos']['choices']=array_flip(self::getEstadosOperadorStr());
  2746.             $formulario['estado']['atributos']['disabled'] = true;
  2747.         }
  2748.         else  //admin
  2749.         {
  2750.             $queryBuilder = $params['em']->getrepository(SeguridadUsuario::class)
  2751.                         ->createQueryBuilder('u')
  2752.                         ->innerJoin('u.assignedRoles', 'rol')
  2753.                         ->where("rol.nombre = 'ROLE_FINANCIERO'")
  2754.                         ->orWhere("rol.nombre = 'ROLE_ADMINISTRADOR'");
  2755.             $formulario['usuarioValida']['atributos']['query_builder'] = $queryBuilder; 
  2756.             
  2757.             $queryBuilder = $params['em']->getrepository(SeguridadUsuario::class)
  2758.                         ->createQueryBuilder('u')
  2759.                         ->innerJoin('u.assignedRoles', 'rol')
  2760.                         ->where("rol.nombre = 'ROLE_OPERADOR_PUNTO_IMPRESION'");
  2761.             $formulario['usuarioPrestaServicio']['atributos']['query_builder'] = $queryBuilder;  
  2762.         }*/
  2763.         if ($this->routeClassName=='cambiarturno')
  2764.         {
  2765.             unset($formulario['tipoServicio']);
  2766.             unset($formulario['solicitanteIdentificacion']);
  2767.             unset($formulario['beneficiarioIdentificacion']);
  2768.             unset($formulario['pagoFecha_WWdesdeWW']);
  2769.             unset($formulario['pagoFecha_WWhastaWW']);
  2770.             unset($formulario['fechaServicioPrestado_WWdesdeWW']);
  2771.             unset($formulario['fechaServicioPrestado_WWhastaWW']);
  2772.             unset($formulario['pagoBanco']);
  2773.             unset($formulario['pagoComprobante']);
  2774.             unset($formulario['usuarioPrestaServicio']);
  2775.             unset($formulario['usuarioValida']);
  2776.             unset($formulario['puntoImpresion']);
  2777.             unset($formulario['facturaNumero']);
  2778.             $formulario['codigoAcceso']['atributos']['label'].=' / Identificación';
  2779.         }
  2780.         
  2781.         return $formulario;
  2782.     }
  2783.     
  2784.     protected function ajustaFiltroFecha($fieldName$dias)
  2785.     {
  2786.         $hoy = new \DateTime();
  2787.         $interval = new \DateInterval('P'.$dias.'D');
  2788.         if (isset($this->filterData[$fieldName.'_WWdesdeWW']))
  2789.         {
  2790.             $fechaInicio \DateTime::createFromFormat('d-m-Y'$this->filterData[$fieldName.'_WWdesdeWW']);
  2791.             $fechaFin = clone $fechaInicio;
  2792.             $fechaFin->add($interval);
  2793.             if (isset($this->filterData[$fieldName.'_WWhastaWW']))
  2794.             {
  2795.                 $fechaFin \DateTime::createFromFormat('d-m-Y'$this->filterData[$fieldName.'_WWhastaWW']);
  2796.             }
  2797.             if (  $fechaFin $hoy)
  2798.             {
  2799.                 $fechaFin $hoy;
  2800.                 $fechaInicio = clone $fechaFin;
  2801.                 $fechaInicio->sub($interval);
  2802.             }
  2803.             else
  2804.             {
  2805.                 $diff $fechaFin->diff($fechaIniciotrue);
  2806.                 if ($diff>$interval)
  2807.                 {
  2808.                     $fechaInicio = clone $fechaFin;
  2809.                     $fechaInicio->sub($interval);
  2810.                 }
  2811.             }
  2812.             $this->filterData[$fieldName.'_WWdesdeWW'] = $fechaInicio->format('d-m-Y');
  2813.             $this->filterData[$fieldName.'_WWhastaWW'] = $fechaFin->format('d-m-Y');
  2814.         } 
  2815.         else
  2816.         {
  2817.             if (isset($this->filterData[$fieldName.'_WWhastaWW']))
  2818.             {
  2819.                 $fechaFechaFin \DateTime::createFromFormat('d-m-Y'$this->filterData[$fieldName.'_WWhastaWW']);
  2820.                 if ($fechaFin $hoy)
  2821.                 {
  2822.                     $fechaFin $hoy;
  2823.                 }
  2824.                 $fechaInicio = clone $fechaFin;
  2825.                 $fechaInicio->sub($interval);
  2826.                 $this->filterData[$fieldName.'_WWdesdeWW'] = $fechaInicio->format('d-m-Y');
  2827.                 $this->filterData[$fieldName.'_WWhastaWW'] = $fechaFin->format('d-m-Y');
  2828.             } 
  2829.         }
  2830.     }
  2831.     
  2832.     public function buscarTurnosAction($servicio$punto$fecha$cantImpresiones)
  2833.     {
  2834.         $return = [
  2835.             'ok' => true,
  2836.         ];
  2837.         
  2838.         try 
  2839.         {
  2840.             $sessionId $this->session->getId();
  2841.             $fecha \DateTime::createFromFormat('Y-m-d'$fecha);
  2842.             $html '';
  2843.             
  2844.             if($fecha){
  2845.                 $fecha->setTime(0,0,0);
  2846.                 $fechaFin = clone $fecha;
  2847.                 $fechaFin->setTime(23,59,59);
  2848.                 $turnos $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
  2849.                     ->createQueryBuilder('t')
  2850.                     ->innerJoin('t.servicio''servicio')
  2851.                     ->innerJoin('t.puntoImpresion''puntoImpresion')
  2852.                     ->where('t.tempId = :SESSION_ID')
  2853.                     ->andWhere('servicio.id = :SERVICIO')
  2854.                     ->andWhere('puntoImpresion.id = :PUNTO')
  2855.                     ->setParameter('SESSION_ID'$sessionId)
  2856.                     ->setParameter('SERVICIO'$servicio)
  2857.                     ->setParameter('PUNTO'$punto)
  2858.                     ->getQuery()->getResult();
  2859.                 foreach ($turnos as $turno)
  2860.                 {
  2861.                     $turno->setTempId(null);
  2862.                     $turno->setTempFecha(null);
  2863.                     $this->em->persist($turno);
  2864.                 }
  2865.                 $this->em->flush();
  2866.                 $turnos $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
  2867.                     ->createQueryBuilder('t')
  2868.                     ->innerJoin('t.servicio''servicio')
  2869.                     ->innerJoin('t.puntoImpresion''puntoImpresion')
  2870.                     ->where('t.fechaIni>=:FECHA_INI')
  2871.                     ->andWhere('t.fechaIni<=:FECHA_FIN')
  2872.                     ->andWhere('t.solicitud is null')
  2873.                     ->andWhere('(t.tempId is null or t.tempId = :SESSION_ID)')
  2874.                     ->andWhere('servicio.id = :SERVICIO')
  2875.                     ->andWhere('puntoImpresion.id = :PUNTO')
  2876.                     ->orderBy('t.estacion, t.fechaIni')
  2877.                     ->setParameter('FECHA_INI'$fecha)
  2878.                     ->setParameter('FECHA_FIN'$fechaFin)
  2879.                     ->setParameter('SESSION_ID'$sessionId)
  2880.                     ->setParameter('SERVICIO'$servicio)
  2881.                     ->setParameter('PUNTO'$punto)
  2882.                     ->getQuery()->getResult();
  2883.                 $estacion = -1;
  2884.                 $turnosEstacion = [];
  2885.                 foreach ($turnos as $turno)
  2886.                 {
  2887.                     $turno->setTempId(null);
  2888.                     $turno->setTempFecha(null);
  2889.                     $this->em->persist($turno);
  2890.                     if ($estacion != $turno->getEstacion())
  2891.                     {
  2892.                         $estacion $turno->getEstacion();
  2893.                     }
  2894.                     $turnosEstacion[$estacion][] = $turno;
  2895.                 }
  2896.                 $turnosPosibles = [];
  2897.                 foreach ($turnosEstacion as $estacion => $turnos)
  2898.                 {
  2899.                     if (count($turnos) >= $cantImpresiones)
  2900.                     {
  2901.                         $lastTurno null;
  2902.                         $posibles = [];
  2903.                         $c=0;
  2904.                         foreach ($turnos as $turno)
  2905.                         {
  2906.                             if ($c==$cantImpresiones)
  2907.                             {
  2908.                                 if (!empty($posibles) && count($posibles)==$cantImpresiones
  2909.                                 {
  2910.                                     $turnosPosibles[$estacion][] = $posibles;
  2911.                                 }
  2912.                                 $posibles = [];
  2913.                                 $c=0;
  2914.                                 $lastTurno null;
  2915.                             }
  2916.                             if (!$lastTurno || $lastTurno->getFechaFin()->format('Y-m-d H:i:s')==$turno->getFechaIni()->format('Y-m-d H:i:s'))
  2917.                             {
  2918.                                 $posibles[] = $turno;
  2919.                                 $lastTurno $turno;
  2920.                                 $c++;
  2921.                             }
  2922.                             else
  2923.                             {
  2924.                                 $posibles = [];
  2925.                                 $posibles[] = $turno;
  2926.                                 $lastTurno $turno;
  2927.                                 $c=1;
  2928.                             }
  2929.                         }
  2930.                         if (!empty($posibles) && count($posibles)==$cantImpresiones)
  2931.                         {
  2932.                             $turnosPosibles[$estacion][] = $posibles;
  2933.                         }
  2934.                     }
  2935.                 }
  2936.                 $fecha = new \DateTime();
  2937.                 
  2938.                 $horasUsadas = [];
  2939.                 foreach ($turnosPosibles as $estacion => $turnoPosible)
  2940.                 {
  2941.                     foreach ($turnoPosible as $key=>$turnos)
  2942.                     {
  2943.                         $txt $turnos[0]->getFechaIni()->format('H:i');
  2944.                         if (!isset($horasUsadas[$txt]))
  2945.                         {
  2946.                             $horasUsadas[$txt] = 1;
  2947.                             $txt .= ' - Estación: '.$estacion;
  2948.                             $ids = [];
  2949.                             foreach ($turnos as $turno)
  2950.                             {
  2951.                                 $turno->setTempId($sessionId);
  2952.                                 $turno->setTempFecha($fecha);
  2953.                                 $this->em->persist($turno);
  2954.                                 $ids[] = $turno->getId(); 
  2955.                             }
  2956.                             $ids implode('_'$ids);
  2957.                             $html .= '<option value="'.$ids.'">'.$txt.'</option>';
  2958.                         }
  2959.                     }
  2960.                 }
  2961.                 
  2962.             }else{
  2963.                $return['ok'] =false;
  2964.         
  2965.             }
  2966.             $return['html'] = $html;
  2967.             
  2968.         }
  2969.         catch (\Exception $exc)
  2970.         {
  2971.             $return['ok'] = false;
  2972.             $return['error'] = $exc->getMessage();
  2973.         }
  2974.         
  2975.         $data = new Response(json_encode($return));
  2976.         $data->headers->set('Content-Type''application/json');
  2977.         return $data;  
  2978.     }
  2979.     
  2980.     public function asignaTurnos($turnos$solicitud)
  2981.     {
  2982.         $sessionId $this->session->getId();
  2983.         $turnos explode('_'$turnos);
  2984.         $turnosBD $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
  2985.             ->createQueryBuilder('t')
  2986.             ->where('t.tempId = :SESSION_ID')
  2987.             ->andWhere('t.id NOT IN (:TURNOS)')
  2988.             ->setParameter('SESSION_ID'$sessionId)
  2989.             ->setParameter('TURNOS'$turnos)
  2990.             ->getQuery()->getResult();
  2991.         foreach ($turnosBD as $turno)
  2992.         {
  2993.             $turno->setTempId(null);
  2994.             $turno->setTempFecha(null);
  2995.             $this->em->persist($turno);
  2996.         }
  2997.         $this->em->flush();
  2998.         $turnosBD $this->em->getRepository('App\\Entity\\PuntoImpresionTurno')
  2999.             ->createQueryBuilder('t')
  3000.             ->where('t.id IN (:TURNOS)')
  3001.             ->setParameter('TURNOS'$turnos)
  3002.             ->getQuery()->getResult();
  3003.         foreach ($turnosBD as $turno)
  3004.         {
  3005.             $turno->setTempId(null);
  3006.             $turno->setTempFecha(null);
  3007.             $turno->setSolicitud($solicitud);
  3008.             $this->em->persist($turno);
  3009.         }
  3010.         $this->em->flush();
  3011.     }
  3012.     
  3013. }