Commit a10b2c527931dc16e2527f86905094d27eea375b

Authored by Wilmer Ramones
1 parent b0eb18a10d
Exists in master

se trabajó con los roles para asegurar la aplicacion, se trabajó con la busqueda…

… de adscripcion por cedula, se mejoraron los mensajes del sistema
app/Resources/views/base_app.html.twig
@@ -7,34 +7,39 @@ @@ -7,34 +7,39 @@
7 <link rel="stylesheet" href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}"> 7 <link rel="stylesheet" href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}">
8 <link rel="stylesheet" href="{{ asset('assets/vendor/font-awesome/css/font-awesome.min.css') }}"> 8 <link rel="stylesheet" href="{{ asset('assets/vendor/font-awesome/css/font-awesome.min.css') }}">
9 <link rel="stylesheet" href="{{ asset('assets/vendor/AppBundle/main.css') }}"> 9 <link rel="stylesheet" href="{{ asset('assets/vendor/AppBundle/main.css') }}">
10 - 10 + <style>
  11 + .fade.in {
  12 + opacity: 0.8;
  13 + background-color:#398439;
  14 + }
  15 + </style>
11 {% endblock %} 16 {% endblock %}
12 <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /> 17 <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
13 </head> 18 </head>
14 <body data-offset="20" data-target="#navbar"> 19 <body data-offset="20" data-target="#navbar">
15 20
16 {% block navegacion %} 21 {% block navegacion %}
17 - <nav class="navbar navbar-default">  
18 - <div class="container-fluid">  
19 - <div class="navbar-header">  
20 - <a class="navbar-brand" href="#">  
21 - Centro de Estudios Ambientales UBV  
22 - </a>  
23 - </div> 22 + <nav class="navbar navbar-default">
  23 + <div class="container-fluid">
  24 + <div class="navbar-header">
  25 + <a class="navbar-brand" href="#">
  26 + Centro de Estudios Ambientales UBV
  27 + </a>
  28 + </div>
24 29
25 - <div class="collapse navbar-collapse">  
26 - <ul class="nav navbar-nav navbar-right">  
27 - {% if app.user %}  
28 - <li><a href="#">Bienvenido {{app.user.username}}</a></li>  
29 - <li><a href="{{path('logout')}}">Salir</a></li>  
30 - {% endif %}  
31 - </ul> 30 + <div class="collapse navbar-collapse">
  31 + <ul class="nav navbar-nav navbar-right">
  32 + {% if app.user %}
  33 + <li><a href="#">Bienvenido {{app.user.username}}</a></li>
  34 + <li><a href="{{path('logout')}}">Salir</a></li>
  35 + {% endif %}
  36 + </ul>
32 37
33 - </div> 38 + </div>
34 39
35 - </div> 40 + </div>
36 41
37 - </nav> 42 + </nav>
38 43
39 {% endblock %} 44 {% endblock %}
40 45
@@ -42,40 +47,82 @@ @@ -42,40 +47,82 @@
42 47
43 {% block submenu %} 48 {% block submenu %}
44 49
45 - <div class="subnavbar">  
46 - <div class="subnavbar-inner">  
47 - <div class="container">  
48 - <ul class="mainnav">  
49 - <li {% if (app.request.attributes.get('_route') == 'cea_index') %} class="active" {% endif %}><a href="{{path('cea_index')}}"><i class="fa fa-list"></i><span>Principal</span> </a> </li>  
50 - {% if is_granted('ROLE_COORDINADOR_NACIONAL') %}  
51 - <li {% if (app.request.attributes.get('_route') == 'cea_solicitudes') %} class="active" {% endif %}><a href="{{ path('cea_solicitudes')}}"><i class="fa fa-institution"></i><span>Ver Solicitudes</span> </a> </li>  
52 - {% endif %}  
53 - {% if is_granted('ROLE_DOCENTE') %}  
54 - <li class="dropdown"><a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-dashboard"></i><span>Solicitudes</span> <b class="caret"></b></a>  
55 - <ul class="dropdown-menu">  
56 - <li><a href="icons.html">Adscripción</a></li>  
57 - <li><a href="faq.html">Ascenso</a></li>  
58 - <li><a href="pricing.html">Tiempo Deuda</a></li>  
59 - </ul>  
60 - </li>  
61 - {% endif %} 50 + <div class="subnavbar">
  51 + <div class="subnavbar-inner">
  52 + <div class="container">
  53 + <ul class="mainnav">
  54 + <li {% if (app.request.attributes.get('_route') == 'cea_index') %} class="active" {% endif %}><a href="{{path('cea_index')}}"><i class="fa fa-list"></i><span>Principal</span> </a> </li>
  55 + {% if is_granted('ROLE_COORDINADOR_NACIONAL') %}
  56 + <li class="dropdown"><a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-dashboard"></i><span>Ver Adscripciones</span> <b class="caret"></b></a>
  57 + <ul class="dropdown-menu">
  58 + <li> <a data-toggle="modal" data-target="#buscarAdscripcion">Buscar Adscripcion</a></li>
  59 + <li><a href="{{ path('cea_adscripciones')}}">En espera de Aprobación</a></li>
  60 + <li><a href="{{ path('cea_adscripciones', { 'estatus': 1 })}}">Aprobadas</a></li>
  61 + <li><a href="{{ path('cea_adscripciones', { 'estatus': 3 })}}">Rechazadas</a></li>
