Explorar el Código

Files De Gabriel SIN COMENTAR

Gabriel Santiago Plaza hace 4 años
padre
commit
66d26405e4

+ 2
- 0
escuela/.gitattributes Ver fichero

@@ -0,0 +1,2 @@
1
+# Auto detect text files and perform LF normalization
2
+* text=auto

BIN
escuela/__pycache__/prueba.cpython-38.pyc Ver fichero


+ 0
- 0
escuela/posts.db Ver fichero


+ 502
- 0
escuela/prueba.py Ver fichero

@@ -0,0 +1,502 @@
1
+
2
+#Comentar no es mi fuerte Gabriel Santiago
3
+#Este file es 'viejo' estoy editando más cosas. Pero ye
4
+#also los html's lo tengo en mi compu no los subo al git
5
+
6
+
7
+from flask import Flask, render_template, request, redirect, jsonify
8
+
9
+#flask_sqlalchemy es una excelente libreria para usar bases de datos
10
+from flask_sqlalchemy import SQLAlchemy
11
+
12
+import datetime, json
13
+
14
+app = Flask(__name__)
15
+
16
+#para sql segun lo que vi
17
+#hay que instalar un pymysql despues tener un file con lo de User, password, host, db
18
+#entonces then do something like
19
+
20
+#connect = 'mysql+pymysql://dbuser:password@dbHost/dbName
21
+
22
+#vi en sqlAlchemy documentation que no es necesario pymysql pero pymysql tiene cosas interesantes
23
+
24
+#entonces aqui fuera app.config[lo que esta abajo] = connect
25
+
26
+connect = 'mysql+pymysql://root@localhost/registro_escolar'
27
+
28
+app.config['SQLALCHEMY_DATABASE_URI'] = connect
29
+
30
+#aqui se crea el objeto db, utilizando el config de app
31
+
32
+db = SQLAlchemy(app)
33
+
34
+#aqui estan las clases que serian las tablas,
35
+#por alguna razon tienes que crear las tablas que vayas a usar en python
36
+
37
+#so like si creo una de maestros pues
38
+#class Maestro(db.model):
39
+
40
+
41
+#db.Column crea columna, el tipo de dato y tiene algunos features como primary_key, nullable, db.ForeignKey etc
42
+
43
+class usuarios(db.Model):
44
+
45
+    id = db.Column(db.Integer, primary_key=True, autoincrement =True)
46
+    nombres = db.Column(db.String(100))
47
+    apellidos = db.Column(db.String(100))
48
+    email = db.Column(db.String(100))
49
+    username = db.Column(db.String(100), nullable = True)
50
+    password = db.Column(db.String(100), nullable = True)
51
+    fecha_nacimiento = db.Column(db.DateTime, default = datetime.datetime.now())
52
+    direccion1 = db.Column(db.String(200), default = 'En la casa de tu mai')
53
+    direccion2 = db.Column(db.String(200), default = 'En la casa de tu pai tambien')
54
+    ciudad = db.Column(db.String(100), default ='En la ciudad de los dioses')
55
+    pais = db.Column(db.String(100), default = 'Tu Pai')
56
+    zipcode = db.Column(db.String(100), default= 'cabron' )
57
+    telefono1 = db.Column(db.String(16),default= 'cabron' )
58
+    telefono2 = db.Column(db.String(20),default= 'cabron' )
59
+    genero = db.Column(db.String(30),default= 'cabron' )
60
+    
61
+
62
+    def __repr__(self):
63
+        return 'Usuario ' + str(self.id)
64
+    
65
+
66
+class cursos(db.Model):
67
+    id = db.Column(db.Integer, primary_key=True, autoincrement = True)
68
+    codigo = db.Column(db.String(12))
69
+    titulo = db.Column(db.String(100))
70
+    grado = db.Column(db.Integer)
71
+    descripcion = db.Column(db.String(200))
72
+
73
+    def __repr__(self):
74
+        return 'Curso ' + str(self.id)
75
+
76
+class facultad(db.Model):
77
+    user_id = db.Column(db.Integer, db.ForeignKey(usuarios.id), primary_key=True)
78
+    especialidad = db.Column(db.String(200))
79
+    educacion_especial = db.Column(db.Integer)
80
+
81
+class oferta(db.Model):
82
+    id = db.Column(db.Integer, primary_key=True, autoincrement = True)
83
+    oferta_id = db.Column(db.Integer, db.ForeignKey(cursos.id))
84
+    semestre = db.Column(db.String(20))
85
+    horario = db.Column(db.String(100))
86
+
87
+class facultad_ofrece(db.Model):
88
+    id = db.Column(db.Integer, primary_key=True, autoincrement = True)
89
+    oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
90
+    facultad_id = db.Column(db.Integer, db.ForeignKey(facultad.user_id))
91
+    porciento = db.Column(db.Integer, default = 100)
92
+
93
+
94
+    
95
+    
96
+class estudiantes(db.Model):
97
+    user_id = db.Column(db.Integer, db.ForeignKey(usuarios.id), primary_key=True)
98
+    grado = db.Column(db.Integer)
99
+    educacion_especial = db.Column(db.String(30))
100
+
101
+    def __repr__(self):
102
+        return 'estudiante ' + str(self.user_id)
103
+
104
+class matricula(db.Model):
105
+    id = db.Column(db.Integer, primary_key=True)
106
+    estudiante_id = db.Column(db.Integer, db.ForeignKey(estudiantes.user_id))
107
+    oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
108
+
109
+class evaluaciones(db.Model):
110
+    id = db.Column(db.Integer, primary_key =True, autoincrement = True)
111
+    tipo = db.Column(db.String(100))
112
+    valor = db.Column(db.Integer)
113
+    fecha = db.Column(db.DateTime, default = datetime.datetime.now())
114
+    oferta_id = db.Column(db.Integer, db.ForeignKey(oferta.id))
115
+
116
+class asistencia(db.Model):
117
+    id = db.Column(db.Integer, primary_key = True, autoincrement = True)
118
+    matricula_id = db.Column(db.Integer, db.ForeignKey(matricula.id))
119
+    fecha = db.Column(db.DateTime, default = datetime.datetime.now())
120
+class notas(db.Model):
121
+    id = db.Column(db.Integer)
122
+    evaluacion_id = db.Column(db.Integer, db.ForeignKey(evaluaciones.id), primary_key=True)
123
+    estudiante_id = db.Column(db.Integer, db.ForeignKey(estudiantes.user_id), primary_key=True)
124
+    valor = db.Column(db.Integer)
125
+
126
+    def __repr__(self):
127
+        return 'nota '  +str(self.id)
128
+    
129
+
130
+
131
+@app.route('/')
132
+
133
+def helloWorld():
134
+    return render_template('index.html')
135
+
136
+@app.route('/addClass', methods=['GET', 'POST'])
137
+def addClass():
138
+    if request.method == 'POST':
139
+
140
+        post_codigo = request.form['codigo']
141
+        post_titulo = request.form['titulo']
142
+        post_grado = request.form['grado']
143
+        post_descripcion = request.form['descripcion']
144
+
145
+        curso_nuevo = cursos(codigo =post_codigo, titulo=post_titulo, grado = post_grado, descripcion=post_descripcion)
146
+
147
+        db.session.add(curso_nuevo)
148
+        db.session.commit()
149
+        return redirect('/addClass')
150
+    else:
151
+        return render_template('addClases.html')
152
+
153
+#beta, felt cute in this pic might delete later
154
+#add notas 
155
+
156
+@app.route ('/add', methods=['GET','POST'])
157
+def addSomething():
158
+    
159
+    if request.method =='POST':
160
+        
161
+        post_nombre = request.form['nombre']
162
+        post_nota = request.form['Nota']
163
+        
164
+
165
+        nota_nueva = Notas(nombre=post_nota, valor = post_nota)
166
+        
167
+        
168
+
169
+        db.session.add(nota_nueva)
170
+        db.session.commit()
171
+        return redirect('/addNota')
172
+    else:
173
+        return render_template('addSomething.html')
174
+
175
+
176
+@app.route('/addOferta', methods =['GET', 'POST'])
177
+def addOferta():
178
+    
179
+    if request.method =='POST':
180
+        post_oferta_id = int(request.form['curso'])
181
+        post_academico = request.form['academico']
182
+        post_horario = request.form['horario']
183
+
184
+        ofertaNueva = oferta(oferta_id =post_oferta_id, semestre = post_academico, horario =post_horario)
185
+
186
+        db.session.add(ofertaNueva)
187
+        db.session.commit()
188
+
189
+        oferta_idQue = oferta.query.order_by(oferta.id.desc()).first().id
190
+
191
+        count = int(request.form['countRow'])
192
+
193
+        for x in range(count):
194
+            post_maestro = int(request.form['Maestro[{}]'.format(x)])
195
+
196
+            maestro_oferta= facultad_ofrece(oferta_id =oferta_idQue, facultad_id =post_maestro)
197
+            db.session.add(maestro_oferta)
198
+            db.session.commit()
199
+            
200
+        return redirect('/addOferta')
201
+        
202
+    else:
203
+        cursosAll = cursos.query.all()
204
+        maestrosAll = db.engine.execute('SELECT * FROM `facultad` f, `usuarios` u where f.user_id = u.id')
205
+        ofertaAll = db.engine.execute('SELECT  o.semestre, o.horario, f.oferta_id, count(f.facultad_id) cantidadMaestros, f.oferta_id, c.codigo, c.titulo, c.grado FROM `oferta` o, `cursos` c, `facultad_ofrece` f where o.curso_id =c.id and f.oferta_id = o.id group by f.oferta_id')
206
+        
207
+        return render_template('addOferta.html', cursos= cursosAll, maestros= maestrosAll, ofertas = ofertaAll)
208
+
209
+
210
+
211
+
212
+@app.route ('/addMatricula/<int:oferId>', methods =['GET', 'POST'])
213
+def addMatricula(oferId):
214
+    if request.method =='POST':
215
+        count = int(request.form['countRow'])
216
+
217
+        for x in range(count):
218
+            post_estudiante = int(request.form['estudiantes[{}]'.format(x)])
219
+
220
+            matriculaNueva = matricula(estudiante_id = post_estudiante, oferta_id=oferId)
221
+            db.session.add(matriculaNueva)
222
+            db.session.commit()
223
+
224
+        return redirect('/addMatricula/{}'.format(oferId))
225
+
226
+
227
+    
228
+    
229
+    else:
230
+        matriculadosAll = db.engine.execute('SELECT u.nombres, u.apellidos FROM `usuarios` u, `matricula` m where m.oferta_id ={} and m.estudiante_id = u.id ORDER BY u.apellidos'.format(oferId))
231
+        estudiantesAll = db.engine.execute('SELECT u.apellidos, u.nombres, e.user_id FROM `usuarios` u, `estudiantes` e where u.id = e.user_id ORDER BY u.apellidos' )
232
+        return render_template('addMatricula.html', estudiantes = estudiantesAll, oferId=oferId, matriculados = matriculadosAll)
233
+
234
+
235
+
236
+@app.route('/Maestro/<int:MaestroId>')
237
+def Maestro(MaestroId):
238
+    cursosTodos = db.engine.execute('select c.codigo, o.horario, c.titulo, f.oferta_id from `oferta` o, `cursos` c, `facultad_ofrece` f where f.oferta_id = o.id and f.facultad_id = {} and o.curso_id =c.id'.format(MaestroId))
239
+    return render_template('dashboard.html', MaestroId = MaestroId, los_cursos = cursosTodos)
240
+
241
+
242
+
243
+#@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>')
244
+#def cursosPagina(MaestroId, ofertaId):
245
+    
246
+#    newCourses = cursos.query.filter_by(id=ofertaId).first()
247
+#    return render_template('cursos.html',MaestroId = MaestroId, id=ofertaId, el_curso=newCourses)
248
+
249
+#Add estudiantes
250
+
251
+@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNota', methods =['GET','POST'])
252
+def addNota(MaestroId, ofertaId):
253
+    if request.method =='POST':
254
+        post_ofertaId = ofertaId
255
+        post_tipo = request.form['tipo']
256
+        post_valor = request.form['valor']
257
+        post_fecha = request.form['Fecha']
258
+        post_fecha = post_fecha.split('-')
259
+
260
+
261
+        newEval = evaluaciones(oferta_id=post_ofertaId, tipo=post_tipo, valor = post_valor, fecha =datetime.date(int(post_fecha[0]),int(post_fecha[1]),int(post_fecha[2])))
262
+
263
+        db.session.add(newEval)
264
+        db.session.commit()
265
+        
266
+        last_entry = evaluaciones.query.filter_by(oferta_id=ofertaId).order_by(evaluaciones.id.desc()).first()
267
+        
268
+        return redirect('/Maestro/'+ str(MaestroId) + '/'+str(ofertaId)+'/addNota')
269
+
270
+    else:
271
+        newCourses = cursos.query.filter_by(id=ofertaId).first()
272
+        allEval = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
273
+        bigList =[]
274
+
275
+        for evaluacion in allEval:
276
+            dictionary ={}
277
+            dictionary['Valor'] = int(evaluacion.valor)
278
+            dictionary['evalId'] = int(evaluacion.id)
279
+            dictionary['tipo'] = evaluacion.tipo
280
+            dictionary['fecha'] = str(evaluacion.fecha)
281
+            bigList.append(dictionary)
282
+
283
+        return render_template('addEvaluacion.html',MaestroId = MaestroId, el_curso=ofertaId, evaluaciones = allEval)
284
+
285
+@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/addNotas', methods = ['GET','POST'])
286
+def notas1(MaestroId, ofertaId):
287
+
288
+    
289
+    query = db.engine.execute('SELECT usuarios.id, usuarios.nombres, usuarios.apellidos from `notas`, `usuarios`, `evaluaciones` where evaluaciones.id = notas.evaluacion_id and notas.estudiante_id = usuarios.id and evaluaciones.oferta_id={}  group by usuarios.id order by usuarios.apellidos'.format(ofertaId))
290
+    
291
+    notasQuery = db.engine.execute('SELECT notas.valor Saco, notas.estudiante_id, notas.evaluacion_id, evaluaciones.valor ValorReal from `notas`, `usuarios`, `evaluaciones` where evaluaciones.id = notas.evaluacion_id and notas.estudiante_id = usuarios.id and evaluaciones.oferta_id={}  order by usuarios.apellidos, evaluaciones.id'.format(ofertaId))
292
+    
293
+    notasCompletaJson ={}
294
+
295
+    query2 = db.engine.execute('SELECT id FROM `evaluaciones` where oferta_id = {}'.format(ofertaId))
296
+
297
+    evalIds =[]
298
+    
299
+    for Id in query2:
300
+        evalIds.append(int(Id.id))
301
+
302
+    
303
+    for estudiante in query:
304
+        Evaluaciones =[]
305
+        notasSaco = []
306
+        notasQuery = db.engine.execute('SELECT notas.valor Saco, notas.estudiante_id, notas.evaluacion_id, evaluaciones.valor ValorReal from `notas`, `usuarios`, `evaluaciones` where evaluaciones.id = notas.evaluacion_id and notas.estudiante_id = usuarios.id and evaluaciones.oferta_id={}  order by usuarios.apellidos, evaluaciones.id'.format(ofertaId))
307
+    
308
+        for nota in notasQuery:
309
+            if nota.estudiante_id == estudiante.id:
310
+
311
+                Evaluaciones.append(nota.evaluacion_id)
312
+                notasSaco.append(nota.Saco)
313
+        
314
+        notasCompletaJson.setdefault(estudiante.id, {})['nombre'] = estudiante.nombres
315
+        notasCompletaJson[estudiante.id]['apellidos'] = estudiante.apellidos
316
+        notasCompletaJson[estudiante.id]['valorSaco'] = notasSaco
317
+        notasCompletaJson[estudiante.id]['evaluacion'] = Evaluaciones
318
+
319
+    
320
+
321
+
322
+            
323
+    if request.method =="POST":
324
+        #post = request.get_json()
325
+        post_stuId = int(request.get_json()['StudentId'])
326
+        post_nota = int(request.get_json()['Nota'])
327
+
328
+        post_id = int(request.get_json()['evalId'])
329
+
330
+        Exists = notas.query.filter_by(estudiante_id=post_stuId, evaluacion_id=post_id).first()
331
+
332
+        if(Exists):
333
+        
334
+            query =db.engine.execute('UPDATE `notas` SET valor ={} WHERE estudiante_id ={} and evaluacion_id={}'.format(post_nota, post_stuId, post_id))
335
+        
336
+        else:
337
+            notaNueva = notas(evaluacion_id = post_id, estudiante_id=post_StuId, valor =post_nota)
338
+            db.session.add(notaNueva)
339
+        
340
+        db.session.commit()
341
+        #for x in range(int(post_filas)):
342
+
343
+        #    post_student = request.form['id_usuario[{}]'.format(x)]
344
+            
345
+
346
+        #    for y in range(int(post_columnas)):
347
+        #        post_valor = request.form['evaluacion[{}][{}]'.format(x, y)]
348
+        #        post_evaluacionId =request.form['cantidadEval[{}]'.format(y)]
349
+
350
+
351
+        #        notaNueva = notas( evaluacion_id=post_evaluacionId, estudiante_id=post_student, valor = post_valor)
352
+
353
+        #        db.session.add(notaNueva)
354
+        #        db.session.commit()
355
+
356
+        return redirect('/Maestro/'+str(MaestroId) +'/' + str(ofertaId)+'/addNota')
357
+
358
+
359
+    else:
360
+        evaluacionesTodos = db.engine.execute('select * from `evaluaciones` where oferta_id ={}'.format(ofertaId))
361
+        estudiantes_Todos = db.engine.execute('select u.apellidos, u.nombres, u.id from `usuarios` u, `matricula` m where m.estudiante_id = u.id and m.oferta_id ={}'.format(ofertaId))
362
+        
363
+
364
+        return render_template('addNotas.html',MaestroId = MaestroId, evaluaciones = evaluacionesTodos, estudiantes=estudiantes_Todos, ofertaId = ofertaId, notasCompletas = notasCompletaJson, evalIds=evalIds)
365
+    
366
+
367
+
368
+@app.route ('/estudiante', methods=['GET','POST'])
369
+def addStudent():
370
+    if request.method == 'POST':
371
+        #acentos = {'á':'&aacute;', 'é': '&eacute;', 'í':'&iacute;', 'ó': '&oacute;', 'ú':'&uacute;',
372
+        #'ü':'&uuml;', 'Á': '&Aacute;', 'É': '&Eacute;', 'Í':'&Iacute;', 'Ó':'&Oacute;', 'Ú':'&Uacute',
373
+        #'Ü':'&Uuml;', 'Ñ':'&Ntilde'}
374
+        
375
+        post_apellidos = request.form['apellidos'] 
376
+        post_nombre = request.form['nombre']
377
+        post_email = request.form['email']
378
+        estudiante_nuevo = usuarios(email=post_email, nombres=post_nombre, apellidos=post_apellidos)
379
+        db.session.add(estudiante_nuevo)
380
+        db.session.commit()
381
+
382
+        last_id= usuarios.query.order_by(usuarios.id.desc()).first().id
383
+        
384
+        if(request.form['Usuario'] == 'Estudiante'):
385
+            post_grado = request.form['grado']
386
+            post_educ = request.form['educ']
387
+
388
+        #for key in acentos.keys():
389
+        #    post_apellidos= post_apellidos.replace(key,acentos[key])
390
+        #    post_nombre = post_nombre.replace(key,acentos[key])
391
+        
392
+
393
+            estudiante_nuevo = estudiantes(user_id=last_id, grado = post_grado, educacion_especial=post_educ)
394
+            db.session.add(estudiante_nuevo)
395
+            db.session.commit()
396
+        
397
+        else:
398
+            post_especialidad = request.form['especialidad']
399
+            maestro_nuevo = facultad(user_id = last_id, especialidad= post_especialidad, educacion_especial =0)
400
+            db.session.add(maestro_nuevo)
401
+            db.session.commit()
402
+
403
+
404
+
405
+
406
+        #last_id= 8.query.order_by(usuarios.id.desc()).first()
407
+        #db.session.add(estudiantes(user_id =last_id, grado=post_grado, educacion_especial =post_educ))
408
+        #db.session.commit()
409
+        return redirect('/estudiante')
410
+    else:
411
+        return render_template('estudiante.html')
412
+
413
+#beta, might delete later, add notas
414
+
415
+#@app.route('/addNota', methods = ['GET', 'POST'])
416
+#def addNota():
417
+#    if request.method== 'POST':
418
+#        for x in range(int(request.form['countPost'])):
419
+#            post_email = request.form['email[{}]'.format(x)]
420
+#            post_evaluacion = request.form['evaluacion[{}]'.format(x)]
421
+#            print(post_email, post_evaluacion, '\n')
422
+#        
423
+#
424
+#    else:
425
+#        estudiantes2 = estudiante.query.order_by(estudiante.apellidos).all()
426
+#        return render_template('addNotas.html', estudiantes=estudiantes2)
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+@app.route('/Maestro/<int:MaestroId>/<int:ofertaId>/verNotas')
435
+def cursosVerNotas(MaestroId, ofertaId):
436
+
437
+    evaluacionesTodas = evaluaciones.query.filter_by(oferta_id=ofertaId).all()
438
+    cursosTodos = cursos.query.filter_by(id=ofertaId).all()
439
+
440
+    return render_template('verNotas.html', MaestroId = MaestroId, cursos=cursosTodos, evaluaciones=evaluacionesTodas)
441
+
442
+@app.route("/Maestro/<int:MaestroId>/<int:evalId>/verNotasEstudiantes")
443
+def verNotasEstudiantes(MaestroId, evalId):
444
+
445
+    result = db.engine.execute('SELECT * FROM `notas` n, `usuarios` where n.evaluacion_id ={} and usuarios.id = n.estudiante_id'.format(evalId))
446
+
447
+    
448
+    
449
+    #db.session.query(evaluacion, usuarios).join(Usuarios).filter(usuarios.id == evaluacion.estudiante_id).order_by(usuarios.apellidos)
450
+
451
+    return render_template('verNotasEstudiantes.html',table=result, MaestroId = MaestroId, evalId=evalId)
452
+
453
+
454
+
455
+@app.route("/Maestro/<int:MaestroId>/<int:ofertaId>/addAsistencia", methods = ['POST', 'GET'])
456
+def pasarAsistencia(MaestroId, ofertaId):
457
+    
458
+    estudiantes_Todos =  estudiantes_Todos = db.engine.execute('select u.apellidos, u.nombres, u.id from `usuarios` u, `matricula` m where m.estudiante_id = u.id and m.oferta_id ={}'.format(ofertaId))
459
+   
460
+    
461
+    return render_template('Asistencia.html', MaestroId = MaestroId, estudiantes = estudiantes_Todos, cursos=ofertaId)
462
+
463
+
464
+#############################
465
+#
466
+#ESTUDIANTES
467
+#
468
+#############################
469
+
470
+@app.route('/dashEstudiantes/<int:estId>')
471
+def dashEstudiantes(estId):
472
+    nombre = usuarios.query.filter_by(id=estId).first()
473
+    
474
+    return render_template('dashEstudiantes.html',nombre=nombre.nombres, estId=estId)
475
+
476
+@app.route('/dashEstudiantes/<int:estId>/notas')
477
+def dashEstNotas(estId):
478
+    cursosMatri = cursos.query.all()
479
+    
480
+    resultEstudiante = db.engine.execute('SELECT sum(evaluaciones.valor) valorReal, sum(notas.valor) valorSaco, cursos.codigo, cursos.titulo, evaluaciones.oferta_id, matricula.estudiante_id FROM `cursos`, `matricula`, `oferta`, `notas`, `evaluaciones` where matricula.estudiante_id={} and evaluaciones.id=notas.evaluacion_id and matricula.estudiante_id=notas.estudiante_id and evaluaciones.oferta_id = oferta.id and matricula.oferta_id = evaluaciones.oferta_id and cursos.id = oferta.curso_id group by matricula.oferta_id'.format(estId))
481
+    nombre = usuarios.query.filter_by(id=estId).first().nombres
482
+    return render_template('estuNotas.html',nombre=nombre, todaNota = resultEstudiante, estId= estId)
483
+
484
+
485
+@app.route('/dashEstudiantes/<int:estId>/notas/<int:ofertaId>')
486
+
487
+def dashEstEval(estId, ofertaId):
488
+    result = db.engine.execute('SELECT notas.valor valorSaco, evaluaciones.valor valorReal, evaluaciones.tipo from `evaluaciones`, `matricula`, `notas` where evaluaciones.oferta_id = {} and matricula.oferta_id = evaluaciones.oferta_id and matricula.estudiante_id={} and notas.estudiante_id=matricula.estudiante_id and notas.evaluacion_id = evaluaciones.id'.format(ofertaId, estId))
489
+    nombre = usuarios.query.filter_by(id=estId).first().nombres
490
+    return render_template('verEstuNotas.html',nombre=nombre, todo =result, estId=estId)
491
+
492
+
493
+    
494
+    
495
+
496
+
497
+
498
+
499
+
500
+
501
+if __name__ == "__main__":
502
+    app.run(debug=True)

