root/profEnAula/profEnAula.py @ 371
276 | JuanAntoni | #!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|||
import wx
|
|||
import ldap
|
|||
import unicodedata
|
|||
from xml.etree import ElementTree
|
|||
import time
|
|||
import sys,os
|
|||
#import horarioXml11
|
|||
listProfesores = []
|
|||
uidNombre = {}
|
|||
class buscaProf(wx.Frame):
|
|||
def __init__(self, *args, **kwds):
|
|||
kwds["style"] = wx.DEFAULT_FRAME_STYLE
|
|||
wx.Frame.__init__(self, *args, **kwds)
|
|||
self.sizer_1_staticbox = wx.StaticBox(self, -1, "Profesor")
|
|||
#self.aproxList = wx.TextCtrl(self,style = wx.TE_PROCESS_ENTER)
|
|||
self.profesores = wx.ListBox(self, -1, choices=[], style=wx.LB_SORT)
|
|||
self.btBuscar = wx.Button(self, -1, "Refrescar")
|
|||
self.resultado = wx.StaticText(self, -1, "")
|
|||
self.btSalir = wx.Button(self, -1, "Salir")
|
|||
#self.profAula()
|
|||
self.rellenaProf()
|
|||
self.__set_properties()
|
|||
self.__do_layout()
|
|||
self.Bind(wx.EVT_LISTBOX, self.buscaAula, self.profesores)
|
|||
self.Bind(wx.EVT_BUTTON, self.salir, self.btSalir)
|
|||
#self.Bind(wx.EVT_TEXT, self.desplazaLista, self.aproxList)
|
|||
ahora = time.localtime()
|
|||
dia = self.diaSemana(ahora[6])
|
|||
minutos = int(ahora[3]*60+ahora[4])
|
|||
280 | JuanAntoni | self.Bind(wx.EVT_BUTTON, self.profAula, self.btBuscar)
|
|
282 | JuanAntoni | self.rellenaProf()
|
|
280 | JuanAntoni | self.profAula(self)
|
|
276 | JuanAntoni | ||
def __set_properties(self):
|
|||
self.SetTitle("Busca Profesor en aulas")
|
|||
self.SetPosition([1500,0])
|
|||
#self.aproxList.SetToolTipString("Introduzca la inicial del nombre")
|
|||
def __do_layout(self):
|
|||
sizer_1 = wx.StaticBoxSizer(self.sizer_1_staticbox, wx.VERTICAL)
|
|||
grid_sizer_1 = wx.GridSizer(1, 2, 0, 0)
|
|||
#sizer_1.Add(self.aproxList,0,wx.ADJUST_MINSIZE, 0)
|
|||
sizer_1.Add(self.profesores, 5, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
|
|||
grid_sizer_1.Add(self.btBuscar, 0, wx.ALIGN_BOTTOM, 0)
|
|||
grid_sizer_1.Add(self.resultado, 0, wx.ALIGN_BOTTOM, 0)
|
|||
grid_sizer_1.Add(self.btSalir, 0, wx.ALIGN_BOTTOM, 0)
|
|||
sizer_1.Add(grid_sizer_1, 1, wx.ADJUST_MINSIZE, 0)
|
|||
self.SetSizer(sizer_1)
|
|||
self.Layout()
|
|||
self.SetSize((258, 1322))
|
|||
def salir(self,evento=None):
|
|||
self.Close(True)
|
|||
#Tecla en TxtCtrl selecciona prof de lista
|
|||
def desplazaLista(self,event):
|
|||
for i in self.listProfesores:
|
|||
if i[0] == self.aproxList.GetValue()[0]:
|
|||
print 'desplazaLista'
|
|||
self.profesores.SetStringSelection(i)
|
|||
self.aproxList.SetValue(i)
|
|||
break
|
|||
def elCurso(self, minutos, dia):
|
|||
prof = self.profesores.GetStringSelection().encode('utf-8')
|
|||
dia = raiz.find(dia + '.txt')
|
|||
for i in dia:
|
|||
if i.attrib['nif'] == uidNombre[prof]:
|
|||
profesor = i.getchildren()
|
|||
#buscar la hora
|
|||
for j in profesor:
|
|||
inicio = j.get('inicio')
|
|||
fin = j.get('fin')
|
|||
if int(inicio) <= minutos <= int(fin):
|
|||
curso = j.getchildren()
|
|||
for h in curso:#curso son los alumnos co su nie
|
|||
#para evitar problema con alumnos que no existen
|
|||
try:
|
|||
nieAlumno = self.consulta('nie', h.get('nie'))[0]
|
|||
except:
|
|||
nieAlumno = [];continue
|
|||
#print nieAlumno;print 'antes nif'
|
|||
if nieAlumno:
|
|||
print 'sin error'
|
|||
self.cursoAlumno(nieAlumno)
|
|||
return 1
|
|||
else:
|
|||
print 'error'
|
|||
#Averiguar curso de un alumno dado, busca curso por curso
|
|||
def cursoAlumno(self,nif):
|
|||
#COMPROBAR SI SOBRA AQUI Y QUITARLA allcurso = []
|
|||
for i in self.consulta('cursos',''):
|
|||
allcurso = []
|
|||
allcurso.append(self.consulta('alumnocurso',i))
|
|||
for j in allcurso[0][0]: #LDAP empieza con un usuario vacio, no lo procesamos
|
|||
if j != '' and j == nif:
|
|||
self.resultado.SetLabel('Curso: '+i)
|
|||
#encontrado = True
|
|||
return j
|
|||
break
|
|||
280 | JuanAntoni | def buscaAula(self, event):
|
|
276 | JuanAntoni | self.resultado.SetLabel('Buscando')
|
|
ahora = time.localtime()
|
|||
dia = self.diaSemana(ahora[6])
|
|||
minutos = int(ahora[3]*60+ahora[4])
|
|||
self.elCurso(minutos,dia)
|
|||
event.Skip()
|
|||
#Rellenar lista profesores en aula
|
|||
280 | JuanAntoni | def profAula(self, event):
|
|
276 | JuanAntoni | #self.rellenaProf()
|
|
280 | JuanAntoni | print 'entra'
|
|
277 | JuanAntoni | ahora = time.localtime()
|
|
dia = self.diaSemana(ahora[6])
|
|||
minutos = int(ahora[3]*60+ahora[4])
|
|||
276 | JuanAntoni | self.profesores.Clear()
|
|
nombres1 = []
|
|||
dia = raiz.find(dia+'.txt')
|
|||
for i in dia:
|
|||
profesor = i.getchildren()
|
|||
#buscar la hora
|
|||
for j in profesor:
|
|||
inicio = j.get('inicio')
|
|||
fin = j.get('fin')
|
|||
if int(inicio) <= minutos <= int(fin):
|
|||
for h in uidNombre:
|
|||
if uidNombre[h] == i.attrib['nif']:
|
|||
nombres1.append(h)
|
|||
self.profesores.InsertItems(nombres1,0)
|
|||
def rellenaProf(self):
|
|||
283 | JuanAntoni | allTeacher = []
|
|
curso = []
|
|||
nombres = []
|
|||
allTeacher.append(self.consulta('profesores',''))
|
|||
for i in allTeacher[0][0]:
|
|||
if i != '':
|
|||
nombre = self.consulta('nombre',i)[0]
|
|||
nombres.append(nombre)
|
|||
dni = self.consulta('nif',i)
|
|||
if dni != []:
|
|||
if len(dni[0]) == 9:
|
|||
uidNombre[nombre] = dni[0]#self.consulta('nif',i)[0]
|
|||
else:
|
|||
aux=dni[0]
|
|||
for i in range(9-len(dni[0])):
|
|||
aux= '0' + aux
|
|||
uidNombre[nombre] = aux
|
|||
276 | JuanAntoni | ||
#self.profesores.InsertItems(nombres,0)
|
|||
283 | JuanAntoni | self.listProfesores = nombres
|
|
276 | JuanAntoni | #print self.listProfesores
|
|
#Consultas a ldap
|
|||
def consulta(self,datoResultado,datoUsuario):
|
|||
datosConsulta = []
|
|||
# NO SIRVE ? BORRAR cursos = []
|
|||
tipo = datoResultado
|
|||
usuarioCurso = datoUsuario
|
|||
searchScope = ldap.SCOPE_SUBTREE
|
|||
#opcion de ricardo para ldaps
|
|||
try:
|
|||
282 | JuanAntoni | l = ldap.initialize("ldaps://ldap")
|
|
l.protocol_version = ldap.VERSION3
|
|||
#l = ldap.open("ldap")
|
|||
276 | JuanAntoni | username = "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es"
|
|
284 | JuanAntoni | password = "xxxxxxx"
|
|
276 | JuanAntoni | l.simple_bind(username,password)
|
|
except ldap.LDAPError, e:
|
|||
print e
|
|||
return "ERRORLDAP"
|
|||
if tipo == 'cursos':
|
|||
#cursos
|
|||
base_dn = 'ou=Group,dc=instituto,dc=extremadura,dc=es'
|
|||
searchFilter = '(&(objectClass=posixGroup)(groupType=school_class))'
|
|||
retrieveAttributes = ['cn']
|
|||
elif tipo == 'alumnocurso':
|
|||
base_dn= 'ou=Group,dc=instituto,dc=extremadura,dc=es'
|
|||
searchFilter = '(&(&(objectClass=posixGroup)(groupType=school_class))(cn=' + usuarioCurso + '))'
|
|||
retrieveAttributes = ['memberUid'] #Extraer miembros
|
|||
elif tipo == 'profesores':
|
|||
base_dn = 'ou=Group,dc=instituto,dc=extremadura,dc=es '
|
|||
searchFilter = "(&(objectClass=posixGroup)(cn=teachers))"
|
|||
retrieveAttributes = ['memberUid']
|
|||
elif tipo == 'nombre':#Nombre de usuario
|
|||
base_dn= 'ou=People,dc=instituto,dc=extremadura,dc=es'
|
|||
searchFilter = '(uid=' + usuarioCurso +')'
|
|||
retrieveAttributes = ['cn']
|
|||
elif tipo == 'nif':
|
|||
base_dn= 'ou=People,dc=instituto,dc=extremadura,dc=es'
|
|||
searchFilter = '(uid=' + usuarioCurso +')'
|
|||
retrieveAttributes = ['employeeNumber']
|
|||
elif tipo == 'nie':
|
|||
base_dn= 'ou=People,dc=instituto,dc=extremadura,dc=es'
|
|||
searchFilter = '(employeeNumber=' + usuarioCurso +')'
|
|||
retrieveAttributes = ['uid']
|
|||
else :
|
|||
pass
|
|||
try:
|
|||
ldap_result_id = l.search(base_dn, searchScope, searchFilter, retrieveAttributes)
|
|||
result_type, result_data = l.result(ldap_result_id)
|
|||
if tipo == 'cursos':
|
|||
for i in result_data:
|
|||
datosConsulta.append(i[1]['cn'][0])
|
|||
elif tipo == 'alumnocurso' or tipo == 'profesores' :
|
|||
datosConsulta.append(result_data[0][1]['memberUid'])
|
|||
elif tipo == 'nombre':
|
|||
datosConsulta.append(result_data[0][1]['cn'][0])
|
|||
elif tipo == 'nif':
|
|||
if result_data[0][1] != {}:
|
|||
datosConsulta.append(result_data[0][1]['employeeNumber'][0])
|
|||
elif tipo == 'nie':
|
|||
if result_data[0][1] != {}:
|
|||
datosConsulta.append(result_data[0][1]['uid'][0])
|
|||
else :
|
|||
pass
|
|||
except ldap.LDAPError, e:
|
|||
print e
|
|||
print "ERRORLDAP"
|
|||
return datosConsulta
|
|||
def diaSemana(self,dia):
|
|||
dias = ['Lunes','Martes','Miercoles','Jueves','Viernes']
|
|||
return dias[dia]
|
|||
if __name__ == "__main__":
|
|||
rDir = os.path.split(sys.argv[0])[0]
|
|||
278 | JuanAntoni | print rDir
|
|
if rDir:
|
|||
arbolxml = ElementTree.parse(rDir+'/horarios.xml')
|
|||
else :
|
|||
arbolxml = ElementTree.parse('horarios.xml')
|
|||
raiz = arbolxml.getroot()
|
|||
276 | JuanAntoni | app = wx.PySimpleApp(0)
|
|
wx.InitAllImageHandlers()
|
|||
frame_1 = buscaProf(None, -1, "")
|
|||
app.SetTopWindow(frame_1)
|
|||
frame_1.Show()
|
|||
app.MainLoop()
|