src/Controller/UsuariosProcesosTrait.php line 1488

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  4. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  5. use Symfony\Component\Mime\Address;
  6. use App\Service\FuncionesIvtcotizador;
  7. use App\Entity\Clientes;
  8. use App\Entity\Funciones;
  9. use App\Entity\Usuarios;
  10. use App\Entity\Usuariosavisos;
  11. use App\Entity\Usuarioubicaciones;
  12. use App\Entity\Logusuario;
  13. use App\Entity\Perfiles;
  14. use App\Entity\Perfilfunciones;
  15. use App\Entity\Usuariosfavoritos;
  16. use App\Repository\ClientefuncionesRepository;
  17. use App\Repository\ClientesRepository;
  18. use App\Repository\FuncionesRepository;
  19. use App\Repository\OrigenesRepository;
  20. use App\Repository\PerfilesRepository;
  21. use App\Repository\PerfilfuncionesRepository;
  22. use App\Repository\SeccionesRepository;
  23. use App\Repository\UbicacionesRepository;
  24. use App\Repository\UsuariosavisosRepository;
  25. use App\Repository\UsuariosfavoritosRepository;
  26. use App\Repository\UsuariosRepository;
  27. use App\Repository\UsuarioubicacionesRepository;
  28. trait UsuariosProcesosTrait
  29. {
  30.     /**
  31.      * Method procUsuariosUsuarios
  32.      *
  33.      * @param array $paraProceso
  34.      *
  35.      * @return array
  36.      */
  37.     private function procUsuariosUsuarios($paraProceso): array
  38.     {
  39.         $cliente $paraProceso['cliente'];
  40.         $registry $paraProceso['registry'];
  41.         $requestStack $paraProceso['requestStack'];
  42.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  43.         $perfilesRepo = new PerfilesRepository($registry);
  44.         $fi = new FuncionesIvtcotizador();
  45.         ///
  46.         $controladorA explode('\\'get_called_class());
  47.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  48.         $rotulos = [
  49.             "titulo" => $_n['Usuarios'] ?? 'Usuarios',
  50.             'exportar' => $_n['exportar'] ?? 'Exportar',
  51.             'nuevo' => $_n['nuevo'] ?? 'Nuevo',
  52.             'claUsuario' => $_n['claUsuario'] ?? 'Usuario',
  53.             'eliminar' => $_n['eliminar'] ?? 'Eliminar',
  54.             'totalDeUsuarios' => $_n['totalDeUsuarios'] ?? 'Total de Usuarios',
  55.             'nomUsuario' => $_n['nomUsuario'] ?? 'Nombre de Usuario',
  56.             'acceso' => $_n['acceso'] ?? 'Acceso',
  57.             'normal' => $_n['normal'] ?? 'Normal',
  58.             'movil' => $_n['movil'] ?? 'Móvil',
  59.             'recolectorDeDatos' => $_n['recolectorDeDatos'] ?? 'Recolector de datos',
  60.             'cambiarContrasena' => $_n['cambiarContrasena'] ?? 'Cambiar Contraseña',
  61.             'nomPerfil' => $_n['nomPerfil'] ?? 'Perfil',
  62.             'nomTipo' => $_n['nomTipo'] ?? 'Acceso',
  63.             'activar' => $_n['activar'] ?? 'Activar',
  64.             'activarTip' => $_n['activarTip'] ?? 'Activa al usuario seleccionado',
  65.             'activarConfirmar' => $_n['activarConfirmar'] ?? '¿Está seguro de querer activar a este usuario?',
  66.             'desactivar' => $_n['desactivar'] ?? 'Desactivar',
  67.             'desactivarTip' => $_n['desactivarTip'] ?? 'Desactiva al usuario seleccionado',
  68.             'desactivarConfirmar' => $_n['desactivarConfirmar'] ?? '¿Está seguro de querer desactivar a este usuario?',
  69.             'cambiarContra' => $_n['cambiarContra'] ?? 'Cambiar contraseña',
  70.             'cambiarContraTip' => $_n['cambiarContraTip'] ?? 'Cambia la contraseña del usuario seleccionado',
  71.             'avisos' => $_n['avisos'] ?? 'Configuración de avisos',
  72.             'avisosTip' => $_n['avisosTip'] ?? 'Cambia la configuración de avisos del usuario seleccionado',
  73.             'fecha' => $_n['fecha'] ?? 'Fecha',
  74.         ];
  75.         $valoresDB $usuariosRepo->findForGrid($cliente);
  76.         $perfiles $perfilesRepo->findForClaCatalogoIndiceEsClave($cliente);
  77.         $tipos $usuariosRepo->findForClaTipo($cliente);
  78.         $mostrarCuales = [Usuarios::_claTipoNormalUsuarios::_claTipoMovilUsuarios::_claTipoRecolectorDatos];
  79.         $valores = [];
  80.         $enLista = ['claUsuario''nomUsuario''id''claPerfil''claTipo''activo'];
  81.         $cuentas = [];
  82.         foreach ($valoresDB as $x => $campos) {
  83.             $mostrar false;
  84.             $array = [];
  85.             foreach ($campos as $y => $campo) {
  86.                 if (in_array($campo['alias'], $enLista)) {
  87.                     $array[$campo['alias']] = $campo['valor'];
  88.                 }
  89.                 //perfil
  90.                 if ($campo['alias'] == 'claPerfil') {
  91.                     $array['nomPerfil'] = $perfiles[$campo['valor']] ?? '';
  92.                 }
  93.                 //tipo
  94.                 if ($campo['alias'] == 'claTipo') {
  95.                     $array['nomTipo'] = $tipos[$campo['valor']] ?? '';
  96.                     if (in_array($campo['valor'], $mostrarCuales)) {
  97.                         $mostrar true;
  98.                     }
  99.                 }
  100.                 $array['eliminar'] = true;
  101.                 if ($campo['alias'] == 'claUsuario') {
  102.                     $cuentas[$campo['valor']] = 0;
  103.                 }
  104.             }
  105.             if ($mostrar) {
  106.                 $valores[] = $array;
  107.             }
  108.         }
  109.         foreach ($valores as $v => $valor) {
  110.             $claUsuario $valor["claUsuario"];
  111.             $cuenta 0;
  112.             if (isset($cuentas[$claUsuario])) {
  113.                 $cuenta $cuentas[$claUsuario];
  114.             }
  115.             if ($cuenta 0) {
  116.                 $valores[$v]['eliminar'] = false;
  117.             }
  118.         }
  119.         ///
  120.         $html = [
  121.             "titulo" => $rotulos["titulo"],
  122.         ];
  123.         ///
  124.         $generales = [];
  125.         $generales['fecha'] = date($fi->getFormatoFecha(1) , $fi->ivtCotizadorTiempo());
  126.         ///
  127.         $catalogos = [];
  128.         //la data
  129.         $data = [];
  130.         $data['generales'] = $generales;
  131.         $data['rotulos'] = $rotulos;
  132.         $data['html'] = $html;
  133.         $data['valores'] = $valores;
  134.         $data['catalogos'] = $catalogos;
  135.         return $data;
  136.     }
  137.     /**
  138.      * Method procUsuariosEditar
  139.      *
  140.      * @param array $paraProceso
  141.      *
  142.      * @return array
  143.      */
  144.     private function procUsuariosEditar($paraProceso): array
  145.     {
  146.         $registry $paraProceso['registry'];
  147.         $requestStack $paraProceso['requestStack'];
  148.         $sesion $paraProceso['sesion'];
  149.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  150.         $perfilesRepo = new perfilesRepository($registry);
  151.         $ubicacionesRepo = new UbicacionesRepository($registry);
  152.         $cliente $paraProceso['cliente'];
  153.         $claUsuario $paraProceso['claUsuario'];
  154.         $fi = new FuncionesIvtcotizador();
  155.         ///
  156.         $generales = [];
  157.         $generales['claUsuario'] = $claUsuario;
  158.         $generales['nuevo'] = strlen($claUsuario) > self::_editar self::_nuevo;
  159.         $generales['multiUbicacion'] = isset($sesion->get('parametros')['MultiUbicacion']) ? $sesion->get('parametros')['MultiUbicacion'] : '0';
  160.         ///
  161.         $controladorA explode('\\'get_called_class());
  162.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  163.         $rotulos = [
  164.             'nuevoUsuario' => $_n['nuevoUsuario'] ?? 'Nuevo Usuario',
  165.             'editarUsuario' => $_n['editarUsuario'] ?? 'Modificar Usuario',
  166.             'cancelar' => $_n['cancelar'] ?? 'Cancelar',
  167.             'nomUsuario' => $_n['nomUsuario'] ?? 'Usuario',
  168.             'claUsuario' => $_n['claUsuario'] ?? 'Clave',
  169.             'correo' => $_n['correo'] ?? 'Correo',
  170.             'contra' => $_n['contra'] ?? 'Contraseña',
  171.             'confirmacion' => $_n['confirmacion'] ?? 'Confirmación',
  172.             'guardar' => $_n['guardar'] ?? 'Guardar',
  173.             'nomUsuarioAviso' => $_n['nomUsuarioAviso'] ?? 'Indique el usuario',
  174.             'claUsuarioAviso' => $_n['claUsuarioAviso'] ?? 'Indique la clave de usuario',
  175.             'correoAviso' => $_n['correoAviso'] ?? 'Indique un correo válido',
  176.             'contraAviso' => $_n['contraAviso'] ?? 'Indique la contraseña',
  177.             'confirmacionAviso' => $_n['confirmacionAviso'] ?? 'Indique la confirmación',
  178.             'noCoinciden' => $_n['noCoinciden'] ?? 'La contraseña y la confirmación no coinciden',
  179.             'error' => $_n['error'] ?? 'Revise los campos',
  180.             'ubicacion' => $_n['ubicacion'] ?? 'Ubicación',
  181.             'region' => $_n['region'] ?? 'Región',
  182.             'centro' => $_n['centro'] ?? 'Centro',
  183.             'nomTipoNormal' => $_n['nomTipoNormal'] ?? 'Normal',
  184.             'nomTipoRecolector' => $_n['nomTipoRecolector'] ?? 'Recolector de datos',
  185.             'tipoAcceso' => $_n['tipoAcceso'] ?? 'Tipo de acceso',
  186.             'perfil' => $_n['perfil'] ?? 'Perfil',
  187.             'noCumple' => $_n['noCumple'] ?? 'La contraseña no cumple con las reglas. Mínimo 8 carácteres, mínimo un número',
  188.         ];
  189.         ///
  190.         $html = [];
  191.         $html["nuevo"] = $generales['nuevo'];
  192.         $html["multiUbicacion"] = $generales['multiUbicacion'];
  193.         //////
  194.         if ($generales['nuevo'] == self::_editar) { // es string
  195.             $rotulos['titulo'] = $rotulos['editarUsuario'];
  196.             $valoresFor $usuariosRepo->findForEditar($cliente$claUsuario);
  197.         } else {
  198.             $rotulos['titulo'] = $rotulos['nuevoUsuario'];
  199.             $valoresFor $usuariosRepo->findForNuevo();
  200.         }
  201.         $valores = [];
  202.         foreach ($valoresFor as $v => $valor) {
  203.             $valores[$valor['alias']] = $valor['valor'];
  204.         }
  205.         $valores['nivelClave'] = $ubicacionesRepo->getUbicacionNivel($cliente$valores['claUbicacion']) . '|' $valores['claUbicacion'];
  206.         $catalogos = [];
  207.         $claMatriz $ubicacionesRepo->findForMatriz($cliente);
  208.         $catalogos['ubicaciones'] = $ubicacionesRepo->getUbicacionesArray($cliente$claMatriz$rotulos['region'], $rotulos['centro']);
  209.         $catalogos['perfiles'] = $perfilesRepo->findForCatalogo($cliente);
  210.         $usuariosTipos = [];
  211.         $usuariosTipos[] = ['claTipo' => Usuarios::_claTipoNormal'nomTipo' => $rotulos['nomTipoNormal']];
  212.         //$usuariosTipos[] = ['claTipo' => Usuarios::_claTipoRecolectorDatos, 'nomTipo' => $rotulos['nomTipoRecolector']];
  213.         $catalogos['tipos'] = $usuariosTipos;
  214.         //la data
  215.         $data = [];
  216.         $data['generales'] = $generales;
  217.         $data['rotulos'] = $rotulos;
  218.         $data['html'] = $html;
  219.         $data['valores'] = $valores;
  220.         $data['catalogos'] = $catalogos;
  221.         return $data;
  222.     }
  223.     /**
  224.      * Method procUsuariosEnviar
  225.      *
  226.      * @param array $paraProceso
  227.      *
  228.      * @return array
  229.      */
  230.     private function procUsuariosEnviar($paraProceso): array
  231.     {
  232.         $entityManager $this->getDoctrine()->getManager();
  233.         $fi = new FuncionesIvtcotizador();
  234.         $registry $paraProceso['registry'];
  235.         $requestStack $paraProceso['requestStack'];
  236.         $hasher $paraProceso['hasher'];
  237.         $cliente $paraProceso['cliente'];
  238.         $claUsuario $paraProceso['claUsuario'];
  239.         $datosRequest $paraProceso['datosRequest'];
  240.         $contra $paraProceso['contra'];
  241.         $nuevo $paraProceso['nuevo'];
  242.         $sesion $paraProceso['sesion'];
  243.         ///
  244.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  245.         $perfilesRepo = new PerfilesRepository($registry);
  246.         ///
  247.         $controladorA explode('\\'get_called_class());
  248.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  249.         $rotulos = [
  250.             'usuarioAgregado' => $_n['usuarioAgregado'] ?? 'Nuevo usuario agregado con éxito',
  251.             'usuarioActualizado' => $_n['usuarioActualizado'] ?? 'Usuario actualizado con éxito',
  252.             'usuarioNoExiste' => $_n['usuarioNoExiste'] ?? 'El usuario no existe',
  253.             'usuarioYaExiste' => $_n['usuarioYaExiste'] ?? 'El usuario ya existe',
  254.             'nomTipoNormal' => $_n['nomTipoNormal'] ?? 'Normal',
  255.             'nomTipoRecolector' => $_n['nomTipoRecolector'] ?? 'Recolector de datos',
  256.         ];
  257.         $resultado 1;
  258.         $mensaje $rotulos['usuarioAgregado'];
  259.         $dataGrid = [];
  260.         $usuariosCuenta $usuariosRepo->createQueryBuilder('s')
  261.             ->select('count(s.clausuario)')
  262.             ->where('s.clausuario = :claUsuario')
  263.             ->setParameters(['claUsuario' => $claUsuario])
  264.             ->getQuery()
  265.             ->getSingleScalarResult();
  266.         if ($usuariosCuenta && $nuevo == self::_nuevo) {
  267.             $mensaje $rotulos['usuarioYaExiste'];
  268.             $resultado = -2;
  269.         }
  270.         if ($resultado == 1) {
  271.             $usuario = new Usuarios();
  272.             if ($nuevo == self::_editar) {
  273.                 $mensaje $rotulos['usuarioActualizado'];
  274.                 $usuario $usuariosRepo->findForClausuario($cliente$claUsuario);
  275.                 if ($usuario == null) {
  276.                     $resultado = -1;
  277.                     $mensaje $rotulos['usuarioNoExiste'];
  278.                 }
  279.             }
  280.         }
  281.         if ($resultado == 1) {
  282.             $camposContinuar = ['id''nuevo'];
  283.             $camposSoloNuevo = ['clacliente''contra2''contra3''clausuario''fecha'];
  284.             $camposParaGrid = ['clausuario''nomusuario''activo'];
  285.             $camposInfo $usuariosRepo->getDataArray();
  286.             foreach ($datosRequest as $d => $valor) {
  287.                 $campo strtolower($d);
  288.                 if ($campo == 'nivelclave') { //viene como nivel|claUbicacion
  289.                     $valor explode('|'$valor)[1];
  290.                     $campo 'claubicacion';
  291.                 }
  292.                 if (in_array($campo$camposContinuar)) {
  293.                     continue;
  294.                 }
  295.                 if (in_array($campo$camposParaGrid)) {
  296.                     $dataGrid[$d] = $valor;
  297.                 }
  298.                 if ($nuevo == self::_nuevo) {
  299.                     if ($campo == 'clacliente') {
  300.                         $valor $cliente;
  301.                     }
  302.                     if ($campo == 'activo') {
  303.                         $valor '1';
  304.                     }
  305.                     if ($campo == 'fecha') {
  306.                         $valor $fi->ivtCotizadorTiempoDT();
  307.                     }
  308.                 } else {
  309.                     if (in_array($campo$camposSoloNuevo)) {
  310.                         continue;
  311.                     }
  312.                 }
  313.                 //valida el tipo de dato
  314.                 $metaData $fi->getCampoMetadata($camposInfo$campo);
  315.                 $columnaTipoDato $metaData['columnaTipoDato'];
  316.                 $valorDefault $metaData['valorDefault'];
  317.                 $tipoDato gettype($valor);
  318.                 if ($tipoDato != $columnaTipoDato) {
  319.                     if ($columnaTipoDato == 'integer') {
  320.                         if ($tipoDato == 'string') {
  321.                             $valor str_replace(','''$valor);
  322.                             $valor str_replace(' '''$valor);
  323.                             $valor = (int) $valor;
  324.                         }
  325.                     }
  326.                     if ($columnaTipoDato == 'float') {
  327.                         if ($tipoDato == 'string') {
  328.                             $valor str_replace(','''$valor);
  329.                             $valor str_replace(' '''$valor);
  330.                             $valor = (float) $valor;
  331.                         }
  332.                     }
  333.                 }
  334.                 $campoSet "set" ucfirst($campo);
  335.                 $usuario->$campoSet($valor);
  336.             }
  337.             $entityManager->persist($usuario);
  338.             $entityManager->flush();
  339.             if ($nuevo == self::_nuevo && strlen($contra) > 0) {
  340.                 $contra $hasher->hashPassword($usuario$contra);
  341.                 $usuario->setPassword($contra);
  342.                 $usuario->setContra($contra);
  343.                 $usuario->setContra1($contra);
  344.                 $usuario->setContra2('');
  345.                 $usuario->setContra3('');
  346.                 $usuario->setRoles([]);
  347.                 $entityManager->persist($usuario);
  348.                 $entityManager->flush();
  349.                 //MultiUbicacion
  350.                 $multiUbicacion $sesion->get('parametros')['MultiUbicacion'] ?? '0';
  351.                 if ($multiUbicacion == '1') {
  352.                     $multi = new Usuarioubicaciones();
  353.                     $multi->setClacliente($cliente)
  354.                         ->setClausuario($usuario->getClausuario())
  355.                         ->setClaubicacion($usuario->getClaubicacion());
  356.                     $entityManager->persist($multi);
  357.                     $entityManager->flush();
  358.                 }
  359.             }
  360.             $dataGrid['nomTipo'] = '';
  361.             switch ($usuario->getClatipo()) {
  362.                 case Usuarios::_claTipoNormal:
  363.                     $dataGrid['nomTipo'] = $rotulos['nomTipoNormal'];
  364.                     break;
  365.                 case Usuarios::_claTipoRecolectorDatos:
  366.                     $dataGrid['nomTipo'] = $rotulos['nomTipoRecolector'];
  367.                     break;
  368.             }
  369.             $dataGrid['claUsuario'] = $usuario->getClausuario();
  370.             $dataGrid['activo'] = $usuario->getActivo();
  371.             $dataGrid['nomPerfil'] = $perfilesRepo->findForNombre($cliente$usuario->getClaperfil());
  372.         }
  373.         //la data
  374.         $data = [];
  375.         $data['resultado'] = $resultado;
  376.         $data['mensaje'] = $mensaje;
  377.         $data['dataGrid'] = $dataGrid;
  378.         return $data;
  379.     }
  380.     /**
  381.      * Method procUsuariosMultiUbicaciones
  382.      *
  383.      * @param array $paraProceso
  384.      *
  385.      * @return void
  386.      */
  387.     private function procUsuariosMultiUbicaciones($paraProceso)
  388.     {
  389.         $entityManager $this->getDoctrine()->getManager();
  390.         $fi = new FuncionesIvtcotizador();
  391.         $registry $paraProceso['registry'];
  392.         $usuarioUbiRepo = new UsuarioubicacionesRepository($registry);
  393.         $ubicacionesRepo = new UbicacionesRepository($registry);
  394.         $cliente $paraProceso['cliente'];
  395.         $claUsuario $paraProceso['claUsuario'];
  396.         ///
  397.         $controladorA explode('\\'get_called_class());
  398.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  399.         $rotulos = [
  400.             'nomUbicacion' => $_n['nomUbicacion'] ?? 'Ubicación',
  401.             'ubicacion' => $_n['ubicacion'] ?? 'Ubicación',
  402.             'region' => $_n['region'] ?? 'Región',
  403.             'centro' => $_n['centro'] ?? 'Centro',
  404.             'agregar' => $_n['agregar'] ?? 'Agregar',
  405.             'eliminar' => $_n['eliminar'] ?? 'Eliminar',
  406.             'eliminarTip' => $_n['eliminarTip'] ?? 'Elimina la ubicación seleccionada',
  407.             'eliminarConfirmar' => $_n['eliminarConfirmar'] ?? '¿Está seguro de querer eliminar esta ubicación?',
  408.         ];
  409.         $ubicaciones $ubicacionesRepo->findForIndiceEsClaveConNivel($cliente);
  410.         $valoresDB $usuarioUbiRepo->findForGrid($cliente$claUsuario);
  411.         $valores = [];
  412.         $enLista = ['claUsuario''claUbicacion''claUsuarioUbicacion'];
  413.         $cuentas = [];
  414.         foreach ($valoresDB as $x => $campos) {
  415.             $array = [];
  416.             foreach ($campos as $y => $campo) {
  417.                 if (in_array($campo['alias'], $enLista)) {
  418.                     $array[$campo['alias']] = $campo['valor'];
  419.                 }
  420.                 //nomUbicacion
  421.                 if ($campo['alias'] == 'claUbicacion') {
  422.                     $array['nomUbicacion'] = $ubicaciones[$campo['valor']] ?? '';
  423.                 }
  424.                 $array['eliminar'] = true;
  425.                 if ($campo['alias'] == 'claUsuarioUbicacion') {
  426.                     $cuentas[$campo['valor']] = 0;
  427.                 }
  428.             }
  429.             $valores[] = $array;
  430.         }
  431.         $catalogos = [];
  432.         $claMatriz $ubicacionesRepo->findForMatriz($cliente);
  433.         $catalogos['ubicaciones'] = $ubicacionesRepo->getUbicacionesArray($cliente$claMatriz$rotulos['region'], $rotulos['centro']);
  434.         $generales = [];
  435.         $generales['claUsuario'] = $claUsuario;
  436.         //la data
  437.         $data = [];
  438.         $data['rotulos'] = $rotulos;
  439.         $data['valores'] = $valores;
  440.         $data['catalogos'] = $catalogos;
  441.         $data['generales'] = $generales;
  442.         return $data;
  443.     }
  444.     /**
  445.      * Method procMultiUbicacionesEnviar
  446.      *
  447.      * @param array $paraProceso
  448.      *
  449.      * @return array
  450.      */
  451.     private function procMultiUbicacionesEnviar($paraProceso): array
  452.     {
  453.         $entityManager $this->getDoctrine()->getManager();
  454.         $fi = new FuncionesIvtcotizador();
  455.         $registry $paraProceso['registry'];
  456.         $usuarioUbiRepo = new UsuarioubicacionesRepository($registry);
  457.         $ubicacionesRepo = new UbicacionesRepository($registry);
  458.         $cliente $paraProceso['cliente'];
  459.         $datosRequest $paraProceso['datosRequest'];
  460.         $nuevo $paraProceso['nuevo'];
  461.         $claUsuario $paraProceso['claUsuario'];
  462.         $claUbicacion $paraProceso['claUbicacion'];
  463.         ///
  464.         $controladorA explode('\\'get_called_class());
  465.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  466.         $rotulos = [
  467.             'agregada' => $_n['agregada'] ?? 'Ubicación agregada con éxito',
  468.             'ubicacionYaAgregada' => $_n['ubicacionYaAgregada'] ?? 'Ubicación previamente agregada',
  469.         ];
  470.         $resultado 1;
  471.         $mensaje $rotulos['agregada'];
  472.         $dataGrid = [];
  473.         $ubiCuenta $usuarioUbiRepo->createQueryBuilder('s')
  474.             ->select('count(s.clausuario)')
  475.             ->where('s.clausuario = :claUsuario')
  476.             ->andWhere('s.claubicacion = :claUbicacion')
  477.             ->setParameters(['claUsuario' => $claUsuario'claUbicacion' => $claUbicacion])
  478.             ->getQuery()
  479.             ->getSingleScalarResult();
  480.         if ($ubiCuenta 0) {
  481.             $mensaje $rotulos['ubicacionYaAgregada'];
  482.             $resultado = -2;
  483.         }
  484.         if ($resultado == 1) {
  485.             $usuUbi = new Usuarioubicaciones();
  486.             $camposContinuar = [];
  487.             $camposSoloNuevo = ['clacliente'];
  488.             $camposParaGrid = ['claubicacion'];
  489.             $camposInfo $usuarioUbiRepo->getDataArray();
  490.             foreach ($datosRequest as $d => $valor) {
  491.                 $campo strtolower($d);
  492.                 if ($campo == 'claubicacion') { //viene como nivel|claUbicacion
  493.                     $valor explode('|'$valor)[1];
  494.                     $campo 'claubicacion';
  495.                 }
  496.                 if (in_array($campo$camposContinuar)) {
  497.                     continue;
  498.                 }
  499.                 if (in_array($campo$camposParaGrid)) {
  500.                     $dataGrid[$d] = $valor;
  501.                 }
  502.                 if ($nuevo == self::_nuevo) {
  503.                     if ($campo == 'clacliente') {
  504.                         $valor $cliente;
  505.                     }
  506.                 } else {
  507.                     if (in_array($campo$camposSoloNuevo)) {
  508.                         continue;
  509.                     }
  510.                 }
  511.                 //valida el tipo de dato
  512.                 $metaData $fi->getCampoMetadata($camposInfo$campo);
  513.                 $columnaTipoDato $metaData['columnaTipoDato'];
  514.                 $valorDefault $metaData['valorDefault'];
  515.                 $tipoDato gettype($valor);
  516.                 if ($tipoDato != $columnaTipoDato) {
  517.                     if ($columnaTipoDato == 'integer') {
  518.                         if ($tipoDato == 'string') {
  519.                             $valor str_replace(','''$valor);
  520.                             $valor str_replace(' '''$valor);
  521.                             $valor = (int) $valor;
  522.                         }
  523.                     }
  524.                     if ($columnaTipoDato == 'float') {
  525.                         if ($tipoDato == 'string') {
  526.                             $valor str_replace(','''$valor);
  527.                             $valor str_replace(' '''$valor);
  528.                             $valor = (float) $valor;
  529.                         }
  530.                     }
  531.                 }
  532.                 $campoSet "set" ucfirst($campo);
  533.                 $usuUbi->$campoSet($valor);
  534.             }
  535.             $usuUbi->setClacliente($cliente);
  536.             $entityManager->persist($usuUbi);
  537.             $entityManager->flush();
  538.             $dataGrid['nomUbicacion'] = $ubicacionesRepo->findForNombreConNivel($usuUbi->getClacliente(), $usuUbi->getClaubicacion());
  539.         }
  540.         //la data
  541.         $data = [];
  542.         $data['resultado'] = $resultado;
  543.         $data['mensaje'] = $mensaje;
  544.         $data['dataGrid'] = $dataGrid;
  545.         return $data;
  546.     }
  547.     /**
  548.      * Method procMultiUbicacionesEliminar
  549.      *
  550.      * @param array $paraProceso
  551.      *
  552.      * @return void
  553.      */
  554.     private function procMultiUbicacionesEliminar($paraProceso)
  555.     {
  556.         $entityManager $this->getDoctrine()->getManager();
  557.         $fi = new FuncionesIvtcotizador();
  558.         $registry $paraProceso['registry'];
  559.         $usuarioUbiRepo = new UsuarioubicacionesRepository($registry);
  560.         $claUsuarioUbicacion $paraProceso['claUsuarioUbicacion'];
  561.         ///
  562.         $controladorA explode('\\'get_called_class());
  563.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  564.         $rotulos = [
  565.             'exito' => $_n['exito'] ?? 'Ubicación eliminada',
  566.             'noExiste' => $_n['noExiste'] ?? 'No existe la ubicación',
  567.         ];
  568.         $resultado 1;
  569.         $mensaje $rotulos['exito'];
  570.         $usuUbi $usuarioUbiRepo->find($claUsuarioUbicacion);
  571.         if ($usuUbi == null) {
  572.             $resultado = -1;
  573.             $mensaje $rotulos['noExiste'];
  574.         }
  575.         if ($resultado == 1) {
  576.             $entityManager->remove($usuUbi);
  577.             $entityManager->flush();
  578.         }
  579.         //la data
  580.         $data = [];
  581.         $data['resultado'] = $resultado;
  582.         $data['mensaje'] = $mensaje;
  583.         return $data;
  584.     }
  585.     /**
  586.      * Method procUsuariosDesactivar
  587.      *
  588.      * @param array $paraProceso
  589.      *
  590.      * @return array
  591.      */
  592.     private function procUsuariosDesactivar($paraProceso): array
  593.     {
  594.         $entityManager $this->getDoctrine()->getManager();
  595.         $fi = new FuncionesIvtcotizador();
  596.         $registry $paraProceso['registry'];
  597.         $requestStack $paraProceso['requestStack'];
  598.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  599.         $cliente $paraProceso['cliente'];
  600.         $datosRequest $paraProceso['datosRequest'];
  601.         $claUsuario $paraProceso['claUsuario'];
  602.         ///
  603.         $controladorA explode('\\'get_called_class());
  604.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  605.         $rotulos = [
  606.             'exito' => $_n['exito'] ?? 'Usuario desactivado',
  607.             'usuarioNoExiste' => $_n['usuarioNoExiste'] ?? 'El usuario no existe',
  608.         ];
  609.         $resultado 1;
  610.         $mensaje $rotulos['exito'];
  611.         $dataGrid = [];
  612.         $usuario $usuariosRepo->findForClausuario($cliente$claUsuario);
  613.         if ($usuario == null) {
  614.             $resultado = -1;
  615.             $mensaje $rotulos['usuarioNoExiste'];
  616.         }
  617.         if ($resultado == 1) {
  618.             $usuario->setActivo('0');
  619.             $entityManager->persist($usuario);
  620.             $entityManager->flush();
  621.             $dataGrid['claUsuario'] = $usuario->getClausuario();
  622.             $dataGrid['activo'] = $usuario->getActivo();
  623.         }
  624.         //la data
  625.         $data = [];
  626.         $data['resultado'] = $resultado;
  627.         $data['mensaje'] = $mensaje;
  628.         $data['dataGrid'] = $dataGrid;
  629.         return $data;
  630.     }
  631.     /**
  632.      * Method procUsuariosActivar
  633.      *
  634.      * @param array $paraProceso
  635.      *
  636.      * @return array
  637.      */
  638.     private function procUsuariosActivar($paraProceso): array
  639.     {
  640.         $entityManager $this->getDoctrine()->getManager();
  641.         $fi = new FuncionesIvtcotizador();
  642.         $registry $paraProceso['registry'];
  643.         $requestStack $paraProceso['requestStack'];
  644.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  645.         $cliente $paraProceso['cliente'];
  646.         $datosRequest $paraProceso['datosRequest'];
  647.         $claUsuario $paraProceso['claUsuario'];
  648.         ///
  649.         $controladorA explode('\\'get_called_class());
  650.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  651.         $rotulos = [
  652.             'exito' => $_n['exito'] ?? 'Usuario activado',
  653.             'usuarioNoExiste' => $_n['usuarioNoExiste'] ?? 'El usuario no existe',
  654.         ];
  655.         $resultado 1;
  656.         $mensaje $rotulos['exito'];
  657.         $dataGrid = [];
  658.         $usuario $usuariosRepo->findForClausuario($cliente$claUsuario);
  659.         if ($usuario == null) {
  660.             $resultado = -1;
  661.             $mensaje $rotulos['usuarioNoExiste'];
  662.         }
  663.         if ($resultado == 1) {
  664.             $usuario->setActivo('1');
  665.             $entityManager->persist($usuario);
  666.             $entityManager->flush();
  667.             $dataGrid['claUsuario'] = $usuario->getClausuario();
  668.             $dataGrid['activo'] = $usuario->getActivo();
  669.         }
  670.         //la data
  671.         $data = [];
  672.         $data['resultado'] = $resultado;
  673.         $data['mensaje'] = $mensaje;
  674.         $data['dataGrid'] = $dataGrid;
  675.         return $data;
  676.     }
  677.     /**
  678.      * Method procUsuariosCambiarContra
  679.      *
  680.      * @param array $paraProceso
  681.      *
  682.      * @return array
  683.      */
  684.     private function procUsuariosCambiarContra($paraProceso): array
  685.     {
  686.         $fi = new FuncionesIvtcotizador();
  687.         $claUsuario $paraProceso['claUsuario'];
  688.         $registry $paraProceso['registry'];
  689.         $cliente $paraProceso['cliente'];
  690.         ///
  691.         $controladorA explode('\\'get_called_class());
  692.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  693.         $rotulos = [
  694.             'titulo' => $_n['Cambiar contraseña'] ?? 'Cambiar contraseña',
  695.             'clave' => $_n['clave'] ?? 'Clave',
  696.             'contra' => $_n['contra'] ?? 'Contraseña',
  697.             'confirmacion' => $_n['confirmacion'] ?? 'Confirmación',
  698.             'guardar' => $_n['guardar'] ?? 'Guardar',
  699.             'contraAviso' => $_n['contraAviso'] ?? 'Indique la contraseña',
  700.             'confirmacionAviso' => $_n['confirmacionAviso'] ?? 'Indique la confirmación',
  701.             'noCoinciden' => $_n['noCoinciden'] ?? 'La contraseña y la confirmación no coinciden',
  702.             'error' => $_n['error'] ?? 'Revise los campos',
  703.             'noCumple' => $_n['noCumple'] ?? 'La contraseña no cumple con las reglas. Mínimo 8 carácteres, mínimo un número',
  704.             'caracteres' => $_n['caracteres'] ?? 'Mínimo 8 caracteres',
  705.             'minuscula' => $_n['minuscula'] ?? 'Una minúscula',
  706.             'mayuscula' => $_n['mayuscula'] ?? 'Una mayúscula',
  707.             'numero' => $_n['numero'] ?? 'Un número',
  708.             'reglas' => $_n['reglas'] ?? 'Reglas de contraseñas',
  709.         ];
  710.         $valores = [];
  711.         $valores['claUsuario'] = $claUsuario;
  712.         ///
  713.         $html = [
  714.             "titulo" => $rotulos["titulo"],
  715.         ];
  716.         ///
  717.         $generales = [];
  718.         //la data
  719.         $data = [];
  720.         $data['generales'] = $generales;
  721.         $data['rotulos'] = $rotulos;
  722.         $data['html'] = $html;
  723.         $data['valores'] = $valores;
  724.         return $data;
  725.     }
  726.     /**
  727.      * Method procUsuariosCambiarContraEnviar
  728.      *
  729.      * @param array $paraProceso
  730.      *
  731.      * @return array
  732.      */
  733.     private function procUsuariosCambiarContraEnviar($paraProceso): array
  734.     {
  735.         $entityManager $this->getDoctrine()->getManager();
  736.         $fi = new FuncionesIvtcotizador();
  737.         $registry $paraProceso['registry'];
  738.         $requestStack $paraProceso['requestStack'];
  739.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  740.         $hasher $paraProceso['hasher'];
  741.         $cliente $paraProceso['cliente'];
  742.         $claUsuario $paraProceso['claUsuario'];
  743.         $contra $paraProceso['contra'];
  744.         $contraActual $paraProceso['contraActual'];
  745.         $id $paraProceso['id'];
  746.         ///
  747.         $controladorA explode('\\'get_called_class());
  748.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  749.         $rotulos = [
  750.             'exito' => $_n['exito'] ?? 'Contraseña cambiada con éxito',
  751.             'usuarioNoExiste' => $_n['usuarioNoExiste'] ?? 'El usuario no existe',
  752.             'noCoincide' => $_n['noCoincide'] ?? 'La contraseña actual no coincide',
  753.         ];
  754.         $resultado 1;
  755.         $mensaje $rotulos['exito'];
  756.         if (strlen($contraActual) > 0) {
  757.             $usuario $usuariosRepo->find($id);
  758.         } else {
  759.             $usuario $usuariosRepo->findForClausuario($cliente$claUsuario);
  760.         }
  761.         if ($usuario == null) {
  762.             $resultado = -1;
  763.             $mensaje $rotulos['usuarioNoExiste'];
  764.         }
  765.         if ($resultado == 1) {
  766.             if (strlen($contraActual) > 0) {
  767.                 $compara $hasher->isPasswordValid($usuario$contraActual);
  768.                 if (!$compara) {
  769.                     $resultado = -2;
  770.                     $mensaje $rotulos['noCoincide'];
  771.                 }
  772.             }
  773.         }
  774.         if ($resultado == 1) {
  775.             $contra1 $usuario->getContra1();
  776.             $contra2 $usuario->getContra2();
  777.             $contra3 $usuario->getContra3();
  778.             $contra $hasher->hashPassword($usuario$contra);
  779.             $usuario->setPassword($contra);
  780.             $usuario->setContra($contra);
  781.             $usuario->setContra1($contra);
  782.             $usuario->setContra2($contra1);
  783.             $usuario->setContra3($contra2);
  784.             $usuario->setFecha($fi->ivtCotizadorTiempoDT());
  785.             $entityManager->persist($usuario);
  786.             $entityManager->flush();
  787.         }
  788.         //la data
  789.         $data = [];
  790.         $data['resultado'] = $resultado;
  791.         $data['mensaje'] = $mensaje;
  792.         return $data;
  793.     }
  794.     /**
  795.      * Method procAvisosAgregar
  796.      *
  797.      * @param array $paraProceso
  798.      *
  799.      * @return array
  800.      */
  801.     private function procAvisosAgregar($paraProceso): array
  802.     {
  803.         $entityManager $this->getDoctrine()->getManager();
  804.         $fi = new FuncionesIvtcotizador();
  805.         $registry $paraProceso['registry'];
  806.         $usuariosAvisosRepo = new UsuariosavisosRepository($registry);
  807.         $cliente $paraProceso['cliente'];
  808.         $claUsuario $paraProceso['claUsuario'];
  809.         $claSeccion $paraProceso['claSeccion'];
  810.         ///
  811.         $controladorA explode('\\'get_called_class());
  812.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  813.         $rotulos = [
  814.             'exito' => $_n['exito'] ?? 'Sección agregada con éxito',
  815.             'seccionYaAgregada' => $_n['seccionYaAgregada'] ?? 'Sección previamente agregada',
  816.         ];
  817.         $resultado 1;
  818.         $mensaje $rotulos['exito'];
  819.         $dataGrid = [];
  820.         $seccionCuenta $usuariosAvisosRepo->createQueryBuilder('s')
  821.             ->select('count(s.claaviso)')
  822.             ->where('s.clausuario = :claUsuario')
  823.             ->andWhere('s.clatipoorigen = :claTipoOrigen')
  824.             ->setParameters(['claUsuario' => $claUsuario'claTipoOrigen' => $claSeccion])
  825.             ->getQuery()
  826.             ->getSingleScalarResult();
  827.         if ($seccionCuenta 0) {
  828.             $mensaje $rotulos['seccionYaAgregada'];
  829.             $resultado = -2;
  830.         }
  831.         if ($resultado == 1) {
  832.             $entityManager $this->getDoctrine()->getManager();
  833.             $qb $entityManager->createQueryBuilder();
  834.             $qb->select('p')
  835.                 ->from('App\Entity\Secciones''p')
  836.                 ->where('p.claseccion = :claSeccion')
  837.                 ->setParameters(['claSeccion' => $claSeccion]);
  838.             $query $qb->getQuery();
  839.             $res $query->getResult();
  840.             $claOrigen 0;
  841.             foreach ($res as $re) {
  842.                 $claOrigen $re->getClaorigen();
  843.             }
  844.             $usuAviso = new Usuariosavisos();
  845.             $usuAviso->setClacliente($cliente);
  846.             $usuAviso->setClaorigen($claOrigen);
  847.             $usuAviso->setClatipoorigen($claSeccion);
  848.             $usuAviso->setClausuario($claUsuario);
  849.             $entityManager->persist($usuAviso);
  850.             $entityManager->flush();
  851.         }
  852.         //la data
  853.         $data = [];
  854.         $data['resultado'] = $resultado;
  855.         $data['mensaje'] = $mensaje;
  856.         $data['dataGrid'] = $dataGrid;
  857.         return $data;
  858.     }
  859.     /**
  860.      * Method procAvisosQuitar
  861.      *
  862.      * @param array $paraProceso
  863.      *
  864.      * @return array
  865.      */
  866.     private function procAvisosQuitar($paraProceso): array
  867.     {
  868.         $entityManager $this->getDoctrine()->getManager();
  869.         $fi = new FuncionesIvtcotizador();
  870.         $registry $paraProceso['registry'];
  871.         $usuariosAvisosRepo = new UsuariosavisosRepository($registry);
  872.         $cliente $paraProceso['cliente'];
  873.         $claUsuario $paraProceso['claUsuario'];
  874.         $claSeccion $paraProceso['claSeccion'];
  875.         ///
  876.         $controladorA explode('\\'get_called_class());
  877.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  878.         $rotulos = [
  879.             'exito' => $_n['exito'] ?? 'Sección quitada',
  880.         ];
  881.         $resultado 1;
  882.         $mensaje $rotulos['exito'];
  883.         $dataGrid = [];
  884.         $res $usuariosAvisosRepo->createQueryBuilder('s')
  885.             ->where('s.clausuario = :claUsuario')
  886.             ->andWhere('s.clatipoorigen = :claTipoOrigen')
  887.             ->setParameters(['claUsuario' => $claUsuario'claTipoOrigen' => $claSeccion])
  888.             ->getQuery()
  889.             ->getResult();
  890.         $claAviso 0;
  891.         foreach ($res as $re) {
  892.             $claAviso $re->getClaaviso();
  893.         }
  894.         if ($claAviso 0) {
  895.             $usuAviso $usuariosAvisosRepo->find($claAviso);
  896.             $entityManager->remove($usuAviso);
  897.             $entityManager->flush();
  898.         }
  899.         //la data
  900.         $data = [];
  901.         $data['resultado'] = $resultado;
  902.         $data['mensaje'] = $mensaje;
  903.         $data['dataGrid'] = $dataGrid;
  904.         return $data;
  905.     }
  906.     /**
  907.      * Method procUsuariosAvisos
  908.      *
  909.      * @param array $paraProceso
  910.      *
  911.      * @return void
  912.      */
  913.     private function procUsuariosAvisos($paraProceso)
  914.     {
  915.         $entityManager $this->getDoctrine()->getManager();
  916.         $fi = new FuncionesIvtcotizador();
  917.         $registry $paraProceso['registry'];
  918.         $usuariosAvisosRepo = new UsuariosavisosRepository($registry);
  919.         $origenesRepo = new OrigenesRepository($registry);
  920.         $seccionesRepo = new SeccionesRepository($registry);
  921.         $cliente $paraProceso['cliente'];
  922.         $claUsuario $paraProceso['claUsuario'];
  923.         ///
  924.         $controladorA explode('\\'get_called_class());
  925.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  926.         $rotulos = [
  927.             'origen' => $_n['origen'] ?? 'Origen',
  928.             'seccion' => $_n['seccion'] ?? 'Sección',
  929.             'titulo' => $_n['titulo'] ?? 'Configuración de avisos',
  930.         ];
  931.         $origenes $origenesRepo->findForCatalogoIndiceEsClave();
  932.         $secciones $seccionesRepo->findForCatalogoIndiceEsClave();
  933.         $valoresDB $usuariosAvisosRepo->findForGrid($cliente$claUsuario);
  934.         $valores = [];
  935.         $enLista = ['claOrigen''claTipoOrigen'];
  936.         foreach ($valoresDB as $x => $campos) {
  937.             $array = [];
  938.             foreach ($campos as $y => $campo) {
  939.                 if (in_array($campo['alias'], $enLista)) {
  940.                     $array[$campo['alias']] = $campo['valor'];
  941.                 }
  942.                 //nomOrigen
  943.                 if ($campo['alias'] == 'claOrigen') {
  944.                     $array['nomOrigen'] = $origenes[$campo['valor']] ?? '';
  945.                 }
  946.                 //claTipoOrigen
  947.                 if ($campo['alias'] == 'claTipoOrigen') {
  948.                     $array['nomTipoOrigen'] = $secciones[$campo['valor']] ?? '';
  949.                 }
  950.                 $array['eliminar'] = true;
  951.             }
  952.             $valores[] = $array;
  953.         }
  954.         $valoresFalta = [];
  955.         $seccionesRS $seccionesRepo->findForRS();
  956.         foreach ($origenes as $claOrigen => $nomOrigen) {
  957.             foreach ($seccionesRS as $seccion) {
  958.                 if ($seccion->getClaorigen() == $claOrigen) {
  959.                     $ya false;
  960.                     foreach ($valores as $x => $valor) {
  961.                         if ($valor['claOrigen'] == $claOrigen && $valor['claTipoOrigen'] == $seccion->getClaseccion()) {
  962.                             $ya true;
  963.                         }
  964.                     }
  965.                     if (!$ya) {
  966.                         $array = [];
  967.                         $array['claOrigen'] = $claOrigen;
  968.                         $array['claTipoOrigen'] = $seccion->getClaseccion();
  969.                         $array['nomOrigen'] = $origenes[$claOrigen] ?? '';
  970.                         $array['nomTipoOrigen'] = $secciones[$seccion->getClaseccion()] ?? '';
  971.                         $valoresFalta[] = $array;
  972.                     }
  973.                 }
  974.             }
  975.         }
  976.         $catalogos = [];
  977.         $generales = [];
  978.         $generales['claUsuario'] = $claUsuario;
  979.         //la data
  980.         $data = [];
  981.         $data['rotulos'] = $rotulos;
  982.         $data['valores'] = $valores;
  983.         $data['valoresFalta'] = $valoresFalta;
  984.         $data['catalogos'] = $catalogos;
  985.         $data['generales'] = $generales;
  986.         return $data;
  987.     }
  988.     /**
  989.      * Method procUsuariosmenuPrincipal
  990.      *
  991.      * @param array $paraProceso
  992.      *
  993.      * @return void
  994.      */
  995.     private function procUsuariosmenuPrincipal($paraProceso)
  996.     {
  997.         $entityManager $this->getDoctrine()->getManager();
  998.         $fi = new FuncionesIvtcotizador();
  999.         $cliente $paraProceso['cliente'];
  1000.         $usuarioFunciones $paraProceso['usuarioFunciones'];
  1001.         $tipoUsuario $paraProceso['tipoUsuario'];
  1002.         ///
  1003.         // $controladorA = explode('\\', get_called_class());
  1004.         // $_n = $fi->get_n($registry, end($controladorA), __FUNCTION__, $cliente);
  1005.         //para nomenclatura utilizar queries directamente
  1006.         $rotulos = [
  1007.             'menu' => $_n['menu'] ?? 'Menú',
  1008.         ];
  1009.         ///
  1010.         $qb $entityManager->createQueryBuilder();
  1011.         $qb->select('p')
  1012.             ->from('App\Entity\Funciones''p');
  1013.         $query $qb->getQuery();
  1014.         $funcionesRS $query->getResult();
  1015.         $funciones = [];
  1016.         foreach ($funcionesRS as $funcion) {
  1017.             $funciones[$funcion->getClafuncion()] = [
  1018.                 'descripcion' => $funcion->getDescripcion(),
  1019.                 'padre' => $funcion->getPadre(),
  1020.                 'comando' => $funcion->getComando(),
  1021.                 'imagen' => $funcion->getImagen(),
  1022.                 'idTipo' => $funcion->getIdtipo(),
  1023.             ];
  1024.         }
  1025.         $modulos = [];
  1026.         $subModulos = [];
  1027.         foreach ($usuarioFunciones as $claFuncion => $descripcion) {
  1028.             if (strlen($claFuncion) == 2) {
  1029.                 if (isset($funciones[$claFuncion])) {
  1030.                     $modulos[] = [
  1031.                         'claModulo' => $claFuncion,
  1032.                         'nomModulo' => $funciones[$claFuncion]['descripcion']
  1033.                     ];
  1034.                 }
  1035.             } else {
  1036.                 if (isset($funciones[$claFuncion])) {
  1037.                     if ( strlen($funciones[$claFuncion]['padre']) == && strlen($funciones[$claFuncion]['comando']) > ) {
  1038.                         $array = [];
  1039.                         $array['claSubModulo'] = $claFuncion;
  1040.                         $array['nomSubModulo'] = $funciones[$claFuncion]['descripcion'];
  1041.                         $array['claModulo'] = $funciones[$claFuncion]['padre'];
  1042.                         $array['comando'] = $funciones[$claFuncion]['comando'];
  1043.                         $array['imagen'] = $funciones[$claFuncion]['imagen'];
  1044.                         $agregar false;
  1045.                         if($tipoUsuario == Usuarios::_claTipoRecolectorDatos){
  1046.                             if( $funciones[$claFuncion]['idTipo'] == Funciones::_idTipoColectorDatos){
  1047.                                 $agregar true;
  1048.                             }
  1049.                         }else{
  1050.                             if( $funciones[$claFuncion]['idTipo'] == Funciones::_idTipoNormal){
  1051.                                 $agregar true;
  1052.                             }
  1053.                         }
  1054.                         if($agregar){
  1055.                             $subModulos[] = $array;
  1056.                         }
  1057.                     }
  1058.                 }
  1059.             }
  1060.         }
  1061.         //la data
  1062.         $data = [];
  1063.         $data['modulos'] = $modulos;
  1064.         $data['subModulos'] = $subModulos;
  1065.         $data['rotulos'] = $rotulos;
  1066.         return $data;
  1067.     }
  1068.     /**
  1069.      * Method procUsuariosmenuFavoritos
  1070.      *
  1071.      * @param array $paraProceso
  1072.      *
  1073.      * @return void
  1074.      */
  1075.     private function procUsuariosmenuFavoritos($paraProceso){
  1076.         $entityManager $this->getDoctrine()->getManager();
  1077.         $cliente $paraProceso['cliente'];
  1078.         $claUsuario $paraProceso['claUsuario'];
  1079.         ///
  1080.         $qb $entityManager->createQueryBuilder();
  1081.         $qb->select('p')
  1082.                 ->from('App\Entity\Usuariosfavoritos''p')
  1083.                 ->where('p.clausuario = :claUsuario')
  1084.                 ->andWhere('p.clacliente = :cliente')
  1085.                 ->setParameters(['claUsuario' => $claUsuario'cliente' => $cliente]);
  1086.         $query $qb->getQuery();
  1087.         $favoritosRS $query->getResult();
  1088.         $in = [];
  1089.         foreach ($favoritosRS as $favo) {
  1090.             $in[] = $favo->getClafuncion();
  1091.         }
  1092.         $qb $entityManager->createQueryBuilder();
  1093.         $qb->select('p')
  1094.             ->from('App\Entity\Funciones''p')
  1095.             ->where('p.clafuncion in (:in)')
  1096.             ->setParameters(['in' => $in]);
  1097.         $query $qb->getQuery();
  1098.         $funcionesRS $query->getResult();
  1099.         $funciones = [];
  1100.         foreach ($funcionesRS as $funcion) {
  1101.             $funciones[$funcion->getClafuncion()] = [
  1102.                 'descripcion' => $funcion->getDescripcion(),
  1103.                 'padre' => $funcion->getPadre(),
  1104.                 'comando' => $funcion->getComando(),
  1105.                 'imagen' => $funcion->getImagen(),
  1106.                 'idTipo' => $funcion->getIdtipo(),
  1107.                 'toolTip' => $funcion->getTooltip(),
  1108.             ];
  1109.         }
  1110.         $favoritos = [];
  1111.         foreach ($favoritosRS as $favo) {
  1112.             $claFuncion $favo->getClafuncion();
  1113.             if (isset($funciones[$claFuncion])) {
  1114.                 if ( strlen($funciones[$claFuncion]['padre']) == && strlen($funciones[$claFuncion]['comando']) > ) {
  1115.                     $array = [];
  1116.                     $array['claFuncion'] = $claFuncion;
  1117.                     $array['descripcion'] = $funciones[$claFuncion]['descripcion'];
  1118.                     $array['claModulo'] = $funciones[$claFuncion]['padre'];
  1119.                     $array['comando'] = $funciones[$claFuncion]['comando'];
  1120.                     $array['imagen'] = $funciones[$claFuncion]['imagen'];
  1121.                     $array['toolTip'] = $funciones[$claFuncion]['toolTip'];
  1122.                     $favoritos[] = $array;
  1123.                 }
  1124.             }
  1125.         }
  1126.         //la data
  1127.         $data = [];
  1128.         $data['favoritos'] = $favoritos;
  1129.         return $data;
  1130.     }
  1131.     /**
  1132.      * Method procUsuariosmenuFavoritosAgregar
  1133.      *
  1134.      * @param array $paraProceso
  1135.      *
  1136.      * @return void
  1137.      */
  1138.     private function procUsuariosmenuFavoritosAgregar($paraProceso){
  1139.         $entityManager $this->getDoctrine()->getManager();
  1140.         $fi = new FuncionesIvtcotizador();
  1141.         $registry $paraProceso['registry'];
  1142.         $cliente $paraProceso['cliente'];
  1143.         $claUsuario $paraProceso['claUsuario'];
  1144.         $claFuncion $paraProceso['claFuncion'];
  1145.         $usuariosfavoritosRepo = new UsuariosfavoritosRepository($registry);
  1146.         $funcionesRepo = new FuncionesRepository($registry);
  1147.         ///
  1148.         $controladorA explode('\\'get_called_class());
  1149.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1150.         $rotulos = [
  1151.             'exito' => $_n['exito'] ?? 'Favorito agregado con éxito',
  1152.             'maximoAlcanzado' => $_n['maximoAlcanzado'] ?? 'Máximo de favoritos alcanzado',
  1153.             'repetido' => $_n['repetido'] ?? 'La función ya fue agregada previamente',
  1154.         ];
  1155.         $resultado 1;
  1156.         $mensaje $rotulos['exito'];
  1157.         //no repetir
  1158.         $favoritosCuenta $usuariosfavoritosRepo->createQueryBuilder('s')
  1159.             ->select('count(s.clafavorito)')
  1160.             ->where('s.clausuario = :claUsuario')
  1161.             ->andWhere('s.clacliente = :cliente')
  1162.             ->andWhere('s.clafuncion = :claFuncion')
  1163.             ->setParameters(['claUsuario' => $claUsuario'cliente' => $cliente'claFuncion' => $claFuncion])
  1164.             ->getQuery()
  1165.             ->getSingleScalarResult();
  1166.         if($favoritosCuenta 0){
  1167.             $resultado = -1;
  1168.             $mensaje $rotulos['repetido'];
  1169.         }
  1170.         if($resultado == 1){
  1171.             //maximo 10
  1172.             $favoritosCuenta $usuariosfavoritosRepo->createQueryBuilder('s')
  1173.                 ->select('count(s.clafavorito)')
  1174.                 ->where('s.clausuario = :claUsuario')
  1175.                 ->andWhere('s.clacliente = :cliente')
  1176.                 ->setParameters(['claUsuario' => $claUsuario'cliente' => $cliente])
  1177.                 ->getQuery()
  1178.                 ->getSingleScalarResult();
  1179.             if($favoritosCuenta 9){
  1180.                 $resultado = -2;
  1181.                 $mensaje $rotulos['maximoAlcanzado'];
  1182.             }
  1183.         }
  1184.         $dataGrid = [];
  1185.         if($resultado == 1){
  1186.             $favorito = new Usuariosfavoritos();
  1187.             $favorito->setClacliente($cliente);
  1188.             $favorito->setClausuario($claUsuario);
  1189.             $favorito->setClafuncion($claFuncion);
  1190.             $entityManager->persist($favorito);
  1191.             $entityManager->flush();
  1192.             $dataGrid['descripcion'] = '';
  1193.             $dataGrid['imagen'] = '';
  1194.             $dataGrid['toolTip'] = '';
  1195.             $dataGrid['comando'] = '';
  1196.             $dataGrid['padre'] = '';
  1197.             $funcionesRS $funcionesRepo->findForRS($claFuncion);
  1198.             foreach ($funcionesRS as $fun) {
  1199.                 $dataGrid['descripcion'] = $fun->getDescripcion();
  1200.                 $dataGrid['imagen'] = $fun->getImagen();
  1201.                 $dataGrid['toolTip'] = $fun->getTooltip();
  1202.                 $dataGrid['comando'] = $fun->getComando();
  1203.                 $dataGrid['padre'] = $fun->getPadre();
  1204.             }
  1205.         }
  1206.         //la data
  1207.         $data = [];
  1208.         $data['resultado'] = $resultado;
  1209.         $data['mensaje'] = $mensaje;
  1210.         $data['dataGrid'] = $dataGrid;
  1211.         return $data;
  1212.     }
  1213.     /**
  1214.      * Method procUsuariosmenuFavoritosQuitar
  1215.      *
  1216.      * @param array $paraProceso
  1217.      *
  1218.      * @return void
  1219.      */
  1220.     private function procUsuariosmenuFavoritosQuitar($paraProceso){
  1221.         $entityManager $this->getDoctrine()->getManager();
  1222.         $fi = new FuncionesIvtcotizador();
  1223.         $registry $paraProceso['registry'];
  1224.         $cliente $paraProceso['cliente'];
  1225.         $claUsuario $paraProceso['claUsuario'];
  1226.         $claFuncion $paraProceso['claFuncion'];
  1227.         $usuariosfavoritosRepo = new UsuariosfavoritosRepository($registry);
  1228.         ///
  1229.         $controladorA explode('\\'get_called_class());
  1230.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1231.         $rotulos = [
  1232.             'exito' => $_n['exito'] ?? 'Favorito removido',
  1233.             'noExiste' => $_n['noExiste'] ?? 'Favorito no existe',
  1234.         ];
  1235.         $resultado 1;
  1236.         $mensaje $rotulos['exito'];
  1237.         //claFavorito
  1238.         $qb $entityManager->createQueryBuilder();
  1239.         $qb->select('s')
  1240.             ->from('App\Entity\Usuariosfavoritos''s')
  1241.             ->where('s.clausuario = :claUsuario')
  1242.             ->andWhere('s.clacliente = :cliente')
  1243.             ->andWhere('s.clafuncion = :claFuncion')
  1244.             ->setParameters(['claUsuario' => $claUsuario'cliente' => $cliente'claFuncion' => $claFuncion]);
  1245.         $query $qb->getQuery();
  1246.         $favoritosRS $query->getResult();
  1247.         $claFavorito 0;
  1248.         foreach ($favoritosRS as $favo) {
  1249.             $claFavorito $favo->getClafavorito();
  1250.         }
  1251.         if($claFavorito == 0){
  1252.             $resultado = -1;
  1253.             $mensaje $rotulos['noExiste'];
  1254.         }
  1255.         if($resultado == 1){
  1256.             $favorito $usuariosfavoritosRepo->find($claFavorito);
  1257.             $entityManager->remove($favorito);
  1258.             $entityManager->flush();
  1259.         }
  1260.         //la data
  1261.         $data = [];
  1262.         $data['resultado'] = $resultado;
  1263.         $data['mensaje'] = $mensaje;
  1264.         return $data;
  1265.     }
  1266.     /**
  1267.      * Method procUsuariosSubMenu
  1268.      *
  1269.      * @param array $paraProceso
  1270.      *
  1271.      * @return void
  1272.      */
  1273.     private function procUsuariosSubMenu($paraProceso){
  1274.         $entityManager $this->getDoctrine()->getManager();
  1275.         $cliente $paraProceso['cliente'];
  1276.         $claUsuario $paraProceso['claUsuario'];
  1277.         $subMenuRama $paraProceso['subMenuRama'];
  1278.         $usuarioFunciones $paraProceso['usuarioFunciones'];
  1279.         ///
  1280.         $subMenuRama strlen($subMenuRama) > $subMenuRama 'XXX';
  1281.         $qb $entityManager->createQueryBuilder();
  1282.         $qb->select('p')
  1283.             ->from('App\Entity\Funciones''p')
  1284.             ->where('p.clafuncion like :like')
  1285.             ->setParameters(['like' => $subMenuRama "%"]);
  1286.         $query $qb->getQuery();
  1287.         $funcionesRS $query->getResult();
  1288.         $funciones = [];
  1289.         foreach ($funcionesRS as $funcion) {
  1290.             $funciones[$funcion->getClafuncion()] = [
  1291.                 'descripcion' => $funcion->getDescripcion(),
  1292.                 'padre' => $funcion->getPadre(),
  1293.                 'comando' => $funcion->getComando(),
  1294.                 'imagen' => $funcion->getImagen(),
  1295.                 'idTipo' => $funcion->getIdtipo(),
  1296.                 'toolTip' => $funcion->getTooltip(),
  1297.             ];
  1298.         }
  1299.         $subMenu = [];
  1300.         foreach ($usuarioFunciones as $claFuncion => $funcion) {
  1301.             if (isset($funciones[$claFuncion])) {
  1302.                 if ( strlen($funciones[$claFuncion]['padre']) == && strlen($funciones[$claFuncion]['comando']) > ) {
  1303.                     $array = [];
  1304.                     $array['claFuncion'] = $claFuncion;
  1305.                     $array['descripcion'] = $funciones[$claFuncion]['descripcion'];
  1306.                     $array['claModulo'] = $funciones[$claFuncion]['padre'];
  1307.                     $array['comando'] = $funciones[$claFuncion]['comando'];
  1308.                     $array['imagen'] = $funciones[$claFuncion]['imagen'];
  1309.                     $array['toolTip'] = $funciones[$claFuncion]['toolTip'];
  1310.                     $subMenu[] = $array;
  1311.                 }
  1312.             }
  1313.         }
  1314.         //la data
  1315.         $data = [];
  1316.         $data['subMenu'] = $subMenu;
  1317.         return $data;
  1318.     }
  1319.     /**
  1320.      * Method procUsuariosMenuUsuario
  1321.      *
  1322.      * @param array $paraProceso
  1323.      *
  1324.      * @return void
  1325.      */
  1326.     private function procUsuariosMenuUsuario($paraProceso){
  1327.         $fi = new FuncionesIvtcotizador();
  1328.         $registry $paraProceso['registry'];
  1329.         $claUsuario $paraProceso['claUsuario'];
  1330.         $cliente $paraProceso['cliente'];
  1331.         $nomUsuario $paraProceso['nomUsuario'];
  1332.         $ubicacionesRepo = new UbicacionesRepository($registry);
  1333.         $claUbicacion $paraProceso['claUbicacion'];
  1334.         $sesion $paraProceso['sesion'];
  1335.         ///
  1336.         $controladorA explode('\\'get_called_class());
  1337.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1338.         $rotulos = [
  1339.             'salir' => $_n['salir'] ?? 'Salir de IVTCotizador',
  1340.             'ubicacion' => $_n['ubicacion'] ?? 'Ubicación',
  1341.             'contra' => $_n['contra'] ?? 'Contraseña',
  1342.             'contraCambio' => $_n['contraCambio'] ?? 'Cambio de contraseña',
  1343.             'ubicacionCambio' => $_n['ubicacionCambio'] ?? 'Cambio de ubicación',
  1344.             'perfilCliente' => $_n['perfilCliente'] ?? 'Perfil empresa',
  1345.             'perfilClienteTip' => $_n['perfilClienteTip'] ?? 'Datos generales de la empresa',
  1346.         ];
  1347.         $valores = [
  1348.             'nomUsuario' => $nomUsuario,
  1349.             'nomUbicacion' => $ubicacionesRepo->findForNombre($cliente$claUbicacion),
  1350.         ];
  1351.         $generales = [];
  1352.         $generales['multiUbicacion'] = isset($sesion->get('parametros')['MultiUbicacion']) ? $sesion->get('parametros')['MultiUbicacion'] : '0';
  1353.         //la data
  1354.         $data = [];
  1355.         $data['rotulos'] = $rotulos;
  1356.         $data['valores'] = $valores;
  1357.         $data['generales'] = $generales;
  1358.         return $data;
  1359.     }
  1360.     /**
  1361.      * Method procUsuariosContraCambiar
  1362.      *
  1363.      * @param array $paraProceso
  1364.      *
  1365.      * @return void
  1366.      */
  1367.     private function procUsuariosContraCambiar($paraProceso){
  1368.         $fi = new FuncionesIvtcotizador();
  1369.         $registry $paraProceso['registry'];
  1370.         $cliente $paraProceso['cliente'];
  1371.         ///
  1372.         $controladorA explode('\\'get_called_class());
  1373.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1374.         $rotulos = [
  1375.             'guardar' => $_n['guardar'] ?? 'Guardar',
  1376.             'titulo' => $_n['titulo'] ?? 'Cambio de contraseña',
  1377.             'contraActual' => $_n['contraActual'] ?? 'Contraseña actual',
  1378.             'contra' => $_n['contra'] ?? 'Nueva contraseña',
  1379.             'confirmacion' => $_n['confirmacion'] ?? 'Confirmación',
  1380.             'contraActualAviso' => $_n['contraActualAviso'] ?? 'Indique la contraseña actual',
  1381.             'contraAviso' => $_n['contraAviso'] ?? 'Indique la nueva contraseña',
  1382.             'confirmacionAviso' => $_n['confirmacionAviso'] ?? 'Indique la confirmación',
  1383.             'noCoinciden' => $_n['noCoinciden'] ?? 'La contraseña y la confirmación no coinciden',
  1384.             'reglas' => $_n['reglas'] ?? 'Reglas de contraseñas',
  1385.             'caracteres' => $_n['caracteres'] ?? 'Mínimo ocho caracteres',
  1386.             'minuscula' => $_n['minuscula'] ?? 'Por lo menos una minúscula',
  1387.             'mayuscula' => $_n['mayuscula'] ?? 'Por lo menos una mayúscula',
  1388.             'numero' => $_n['numero'] ?? 'Por lo menos un número',
  1389.             'noCumple' => $_n['noCumple'] ?? 'La contraseña no cumple con las reglas. Mínimo 8 carácteres, mínimo un número',
  1390.             'cerrar' => $_n['cerrar'] ?? 'Cerrar',
  1391.         ];
  1392.         $valores = [
  1393.             'contraActual' => '',
  1394.             'contra' => '',
  1395.         ];
  1396.         //la data
  1397.         $data = [];
  1398.         $data['rotulos'] = $rotulos;
  1399.         $data['valores'] = $valores;
  1400.         return $data;
  1401.     }     
  1402.     /**
  1403.      * Method procLogin
  1404.      *
  1405.      * @param $paraProceso $paraProceso [explicite description]
  1406.      *
  1407.      * @return void
  1408.      */
  1409.     private function procLogin($paraProceso){
  1410.         $entityManager $this->getDoctrine()->getManager();
  1411.         $fi = new FuncionesIvtcotizador();
  1412.         $registry $paraProceso['registry'];
  1413.         //$HTTP_HOST = $paraProceso['HTTP_HOST'];
  1414.         $lastUsername $paraProceso['lastUsername'];
  1415.         ///
  1416.         //$clientesRepo = new ClientesRepository($registry);
  1417.         //$usuariosRepo = new UsuariosRepository($registry, $requestStack);
  1418.         ///
  1419.         //$claStatus = 0;
  1420.         //$servidorDatos = $fi->servidorDatos($HTTP_HOST);
  1421.         //$claCliente = 0;
  1422.         //$usuario = $usuariosRepo->findForCorreoSinCliente($correo);
  1423.         
  1424.         // switch ($servidorDatos['tipo']) {
  1425.         //     case 'subDominio':
  1426.         //         $clientes = $clientesRepo->findBySubdominio($servidorDatos['subDominio']);
  1427.         //         foreach ($clientes as $cliente) {
  1428.         //             $claCliente = $cliente->getClacliente();
  1429.         //             $claStatus = $cliente->getClastatus();
  1430.         //             break;
  1431.         //         }
  1432.         //         break;
  1433.         // }
  1434.         ///
  1435.         $controladorA explode('\\'get_called_class());
  1436.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__0);
  1437.         $rotulos = [
  1438.             'entrar' => $_n['entrar'] ?? 'Entrar',
  1439.             'nomUsuario' => $_n['nomUsuario'] ?? 'Usuario',
  1440.             'contra' => $_n['contra'] ?? 'Contraseña',
  1441.             'nomUsuarioAviso' => $_n['nomUsuarioAviso'] ?? 'Indique el usuario',
  1442.             'contraAviso' => $_n['contraAviso'] ?? 'Indique la contraseña',
  1443.             'olvido' => $_n['olvido'] ?? '¿Olvidaste la contraseña?',
  1444.             'titulo' => $_n['titulo'] ?? 'Bienvenido',
  1445.             'olvidoTitulo' => $_n['olvidoTitulo'] ?? 'Recuperación de contraseña',
  1446.             'recuperar' => $_n['recuperar'] ?? 'Recuperar',
  1447.             'cancelar' => $_n['cancelar'] ?? 'Cancelar',
  1448.             'correo' => $_n['correo'] ?? 'Correo',
  1449.             'correoAviso' => $_n['correoAviso'] ?? 'Indique el correo',
  1450.             'errorInstancia' => $_n['errorInstancia'] ?? 'Error en la instancia',
  1451.             'cerrar' => $_n['cerrar'] ?? 'Cerrar',
  1452.             'errorUsuario' => $_n['errorUsuario'] ?? 'Error en usuario o contraseña',
  1453.             //'cuentaSuspendida' => $_n['cuentaSuspendida'] ?? 'Cuenta suspendida',
  1454.         ];
  1455.         $valores = [
  1456.             'nomUsuario' => $lastUsername,
  1457.         ];
  1458.         $generales = [];
  1459.         $cerrar $rotulos['cerrar'];
  1460.         $errorCredenciales $rotulos['errorUsuario'];
  1461.         $error false;
  1462.         // $plantilla = 'usuarios/login.twig';
  1463.         // if ($claCliente == 0) {
  1464.         //     $errorCredenciales = $rotulos['errorInstancia'];
  1465.         //     $error = true;
  1466.         //     $plantilla = 'usuarios/loginCuentaSuspendida.twig';
  1467.         // } else {
  1468.         //     $error = false;
  1469.         //     if ($claStatus != Clientes::_claStatusActivo) {
  1470.         //         $errorCredenciales = $rotulos['cuentaSuspendida'];
  1471.         //         $error = true;
  1472.         //         $plantilla = 'usuarios/loginCuentaSuspendida.twig';
  1473.         //     }
  1474.         // }
  1475.         ///
  1476.         $data = [];
  1477.         $data['rotulos'] = $rotulos;
  1478.         $data['valores'] = $valores;
  1479.         $data['generales'] = $generales;
  1480.         //$data['claCliente'] = $claCliente;
  1481.         $data['cerrar'] = $cerrar;
  1482.         $data['errorCredenciales'] = $errorCredenciales;
  1483.         //$data['plantilla'] = $plantilla;
  1484.         $data['error'] = $error;
  1485.         return $data;
  1486.     }
  1487.     /**
  1488.      * Method procUbicacionCambiar
  1489.      *
  1490.      * @param array $paraProceso
  1491.      *
  1492.      * @return void
  1493.      */
  1494.     private function procUbicacionCambiar($paraProceso)
  1495.     {
  1496.         $entityManager $this->getDoctrine()->getManager();
  1497.         $fi = new FuncionesIvtcotizador();
  1498.         $registry $paraProceso['registry'];
  1499.         $usuarioUbiRepo = new UsuarioubicacionesRepository($registry);
  1500.         $ubicacionesRepo = new UbicacionesRepository($registry);
  1501.         $cliente $paraProceso['cliente'];
  1502.         $claUsuario $paraProceso['claUsuario'];
  1503.         $claUbicacion $paraProceso['claUbicacion'];
  1504.         ///
  1505.         $controladorA explode('\\'get_called_class());
  1506.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1507.         $rotulos = [
  1508.             'titulo' => $_n['titulo'] ?? 'Cambio de ubicación',
  1509.             'nomUbicacion' => $_n['nomUbicacion'] ?? 'Ubicación',
  1510.             'ubicacion' => $_n['ubicacion'] ?? 'Ubicación',
  1511.             'region' => $_n['region'] ?? 'Región',
  1512.             'centro' => $_n['centro'] ?? 'Centro',
  1513.             'agregar' => $_n['agregar'] ?? 'Agregar',
  1514.             'cambiar' => $_n['cambiar'] ?? 'Cambiar',
  1515.             'cambiarTip' => $_n['cambiarTip'] ?? 'Cambia a la ubicación seleccionada',
  1516.         ];
  1517.         $ubicaciones $ubicacionesRepo->findForIndiceEsClaveConNivel($cliente);
  1518.         $valoresDB $usuarioUbiRepo->findForGrid($cliente$claUsuario);
  1519.         $valores = [];
  1520.         $enLista = ['claUsuario''claUbicacion''claUsuarioUbicacion'];
  1521.         $cuentas = [];
  1522.         foreach ($valoresDB as $x => $campos) {
  1523.             $array = [];
  1524.             $agregar true;
  1525.             foreach ($campos as $y => $campo) {
  1526.                 if (in_array($campo['alias'], $enLista)) {
  1527.                     $array[$campo['alias']] = $campo['valor'];
  1528.                 }
  1529.                 //nomUbicacion
  1530.                 if ($campo['alias'] == 'claUbicacion') {
  1531.                     $array['nomUbicacion'] = $ubicaciones[$campo['valor']] ?? '';
  1532.                     if($campo['valor'] == $claUbicacion){
  1533.                         $agregar false;
  1534.                     }
  1535.                 }
  1536.                 $array['eliminar'] = true;
  1537.                 if ($campo['alias'] == 'claUsuarioUbicacion') {
  1538.                     $cuentas[$campo['valor']] = 0;
  1539.                 }
  1540.             }
  1541.             if($agregar){
  1542.                 $valores[] = $array;
  1543.             }
  1544.         }
  1545.         $generales = [];
  1546.         $generales['claUsuario'] = $claUsuario;
  1547.         //la data
  1548.         $data = [];
  1549.         $data['rotulos'] = $rotulos;
  1550.         $data['valores'] = $valores;
  1551.         $data['generales'] = $generales;
  1552.         return $data;
  1553.     }
  1554.     /**
  1555.      * Method procUbicacionCambiarEnviar
  1556.      *
  1557.      * @param array $paraProceso
  1558.      *
  1559.      * @return array
  1560.      */
  1561.     private function procUbicacionCambiarEnviar($paraProceso): array
  1562.     {
  1563.         $fi = new FuncionesIvtcotizador();
  1564.         $registry $paraProceso['registry'];
  1565.         $usuarioUbiRepo = new UsuarioubicacionesRepository($registry);
  1566.         $ubicacionesRepo = new UbicacionesRepository($registry);
  1567.         $cliente $paraProceso['cliente'];
  1568.         $sesion $paraProceso['sesion'];
  1569.         $claUsuarioUbicacion $paraProceso['claUsuarioUbicacion'];
  1570.         ///
  1571.         $controladorA explode('\\'get_called_class());
  1572.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1573.         $rotulos = [
  1574.             'exito' => $_n['exito'] ?? 'Ubicación cambiada con éxito',
  1575.             'noExiste' => $_n['noExiste'] ?? 'La ubicación no existe',
  1576.         ];
  1577.         $resultado 1;
  1578.         $mensaje $rotulos['exito'];
  1579.         $usuarioUbicacion $usuarioUbiRepo->find($claUsuarioUbicacion);
  1580.         if ($usuarioUbicacion == null) {
  1581.             $resultado = -1;
  1582.             $mensaje $rotulos['noExiste'];
  1583.         }
  1584.         if ($resultado == 1) {
  1585.             //$sesion->set('claUbicacion', $usuarioUbicacion->getClaubicacion());
  1586.             $claUbicacion $usuarioUbicacion->getClaubicacion();
  1587.             $nomUbicacion $ubicacionesRepo->findForNombre($cliente$claUbicacion);
  1588.         }
  1589.         //la data
  1590.         $data = [];
  1591.         $data['resultado'] = $resultado;
  1592.         $data['mensaje'] = $mensaje;
  1593.         $data['claUbicacion'] = $claUbicacion;
  1594.         $data['nomUbicacion'] = $nomUbicacion;
  1595.         return $data;
  1596.     }
  1597.     /**
  1598.      * Method procUsuariosPerfiles
  1599.      *
  1600.      * @param $paraProceso $paraProceso [explicite description]
  1601.      *
  1602.      * @return array
  1603.      */
  1604.     private function procUsuariosPerfiles($paraProceso): array
  1605.     {
  1606.         $fi = new FuncionesIvtcotizador();
  1607.         $registry $paraProceso['registry'];
  1608.         $requestStack $paraProceso['requestStack'];
  1609.         $usuarioFunciones $paraProceso['usuarioFunciones'];
  1610.         $cliente $paraProceso['cliente'];
  1611.         ///
  1612.         $perfilesRepo = new PerfilesRepository($registry);
  1613.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  1614.         $funcionesRepo = new FuncionesRepository($registry);
  1615.         ///
  1616.         $controladorA explode('\\'get_called_class());
  1617.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1618.         $rotulos = [
  1619.             'titulo' => $_n['titulo'] ?? 'Perfiles',
  1620.             'exportar' => $_n['exportar'] ?? 'Exportar',
  1621.             'nuevo' => $_n['nuevo'] ?? 'Nuevo',
  1622.             'perfil' => $_n['perfil'] ?? 'Perfil',
  1623.             'perfiles' => $_n['perfiles'] ?? 'Perfiles',
  1624.             'eliminarConfirmar' => $_n['eliminarConfirmar'] ?? '¿Está seguro de querer eliminar este perfil?',
  1625.             'opciones' => $_n['opciones'] ?? 'Opciones',
  1626.             'opcionesTip' => $_n['opcionesTip'] ?? 'Opciones del perfil',
  1627.             'eliminar' => $_n['eliminar'] ?? 'Eliminar',
  1628.             'eliminarTip' => $_n['eliminarTip'] ?? 'Elimina al perfil seleccionado',
  1629.         ];
  1630.         $valoresDB $perfilesRepo->findForGrid($cliente);
  1631.         $valores = [];
  1632.         $enLista = ['claPerfil''nomPerfil'];
  1633.         $cuentas = [];
  1634.         foreach ($valoresDB as $x => $campos) {
  1635.             $array = [];
  1636.             foreach ($campos as $y => $campo) {
  1637.                 if (in_array($campo['alias'], $enLista)) {
  1638.                     $array[$campo['alias']] = $campo['valor'];
  1639.                 }
  1640.                 $array['eliminar'] = true;
  1641.                 if ($campo['alias'] == 'claPerfil') {
  1642.                     $cuentas[$campo['valor']] = 0;
  1643.                 }
  1644.             }
  1645.             $valores[] = $array;
  1646.         }
  1647.         $usuarios $usuariosRepo->findForCatalogoRS($cliente);
  1648.         foreach ($usuarios as $usuario) {
  1649.             $cuentas[$usuario->getClaperfil()]++;
  1650.         }
  1651.         foreach ($valores as $v => $valor) {
  1652.             $claPerfil $valor["claPerfil"];
  1653.             $cuenta 0;
  1654.             if (isset($cuentas[$claPerfil])) {
  1655.                 $cuenta $cuentas[$claPerfil];
  1656.             }
  1657.             if ($cuenta 0) {
  1658.                 $valores[$v]['eliminar'] = false;
  1659.             }
  1660.         }
  1661.         ///
  1662.         $html = [
  1663.             "titulo" => $rotulos['titulo'],
  1664.         ];
  1665.         $funcionesRegistro $funcionesRepo->findForHijas('20T01'2);
  1666.         foreach ($funcionesRegistro as $claFuncion => $fun) {
  1667.             $funcionesRegistro[$claFuncion]['conDerecho'] = false;
  1668.             foreach ($usuarioFunciones as $claFun => $nomFuncion){
  1669.                 if($claFuncion == $claFun){
  1670.                     $funcionesRegistro[$claFuncion]['conDerecho'] = true;
  1671.                     break;
  1672.                 }
  1673.             }
  1674.         }
  1675.         //la data
  1676.         $data = [];
  1677.         $data['rotulos'] = $rotulos;
  1678.         $data['valores'] = $valores;
  1679.         $data['funcionesRegistro'] = $funcionesRegistro;
  1680.         $data['html'] = $html;
  1681.         return $data;
  1682.     }
  1683.     /**
  1684.      * Method procUsuariosPerfilesEditar
  1685.      *
  1686.      * @param $paraProceso $paraProceso [explicite description]
  1687.      *
  1688.      * @return array
  1689.      */
  1690.     private function procUsuariosPerfilesEditar($paraProceso): array
  1691.     {
  1692.         $fi = new FuncionesIvtcotizador();
  1693.         $registry $paraProceso['registry'];
  1694.         $cliente $paraProceso['cliente'];
  1695.         $claPerfil $paraProceso['claPerfil'];
  1696.         ///
  1697.         $perfilesRepo = new PerfilesRepository($registry);
  1698.         ///
  1699.         $generales = [];
  1700.         $generales['claPerfil'] = $claPerfil;
  1701.         $generales['nuevo'] = $claPerfil 1;
  1702.         ///
  1703.         $controladorA explode('\\'get_called_class());
  1704.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1705.         $rotulos = [
  1706.             'nuevoPerfil' => $_n['nuevoPerfil'] ?? 'Nuevo perfil',
  1707.             'editarPerfil' => $_n['editarPerfil'] ?? 'Modificar perfil',
  1708.             'cancelar' => $_n['cancelar'] ?? 'Cancelar',
  1709.             'nomPerfil' => $_n['nomPerfil'] ?? 'Perfil',
  1710.             'guardar' => $_n['guardar'] ?? 'Guardar',
  1711.             'nomPerfilAviso' => $_n['nomPerfilAviso'] ?? 'Indique el perfil',
  1712.             'error' => $_n['error'] ?? 'Revise los campos',
  1713.         ];
  1714.         ///
  1715.         $html = [];
  1716.         $html["nuevo"] = $claPerfil self::_editar self::_nuevo;
  1717.         ///
  1718.         if ($claPerfil 0) {
  1719.             $rotulos['titulo'] = $rotulos['editarPerfil'];
  1720.             $valoresFor $perfilesRepo->findForEditar($cliente$claPerfil);
  1721.         } else {
  1722.             $rotulos['titulo'] = $rotulos['nuevoPerfil'];
  1723.             $valoresFor $perfilesRepo->findForNuevo();
  1724.         }
  1725.         $valores = [];
  1726.         foreach ($valoresFor as $v => $valor) {
  1727.             $valores[$valor['alias']] = $valor['valor'];
  1728.         }
  1729.         //la data
  1730.         $data = [];
  1731.         $data['rotulos'] = $rotulos;
  1732.         $data['valores'] = $valores;
  1733.         $data['generales'] = $generales;
  1734.         $data['html'] = $html;
  1735.         return $data;
  1736.     }
  1737.     /**
  1738.      * Method procUsuariosPerfilesEnviar
  1739.      *
  1740.      * @param $paraProceso $paraProceso [explicite description]
  1741.      *
  1742.      * @return array
  1743.      */
  1744.     private function procUsuariosPerfilesEnviar($paraProceso): array
  1745.     {
  1746.         $entityManager $this->getDoctrine()->getManager();
  1747.         $registry $paraProceso['registry'];
  1748.         $cliente $paraProceso['cliente'];
  1749.         $perfilesRepo = new PerfilesRepository($registry);
  1750.         $claPerfil $paraProceso['claPerfil'];
  1751.         $nuevo $paraProceso['nuevo'];
  1752.         $data $paraProceso['data'];
  1753.         $fi = new FuncionesIvtcotizador();
  1754.         ///
  1755.         $controladorA explode('\\'get_called_class());
  1756.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1757.         $rotulos = [
  1758.             'exito' => $_n['exito'] ?? 'Perfil actualizado con éxito',
  1759.             'noExiste' => $_n['noExiste'] ?? 'El perfil no existe',
  1760.         ];
  1761.         
  1762.         $resultado 1;
  1763.         $mensaje $rotulos['exito'];
  1764.         $perfil = new Perfiles();
  1765.         if ($nuevo == self::_editar) {
  1766.             $perfil $perfilesRepo->find($claPerfil);
  1767.             if ($perfil == null) {
  1768.                 $resultado = -1;
  1769.                 $mensaje $rotulos['noExiste'];
  1770.             }
  1771.         }
  1772.         $dataGrid = [];
  1773.         if ($resultado == 1) {
  1774.             $camposContinuar = ['claperfil''nuevo'];
  1775.             $camposSoloNuevo = ['clacliente'];
  1776.             $camposParaGrid = ['nomperfil'];
  1777.             foreach ($data as $d => $valor) {
  1778.                 $campo strtolower($d);
  1779.                 if (in_array($campo$camposContinuar)) {
  1780.                     continue;
  1781.                 }
  1782.                 if (in_array($campo$camposParaGrid)) {
  1783.                     $dataGrid[$d] = $valor;
  1784.                 }
  1785.                 if ($nuevo == 1) {
  1786.                     if ($campo == 'clacliente') {
  1787.                         $valor $cliente;
  1788.                     }
  1789.                 } else {
  1790.                     if (in_array($campo$camposSoloNuevo)) {
  1791.                         continue;
  1792.                     }
  1793.                 }
  1794.                 $campoSet "set" ucfirst($campo);
  1795.                 $perfil->$campoSet($valor);
  1796.             }
  1797.             $entityManager->persist($perfil);
  1798.             $entityManager->flush();
  1799.             $dataGrid['claPerfil'] = $perfil->getClaperfil();
  1800.         }
  1801.         //la data
  1802.         $data = [];
  1803.         $data['resultado'] = $resultado;
  1804.         $data['mensaje'] = $mensaje;
  1805.         $data['dataGrid'] = $dataGrid;
  1806.         return $data;
  1807.     }
  1808.     /**
  1809.      * Method procUsuariosPerfilesOpciones
  1810.      *
  1811.      * @param $paraProceso $paraProceso [explicite description]
  1812.      *
  1813.      * @return array
  1814.      */
  1815.     private function procUsuariosPerfilesOpciones($paraProceso): array
  1816.     {
  1817.         $fi = new FuncionesIvtcotizador();
  1818.         $registry $paraProceso['registry'];
  1819.         $cliente $paraProceso['cliente'];
  1820.         $perfilesRepo = new PerfilesRepository($registry);
  1821.         $perfilFuncionesRepo = new PerfilfuncionesRepository($registry);
  1822.         $clienteFuncionesRepo = new ClientefuncionesRepository($registry);
  1823.         $funcionesRepo = new FuncionesRepository($registry);
  1824.         $claPerfil $paraProceso['claPerfil'];
  1825.         ///
  1826.         $generales = [];
  1827.         $generales['claPerfil'] = $claPerfil;
  1828.         ///
  1829.         $controladorA explode('\\'get_called_class());
  1830.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  1831.         $rotulos = [
  1832.             'aplicarSubNiveles' => $_n['aplicarSubNiveles'] ?? 'Aplicar a subNiveles',
  1833.             'opciones' => $_n['opciones'] ?? 'Opciones del perfil',
  1834.         ];
  1835.         $rotulos["nomPerfil"] = $perfilesRepo->findForNombre($cliente$claPerfil);
  1836.         ///
  1837.         $html = [];
  1838.         $funcionesPerfil $perfilFuncionesRepo->findForClaCliente($cliente$claPerfil);
  1839.         $funcionesCliente $clienteFuncionesRepo->findForCatalogo($cliente);
  1840.         $funciones = [];
  1841.         $funNivel1 $funcionesRepo->findForNivel(1);
  1842.         $funNivel2 $funcionesRepo->findForNivel(2);
  1843.         $funNivel3 $funcionesRepo->findForNivel(3);
  1844.         $funNivel4 $funcionesRepo->findForNivel(4);
  1845.         $funNivel5 $funcionesRepo->findForNivel(5);
  1846.         $funNivel6 $funcionesRepo->findForNivel(6);
  1847.         $funNivel7 $funcionesRepo->findForNivel(7);
  1848.         foreach ($funNivel1 as $claFuncion => $fun) {
  1849.             $fun['seleccionada'] = false;
  1850.             $fun['title'] = $fun['descripcion'];
  1851.             $fun['claFuncion'] = $claFuncion;
  1852.             $fun['folder'] = true;
  1853.             $fun['expanded'] = false;
  1854.             $fun['extraClasses'] = 'no-seleccionada';
  1855.             $fun['children'] = [];
  1856.             foreach ($funNivel2 as $claFuncion2 => $fun2) {
  1857.                 if ($claFuncion == $fun2['padre']) {
  1858.                     $fun2['seleccionada'] = false;
  1859.                     $fun2['title'] = $fun2['descripcion'];
  1860.                     $fun2['claFuncion'] = $claFuncion2;
  1861.                     $fun2['expanded'] = false;
  1862.                     $fun2['extraClasses'] = 'no-seleccionada';
  1863.                     $fun2['children'] = [];
  1864.                     foreach ($funNivel3 as $claFuncion3 => $fun3) {
  1865.                         if ($claFuncion2 == $fun3['padre']) {
  1866.                             $fun3['seleccionada'] = false;
  1867.                             $fun3['title'] = $fun3['descripcion'];
  1868.                             $fun3['claFuncion'] = $claFuncion3;
  1869.                             $fun3['expanded'] = false;
  1870.                             $fun3['extraClasses'] = 'no-seleccionada';
  1871.                             $fun3['children'] = [];
  1872.                             foreach ($funNivel4 as $claFuncion4 => $fun4) {
  1873.                                 if ($claFuncion3 == $fun4['padre']) {
  1874.                                     $fun4['seleccionada'] = false;
  1875.                                     $fun4['title'] = $fun4['descripcion'];
  1876.                                     $fun4['claFuncion'] = $claFuncion4;
  1877.                                     $fun4['expanded'] = false;
  1878.                                     $fun4['extraClasses'] = 'no-seleccionada';
  1879.                                     $fun4['children'] = [];
  1880.                                     foreach ($funNivel5 as $claFuncion5 => $fun5) {
  1881.                                         if ($claFuncion4 == $fun5['padre']) {
  1882.                                             $fun5['seleccionada'] = false;
  1883.                                             $fun5['title'] = $fun5['descripcion'];
  1884.                                             $fun5['claFuncion'] = $claFuncion5;
  1885.                                             $fun5['expanded'] = false;
  1886.                                             $fun5['extraClasses'] = 'no-seleccionada';
  1887.                                             $fun5['children'] = [];
  1888.                                             foreach ($funNivel6 as $claFuncion6 => $fun6) {
  1889.                                                 if ($claFuncion5 == $fun6['padre']) {
  1890.                                                     $fun6['seleccionada'] = false;
  1891.                                                     $fun6['title'] = $fun6['descripcion'];
  1892.                                                     $fun6['claFuncion'] = $claFuncion6;
  1893.                                                     $fun6['expanded'] = false;
  1894.                                                     $fun6['extraClasses'] = 'no-seleccionada';
  1895.                                                     $fun6['children'] = [];
  1896.                                                     foreach ($funNivel7 as $claFuncion7 => $fun7) {
  1897.                                                         if ($claFuncion6 == $fun7['padre']) {
  1898.                                                             $fun7['seleccionada'] = false;
  1899.                                                             $fun7['title'] = $fun7['descripcion'];
  1900.                                                             $fun7['claFuncion'] = $claFuncion7;
  1901.                                                             $fun7['expanded'] = false;
  1902.                                                             $fun7['extraClasses'] = 'no-seleccionada';
  1903.                                                             $fun7['children'] = [];
  1904.                                                             if (in_array($claFuncion7$funcionesCliente)) {
  1905.                                                                 $fun6['children'][] = $fun7;
  1906.                                                             }
  1907.                                                         }
  1908.                                                     }//nivel 7
  1909.                                                     if (in_array($claFuncion6$funcionesCliente)) {
  1910.                                                         $fun5['children'][] = $fun6;
  1911.                                                     }
  1912.                                                 }
  1913.                                             }//nivel 6
  1914.                                             if (in_array($claFuncion5$funcionesCliente)) {
  1915.                                                 $fun4['children'][] = $fun5;
  1916.                                             }
  1917.                                         }
  1918.                                     }//nivel 5
  1919.                                     if (in_array($claFuncion4$funcionesCliente)) {
  1920.                                         $fun3['children'][] = $fun4;
  1921.                                     }
  1922.                                 }
  1923.                             }//nivel 4
  1924.                             if (in_array($claFuncion3$funcionesCliente)) {
  1925.                                 $fun2['children'][] = $fun3;
  1926.                             }
  1927.                         }
  1928.                     }//nivel 3
  1929.                     if (in_array($claFuncion2$funcionesCliente)) {
  1930.                         $fun['children'][] = $fun2;
  1931.                     }
  1932.                 }
  1933.             }//nivel 2
  1934.             if (in_array($claFuncion$funcionesCliente)) {
  1935.                 $funciones[] = $fun;
  1936.             }
  1937.         }
  1938.         foreach ($funcionesPerfil as $cliFun) {
  1939.             $claFuncion $cliFun->getClaFuncion();
  1940.             foreach ($funciones as $clave => $fun) {
  1941.                 if ($claFuncion == $fun['claFuncion']) {
  1942.                     $funciones[$clave]['seleccionada'] = true;
  1943.                     $funciones[$clave]['extraClasses'] = 'seleccionada';
  1944.                     break;
  1945.                 } else {
  1946.                     foreach ($fun['children'] as $clave2 => $fun2) {
  1947.                         if ($claFuncion == $fun2['claFuncion']) {
  1948.                             $funciones[$clave]['children'][$clave2]['seleccionada'] = true;
  1949.                             $funciones[$clave]['children'][$clave2]['extraClasses'] = 'seleccionada';
  1950.                             break;
  1951.                         } else {
  1952.                             foreach ($fun2['children'] as $clave3 => $fun3) {
  1953.                                 if ($claFuncion == $fun3['claFuncion']) {
  1954.                                     $funciones[$clave]['children'][$clave2]['children'][$clave3]['seleccionada'] = true;
  1955.                                     $funciones[$clave]['children'][$clave2]['children'][$clave3]['extraClasses'] = 'seleccionada';
  1956.                                     break;
  1957.                                 } else {
  1958.                                     foreach ($fun3['children'] as $clave4 => $fun4) {
  1959.                                         if ($claFuncion == $fun4['claFuncion']) {
  1960.                                             $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['seleccionada'] = true;
  1961.                                             $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['extraClasses'] = 'seleccionada';
  1962.                                             break;
  1963.                                         } else {
  1964.                                             foreach ($fun4['children'] as $clave5 => $fun5) {
  1965.                                                 if ($claFuncion == $fun5['claFuncion']) {
  1966.                                                     $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['seleccionada'] = true;
  1967.                                                     $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['extraClasses'] = 'seleccionada';
  1968.                                                     break;
  1969.                                                 } else {
  1970.                                                     foreach ($fun5['children'] as $clave6 => $fun6) {
  1971.                                                         if ($claFuncion == $fun6['claFuncion']) {
  1972.                                                             $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['children'][$clave6]['seleccionada'] = true;
  1973.                                                             $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['children'][$clave6]['extraClasses'] = 'seleccionada';
  1974.                                                             break;
  1975.                                                         }
  1976.                                                         foreach ($fun6['children'] as $clave7 => $fun7) {
  1977.                                                             if ($claFuncion == $fun7['claFuncion']) {
  1978.                                                                 $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['children'][$clave6]['children'][$clave7]['seleccionada'] = true;
  1979.                                                                 $funciones[$clave]['children'][$clave2]['children'][$clave3]['children'][$clave4]['children'][$clave5]['children'][$clave6]['children'][$clave7]['extraClasses'] = 'seleccionada';
  1980.                                                                 break;
  1981.                                                             }
  1982.                                                         }
  1983.                                                     }
  1984.                                                 }
  1985.                                             }
  1986.                                         }
  1987.                                     }
  1988.                                 }
  1989.                             }
  1990.                         }
  1991.                     }
  1992.                 }
  1993.             }
  1994.         }
  1995.         //la data
  1996.         $data = [];
  1997.         $data['rotulos'] = $rotulos;
  1998.         $data['generales'] = $generales;
  1999.         $data['funciones'] = $funciones;
  2000.         $data['html'] = $html;
  2001.         return $data;
  2002.     }
  2003.     /**
  2004.      * Method procUsuariosPerfilesOpcionesEnviar
  2005.      *
  2006.      * @param $paraProceso $paraProceso [explicite description]
  2007.      *
  2008.      * @return array
  2009.      */
  2010.     private function procUsuariosPerfilesOpcionesEnviar($paraProceso): array
  2011.     {
  2012.         $entityManager $this->getDoctrine()->getManager();
  2013.         $fi = new FuncionesIvtcotizador();
  2014.         $registry $paraProceso['registry'];
  2015.         $cliente $paraProceso['cliente'];
  2016.         $claPerfil $paraProceso['claPerfil'];
  2017.         $funciones $paraProceso['funciones'];
  2018.         $seleccionada $paraProceso['seleccionada'];
  2019.         ///
  2020.         $seleccionada $seleccionada == 'true' true false;
  2021.         ///
  2022.         $controladorA explode('\\'get_called_class());
  2023.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  2024.         $rotulos = [
  2025.             'exito' => $_n['exito'] ?? 'Funciones guardadas con éxito',
  2026.         ];
  2027.         $resultado 1;
  2028.         $mensaje $rotulos['exito'];
  2029.         $funA explode('|'$funciones);
  2030.         foreach ($funA as $x => $fun) {
  2031.             if (strlen($fun) > 0) {
  2032.                 if ($seleccionada) {
  2033.                     $funcion = new Perfilfunciones();
  2034.                     $funcion->setClacliente($cliente);
  2035.                     $funcion->setClaperfil($claPerfil);
  2036.                     $funcion->setClafuncion($fun);
  2037.                     $entityManager->persist($funcion);
  2038.                     $entityManager->flush();
  2039.                 } else {
  2040.                     //elimina
  2041.                     $qb $entityManager->createQueryBuilder();
  2042.                     $qb->delete()
  2043.                             ->from('App\Entity\Perfilfunciones''p')
  2044.                             ->where('p.clafuncion = :claFuncion')
  2045.                             ->andWhere('p.clacliente = :claCliente')
  2046.                             ->andWhere('p.claperfil = :claPerfil')
  2047.                             ->setParameters(['claFuncion' => $fun'claPerfil' => $claPerfil'claCliente' => $cliente])
  2048.                             ->getQuery()
  2049.                             ->getResult();
  2050.                     //elimina de favoritos
  2051.                     $qb $entityManager->createQueryBuilder();
  2052.                     $qb->delete()
  2053.                             ->from('App\Entity\Usuariosfavoritos''p')
  2054.                             ->where('p.clafuncion = :claFuncion')
  2055.                             ->andWhere('p.clacliente = :claCliente')
  2056.                             ->setParameters(['claFuncion' => $fun'claCliente' => $claPerfil])
  2057.                             ->getQuery()
  2058.                             ->getResult();
  2059.                 }
  2060.             }
  2061.         }
  2062.         //la data
  2063.         $data = [];
  2064.         $data['resultado'] = $resultado;
  2065.         $data['mensaje'] = $mensaje;
  2066.         return $data;
  2067.     }
  2068.     /**
  2069.      * Method procUsuariosPerfilesEliminar
  2070.      *
  2071.      * @param $paraProceso $paraProceso [explicite description]
  2072.      *
  2073.      * @return array
  2074.      */
  2075.     private function procUsuariosPerfilesEliminar($paraProceso): array
  2076.     {
  2077.         $entityManager $this->getDoctrine()->getManager();
  2078.         $fi = new FuncionesIvtcotizador();
  2079.         $registry $paraProceso['registry'];
  2080.         $claPerfil $paraProceso['claPerfil'];
  2081.         $cliente $paraProceso['cliente'];
  2082.         $perfilesRepo = new PerfilesRepository($registry);
  2083.         ///
  2084.         $resultado 1;
  2085.         ///
  2086.         $controladorA explode('\\'get_called_class());
  2087.         $_n $fi->get_n($registryend($controladorA), __FUNCTION__$cliente);
  2088.         $rotulos = [
  2089.             'exito' => $_n['exito'] ?? 'Perfil eliminado',
  2090.             'noExiste' => $_n['noExiste'] ?? 'Perfil no existe',
  2091.         ];
  2092.         
  2093.         $mensaje $rotulos['exito'];
  2094.         $perfil $perfilesRepo->find($claPerfil);
  2095.         if ($perfil == null) {
  2096.             $resultado = -1;
  2097.             $mensaje $rotulos['noExiste'];
  2098.         } else {
  2099.             //elimina opciones
  2100.             $qb $entityManager->createQueryBuilder();
  2101.             $qb->delete()
  2102.                 ->from('App\Entity\Perfilfunciones''k')
  2103.                 ->where('k.claperfil = :claPerfil')
  2104.                 ->setParameters(['claPerfil' => $claPerfil,]);
  2105.             $query $qb->getQuery();
  2106.             $query->execute();
  2107.             //elimina al perfil
  2108.             $entityManager->remove($perfil);
  2109.             $entityManager->flush();
  2110.         }
  2111.         //la data
  2112.         $data = [];
  2113.         $data['resultado'] = $resultado;
  2114.         $data['mensaje'] = $mensaje;
  2115.         return $data;
  2116.     }
  2117.     /**
  2118.      * Method procContraRecuperarEnviar
  2119.      *
  2120.      * @param $paraProceso $paraProceso [explicite description]
  2121.      *
  2122.      * @return array
  2123.      */
  2124.     private function procContraRecuperarEnviar($paraProceso): array
  2125.     {
  2126.         $entityManager $this->getDoctrine()->getManager();
  2127.         $fi = new FuncionesIvtcotizador();
  2128.         $registry $paraProceso['registry'];
  2129.         $requestStack $paraProceso['requestStack'];
  2130.         $correo $paraProceso['correo'];
  2131.         $hasher $paraProceso['hasher'];
  2132.         $mailer $paraProceso['mailer'];
  2133.         ///
  2134.         $usuariosRepo = new UsuariosRepository($registry$requestStack);
  2135.         ///
  2136.         $resultado 1;
  2137.         ///
  2138.         //aplicar solo _idioma
  2139.         $controladorA explode('\\'get_called_class());
  2140.         $_n $fi->get_nSoloIdioma($registryend($controladorA), __FUNCTION__);
  2141.         $rotulos = [
  2142.             'contraEnviada' => $_n['contraEnviada'] ?? 'Contraseña enviada',
  2143.             'noExiste' => $_n['noExiste'] ?? 'El usuario no existe',
  2144.         ];
  2145.         $mensaje $rotulos['contraEnviada'];
  2146.         $sesion $this->get('session');
  2147.         $cliente $sesion->get('claCliente');
  2148.         $usuario $usuariosRepo->findForCorreoSinCliente($correo);
  2149.         $contra '';
  2150.         $error '';
  2151.         if ($usuario == null) {
  2152.             $resultado = -1;
  2153.             $mensaje $rotulos['noExiste'];
  2154.         } else {
  2155.             $contra $fi->olvidoContra();
  2156.             $contraH $hasher->hashPassword($usuario$contra);
  2157.             $usuario->setContra($contraH);
  2158.             $usuario->setPassword($contraH);
  2159.             $entityManager->persist($usuario);
  2160.             $entityManager->flush();
  2161.             ///enviar correo
  2162.             ///
  2163.             // solo _idioma
  2164.             $controladorA explode('\\'get_called_class());
  2165.             $_n $fi->get_nSoloIdioma($registryend($controladorA), __FUNCTION__);
  2166.             $rotulos = [
  2167.                 'titulo' => $_n['titulo'] ?? 'Recuperacion de contraseña',
  2168.                 'nuevaContra' => $_n['nuevaContra'] ?? 'Nueva contraseña',
  2169.                 'contra' => $_n['contra'] ?? 'Contraseña',
  2170.             ];
  2171.             $email = (new TemplatedEmail())
  2172.                     ->from(new Address($fi::_mailMotorUsuario$fi::_mailMotorNombre))
  2173.                     ->to($correo)
  2174.                     ->subject($rotulos['titulo'])
  2175.                     ->htmlTemplate('usuarios/correoOlvidoContra.twig')
  2176.                     ->context([
  2177.                         'contra' => $contra,
  2178.                         'rotulos' => $rotulos,
  2179.                     ]);
  2180.             try {
  2181.                 $envio $mailer->send($email);
  2182.             } catch (TransportExceptionInterface $e) {
  2183.                 $error $e->getMessage();
  2184.             }
  2185.         }
  2186.         //la data
  2187.         $data = [];
  2188.         $data['resultado'] = $resultado;
  2189.         $data['mensaje'] = $mensaje;
  2190.         $data['error'] = $error;
  2191.         return $data;
  2192.     }
  2193. }//fin trait