|
#!/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])
|
|
self.Bind(wx.EVT_BUTTON, self.profAula, self.btBuscar)
|
|
self.rellenaProf()
|
|
self.profAula(self)
|
|
|
|
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
|
|
|
|
def buscaAula(self, event):
|
|
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
|
|
def profAula(self, event):
|
|
#self.rellenaProf()
|
|
print 'entra'
|
|
ahora = time.localtime()
|
|
dia = self.diaSemana(ahora[6])
|
|
minutos = int(ahora[3]*60+ahora[4])
|
|
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):
|
|
allTeacher = []
|
|
curso = []
|
|
nombres = []
|
|
allTeacher.append(self.consulta('profesores',''))
|
|
for i in allTeacher[0][0]:
|
|
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
|
|
|
|
|
|
#self.profesores.InsertItems(nombres,0)
|
|
self.listProfesores = nombres
|
|
#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:
|
|
l = ldap.open("ldap")
|
|
username = "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es"
|
|
password = "XXXXXXXXX"
|
|
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]
|
|
print rDir
|
|
if rDir:
|
|
arbolxml = ElementTree.parse(rDir+'/horarios.xml')
|
|
else :
|
|
arbolxml = ElementTree.parse('horarios.xml')
|
|
raiz = arbolxml.getroot()
|
|
app = wx.PySimpleApp(0)
|
|
wx.InitAllImageHandlers()
|
|
frame_1 = buscaProf(None, -1, "")
|
|
app.SetTopWindow(frame_1)
|
|
frame_1.Show()
|
|
app.MainLoop()
|