+ 110
- 0
escuela/static/css/estilo.css Ver fichero

@@ -0,0 +1,110 @@
1
+:root {
2
+    --colorOscuro:#37474F;
3
+    --colorVerde:#63d297;
4
+    --fontClaro:#fff;
5
+}
6
+.boton
7
+{
8
+  background-color: var(--colorVerde); 
9
+  color: var(--colorOscuro);
10
+  text-align: center;
11
+  text-decoration: none;
12
+/*   cursor: pointer; */
13
+  display: inline-block;
14
+
15
+}
16
+.logout {
17
+  padding: 0 10px 10px;
18
+  line-height: 38px;
19
+  font-size: 12px;
20
+  margin: 20px 20px 20px 0px;
21
+  border-radius: 4px;
22
+  height: 36px;
23
+}
24
+.usuario {
25
+  padding: 0 10px 10px;
26
+  line-height: 38px;
27
+  font-size: 12px;
28
+  margin: 20px 20px 20px 0px;
29
+  border-radius: 4px;
30
+  height: 36px;
31
+}
32
+.labelForma {
33
+  padding: 5px 10px 0px;
34
+  line-height: 38px;
35
+  font-size: 16px;
36
+  margin: 10px 10px 10px 10px;
37
+  border-radius: 4px;
38
+  width: 200px;
39
+  height: 48px;
40
+}
41
+.task {
42
+  border: 2px solid var(--colorOscuro);
43
+  padding: 20px;
44
+  font-size: 30px;
45
+  margin: 4px 2% 140px;
46
+  border-radius: 12px;
47
+  width: 280px;
48
+  height: 100px;
49
+}
50
+
51
+.boton:hover {
52
+  text-decoration: none;
53
+}
54
+
55
+
56
+body {
57
+/*   padding: 20px; */
58
+  background-color: #fff; 
59
+  font-family: "arial";
60
+  text-align: center;
61
+}
62
+.header{
63
+  background-color: var(--colorOscuro); 
64
+  color: var(--fontClaro);;
65
+  width: 100%;
66
+  height: 80px;
67
+  line-height: 80px;
68
+  text-align: center;
69
+/*   padding: 0px 0 10px; */
70
+/*   padding: 10px 0 10px; */
71
+  font-size: 60px;
72
+}
73
+.logo
74
+{
75
+  font-size: 10px;
76
+	width:72px;
77
+	height:90%;
78
+	margin: 4px 0px 4px 20px;
79
+}
80
+.fila
81
+{
82
+	margin: 140px 0px 140px 0;
83
+	text-align: center;
84
+}
85
+
86
+.fila2
87
+{
88
+	margin: 100px 0px 100px 0;
89
+	text-align: center;
90
+}
91
+
92
+
93
+.task2 
94
+{
95
+  border: 2px solid var(--colorOscuro);
96
+  padding: 5px;
97
+  font-size: 15px;
98
+  margin: 4px 2% 20px;
99
+  border-radius: 12px;
100
+  width: 112px;
101
+  height: 40px;
102
+}
103
+
104
+.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
105
+  background-color: #63d297;
106
+}
107
+
108
+.table-hover{
109
+  background-color: #b2ffc9;
110
+}

