/**
  * Se encarga de validar que el valor de los grados se encuentre dentro del rango
  */
 public function isValid($doctrine, $entidad)
 {
     $msg = array();
     if ($this->getImpDetLitros()) {
         if ($this->getImpDetLitros() + 0 <= 0) {
             $msg[] = '- La cantidad en litros ingresados "' . $this->getImpDetLitros() . '" debe ser mayor a 0';
         } else {
             $solImportacionDao = new SolImportacionDao($doctrine);
             $solImportacionDetDao = new SolImportacionDetDao($doctrine);
             $litrosInventario = $solImportacionDetDao->getLitrosInventarioXCuota($entidad->getEntId(), $this->getCuota()->getCuoId());
             $litrosSolicitudesPendientes = $solImportacionDao->getLitrosSolicitudXCuota($entidad->getEntId(), $this->getCuota()->getCuoId());
             $disponible = $this->getCuota()->getCuoLitros() - $litrosInventario - $litrosSolicitudesPendientes;
             if ($this->getImpDetLitros() > $disponible) {
                 $msg[] = '- La cantidad en litros ingresados "' . $this->getImpDetLitros() . '" es mayor al saldo disponible de la cuota "' . $disponible . '"';
             }
         }
     } else {
         $msg[] = '- El campo "Cantidad" se encuentra vacio';
     }
     return $msg;
 }
 /**
  * Proceso encargado de realizar la expiración de solicitudes de 
  * Importacion y Registro Local de Compras
  * 
  */
 public function expiracionSolicitudesAction()
 {
     /*###########################################
       ##* Expiración de Solicitudes Importación ##
       ###########################################*/
     $solImportacionDao = new SolImportacionDao($this->getDoctrine());
     $transicionDao = new TransicionDao($this->getDoctrine());
     $solicitudes = $solImportacionDao->getSolicitudesExpiradas();
     $contSolImp = 0;
     foreach ($solicitudes as $sol) {
         $transiciones = $transicionDao->getTransicionesSiguientes($sol->getTransicion()->getTraId());
         foreach ($transiciones as $tran) {
             $estId = $tran->getEstado()->getEstId();
             if ($estId == Estado::$CANCELADO) {
                 $sol->setTransicion($tran);
                 $sol->setSolImpComentario('Solicitud Expirada');
                 $sol->setAuditUserUpd('SCA');
                 $sol->setAuditDateUpd(new \DateTime());
                 $solImportacionDet = $sol->getSolImportacionesDet();
                 $solImportacionDet = $solImportacionDet[0];
                 $solImportacionDao->editSolImportacion($sol);
                 $this->generarEmailSolImpNotificacion($solImportacionDet, $tran);
                 $contSolImp = $contSolImp + 1;
             }
         }
     }
     /*###############################################
       ##* Expiracion de Registros de compra local  ###
       ################################################*/
     $solLocalDao = new SolLocalDao($this->getDoctrine());
     $inventarioDetDao = new InventarioDetDao($this->getDoctrine());
     $solicitudes = $solLocalDao->getSolicitudesExpiradas();
     $contSolLocal = 0;
     foreach ($solicitudes as $sol) {
         $transiciones = $transicionDao->getTransicionesSiguientes($sol->getTransicion()->getTraId());
         foreach ($transiciones as $tran) {
             $estId = $tran->getEstado()->getEstId();
             if ($estId == Estado::$CANCELADO) {
                 //Buscamos el encabezado para realizar la transicion
                 $solLocalDet = $sol->getSolLocalesDet();
                 $solLocalDet = $solLocalDet[0];
                 $localDetId = $solLocalDet->getLocalDetId();
                 $invsDetTemp = $solLocalDet->getInventariosDet();
                 foreach ($invsDetTemp as $tmp) {
                     if ($solLocalDet->getSolLocal()->getEntidad()->getEntId() != $tmp->getInventario()->getEntidad()->getEntId()) {
                         $inventarioProv = $tmp->getInventario();
                     }
                 }
                 /*NOTA: Solo se busca el registro de inventario que esten en R (reserva) para eliminarse
                  * Los demás se asumen que si ya entraron a inventario no hay reversa 
                  */
                 $inventarioDetTmp = $inventarioDetDao->findInventarioDet($inventarioProv->getInvId(), $localDetId, 'R');
                 $inventarioDetTmp = $this->eliminarInventarioDetProveedorAction($inventarioDetTmp);
                 $sol->setTransicion($tran);
                 $sol->setSolLocalComentario('Solicitud Expirada');
                 $sol->setAuditUserUpd('SCA');
                 $sol->setAuditDateUpd(new \DateTime());
                 $solLocalDao->editSolLocal($sol);
                 $this->generarEmailSolLocalNotificacion($solLocalDet, $tran);
                 $contSolLocal = $contSolLocal + 1;
             }
         }
     }
     return new Response('ok -> SolImportacion Expiradas =' . $contSolImp . '   SolLocal Expiradas = ' . $contSolLocal);
 }
 /**
  * Actualiza el estado/transicion de la solicitud de importacion
  * 
  * pendiente revisar a que pagina se redirecciona de forma dinamica
  * pendiente extraer la nueva transicion a la que se actualizara la solicitud
  * pendiente validar si la solicitud no ha sido previamente cambiada de estado y se quiere volver a cambiar. (submit + back + submit again)
  * 
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\RedirectResponse
  */
 public function cambiarEstadoAction(Request $request, $impDetId, $traId)
 {
     $auditUser = $this->container->get('security.context')->getToken()->getUser();
     $errorList = '';
     $solImportacionDao = new SolImportacionDao($this->getDoctrine());
     $solImportacionDetDao = new SolImportacionDetDao($this->getDoctrine());
     $transicionDao = new TransicionDao($this->getDoctrine());
     //Buscamos el encabezado para realizar la transicion
     $solImportacionDet = new SolImportacionDet();
     $solImportacionDet = $solImportacionDao->getSolImportacionDet($impDetId);
     $roles = $auditUser->getRols();
     $nextTransiciones = $transicionDao->getTransicionesSiguientes($solImportacionDet->getSolImportacion()->getTransicion()->getTraId());
     //Validacion para asegurarse que el usuario que esta visualizando la solicitud tiene autorizacion para evaluarla y pasarla a la siguiente etapa
     foreach ($roles as $rol) {
         $transicionesRol = $rol->getTransiciones();
         foreach ($transicionesRol as $transicionRol) {
             foreach ($nextTransiciones as $reg) {
                 if ($reg->getFlujo()->getFluId() == Flujo::$IMPORTACION && $transicionRol->getTraId() == $reg->getTraId() && $traId == $reg->getTraId()) {
                     $entidad = $solImportacionDet->getSolImportacion()->getEntidad();
                     $year = new \DateTime();
                     $listadoDNMDao = new ListadoDNMDao($this->getDoctrine());
                     $autorizadoDNM = $listadoDNMDao->estaAutorizado($year->format('Y') + 0, $entidad->getEntNrc(), $entidad->getEntNit());
                     if ($autorizadoDNM == true && $entidad->getEntHabilitado() == true) {
                         if ($reg->getTraComentario()) {
                             $solImpComentario = $request->get('solImpComentario');
                             if ($solImpComentario == null || $solImpComentario == '') {
                                 $errorList = $errorList . '- Es necesario detallar un comentario para pasar a la siguiente etapa';
                             } else {
                                 $solImportacionDet->getSolImportacion()->setSolImpComentario($solImpComentario);
                             }
                         }
                         if ($reg->getTraLitrosLibera() || $reg->getTraLiberaTotal()) {
                             $impDetLitrosLib = $solImportacionDet->getImpDetLitrosLib();
                             $impDetLitros = $solImportacionDet->getImpDetLitros();
                             $litrosLib = $request->get('impDetLitrosLib');
                             if ($reg->getTraLiberaTotal()) {
                                 $solImportacionDet->setImpDetLitrosLib($impDetLitros);
                                 $inventarioDet = $this->agregarInventario($solImportacionDet->getCuota(), $impDetLitros - $impDetLitrosLib);
                                 $inventarioDet->setSolImportacionDet($solImportacionDet);
                                 $solImportacionDet->addInventarioDet($inventarioDet);
                             } else {
                                 if ($reg->getTraLitrosLibera()) {
                                     try {
                                         $litrosLib = (double) $litrosLib;
                                         $impDetLitrosLib = (double) $impDetLitrosLib;
                                         $impDetLitros = (double) $impDetLitros;
                                         if ($litrosLib == null || $litrosLib == '') {
                                             $errorList = $errorList . '- Debe ingresar los litros a liberar';
                                         } else {
                                             if ($impDetLitros - $impDetLitrosLib - $litrosLib <= 0) {
                                                 $errorList = $errorList . '- La cantidad de litros liberados debe ser menor a la cantidad pendiente por liberar ' . ($impDetLitros - $impDetLitrosLib);
                                             } else {
                                                 if ($litrosLib <= 0) {
                                                     $errorList = $errorList . '- Debe ingresar una cantidad mayor a 0';
                                                 } else {
                                                     $solImportacionDet->setImpDetLitrosLib($impDetLitrosLib + $litrosLib);
                                                     $inventarioDet = $this->agregarInventario($solImportacionDet->getCuota(), $litrosLib);
                                                     $inventarioDet->setSolImportacionDet($solImportacionDet);
                                                     $solImportacionDet->addInventarioDet($inventarioDet);
                                                 }
                                             }
                                         }
                                     } catch (Exception $e) {
                                         $errorList = $errorList . '- Debe ingresar un número valido';
                                     }
                                 }
                             }
                         }
                     } else {
                         $errorList = ' ';
                     }
                     if ($errorList == '') {
                         $solImportacionDet->getSolImportacion()->setTransicion($reg);
                         $solImportacionDet->getSolImportacion()->setAuditUserUpd($auditUser->getUsername());
                         $solImportacionDet->getSolImportacion()->setAuditDateUpd(new \DateTime());
                         $solImportacionDetDao->editSolImportacionDet($solImportacionDet);
                         $this->generarEmailEtapaNotificacion($solImportacionDet, $reg);
                         $this->get('session')->setFlash('notice', '#### El registro paso a etapa "' . $reg->getEtpFin()->getEtpNombre() . '" con estado "' . $reg->getEstado()->getEstNombre() . '" ####');
                         return $this->redirect($this->generateUrl('MinSalSCAProcesosBundle_mantSolImportacionVerSolicitudes'));
                     }
                 }
             }
         }
     }
     if ($errorList == '') {
         $this->get('session')->setFlash('notice', '#### AUDITORIA: Su usuario no tiene permisos para cambiar el estado en esta etapa "' . $solImportacionDet->getSolImportacion()->getTransicion()->getEtpFin()->getEtpNombre() . '" ####');
     } else {
         $this->get('session')->setFlash('notice', $errorList);
     }
     return $this->redirect($this->generateUrl('MinSalSCAProcesosBundle_mantCargarSolImportacion', array('impDetId' => $impDetId)));
 }