Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 466

Subir ficheros

Ver diferencias:

actividadextraescolar/listado.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Tiétar 20-12-2012
import time
import os
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import A4,letter,A5
from reportlab.lib.styles import ParagraphStyle as PS
from reportlab.platypus import SimpleDocTemplate, PageBreak, Paragraph, Spacer, Frame,Table,TableStyle
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_JUSTIFY, TA_CENTER, TA_RIGHT
story = []
actividad = ''
alumnos = []
curso = ''
prof = ''
width, height = A4
#~ DIA DE HOY Y CONVERTIRLO A ESPAÑOL
dia=time.localtime()
mes=dia.tm_mon
mes_sp=['Enero', 'Febrero', 'Marzo',
'Abril', 'Mayo', 'Junio',
'Julio', 'Agosto', 'Septiembre',
'Octubre', 'Noviembre', 'Diciembre']
hoy=''#'%i %s %d' % (dia[2], mes_sp[mes-1], dia.tm_year)
#Estilos para el texto
h1 = PS (name = 'Heading 1', fontSize = 16, leading = 16, alignment=TA_CENTER)
h2 = PS (name = 'Heading 2', fontSize = 14, leading = 14)
body = PS (name = 'Body', fontSize = 12, leading = 12, firstLineIndent = 45, leftIndent= 50, rightIndent= 25, alignment = TA_JUSTIFY)
def cabecera():
story.append(Spacer(1,1*cm))
P = Paragraph('Actividad Extraescolar '+actividad + hoy, h1)
story.append(P)
story.append(Spacer(0,1*cm))
def contenido():
cabecera()
t = Table(alumnos,colWidths=(6*cm,6*cm,6*cm),splitByRow=1)
story.append(t)
c.save()
doc = SimpleDocTemplate ('ActividadExtraescolar.pdf', pagesize=letter, showBoundary=0)
doc.build(story)
actividadextraescolar/Leeme
Este programa permite escoger alumnos de todos los cursos
del centro y lo imprime. Su utilidad es para las salidas
del centro, para que los profesores puedan saber que alumnos
de un curso dado han salido del centro.
Usa ldap para extraer cursos y alumnos.
Tietar 20-12-2012
actividadextraescolar/actividadExtraescolar.py
#!/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()

Exportar a: Unified diff