+ 59
- 0
escuela/static/evaluacion.js Ver fichero

@@ -0,0 +1,59 @@
1
+var eval = angular.module('eval', []);
2
+
3
+var evaluaciones = jQuery.parseJSON('{{ evaluaciones | tojson | safe }}')
4
+
5
+eval.directive('ngConfirmClick', [
6
+    function(){
7
+        return {
8
+            link: function (scope, element, attr) {
9
+                var msg = attr.ngConfirmClick || "Are you sure?";
10
+                var clickAction = attr.confirmedClick;
11
+                element.bind('click',function (event) {
12
+                    if ( window.confirm(msg) ) {
13
+                        scope.$eval(clickAction)
14
+                    }
15
+                });
16
+            }
17
+        };
18
+  }]);
19
+
20
+eval.controller('evalController', function evalController($http, $scope){
21
+
22
+    $scope.evaluaciones = evaluaciones
23
+
24
+
25
+
26
+
27
+    $scope.operacion = "Añadir" ;
28
+    
29
+    var teacherId = document.getElementById('maestroId').value; 
30
+    var ofertaId = document.getElementById('ofertaId').value;
31
+
32
+    $scope.submitForm = function() {
33
+        path ="/Maestro/"+teacherId+"/" +ofertaId;
34
+
35
+        if ($scope.operacion =="Actualizar"){
36
+            path += "/editar"
37
+        }
38
+        else{
39
+            path += "/addNota"
40
+        }
41
+        $http.post(path, $scope.eval);
42
+
43
+    }
44
+
45
+    $scope.edit = function(eval){
46
+        
47
+        
48
+        $scope.eval = eval;
49
+        $scope.operacion ='Actualizar';
50
+
51
+    }
52
+
53
+    $scope.anadir = function (){
54
+        $scope.eval = {};
55
+        $scope.operacion = 'Añadir';
56
+    }
57
+
58
+   
59
+});