62 </ul> 62 </ul>
63 - </div>  
64 - <!-- /container -->  
65 - </div>  
66 - <!-- /subnavbar-inner --> 63 + </li>
  64 + {% endif %}
  65 + {% if is_granted('ROLE_ADSCRITO') %}
  66 + <li class="dropdown">
  67 + <a class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-dashboard"></i>
  68 + <span>Solicitudes</span> <b class="caret"></b>
  69 + </a>
  70 + <ul class="dropdown-menu">
  71 + <li><a href="icons.html">Adscripción</a></li>
  72 + <li><a href="faq.html">Ascenso</a></li>
  73 + <li><a href="pricing.html">Tiempo Deuda</a></li>
  74 + </ul>
  75 + </li>
  76 + {% endif %}
  77 + </ul>
67 </div> 78 </div>
68 - <!-- /subnavbar -->  
69 - 79 + <!-- /container -->
  80 + </div>
  81 + <!-- /subnavbar-inner -->
  82 + </div>
  83 + <!-- /subnavbar -->
70 {% endblock %} 84 {% endblock %}
71 -  
72 - 85 +
73 {% block body %} 86 {% block body %}
  87 +
74 {% endblock %} 88 {% endblock %}
75 - 89 +
  90 +
  91 +
76 {% block javascripts %} 92 {% block javascripts %}
77 <script type="text/javascript" src="{{ asset('assets/vendor/jquery/dist/jquery.min.js') }}"></script> 93 <script type="text/javascript" src="{{ asset('assets/vendor/jquery/dist/jquery.min.js') }}"></script>
78 <script type="text/javascript" src="{{ asset('assets/vendor/bootstrap/dist/js/bootstrap.min.js') }}" ></script> 94 <script type="text/javascript" src="{{ asset('assets/vendor/bootstrap/dist/js/bootstrap.min.js') }}" ></script>
79 {% endblock %} 95 {% endblock %}
  96 +
  97 +
  98 + <!-- Ventanas Modales -->
  99 +
  100 + <!-- Ventana de buscar adscripcion -->
  101 + <div class="modal fade bs-example-modal-sm" id="buscarAdscripcion" tabindex="-1" role="dialog">
  102 + <form action="{{ path('cea_adscripciones') }}" method="post" role="form">
  103 + <div class="modal-dialog" role="document">
  104 + <div class="modal-content">
  105 + <div class="modal-header">
  106 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  107 + <h4 class="modal-title" id="myModalLabel">Cédula o Número de Adscripción a buscar...</h4>
  108 + </div>
  109 + <div class="modal-body">
  110 +
  111 + <div class="form-group">
  112 + <label for="numero">Cédula del Docente o Número de Adscripción:</label>
  113 + <input type="number" class="form-control" id="docente" name="docente" value="" />
  114 + </div>
  115 +
  116 + </div>
  117 + <div class="modal-footer">
  118 + <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
  119 + <button class="btn btn-primary" type="submit">Buscar Adscripcion</button>
  120 + </div>
  121 + </div>
  122 + </div>
  123 + </form>
  124 + </div><!-- Fin de la ventanta modal buscar adscripcion -->
  125 +
  126 +
