Skip to content

Commit 402f53f

Browse files
"Implementada pestaña datos académicos del estudiante y más metodos de comunicación #11, #12"
1 parent 3632407 commit 402f53f

14 files changed

+408
-103
lines changed

SMS-Back-End/apigateway/helloworld_api.py

+17-18
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,18 @@ class ListaAlumnos(messages.Message):
7777

7878
class Profesor(messages.Message):
7979
nombre = messages.StringField(1)
80-
dni = messages.StringField(2)
80+
apellidos = messages.StringField(2)
81+
dni = messages.StringField(3)
8182

8283
class ProfesorCompleto(messages.Message):
8384
nombre = messages.StringField(1)
84-
dni = messages.StringField(2)
85-
direccion = messages.StringField(3)
86-
localidad = messages.StringField(4)
87-
provincia = messages.StringField(5)
88-
fecha_nac = messages.StringField(6)
89-
telefonoA = messages.StringField(7)
90-
telefonoB = messages.StringField(8)
85+
apellidos = messages.StringField(2)
86+
dni = messages.StringField(3)
87+
direccion = messages.StringField(4)
88+
localidad = messages.StringField(5)
89+
provincia = messages.StringField(6)
90+
fecha_nac = messages.StringField(7)
91+
telefono = messages.StringField(8)
9192