+ 58
- 0
escuela/templates/Asistencia.html Ver fichero

@@ -0,0 +1,58 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{MaestroId}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+{% endblock %}
9
+{% block body %}
10
+<h1 class = 'text-center text-white bg-dark'>Asistencia</h1>
11
+<div class ='row'>
12
+    <div class = 'col-1'>
13
+    </div>
14
+
15
+    <div class="col-7">
16
+    <form action="/dashboard/{{MaestroId}}/{{ofertaId}}/addAsistencia" method="POST"></form>
17
+        <table class='table table-bordered'>
18
+            <thead>
19
+                <tr>
20
+                    <th>Estudiantes</th>
21
+                    <th>Presente</th>
22
+                    <th>Tarde</th>
23
+                    <th>Ausente</th>
24
+                    <th>Excusado</th>
25
+                </tr>
26
+            </thead>
27
+            <tbody>
28
+            {% set count = namespace(value=0) %}
29
+            {% for estud in estudiantes %}
30
+                <tr>
31
+                     <td>{{estud.apellidos}} {{estud.nombres}}</td>
32
+                     <div class = "form-check form-check-inline">
33
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="0"></div> </td>
34
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="1"></div> </td>
35
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="2"></div> </td>
36
+                     <td> <div class = "form-check form-check-inline"><input class="form-check-input" type="radio" name="Asistencia[{{count.value}}]" id="inlineRadio1" value="3"></div> </td>
37
+                     
38
+                </tr>
39
+                {% set count.value = count.value + 1 %}
40
+            {% endfor %}
41
+            </tbody>
42
+        </table>
43
+        <button type='submit' class='btn btn-success'>Someter</button>
44
+    </div>
45
+    <div class ='col-4'>
46
+        <label for="Fecha">Fecha (Deje en blanco si la asistencia es de hoy):</label>
47
+        <input type="date" id="Fecha" name="Fecha"> 
48
+        <input type = 'hidden' name='count' value ={{count.value}}>
49
+        
50
+
51
+    </form>
52
+    </div>
53
+            
54
+        </div>
55
+          
56
+
57
+          
58
+{% endblock %}

+ 54
- 0
escuela/templates/ElVerdaderoHeader.html Ver fichero