80 </body> 127 </body>
81 </html> 128 </html>
app/Resources/views/cea/index.html.twig
@@ -4,7 +4,12 @@ @@ -4,7 +4,12 @@
4 <div class="main"> 4 <div class="main">
5 5
6 <div class="main-inner"> 6 <div class="main-inner">
7 - <div class="container"> 7 + <div class="container">
  8 +
  9 + {% for message in app.session.flashBag.get('danger') %}
  10 + <div class="alert alert-danger">{{ message }}</div>
  11 + {%endfor %}
  12 +
8 {% if not adscrito %} 13 {% if not adscrito %}
9 <div class="alert alert-info"> 14 <div class="alert alert-info">
10 <button type="button" class="close" data-dismiss="alert">&times;</button> 15 <button type="button" class="close" data-dismiss="alert">&times;</button>
app/Resources/views/cea/solicitudes.html.twig
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <div class="container"> 4 <div class="container">
5 <div class="widget widget-table action-table"> 5 <div class="widget widget-table action-table">
6 <div class="widget-header"> <i class="icon-th-list"></i> 6 <div class="widget-header"> <i class="icon-th-list"></i>
7 - <h3>Listado de solicitudes de Adscripción Al CEA</h3> 7 + <h3>Listado de Adscripciones: Estatus {{ estatus_adscripciones }}</h3>
8 </div> 8 </div>
9 <!-- /widget-header --> 9 <!-- /widget-header -->
10 <div class="widget-content"> 10 <div class="widget-content">
app/Resources/views/cea/solicitudes_mostar.html.twig
@@ -5,35 +5,53 @@ @@ -5,35 +5,53 @@
5 {% endblock %} 5 {% endblock %}
6 6
7 {%block body %} 7 {%block body %}
8 - {% for message in app.session.flashBag.get('notice') %}  
9 - <div class="alert alert-success">{{ message }}</div>  
10 8
11 - {%endfor %}  
12 <div class="content-wrapper"> 9 <div class="content-wrapper">
13 <div class="container"> 10 <div class="container">
  11 + {% for message in app.session.flashBag.get('notice') %}
  12 + <h4 class="alert alert-success">{{ message }}</h4>
  13 +
  14 + {%endfor %}
14 <div class="row"> 15 <div class="row">
15 - <div class="col-md-12">  
16 - <h4 class="page-head-line">Solicitud de Adscripción número <code>{{adscripcion.id}}</code>: {{ adscripcion.idRolInstitucion.idRol.idPersona.primerNombre }}, {{ adscripcion.idRolInstitucion.idRol.idPersona.primerApellido }} </h4>  
17 - 16 + <div class="col-md-9">
  17 + <h4 class="page-head-line">Solicitud de Adscripción número <code>{{adscripcion.id}}</code>:
  18 + {{ adscripcion.idRolInstitucion.idRol.idPersona.primerNombre }},
  19 + {{ adscripcion.idRolInstitucion.idRol.idPersona.primerApellido }}
  20 + </h4>
  21 + </div>
  22 + <div class="col-md-3">
  23 + {% if adscripcion.idEstatus.id == 1 %}
  24 + <h4 class="alert alert-success">Estatus <strong>{{adscripcion.idEstatus}}</strong>
  25 + {% elseif adscripcion.idEstatus.id == 3 %}
  26 + <h4 class="alert alert-danger">Estatus <strong>{{adscripcion.idEstatus}}</strong>
  27 + {% else %}
  28 + <h4 class="alert alert-warning">Estatus <strong>{{adscripcion.idEstatus}}</strong>
  29 + {% endif %}
  30 + </h4>
18 </div> 31 </div>
19 32
20 </div> 33 </div>
21 <div class="row"> 34 <div class="row">
22 - 35 + {% if adscripcion.postgrado is null %}
  36 + <div class="form-group">
  37 + <h4 class="alert alert-warning">El Docente al momento de la solicitud informa no haber realizado Concurso de oposición</h4>
  38 + </div>
  39 + {% endif %}
23 <div class="col-md-6"> 40 <div class="col-md-6">
24 41
25 <div class="col-md-4"> 42 <div class="col-md-4">
26 <img src="{{ asset('bundles/framework/images/portal/logo_ubv.png') }}" /> 43 <img src="{{ asset('bundles/framework/images/portal/logo_ubv.png') }}" />
27 </div> 44 </div>
28 45
29 - <div class="col-md-8"> 46 + <div class="col-md-8">
  47 +
