Revisión 466
Añadido por Juan Antonio Cristín Mora hace más de 12 años
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
Subir ficheros