@@ -0,0 +1,54 @@
1
+<!DOCTYPE html>
2
+<html lang="en">
3
+<head>
4
+    <meta charset="UTF-8">
5
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+
7
+<!--incluir cosas-->
8
+    
9
+    <script src = "https://code.jquery.com/jquery-3.3.1.js"></script>
10
+
11
+<script src ="https://code.jquery.com/jquery-3.3.1.min.js"></script>
12
+<script src ='https://code.jquery.com/jquery-3.3.1.slim.js'></script>
13
+
14
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
15
+   
16
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
17
+    
18
+      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
19
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
20
+<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
21
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
22
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-animate.min.js"></script>
23
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-aria.min.js"></script>
24
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-messages.min.js"></script>
25
+
26
+{% block css %} {% endblock %}
27
+<!---->    
28
+</head>
29
+<body>
30
+    
31
+        
32
+  <div class="container-fluid">
33
+  <div class="header">
34
+    <div class="row">
35
+          <div class="col-1">
36
+          <div class="boton logo">
37
+          Logo
38
+      </div>
39
+      </div>
40
+      <div class="col-2">
41
+   </div>
42
+      <div class="col-6">
43
+      <p>Dashboard</p>
44
+   </div>
45
+      <div class="col-2" style="visibility:visible">
46
+      <a href="" class="boton usuario">{% block head %} {% endblock %}</a>
47
+    </div>
48
+     <div class="col-1">
49
+      <a href="/" class="boton logout">logout</a>
50
+    </div>
51
+   </div>
52
+  </div>
53
+  {% block body %}
54
+  {%  endblock %}

+ 30
- 0
escuela/templates/addClases.html Ver fichero

@@ -0,0 +1,30 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %} 
3
+{% endblock %}
4
+
5
+{% block body %}
6
+<h1 class = 'text-center text-white bg-dark'>A&ntilde;ade un prisionero</h1>
7
+<div class ='row'>
8
+    <div class = 'col-3'>
9
+    </div>
10
+    <div class = 'col-6'>
11
+        <form action ='/addClass' method = 'POST'>
12
+            Codificación de clase:
13
+                <input type="text" name = 'codigo' class="form-control" placeholder="Examen/Asignaci&oacute;n">
14
+            Titulo:
15
+                <input type="text" name = 'titulo' class="form-control" placeholder="Valor Entero">
16
+            Grado:
17
+                <input type="text" name = 'grado' class="form-control" placeholder="Valor Entero">
18
+            
19
+            <div class="form-group">
20
+                <label for="comment">Descripcion:</label>
21
+                <textarea class="form-control" name='descripcion' rows="5" id="comment"></textarea>
22
+              </div>
23
+<br>
24
+<br>
25
+            <div class='text-right'>
26
+          <button type='submit' class = 'btn btn-primary'>Someter</button> </form>
27
+          </div>
28
+        </div>
29
+          
30
+{% endblock %}

+ 97
- 0
escuela/templates/addEvaluacion.html Ver fichero

@@ -0,0 +1,97 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{MaestroId}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+
9
+    <!--<script src ="{{url_for('static', filename='evaluacion.js') }}"></script>-->
10
+{% endblock %}
11
+
12
+{% block body %}
13
+
14
+<h1 class = 'text-center text-white bg-dark'>{{el_curso.codigo}}</h1>
15
+<div ng-app="eval" ng-controller="evalController">
16
+
17
+<div class ='row'>
18
+ 
19
+    <div class ='col-3'></div>
20
+    <div  class = 'col-6'>
21
+       
22
+           <form action ='/Maestro/{{MaestroId}}/{{el_curso}}/addNota' method = 'POST' id = 'form'>
23
+           
24
+           <!--<form name="cursoForm" ng-submit="submitForm()">-->
25
+            Tipo: <input type="text"  name = 'tipo' ng-model ='eval.tipo' class="form-control" placeholder="Examen/Asignaci&oacute;n" required>
26
+            Fecha: <input type="date"  name ='Fecha' ng-model ='eval.name' class="form-control" required>
27
+            Valor: <input type="text" name = 'valor' ng-model ='eval.valor' class="form-control" placeholder="100" required>
28
+             <button type='submit' class = 'btn btn-primary'>Someter</button>
29
+             <br>
30
+             <br>
31
+             <input  type = 'hidden' id ='maestroId' value ="{{MaestroId}}">
32
+             <input type = 'hidden' id = 'ofertaId' value ='{{el_curso}}'>
33
+             <a type = 'button' class ='btn btn-success' href ='/Maestro/{{MaestroId}}/{{el_curso}}/addNotas'>Añadir notas a Estudiantes</a>
34
+    </div>
35
+    
36
+</div>
37
+<br>
38
+<br>
39
+
40
+<div class = 'row'>
41
+    <div class ='col'>
42
+        <table class = 'table table-hover'>
43
+            <thead>
44
+                <tr>
45
+                    <th>Evaluaciones</th>
46
+                    <th>Valor</th>
47
+                    <th>Fecha</th>
48
+                    
49
+                    
50
+                </tr>
51
+            </thead>
52
+            <tbody>
53
+                {% for eval in evaluaciones %}
54
+                <tr>
55
+                    <td>{{eval.tipo}}</td>
56
+                    <td>{{eval.valor}}</td>
57
+                    <td>{{eval.fecha}}</td>
58
+                    <td><a type = 'button' class ='btn btn-warning' ng-click = 'edit(eval.id)'>Editar</a></td>
59
+                    <td><a type = 'button' class ='btn btn-danger' ng-confirm-click = 'Estás seguro que quieres borrar esta evaluación?' confirmed-click ='delEval(eval.id)'>Borrar</a></td>
60
+                    
61
+                </tr>{% endfor %}
62
+                    
63
+               
64
+            </tbody>
65
+        </table>
66
+    </div>
67
+</div>
68
+</form>            
69
+<br>
70
+<br>
71
+            <div class='text-right'>
72
+          
73
+            <!--<button type = 'button' class = 'btn btn-success' onclick='javascript: addRow("form")'>Añadir Evaluacion</button></form>
74
+            --></div>
75
+          
76
+    
77
+        <!--<script>
78
+
79
+            /*
80
+            function addRow(string){
81
+                var node = document.createElement("div");
82
+                node.className = 'col'
83
+                
84
+                var newForm = document.getElementById(string)
85
+                node.innerHTML ='Tipo: <input type="text" name = "tipo" class="form-control" placeholder="Examen/Asignaci&oacute;n">'+
86
+                'Fecha: <input type="date" name = "Fecha" class="form-control" >'+
87
+                'Valor: <input type="text" name = "valor" class="form-control" placeholder="100">';
88
+                newForm.appendChild(node)
89
+            }
90
+
91
+
92
+*/
93
+        </script>
94
+          
95
+</div>-->
96
+   
97
+{% endblock %}

+ 88
- 0
escuela/templates/addMatricula.html Ver fichero

@@ -0,0 +1,88 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{name}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+{% endblock %}
9
+{% block body %}
10
+<div class='row'>
11
+    <div class ='col-3'></div>
12
+    <div class =  'col-6'>
13
+        <form action ='/addMatricula/{{oferId}}' method ='POST'>
14
+            <div id='estudiantes'>
15
+                <label class="mr-sm-2" for="inlineFormCustomSelect">Estudiantes</label>
16
+                <select class="custom-select mr-sm-2" id = 'todosEstudiantes' name= 'estudiantes[0]'>
17
+                  
18
+                      <option selected>Choose...</option>
19
+                  
20
+                    {% for estudiante  in estudiantes %}
21
+                        <option value ='{{estudiante.user_id}}'>{{estudiante.apellidos}}, {{estudiante.nombres}}</option>
22
+                    {% endfor %}
23
+                  
24
+                </select>
25
+            </div>
26
+            <div id= 'estudiante'>
27
+
28
+            </div>
29
+            <input type = 'hidden' id = 'count' name = 'countRow' value = 1>
30
+            <button type ='button' class ='btn btn-success' onclick ='javascript : myFunction("estudiante")'>Añade estudiante</button>
31
+            
32
+  <button type ='submit' class ='btn btn-primary'>Submit</button>
33
+</div>
34
+</div>
35
+<br>
36
+<br>
37
+<div class ='row'>
38
+    <div class ='col'>
39
+        <h1 class = 'text-center'>Matriculados</h1>
40
+        <table class = 'table table-hover'>
41
+            <thead>
42
+                <tr>
43
+                    <th>Nombre</th>
44
+                </tr>
45
+            </thead>
46
+            <tbody>
47
+                {% for matriculado in matriculados %}
48
+
49
+                <tr>
50
+                    <td>{{matriculado.apellidos}}, {{matriculado.nombres}}</td>
51
+                </tr>
52
+
53
+
54
+                {% endfor %}
55
+            </tbody>
56
+        </table>
57
+    </div>
58
+</div>
59
+
60
+<script>
61
+    var index = 1
62
+    function myFunction(string){
63
+      var Estudiantes=document.getElementById(string);
64
+
65
+      var node = document.createElement("div");
66
+          
67
+      var input = document.getElementById('count');
68
+      var todosEstudiantes = document.getElementById('todosEstudiantes')
69
+      
70
+              
71
+      var newForm = document.getElementById(string+'s')
72
+      
73
+      node.innerHTML = '<label class="mr-sm-2" for="inlineFormCustomSelect">Estudiantes</label>' +' <select class="custom-select mr-sm-2"  name= "estudiantes['+index+']">' + todosEstudiantes.innerHTML+' </select>';
74
+
75
+    index +=1;
76
+      Estudiantes.appendChild(node)
77
+
78
+      
79
+      input.value = parseInt(input.value) + 1;
80
+
81
+
82
+
83
+      }
84
+
85
+
86
+    
87
+</script>
88
+{% endblock %}