30 <form action="{{ path('login') }}" method="post" role="form" > 48 <form action="{{ path('login') }}" method="post" role="form" >
31 49
32 <div class="form-group"> 50 <div class="form-group">
33 <label for="username">Fecha de Ingreso UBV:</label> 51 <label for="username">Fecha de Ingreso UBV:</label>
34 <input type="date" class="form-control" id="username" name="primerApellido" value="{{ adscripcion.fechaIngreso|date('Y-m-d') }}" /> 52 <input type="date" class="form-control" id="username" name="primerApellido" value="{{ adscripcion.fechaIngreso|date('Y-m-d') }}" />
35 </div> 53 </div>
36 - 54 + {% if escalas is not null %}
37 <div class="form-group"> 55 <div class="form-group">
38 <label for="Escalafones">Escalafones:</label> 56 <label for="Escalafones">Escalafones:</label>
39 <table class="table table-striped table-bordered"> 57 <table class="table table-striped table-bordered">
@@ -48,9 +66,12 @@ @@ -48,9 +66,12 @@
48 <td>{{escala.idTipoEscala }}</td> 66 <td>{{escala.idTipoEscala }}</td>
49 </tr> 67 </tr>
50 {%endfor %} 68 {%endfor %}
51 - </table> 69 + </table>
52 70
53 </div> 71 </div>
  72 + {% endif %}
  73 +
  74 +
54 {% if adscripcion.idLineaInvestigacion is not null %} 75 {% if adscripcion.idLineaInvestigacion is not null %}
55 <div class="form-group"> 76 <div class="form-group">
56 <label for="username">Area y Línea de Investigación:</label> 77 <label for="username">Area y Línea de Investigación:</label>
@@ -60,19 +81,18 @@ @@ -60,19 +81,18 @@
60 </ul> 81 </ul>
61 </div> 82 </div>
62 {% endif %} 83 {% endif %}
63 - 84 +
  85 +
  86 + {% if adscripcion.tituloTrabajo is not null %}
64 <div class="form-group"> 87 <div class="form-group">
65 <label for="titulo">Título del Trabajo:</label> 88 <label for="titulo">Título del Trabajo:</label>
66 <input type="text" class="form-control" value="{{adscripcion.tituloTrabajo}}" /> 89 <input type="text" class="form-control" value="{{adscripcion.tituloTrabajo}}" />
67 -  
68 -  
69 </div> 90 </div>
70 -  
71 -  
72 - 91 + {% endif %}
  92 +
73 93
74 - <a class="btn btn-primary" href="{{ path('cea_solicitudes_actualizar', { 'id': adscripcion.id, 'estatus' : 'true' }) }}" ><span class="fa fa-check"></span>&nbsp;Aprobar</a>  
75 - <a class="btn btn-danger" href="{{ path('cea_solicitudes_actualizar', { 'id': adscripcion.id, 'estatus' : 'false' }) }}" ><span class="fa fa-close"></span>&nbsp;Rechazar</a> 94 + <a class="btn btn-success btn-sm" href="{{ path('cea_solicitudes_actualizar', { 'id': adscripcion.id, 'estatus' : 'true' }) }}" ><span class="fa fa-check"></span>&nbsp;Aprobar</a>
  95 + <a class="btn btn-danger btn-sm" href="{{ path('cea_solicitudes_actualizar', { 'id': adscripcion.id, 'estatus' : 'false' }) }}" ><span class="fa fa-close"></span>&nbsp;Rechazar</a>
