|
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# generated by wxGlade 0.6.3 on Thu Apr 19 10:05:25 2012
|
|
# Tiétar 20-12-2012
|
|
|
|
import wx, ldap, listado
|
|
from reportlab.pdfgen.canvas import Canvas
|
|
from reportlab.lib.pagesizes import A4
|
|
import subprocess, os
|
|
import unicodedata
|
|
|
|
# begin wxGlade: extracode
|
|
# end wxGlade
|
|
|
|
|
|
|
|
class excursiones(wx.Frame):
|
|
tabla = []
|
|
def __init__(self, *args, **kwds):
|
|
# begin wxGlade: excursiones.__init__
|
|
kwds["style"] = wx.DEFAULT_FRAME_STYLE
|
|
wx.Frame.__init__(self, *args, **kwds)
|
|
self.label_1 = wx.StaticText(self, -1, "Actividad", style=wx.ST_NO_AUTORESIZE)
|
|
self.text_ctrl_1 = wx.TextCtrl(self, -1, "")
|
|
self.label_2 = wx.StaticText(self, -1, "Fecha")
|
|
self.datepicker_ctrl_1 = wx.DatePickerCtrl(self, -1)
|
|
self.label_3 = wx.StaticText(self, -1, "Curso")
|
|
self.label_4 = wx.StaticText(self, -1, "Alumnos")
|
|
self.label_5 = wx.StaticText(self, -1, "Incluidos")
|
|
self.listCurso = wx.ListBox(self, -1, choices=[], style=wx.LB_SORT)
|
|
self.listAlumnos = wx.ListBox(self, -1, choices=[], style=wx.LB_SORT)
|
|
self.listSeleccionados = wx.ListBox(self, -1, choices=[], style=wx.LB_SORT)
|
|
self.btPrint = wx.Button(self, -1, "Imprimir")
|
|
self.btExit = wx.Button(self, -1, "Terminar")
|
|
self.__set_properties()
|
|
self.__do_layout()
|
|
self.listCurso.InsertItems(self.consulta('cursos',''),0)
|
|
self.Bind(wx.EVT_LISTBOX, self.cursoClic, self.listCurso)
|
|
self.Bind(wx.EVT_LISTBOX, self.alumClic, self.listAlumnos)
|
|
self.Bind(wx.EVT_LISTBOX, self.borraIncluido, self.listSeleccionados)
|
|
self.Bind(wx.EVT_BUTTON, self.imprime, self.btPrint)
|
|
self.Bind(wx.EVT_BUTTON, self.salir, self.btExit)
|
|
# end wxGlade
|
|
|
|
def __set_properties(self):
|
|
# begin wxGlade: excursiones.__set_properties
|
|
self.SetTitle("Actividad Extraescolar")
|
|
self.SetSize((850, 800))
|
|
self.text_ctrl_1.SetMinSize((480, 29))
|
|
self.listCurso.SetMinSize((100, 584))
|
|
self.listCurso.SetToolTipString("Clic para escoger curso")
|
|
self.listAlumnos.SetMinSize((308, 584))
|
|
self.listAlumnos.SetToolTipString("Clic para escoger alumno")
|
|
self.listSeleccionados.SetMinSize((308, 584))
|
|
self.listSeleccionados.SetToolTipString("Clic para borrar alumno")
|
|
self.datepicker_ctrl_1.SetMinSize((200,29))
|
|
|
|
# end wxGlade
|
|
|
|
def __do_layout(self):
|
|
# begin wxGlade: excursiones.__do_layout
|
|
sizer_1 = wx.FlexGridSizer(3,1,5,5)
|
|
sizer_1.AddGrowableCol(1)
|
|
botones = wx.BoxSizer(wx.HORIZONTAL)
|
|
cursoAlumnos = wx.FlexGridSizer(3, 3, 0, 5)
|
|
titulofecha = wx.FlexGridSizer(1,4,5,5)
|
|
titulofecha.Add(self.label_1, 0, 0, 0)
|
|
titulofecha.Add(self.text_ctrl_1, 1, 0, 0)
|
|
titulofecha.Add(self.label_2, 0, 0, 0)
|
|
titulofecha.Add(self.datepicker_ctrl_1, 1, wx.ALIGN_RIGHT, 0)
|
|
titulofecha.AddGrowableCol(1,3)
|
|
sizer_1.Add(titulofecha, 0, wx.EXPAND, 0)
|
|
cursoAlumnos.Add(self.label_3, 0, 0, 0)
|
|
cursoAlumnos.Add(self.label_4, 0, 0, 0)
|
|
cursoAlumnos.Add(self.label_5, 0, 0, 0)
|
|
cursoAlumnos.Add(self.listCurso, 0, 0, 0)
|
|
cursoAlumnos.Add(self.listAlumnos, 0, 0, 0)
|
|
cursoAlumnos.Add(self.listSeleccionados, 0, 0, 0)
|
|
sizer_1.Add(cursoAlumnos, 3, wx.EXPAND, 0)
|
|
botones.Add(self.btPrint, 0, 0, 0)
|
|
botones.Add(self.btExit, 0, 0, 0)
|
|
sizer_1.Add(botones, 0, wx.ADJUST_MINSIZE, 0)
|
|
self.SetSizer(sizer_1)
|
|
#self.Maximize()
|
|
self.Layout()
|
|
# end wxGlade
|
|
|
|
def cursoClic(self, event): # wxGlade: excursiones.<event_handler>
|
|
#1ªclic no hay alumnos seleccionados
|
|
self.listAlumnos.Clear()
|
|
nombres = self.rellenaList(self.listCurso.GetStringSelection())
|
|
self.listAlumnos.InsertItems(nombres,0)
|
|
if self.listSeleccionados.GetStrings():
|
|
self.otroCurso()
|
|
self.tabla.append([self.listCurso.GetStringSelection(),[],[]])
|
|
|
|
event.Skip()
|
|
|
|
def alumClic(self, event): # wxGlade: excursiones.<event_handler>
|
|
self.listSeleccionados.Append(self.listAlumnos.GetStringSelection().encode('utf-8'))
|
|
|
|
def borraIncluido(self, event):
|
|
self.listSeleccionados.Delete(self.listSeleccionados.GetSelection())
|
|
event.Skip()
|
|
|
|
def otroCurso(self): # wxGlade: excursiones.<event_handler>
|
|
#self.tabla.append([self.listCurso.GetStringSelection().encode('utf-8'),''])
|
|
tmp = []
|
|
indice = 0
|
|
for i in self.listSeleccionados.GetStrings():
|
|
if i <> '':
|
|
tmp.append(i)
|
|
indice +=1
|
|
#creo listas de 3 elementos para mandar 3 columnas al table
|
|
if indice > 2 :
|
|
self.tabla.append(tmp)
|
|
tmp = []
|
|
indice = 0
|
|
while len(tmp) < 3:
|
|
tmp.append([])
|
|
self.tabla.append(tmp)
|
|
self.listSeleccionados.Clear()
|
|
#event.Skip()
|
|
|
|
def imprime(self, event):
|
|
self.otroCurso()
|
|
year = self.datepicker_ctrl_1.GetValue().GetYear()
|
|
dia = self.datepicker_ctrl_1.GetValue().GetDay()
|
|
mes = wx.DateTime.GetMonthName(int(self.datepicker_ctrl_1.GetValue().GetMonth()))
|
|
listado.hoy = ' ' +str(dia) + ' de ' + mes + ' de '+ str(year)
|
|
listado.c = Canvas('ActividadExtraescolar.pdf',pagesize=A4)
|
|
listado.actividad = self.text_ctrl_1.GetValue()
|
|
listado.alumnos = self.tabla
|
|
listado.contenido()
|
|
mivar = subprocess.Popen(['evince',os.path.realpath('ActividadExtraescolar.pdf')])
|
|
while mivar.poll() <> 0:
|
|
pass
|
|
event.Skip()
|
|
|
|
def salir(self, event): # wxGlade: excursiones.<event_handler>
|
|
self.Close(True)
|
|
event.Skip()
|
|
|
|
#lista de alumnos
|
|
def rellenaList(self,curso):
|
|
allcurso = []
|
|
nombres = []
|
|
allcurso.append(self.consulta('alumnocurso',curso))
|
|
for i in allcurso[0][0]:
|
|
if i != '':
|
|
nombres.append(self.consulta('nombre',i)[0])
|
|
return nombres
|
|
|
|
|
|
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.initialize("ldaps://ldap")
|
|
l.protocol_version = ldap.VERSION3
|
|
#l = ldap.open("ldap")
|
|
username = "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es"
|
|
password = "xxxxxxx"
|
|
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
|
|
|
|
# end of class excursiones
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app = wx.PySimpleApp(0)
|
|
wx.InitAllImageHandlers()
|
|
Principal = excursiones(None, -1, "")
|
|
app.SetTopWindow(Principal)
|
|
Principal.Show()
|
|
app.MainLoop()
|