+ 132
- 0
escuela/templates/addNotas.html Ver fichero

@@ -0,0 +1,132 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{MaestroId}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+
9
+{% endblock %}
10
+{% block body %}
11
+<h1 class = 'text-center text-white bg-dark'>A&ntilde;ade su sentencia</h1>
12
+
13
+    <div class ='row'>
14
+        
15
+        
16
+        <div class = 'col table-responsive'>
17
+            <form action = "/Maestro/{{MaestroId}}/{{ofertaId}}/addNotas" method = 'POST'>
18
+            <input name ="Maestro" value ='{{MaestroId}}' type ='hidden'>
19
+            <input type ='hidden' value ='{{ofertaId}}' name = 'oferta'>
20
+            <table class="table table-hover">
21
+                <thead>
22
+                    <tr class = 'eval'>
23
+                        <th>Nombre</th>
24
+                      
25
+                        {% set evaluacion = namespace(value=0) %}
26
+                        {% for eval in evaluaciones %}
27
+                        
28
+                      
29
+                        <th>{{eval.tipo}}</th>
30
+                        <input type ='hidden' name = 'cantidadEval[{{evaluacion.value}}]' value = '{{eval.id}}'>
31
+                        {% set evaluacion.value = evaluacion.value +1 %}
32
+                        {% endfor %}
33
+                      
34
+                </thead>
35
+                <tbody>
36
+                    
37
+                {% set column = namespace(value=0) %}
38
+                {% set row = 0 %}
39
+                {% set counterRow = namespace(value =0) %}
40
+                {% set tabindex = namespace(value =0) %}
41
+                {% for estudiante in estudiantes %}
42
+                    <tr class = 'student' data-value='{{estudiante.id}}'>
43
+                        <td class = "w-25">
44
+                            <input type='hidden' name ='id_usuario[{{ column.value }}]' value ='{{estudiante.id}}'>
45
+                            {{estudiante.apellidos}} {{estudiante.nombres}}
46
+                        </td>
47
+                        {% set row = 0 %}
48
+                        
49
+                       
50
+                        {% for row in range (evaluacion.value) %}
51
+
52
+                        <td><input type="text"  class="form-control" id='{{evalIds[row]}}' name="evaluacion[{{column.value}}][{{row}}]" onchange ='submitIndividual("evaluacion[{{column.value}}][{{row}}]","{{estudiante.id}}", "{{evalIds[row]}}")' tabindex="{{tabindex.value}}" ></td>
53
+                        {% set tabindex.value = tabindex.value + 1 %}
54
+                        {% set counterRow.value = row  +1 %}
55
+                        {% endfor %}
56
+                    </tr>
57
+                    
58
+                    
59
+                    {% set column.value = column.value + 1 %}
60
+                {% endfor %}
61
+                </tbody>
62
+            </table>
63
+                <input type='hidden' name ='columnPost' value = '{{column.value}}'>
64
+                <input type ='hidden' name = 'row' value ='{{counterRow.value}}'>
65
+                <button type ='submit' class ='btn btn-success'>Someter</button>
66
+        </form>
67
+        </div>
68
+       
69
+    </div>
70
+<script>
71
+    var notasCompletas = jQuery.parseJSON('{{ notasCompletas | tojson | safe}}');
72
+    var maestro = document.getElementsByName('Maestro')
73
+        var oferta = document.getElementsByName('oferta')
74
+        maestro = $(maestro).val();
75
+        oferta = $(oferta).val();
76
+
77
+    function submitIndividual(evalNombre, stuId, evalId){
78
+
79
+        var valor = document.getElementsByName(evalNombre);
80
+        valor = $(valor).val();
81
+        
82
+       
83
+        var xhr = new XMLHttpRequest();
84
+        xhr.open("POST", '/Maestro/'+maestro+'/'+oferta+'/addNotas', true);
85
+        xhr.setRequestHeader('Content-Type', 'application/json');
86
+        xhr.send(JSON.stringify(
87
+           {
88
+                    'StudentId': stuId,
89
+                    'Nota': valor,
90
+                    'evalId':evalId }
91
+                    
92
+                    ));
93
+        //$.post('Maestro/'+maestro+'/'+oferta+'/addNotas', pos);
94
+    }
95
+
96
+    $(document).ready(function(){
97
+
98
+        
99
+
100
+
101
+
102
+        
103
+        $('tr.student').each(function(){
104
+            var index =0;
105
+            var counter =0;
106
+            var studentId = $(this).data('value');
107
+            var tr = $(this);
108
+            tr.children('td').each(function (){
109
+                var td = $(this);
110
+               td.children('input.form-control').each(function(){
111
+                   
112
+                   if ($(this).attr('id')==notasCompletas[studentId].evaluacion[counter]){
113
+                       $(this).val(notasCompletas[studentId].valorSaco[counter])
114
+                       counter +=1;
115
+                    }
116
+                   index+=1
117
+
118
+                   
119
+               })
120
+            })
121
+            
122
+
123
+        
124
+        })
125
+        
126
+    })
127
+
128
+    
129
+</script>
130
+
131
+
132
+{% endblock %}

+ 111
- 0
escuela/templates/addOferta.html Ver fichero

