Proyecto

General

Perfil

#!/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()
(2-2/4)