9293
class ListaProfesores(messages.Message):
9394
profesores = messages.MessageField(Profesor, 1, repeated=True)
@@ -392,7 +393,7 @@ def eliminar_alumno(self, request):
392393
curl -i -X GET localhost:8001/_ah/api/helloworld/v1/alumnos/getProfesoresAlumno?dni=1
393394
'''
394395
@endpoints.method(ID, ListaProfesores, path='alumnos/getProfesoresAlumno', http_method='GET', name='alumnos.getProfesoresAlumno')
395-
def getProfesoreAlumno(self, request):
396+
def getProfesoresAlumno(self, request):
396397
#Transformación de la llamada al endpoints a la llamada a la api rest del servicio.
397398
if v:
398399
print ("Ejecución de getProfesoresAlumno en apigateway")
@@ -405,7 +406,10 @@ def getProfesoreAlumno(self, request):
405406
url = "http://%s/" % modules.get_hostname(module="microservicio1")
406407

407408
#Añadimos a la url la coleccion (alumnos), el recurso (alumno dado por su dni) y el recurso anidado de este (profesores)
408-
url+='alumnos/'+request.dni+"/profesores"
409+
url+='alumnos/'+str(request.id)+"/profesores"
410+
411+
412+
print url
409413

410414
#Realizamos la petición
411415
result = urlfetch.fetch(url)
@@ -420,14 +424,9 @@ def getProfesoreAlumno(self, request):
420424
profesoresItems= []
421425
#Que rellenamos con todo los alumnos de la listaAlumnos
422426
for profesor in listaProfesores:
423-
profesoresItems.append(ProfesorCompleto( nombre=str(profesor.get('nombre')),
424-
dni=str(profesor.get('dni')),
425-
direccion=str(profesor.get('direccion')),
426-
localidad=str(profesor.get('localidad')),
427-
provincia=str(profesor.get('provincia')),
428-
fecha_nac=str(profesor.get('fecha_nac')),
429-
telefonoA=str(profesor.get('telefonoA')),
430-
telefonoB=str(profesor.get('telefonoB'))
427+
profesoresItems.append(Profesor( nombre=str(profesor.get('nombre')),
428+
apellidos=str(profesor.get('apellidos')),
429+
dni=str(profesor.get('dni'))
431430
)
432431
)
433432

SMS-Back-End/apigateway/main.py

-13
This file was deleted.

SMS-Back-End/microservicio1/APIDB/GestorAlumnosSQL.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -291,20 +291,17 @@ def getNumAlumnos(self):
291291
return 'Elemento no encontrado'
292292

293293
@classmethod
294-
def getProfesores(self, dniAlumno):
294+
def getProfesores(self, idAlumno):
295295
"""
296296
Devuelve una lista de los profesores que imparte clase a ese alumno.
297297
298298
Argumentos:
299299
300-
dniAlumno: El dni del alumno del que se pide la información.
301-
302-
303-
Extra: ¿Se debería añadir la comprobación de existencia del alumno?
304-
300+
idAlumno: El id del alumno del que se pide la información.
305301
"""
306302
db = MySQLdb.connect(dbParams.host, dbParams.user, dbParams.password, dbParams.db)
307303
cursor = db.cursor()
304+
idAlumno='\''+idAlumno+'\''
308305

309306
#Sacando los acentos...........
310307
mysql_query="SET NAMES 'utf8'"
@@ -329,9 +326,14 @@ def getProfesores(self, dniAlumno):
329326
row = cursor.fetchone()
330327
lista = []
331328
while row is not None:
329+
330+
print "Info profesor recibida: "+str(row)
331+
332332
profesor = Profesor()
333333

334-
profesor.dni=row[5]
334+
profesor.dni=row[0]
335+
profesor.nombre=row[1]
336+
profesor.apellidos=row[2]
335337
lista.append(profesor)
336338
#print row[0], row[1]
337339
row = cursor.fetchone()

SMS-Back-End/microservicio1/main.py

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ def delAlumno(id_alumno):
124124
@app.route('/alumnos/<string:id_alumno>/profesores',methods=['GET'])
125125
def getProfesoresAlumno(id_alumno):
126126
'''
127+
Devuelve todos los profesores que imparten clase a ese alumno.
127128
curl -i -X GET localhost:8080/alumnos/1/profesores
128129
'''
129130
return jsonpickle.encode(GestorAlumnos.getProfesores(id_alumno))

SMS-Front-End/app/app.js

+46-16
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,39 @@ de la vista y se usan).
7878
controller: 'ControladorNuevoEstudiante'
7979
})
8080

81+
.state('profesores', {
82+
url: '/profesores',
83+
templateUrl: 'profesores.html'
84+
})
85+
.state('profesores.main', {
86+
url: '/main',
87+
templateUrl: 'profesores-main.html',
88+
})
89+
.state('profesores.list', {
90+
url: '/list',
91+
templateUrl: 'profesores-lista.html',
92+
controller: 'ControladorListaProfesores'
93+
})
94+
.state('profesores.detalles-estudiante',{
95+
url: '/detalle/:estudianteID',
96+
templateUrl: 'profesores-detalle.html',
97+
controller: 'ControladorDetallesEstudiante'
98+
})
99+
.state('profesores.nuevo', {
100+
url: '/nuevo',
101+
//Podemos meter directamente texto desde aquí
102+
//template: 'I could sure use a drink right now.'
103+
templateUrl: 'profesores-nuevo.html',
104+
controller: 'ControladorNuevoProfesor'
105+
})
106+
107+
108+
109+
110+
111+
112+
113+
81114
// ABOUT PAGE AND MULTIPLE NAMED VIEWS =================================
82115
.state('about', {
83116
// we'll get to this in a bit
@@ -95,13 +128,13 @@ routerApp.controller('ControladorNuevoEstudiante', function ($scope) {
95128
*/
96129
$scope.addAlumno = function(){
97130
//console.log("lamando a addAlumno()");
98-
//console.log($scope.alumno);
131+
console.log($scope.alumno);
99132
//console.log($scope.alumno.nombre)
100133

101134
var ROOT = 'http://localhost:8001/_ah/api';
102135
gapi.client.load('helloworld', 'v1', null, ROOT);
103136

104-
gapi.client.helloworld.greetings.insertaralumno({'nombre':$scope.alumno.nombre,'dni':$scope.alumno.dni}).execute(function(resp){
137+
gapi.client.helloworld.alumnos.insertaralumno({'nombre':$scope.alumno.nombre,'dni':$scope.alumno.dni}).execute(function(resp){
105138
//Mostramos por consola la respuesta del servidor
106139
console.log(resp.message);
107140
$scope.respuesta=resp.message;
@@ -125,6 +158,17 @@ routerApp.controller('ControladorDetallesEstudiante', function($scope, $statePar
125158

126159
var ROOT = 'http://localhost:8001/_ah/api';
127160
gapi.client.load('helloworld', 'v1', null, ROOT);
161+
162+
163+
//Pedimos al gateway que nos diga todos los profesores que imparten clase a ese alumno.
164+
gapi.client.helloworld.alumnos.getProfesoresAlumno({'id':$stateParams.estudianteID}).execute(function(resp){
165+
console.log(resp);
166+
//Enviamos al scope no toda la respuesta sino la lista de profesores que se espeara que contenga esta.
167+
$scope.profesores = resp.profesores;
168+
$scope.$apply();
169+
});
170+
171+
//Pedimos al Gateway toda la informaicón del Alumno.
128172
gapi.client.helloworld.alumnos.getAlumno({'id':$stateParams.estudianteID}).execute(function(resp) {
129173

130174
console.log("calling getAlumno with id: "+$stateParams.estudianteID);
@@ -140,20 +184,6 @@ routerApp.controller('ControladorDetallesEstudiante', function($scope, $statePar
140184
});
141185

142186

143-
//Mockearemos un poco:
144-
/*
145-
var Estudiante = new Object();
146-
Estudiante.edad = "15";
147-
Estudiante.nombre = "Eduardo Manos Tijeras";
148-
Estudiante.localidad = "Granada";
149-
Estudiante.curso = "2º ESO";
150-
Estudiante.telefono="999-99-99-99"
151-
Estudiante.link_foto="http://maitegarcianieto.com/Fotos/Cine/Eduardo%20Manostijeras/Eduardo%20Manostijeras-7.jpg"
152-
153-
//En realidad debería de llamarse a la api para conseguir todos los datos del usuario.
154-
$scope.es = Estudiante;
155-
*/
156-
157187
//Implementación de las acciones que se producen cuando el BOTÓN ELIMINAR se pulsa.
158188
$scope.ButtonClick = function(){
159189
console.log("Pulsado boton de eliminar")

SMS-Front-End/app/css/components/accordion.gradient.css

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
margin-top: 0;
99
margin-bottom: 15px;
1010
padding: 5px 15px;
11-
background: #f7f7f7;
12-
font-size: 18px;
11+
/*Realizadas modificaciones para personalización*/
12+
background: transparent; /*Old: background: #f7f7f7;*/
13+
font-size: 16px;
1314
line-height: 24px;
1415
cursor: pointer;
15-
border: 1px solid #dddddd;
16+
/*Realizadas modificaciones para personalización*/
17+
border: 0px solid #dddddd; /* Old: border: 1px solid #dddddd; */
1618
border-radius: 4px;
1719
}
1820
/* Sub-object: `uk-accordion-content`

SMS-Front-End/app/estudiantes-detalle.html

+51-45
Original file line numberDiff line numberDiff line change
@@ -6,78 +6,84 @@
66
<div class="uk-grid">
77

88
<!--En la primera sección ponemos la imagen del usuario usando la url de este -->
9-
<div class="uk-width-1-3 uk-margin-top">
9+
<div class="uk-width-1-4 uk-margin-top">
1010
<!--src={{es.link_foto}}-->
1111
<img class="uk-border-circle" width="150" height="150" src=http://maitegarcianieto.com/Fotos/Cine/Eduardo%20Manostijeras/Eduardo%20Manostijeras-7.jpg alt="">
1212
</div>
1313

1414
<!-- En la segunda sección TODOS sus datos, junto a su diseño con el kit de CSS-->
15-
<div class="uk-width-2-3 uk-margin-top ">
15+
<div class="uk-width-2-4 uk-margin-top ">
1616

17-
<h2>{{alumno.nombre}}</h2>
17+
<h2>{{alumno.nombre}}</h2>
1818

19-
<ul class="uk-list uk-list-line">
20-
<li>DNI: {{alumno.dni}} </li>
21-
<li>Fecha nacimiento: {{alumno.fecha_nacimiento}}</li>
22-
<li>Localidad: {{alumno.localidad}}</li>
23-
<li>Provincia: {{alumno.provincia}}</li>
24-
<li>Direccion: {{alumno.direccion}}</li>
25-
<li>Teléfono: {{alumno.telefono}}</li>
26-
</ul>
19+
<ul class="uk-list uk-list-line">
20+
<li>DNI: {{alumno.dni}} </li>
21+
<li>Fecha nacimiento: {{alumno.fecha_nacimiento}}</li>
22+
<li>Localidad: {{alumno.localidad}}</li>
23+
<li>Provincia: {{alumno.provincia}}</li>
24+
<li>Direccion: {{alumno.direccion}}</li>
25+
<li>Teléfono: {{alumno.telefono}}</li>
26+
</ul>
2727

28-
</div>
2928

30-
</div>
3129

30+
</div>
3231

33-
<!--Debajo del grid vamos a colocar dos botones, uno de editar y otro de eliminar -->
32+
<!-- En la tercera sección los botones de eliminar y modificar alumno -->
33+
<div class="uk-wdith-1-4 uk-margin-top" >
3434

35-
<!-- <div class="uk-margin-large-top"> -->
36-
<!--Usamos la directiva ng-click para especificar la función dentro del controlador de esta vista que
37-
implementa las acciones asociadas a este botón.-->
38-
<!-- <button class="uk-button-danger" ng-click="ButtonClick()" type="button">Eliminar</button> -->
39-
<!-- </div> -->
35+
<a href="" class="uk-icon-hover uk-icon-medium uk-icon-trash"></a>
4036

41-
<!--Botón que abre la sección desplegable que muestra los datos académicos -->
42-
<div class="uk-margin-top">
43-
44-
<h4><a href="#"><i class="uk-icon-book uk-icon-medium"></i> Datos académicos </a> </h4>
37+
<a href="" class="uk-icon-hover uk-icon-medium uk-icon-edit"></a>
4538

39+
</div>
4640

41+
</div>
4742

48-
<!--Añadimos la hoja de estilo del componente acordeon-->
49-
<link type="text/css" rel="stylesheet" href="/app/css/components/accordion.gradient.css" />
50-
<script src="/app/js/components/accordion.js"></script>
5143

52-
<!--This accordion will work-->
53-
<div class="uk-accordion" data-uk-accordion="{collapse: true}">
44+
<!--Botón que abre la sección desplegable que muestra los datos académicos -->
45+
<div class="uk-margin-top">
5446

55-
<h3 class="uk-accordion-title">Title 1</h3>
56-
<div class="uk-accordion-content">content one</div>
47+
<!--Añadimos el estilo, que además ha sido modificado para personalizarlo -->
48+
<link type="text/css" rel="stylesheet" href="app/css/components/accordion.gradient.css" />
49+
<!--Añadimos la interactividad con JavaScript -->
50+
<script type="text/javascript" src="app/js/components/accordion.min.js"></script>
5751

58-
<h3 class="uk-accordion-title">Title 2</h3>
59-
<div class="uk-accordion-content">content two</div>
52+
<!--Definimos el acordeon de las secicones menores -->
53+
<div class="uk-accordion" data-uk-accordion="{collapse:false, showfirst:false}">
6054

61-
<h3 class="uk-accordion-title">Title 3</h3>
62-
<div class="uk-accordion-content">content three</div>
55+
<h3 class="uk-accordion-title"><i class="uk-icon-book uk-icon-medium"></i> Datos académicos </a></h3>
56+
<div class="uk-accordion-content">
6357

64-
</div>
58+
<div class="uk-grid">
6559

60+
<div class="uk-width-1-2">
61+
<h4>Profesores</h4>
62+
<hr>
63+
<li ng-repeat="profesor in profesores">
64+
<a>{{ profesor.nombre }}</a>
65+
</li>
66+
</div>
6667

67-
<form class="uk-form">
68-
<input type="text" data-uk-datepicker="{format:'DD.MM.YYYY'}">
69-
</form>
68+
<div class="uk-width-1-2">
69+
<h4>Clases</h4>
70+
<hr>
71+
<li ng-repeat="profesor in profesores">
72+
<a>{{ profesor.nombre }}</a>
73+
</li>
74+
</div>
7075

71-
</div>
76+
</div>
7277

73-
<!-- Sección donde se inyecta las secciónes que cargan los botones anteriores >
74-
<div class="container">
78+
</div>
7579

76-
El anidamiento de una tercera vista que no vamos a usar
80+
<!--
81+
<h3 class="uk-accordion-title">Title 2</h3>
82+
<div class="uk-accordion-content">content two</div>
7783
78-
<div class="uk-container uk-container-center uk-margin-large-top">
79-
<div ui-view></div>
84+
<h3 class="uk-accordion-title">Title 3</h3>
85+
<div class="uk-accordion-content">content three</div>
86+
-->
8087
</div>
8188

8289
</div>
83-
-->

SMS-Front-End/app/index.html

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@
1313

1414
<!-- Loading UI-KIT CSS Framework -->
1515
<link type="text/css" rel="stylesheet" href="/app/css/uikit.gradient.min.css" />
16+
17+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
18+
1619
<script src="/app/js/uikit.min.js"></script>
1720

1821
<!--Query-->
19-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
22+
2023

2124
<!-- Loading api conector -->
2225
<script src="https://apis.google.com/js/client.js"></script>
@@ -45,6 +48,7 @@
4548
<ul class="uk-navbar-nav uk-hidden-small">
4649

4750
<li><a ui-sref="estudiantes.main">Estudiantes</a></li>
51+
<li><a ui-sref="profesores.main">Profesores</a></li>
4852
<li><a ui-sref="about">Otros</a></li>
4953
</ul>
5054
</div>

0 commit comments

Comments
 (0)