@@ -0,0 +1,111 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+ 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+{% endblock %}
9
+{% block body %}
10
+<div class = 'row'>
11
+<div class ='col-3'></div>
12
+<div class="col-6">
13
+    <form action ='/addOferta' method = 'POST'>
14
+    Año: <input type="text" name = 'academico' class="form-control" placeholder="20xx-20xx">
15
+    Horario:  <input type="text" name = 'horario' class="form-control" placeholder="9:00am - 10:00am">
16
+    
17
+    <label class="mr-sm-2" for="inlineFormCustomSelect">Curso</label>
18
+    <select class="custom-select mr-sm-2" id="inlineFormCustomSelect" name= 'curso'>
19
+      <option selected>Choose...</option>
20
+        {% for curso  in cursos %}
21
+            <option value ='{{curso.id}}'>{{curso.codigo}}</option>
22
+        {% endfor %}
23
+    </select>
24
+<div id='maestros'>
25
+    <label class="mr-sm-2" for="inlineFormCustomSelect">Maestrx</label>
26
+    <select class="custom-select mr-sm-2" id = 'todosMaestros' name= 'Maestro[0]'>
27
+      
28
+          <option selected>Choose...</option>
29
+      
30
+        {% for maestro  in maestros %}
31
+            <option value ='{{maestro.user_id}}'>{{maestro.apellidos}}, {{maestro.nombres}}</option>
32
+        {% endfor %}
33
+      
34
+    </select>
35
+</div>
36
+
37
+    <div id = 'maestro'>
38
+
39
+    </div>
40
+    <input type = 'hidden' id = 'count' name = 'countRow' value = 1>
41
+    <button type ='button' class ='btn btn-success' onclick ='javascript : myFunction("maestro")'>Añade Maestro</button>
42
+    <button type ='submit' class ='btn btn-primary'>Someter</button>
43
+</form>
44
+</div>
45
+</div>
46
+<br>
47
+<br>
48
+
49
+<div class ='row'>
50
+    <div class = 'col'>
51
+<table class='table table-hover'>
52
+    <thead>
53
+        <tr>
54
+            <th>Curso</th>
55
+            <th>Codigo</th>
56
+            <th>horario</th>
57
+            <th>Cantidad de maestrxs</th>
58
+            <th>Año académico</th>
59
+
60
+        </tr>
61
+
62
+    </thead>
63
+    <tbody>
64
+        
65
+            {% for oferta in ofertas %}
66
+            <tr>
67
+            <td>{{oferta.titulo}}</td>
68
+            <td>{{oferta.codigo}}</td>
69
+            <td>{{oferta.horario}}</td>
70
+            <td>{{oferta.cantidadMaestros}}</td>
71
+            <td>{{oferta.semestre}}</td>
72
+            <td><a type='button' class = 'btn btn-primary' href='/addMatricula/{{oferta.oferta_id}}'>Añadir estudiantes</a></td>
73
+             </tr>
74
+
75
+
76
+            {% endfor %}
77
+        
78
+    </tbody>
79
+</table>
80
+  </div>
81
+  </div>
82
+
83
+  <script>
84
+      var index = 1
85
+      function myFunction(string){
86
+        var maestro =document.getElementById(string);
87
+
88
+        var node = document.createElement("div");
89
+            
90
+        var input = document.getElementById('count');
91
+        var todosMaestros = document.getElementById('todosMaestros')
92
+        
93
+                
94
+        var newForm = document.getElementById(string+'s')
95
+        
96
+        node.innerHTML = '<label class="mr-sm-2" for="inlineFormCustomSelect">Maestrx</label>' +' <select class="custom-select mr-sm-2"  name= "Maestro['+index+']">' + todosMaestros.innerHTML+' </select>';
97
+
98
+      index +=1;
99
+        maestro.appendChild(node)
100
+
101
+        
102
+        input.value = parseInt(input.value) + 1;
103
+
104
+
105
+
106
+        }
107
+
108
+
109
+      
110
+  </script>
111
+  {% endblock %}

+ 26
- 0
escuela/templates/addSomething.html Ver fichero

@@ -0,0 +1,26 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block parent %} ../
3
+{% endblock %}
4
+{% block head %} 
5
+{% endblock %}
6
+
7
+{% block body %}
8
+<h1 class = 'text-center text-white bg-dark'>A&ntilde;ade un prisionero</h1>
9
+<div class ='row'>
10
+    <div class = 'col-3'>
11
+    </div>
12
+    <div class = 'col-6'>
13
+        <form action ='/add' method = 'POST'>
14
+            Nombre de la Nota:
15
+                <input type="text" name = 'nombre' class="form-control" placeholder="Examen/Asignaci&oacute;n">
16
+            Nota:
17
+                <input type="text" name = 'Nota' class="form-control" placeholder="Valor Entero">
18
+            
19
+<br>
20
+<br>
21
+            <div class='text-right'>
22
+          <button type='submit' class = 'btn btn-primary'>Saoco</button> </form>
23
+          </div>
24
+        </div>
25
+          
26
+{% endblock %}

+ 23
- 0
escuela/templates/cursos.html Ver fichero

@@ -0,0 +1,23 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{name}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../static/css/estilo.css'>
8
+{% endblock %}
9
+
10
+{% block body %}
11
+<h1 class = 'text-center text-white bg-dark'>{{el_curso.codigo}}</h1>
12
+<div class ='row'>
13
+    <div class = 'col-2'>
14
+    </div>
15
+    <div class="fila">
16
+        
17
+        <a href="/dashboard/{{name}}/{{id}}/addNota" class="boton task">Añadir nota</a>
18
+        <a href ='/dashboard/{{name}}/{{id}}/verNotas' class='boton task'>Ver notas</a>
19
+        
20
+    </div>
21
+</div>
22
+          
23
+{% endblock %}

+ 18
- 0
escuela/templates/dashEstudiantes.html Ver fichero

@@ -0,0 +1,18 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %} 
3
+{{nombre}}
4
+{% endblock %}
5
+{% block css %}
6
+<link rel='stylesheet' href ='../../static/css/estilo.css'>
7
+{% endblock %}
8
+{% block body %}
9
+
10
+<h1 class = 'text-center text-white bg-dark'>Cursos</h1>
11
+<div class ='row'>
12
+    <div class = 'col-1'>
13
+    </div>
14
+    <div class="fila2 col-9">
15
+        <a href="/dashEstudiantes/{{estId}}/notas" class="boton task">Notas</a>
16
+    </div>
17
+
18
+{% endblock %}

+ 38
- 0
escuela/templates/dashboard.html Ver fichero

@@ -0,0 +1,38 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{MaestroId}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../static/css/estilo.css'>
8
+{% endblock %}
9
+
10
+{% block body %}
11
+<h1 class = 'text-center text-white bg-dark'>Cursos</h1>
12
+<div class ='row'>
13
+    
14
+    </div>
15
+    <div class=" col">
16
+        <table class ='table table-hover'>
17
+            <thead>
18
+                <th>Código</th>
19
+                <th>Título</th>
20
+                <th>Horario</th>
21
+            </thead>
22
+            <tbody>
23
+        {% for cursos in los_cursos %}
24
+        <tr>
25
+        <td>{{cursos.codigo}}</td>
26
+        <td>{{cursos.titulo}}</td>
27
+        <td>{{cursos.horario}}</td>
28
+        <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addNota" class="boton task2">Añadir Notas</a></td>
29
+        <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/addAsistencia" class="boton task2">Asistencia</a></td>
30
+        <td><a href="/Maestro/{{MaestroId}}/{{cursos.oferta_id}}/verNotas" class="boton task2">Editar Notas</a></td>
31
+        </tr><br>
32
+        {% endfor %}
33
+    </tbody>
34
+    </table>
35
+    </div>
36
+</div>
37
+          
38
+{% endblock %}

+ 57
- 0
escuela/templates/estuNotas.html Ver fichero

@@ -0,0 +1,57 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %} 
3
+{{nombre}}
4
+{% endblock %}
5
+{% block css %}
6
+<link rel='stylesheet' href ='../../static/css/estilo.css'>
7
+{% endblock %}
8
+{% block body %}
9
+
10
+<h1 class = 'text-center text-white bg-dark'>Cursos</h1>
11
+<div class ='row'>
12
+    <div class = 'col-1'>
13
+    </div>
14
+    <div class="col-10">
15
+        <table class = 'table table-hover'>
16
+            <thead>
17
+                <tr>
18
+                    <th>Curso</th>
19
+                    <th>Promedio</th>
20
+                    <th>Nota</th>
21
+                    <th>Evaluaciones</th>
22
+                </tr>
23
+            </thead>
24
+            <tbody>
25
+                {% for estu in todaNota %}
26
+
27
+                <tr>
28
+                    {% set promedio = namespace(value=0) %}
29
+                    {% set promedio.value = ((estu.valorSaco / estu.valorReal)*100)|int %}
30
+                    <td>{{estu.codigo}}, {{estu.titulo}}</td>
31
+                    <td>{{promedio.value}}</td>
32
+                    <td>
33
+                        {% if promedio.value >= 90 %}
34
+                            A
35
+                        {% elif promedio.value >= 80 %}
36
+                            B
37
+                        {% elif promedio.value >= 70 %}
38
+                            C
39
+                        {% elif promedio.value >= 60 %}
40
+                            D
41
+                        {% else %}
42
+                            F
43
+                        {% endif %}
44
+                    </td>
45
+                    <td>
46
+                        <a href="/dashEstudiantes/{{estId}}/notas/{{estu.oferta_id}}" class="boton task2">Evaluaciones</a>
47
+                    </td>
48
+                </tr>
49
+
50
+
51
+
52
+                {% endfor %}
53
+            </tbody>
54
+        </table>
55
+    </div>
56
+
57
+{% endblock %}

+ 63
- 0
escuela/templates/estudiante.html Ver fichero