76 </form> 96 </form>
77 <hr /> 97 <hr />
78 </div> 98 </div>
src/AppBundle/Controller/AppController.php
@@ -11,6 +11,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; @@ -11,6 +11,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
11 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 11 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
12 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 12 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
13 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; 13 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  14 +use Symfony\Component\HttpFoundation\Request;
14 15
15 use AppBundle\Entity\Adscripcion; 16 use AppBundle\Entity\Adscripcion;
16 17
@@ -50,17 +51,57 @@ class AppController extends Controller { @@ -50,17 +51,57 @@ class AppController extends Controller {
50 /** 51 /**
51 * Pagina principal de inicio de la session Docente. 52 * Pagina principal de inicio de la session Docente.
52 * 53 *
53 - * @Route("/solicitudes", name="cea_solicitudes")  
54 - * @Method("GET") 54 + * @Route("/solicitudes/adscripcion/{estatus}", name="cea_adscripciones")
  55 + * @Method({"GET", "POST"})
55 * @Security("has_role('ROLE_COORDINADOR_NACIONAL')") 56 * @Security("has_role('ROLE_COORDINADOR_NACIONAL')")
56 */ 57 */
57 - public function verSolicitudesAction() 58 + public function verSolicitudesAction($estatus = 2, Request $request)
58 { 59 {
59 60
60 - $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findBy(array('idEstatus' => 2));  
61 - 61 + if ($request->getMethod() != 'POST') {
  62 + $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findBy(array('idEstatus' => $estatus));
  63 + switch ($estatus){
  64 + case 1:
  65 + $mensaje = "activas";
  66 + break;
  67 + case 2:
  68 + $mensaje = "en espera";
  69 + break;
  70 + case 3:
  71 + $mensaje = "rechazadas";
  72 + break;
  73 + }
  74 + }else{
  75 +
  76 + $persona = $this->getDoctrine()->getRepository('AppBundle:Persona')
  77 + ->findOneByCedulaPasaporte($request->get('docente'));
  78 +
  79 + if (!$persona) {
  80 + $this->addFlash('danger', 'Docente ' . $request->get('docente') . ' no Registrado en la Base de Datos del Centro de Estudios.');
  81 + return $this->render('cea/index.html.twig', array (
  82 + 'adscrito' => true
  83 + ));
  84 + }
  85 +
  86 + //1. obtener el rol-institucion-persona
  87 + $rol = $this->getDoctrine()->getRepository(
  88 + 'AppBundle:RolInstitucion')->findOneByIdRol(
  89 + $this->getDoctrine()->getRepository(
  90 + 'AppBundle:Rol')->findOneByIdPersona($persona));
  91 +
  92 + //si no existe el rol del docente, enviar correo al encargado de la región para verificar.
  93 + if (!$rol) {
  94 + $this->addFlash('danger', 'Docente no Registrado en la Base de Datos del Centro de Estudios. Por Favor');
  95 + return $this->render('cea/index.html.twig');
  96 + }
  97 +
  98 +
  99 + $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findByIdRolInstitucion($rol->getId());
  100 + $mensaje = "Busqueda : " . $request->get('docente');
  101 + }
62 return $this->render('cea/solicitudes.html.twig', array( 102 return $this->render('cea/solicitudes.html.twig', array(
63 - 'adscripciones' => $adscripciones 103 + 'adscripciones' => $adscripciones,
  104 + 'estatus_adscripciones' => $mensaje
64 )); 105 ));
65 } 106 }
66 107
@@ -95,11 +136,19 @@ class AppController extends Controller { @@ -95,11 +136,19 @@ class AppController extends Controller {
95 136
96 $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findOneById($adscripcion->getId()); 137 $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findOneById($adscripcion->getId());
97 138
98 - if($estatus) $adscripciones->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(1));  
99 - else $adscripciones->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(3)); 139 + if($estatus == "true") {
  140 + $adscripciones->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(1));
  141 + $user = $this->getDoctrine()->getRepository('AppBundle:Usuarios')->findOneByIdRolInstitucion($adscripcion->getIdRolInstitucion());
  142 + $user->addRol($this->getDoctrine()->getRepository('AppBundle:Role')->findOneByName("ROLE_ADSCRITO"));
  143 + }else{
  144 + $adscripciones->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(3));
  145 + $user = $this->getDoctrine()->getRepository('AppBundle:Usuarios')->findOneByIdRolInstitucion($adscripcion->getIdRolInstitucion());
  146 + $user->removeRol($this->getDoctrine()->getRepository('AppBundle:Role')->findOneByName("ROLE_ADSCRITO"));
  147 + }
100 148
101 $em = $this->getDoctrine()->getManager(); 149 $em = $this->getDoctrine()->getManager();
102 $em->persist($adscripciones); 150 $em->persist($adscripciones);
  151 + $em->persist($user);
103 $em->flush(); 152 $em->flush();
104 153
105 $this->addFlash('notice', 'Solicitud Actualizada Correctamente'); 154 $this->addFlash('notice', 'Solicitud Actualizada Correctamente');