@@ -0,0 +1,63 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %} 
3
+{% endblock %}
4
+{% block css %}
5
+<link rel='stylesheet' href ='../../static/css/estilo.css'>
6
+{% endblock %}
7
+
8
+{% block body %}
9
+<h1 class = 'text-center text-white bg-dark'>A&ntilde;ade un prisionero</h1>
10
+<div class ='row'>
11
+    <div class = 'col-3'>
12
+    </div>
13
+    <div class = 'col-6'>
14
+        <form action ='/estudiante' method = 'POST'>
15
+            Apellidos: <input type="text" name = 'apellidos' class="form-control" placeholder="Paterno Materno">
16
+            Nombre: <input type="text" name = 'nombre' class="form-control" placeholder="ElDurako PR">
17
+            Email: <input type= 'text' name = 'email' class = 'form-control' placeholder= 'tupapacito@hotbody.com'>
18
+            <div class="form-check">
19
+              <label class="form-check-label">
20
+                <input type="radio" class="form-check-input" name="Usuario" value = 'Maestro' id ='maestro' onclick ='javascript: myFunction("maestro", "estudiante")'>Maestro
21
+              </label>
22
+            </div>
23
+            <div class="form-check">
24
+              <label class="form-check-label">
25
+                <input type="radio" class="form-check-input" name="Usuario" value = 'Estudiante'  id ='estudiante' onclick ='javascript: myFunction("estudiante", "maestro")'>Estudiante
26
+              </label>
27
+              <div id ='estudiante1' style ='display:none'>
28
+            Grado: <input type = 'text' name= 'grado' class = 'form-control' placeholder ='6'>
29
+            Educacion Especial: <input type = 'text' name = 'educ' class = 'form-control' placeholder ='Si/No'>
30
+            </div>
31
+            <div id ='maestro1' style ='display:none'>
32
+            Especialidad:  <input type = 'text' name= 'especialidad' class = 'form-control' placeholder ='6'>
33
+            </div>
34
+<br>
35
+<br>
36
+            <div class='text-right'>
37
+          <button type='submit' class = 'btn btn-primary'>Saoco</button> </form>
38
+          </div>
39
+        </div>
40
+        <script>
41
+          function myFunction(string, string2){
42
+
43
+            var usuario = document.getElementById(string);
44
+            var text = document.getElementById(string+'1');
45
+            
46
+            var usuarioNot = document.getElementById(string2);
47
+            var textNot = document.getElementById(string2+'1');
48
+
49
+            if(usuario.checked){
50
+              text.style.display ='block';
51
+              textNot.style.display ='none';
52
+            }
53
+            else{
54
+              text.style.display ='none';
55
+            }
56
+
57
+
58
+
59
+            
60
+          }
61
+        </script>
62
+          
63
+{% endblock %}

+ 33
- 0
escuela/templates/index.html Ver fichero

@@ -0,0 +1,33 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+
3
+{% block head %} 
4
+
5
+{% endblock %}
6
+{% block css %}
7
+<link rel='stylesheet' href ='static/css/estilo.css'>
8
+{% endblock %}
9
+{% block body %}
10
+
11
+<div class ='row'>
12
+    <div class = 'col-5'>
13
+
14
+    </div>
15
+    <div class = 'col-2'>
16
+        <a type ='button' class ='btn btn-success' href ='/Maestro/7'>Vamo a ver el dashboard?</a>
17
+        <br>
18
+        <br>
19
+        <a type = 'button' class = 'btn btn-success' href = '/estudiante'>Nuevo Estudiante (beta)</a>
20
+        <br>
21
+        <br>
22
+        <a type = 'button' class = 'btn btn-success' href = '/addClass'>Nuevo cursos (beta)</a>
23
+        <br>
24
+        <br>
25
+        <a type = 'button' class =' btn btn-success' href = '/dashEstudiantes/14'>Estudiante</a>
26
+        <br>
27
+        <br>
28
+        <a type = 'button' class =' btn btn-success' href = '/addOferta'>Oferta</a>
29
+
30
+
31
+    </div>
32
+</div>
33
+{% endblock %}

+ 57
- 0
escuela/templates/verEstuNotas.html Ver fichero

@@ -0,0 +1,57 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %} 
3
+{{nombre}}
4
+{% endblock %}
5
+{% block css %}
6
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
7
+{% endblock %}
8
+{% block body %}
9
+
10
+<h1 class = 'text-center text-white bg-dark'>Cursos</h1>
11
+<div class ='row'>
12
+    <div class = 'col-1'>
13
+    </div>
14
+    <div class="col-10">
15
+        <table class = 'table table-hover'>
16
+            <thead>
17
+                <tr>
18
+                    <th>Tipo de Nota</th>
19
+                    <th>Valor</th>
20
+                    <th>Evaluación</th>
21
+                    <th>Promedio</th>
22
+                    <th>Puntuación</th>
23
+                </tr>
24
+            </thead>
25
+            <tbody>
26
+                {% for estu in todo %}
27
+
28
+                <tr>
29
+                    {% set promedio = namespace(value=0) %}
30
+                    {% set promedio.value = ((estu.valorSaco / estu.valorReal)*100)|int %}
31
+                    <td>{{estu.tipo}}</td>
32
+                    <td>{{estu.valorReal}}</td>
33
+                    <td>{{estu.valorSaco}}</td>
34
+                    <td>{{promedio.value}}</td>
35
+                    <td>
36
+                        {% if promedio.value >= 90 %}
37
+                            A
38
+                        {% elif promedio.value >= 80 %}
39
+                            B
40
+                        {% elif promedio.value >= 70 %}
41
+                            C
42
+                        {% elif promedio.value >= 60 %}
43
+                            D
44
+                        {% else %}
45
+                            F
46
+                        {% endif %}
47
+                    </td>
48
+                </tr>
49
+
50
+
51
+
52
+                {% endfor %}
53
+            </tbody>
54
+        </table>
55
+    </div>
56
+
57
+{% endblock %}

+ 26
- 0
escuela/templates/verNotas.html Ver fichero

@@ -0,0 +1,26 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{name}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+{% endblock %}
9
+
10
+{% block body %}
11
+<h1 class = 'text-center text-white bg-dark'>{{cursos.codigo}}</h1>
12
+<div class ='row'>
13
+    <div class = 'col-1'>
14
+    </div>
15
+
16
+    <div class="fila">
17
+        {% for eval in evaluaciones %}
18
+        <a href="/dashboard/{{name}}/{{eval.id}}/verNotasEstudiantes" class="boton task">{{eval.tipo}}</a>
19
+        {% endfor %}
20
+    </div>
21
+            
22
+        </div>
23
+          
24
+
25
+          
26
+{% endblock %}

+ 43
- 0
escuela/templates/verNotasEstudiantes.html Ver fichero

@@ -0,0 +1,43 @@
1
+{% extends 'ElVerdaderoHeader.html' %}
2
+{% block head %}
3
+{{name}} 
4
+{% endblock %}
5
+
6
+{% block css %}
7
+<link rel='stylesheet' href ='../../../static/css/estilo.css'>
8
+{% endblock %}
9
+
10
+{% block body %}
11
+<h1 class = 'text-center text-white bg-dark'></h1>
12
+<div class ='row'>
13
+    <div class = 'col-1'>
14
+    </div>
15
+
16
+    
17
+           <div class ='col-8 text-center'>
18
+               <table class='table table-hover'>
19
+                   <thead>
20
+                       <tr>
21
+                           <th>Nombre</th>
22
+                           <th>Evaluacion</th>
23
+                       </tr>
24
+                   </thead>
25
+                   <tbody>
26
+                       {% for estu in table %}
27
+                       <tr>
28
+                           <td>{{estu.apellidos}}{{estu.nombres}}</td>
29
+                           <td>{{estu.valor}}</td>
30
+                           <td><a type="button" class="btn btn-danger btn-sm" ng-confirm-click="Seguro que quieres eliminar a este estudiante?" confirmed-click="/dashboard/{{name}}/{{}}/verNotasEstudiantes"></button>
31
+                            </td>
32
+                            <td></td>
33
+                        </tr>
34
+
35
+                       {% endfor %}
36
+                   </tbody>
37
+               </table>
38
+           </div>  
39
+        </div>
40
+          
41
+
42
+          
43
+{% endblock %}