]> git.llucax.com Git - software/sercom.git/blob - sercom/subcontrollers/curso/__init__.py
Cursos y alumnos
[software/sercom.git] / sercom / subcontrollers / curso / __init__.py
1 # vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
2
3 #{{{ Imports
4 import cherrypy
5 from turbogears import controllers, expose, redirect
6 from turbogears import validate, flash, error_handler
7 from turbogears import validators as V
8 from turbogears import widgets as W
9 from turbogears import identity
10 from turbogears import paginate
11 from docutils.core import publish_parts
12 from sercom.subcontrollers import validate as val
13 from sercom.model import Curso, Ejercicio, Alumno, Docente, Grupo, DocenteInscripto
14 from curso_alumno import *
15
16 #}}}
17
18 #{{{ Configuración
19 cls = Curso
20 name = 'curso'
21 namepl = name + 's'
22 #}}}
23
24 #{{{ Validación
25 def validate_get(id):
26     return val.validate_get(cls, name, id)
27
28 def validate_set(id, data):
29     return val.validate_set(cls, name, id, data)
30
31 def validate_new(data):
32     return val.validate_new(cls, name, data)
33 #}}}
34
35 def get_ejercicios():
36     return [(fk1.id, fk1.shortrepr()) for fk1 in Ejercicio.select()]
37
38 def get_docentes():
39     return [(fk1.id, fk1.shortrepr()) for fk1 in Docente.select()]
40
41 def get_alumnos():
42     return [(fk1.id, fk1.shortrepr()) for fk1 in Alumno.select()]
43
44 def get_grupos():
45     return [(fk1.id, fk1.shortrepr()) for fk1 in Grupo.select()]
46
47 #{{{ Formulario
48 class CursoForm(W.TableForm):
49     class Fields(W.WidgetsList):
50         anio = W.TextField(label=_(u'Anio'),
51             help_text=_(u'Requerido y único.'),
52             validator=V.Number(min=4, max=4, strip=True))
53         cuatrimestre = W.TextField(label=_(u'Cuatrimestre'),
54             help_text=_(u'Requerido.'),
55             validator=V.Number(min=1, max=1, strip=True))
56         numero = W.TextField(label=_(u'Numero'),
57             help_text=_(u'Requerido'),
58             validator=V.Number(min=1, max=2, strip=True))
59         descripcion = W.TextArea(name='descripcion', label=_(u'Descripcion'),
60             help_text=_(u'Descripcion.'),
61             validator=V.UnicodeString(not_empty=False, strip=True))
62         docentes = W.MultipleSelectField(name="docentes", label=_(u'Docentes'),
63             help_text=_(u'Docentes asignados al curso'), options=get_docentes,
64             validator=V.Int(not_empty=True))
65         alumnos = W.MultipleSelectField(name="alumnos", label=_(u'Alumnos'),
66             help_text=_(u'Alumnos del curso'), options=get_alumnos,
67             validator=V.Int(not_empty=True))
68 #        grupos = W.MultipleSelectField(name="grupos", label=_(u'Grupos'),
69 #          help_text=_(u'Grupos del curso'), options=get_grupos,
70 #           validator=V.Int(not_empty=False))
71 #        ejercicios = W.MultipleSelectField(name="ejercicios", label=_(u'Ejercicios'),
72 #           help_text=_(u'Ejercicios'), options=get_ejercicios,
73 #           validator=V.Int(not_empty=True))
74     fields = Fields()
75     javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('anio');")]
76 form = CursoForm()
77 #}}}
78
79 #{{{ Controlador
80 class CursoController(controllers.Controller, identity.SecureResource):
81     """Basic model admin interface"""
82     require = identity.has_permission('admin')
83     curso_alumno = CursoAlumnoController()
84
85     @expose()
86     def default(self, tg_errors=None):
87         """handle non exist urls"""
88         raise redirect('list')
89
90     @expose()
91     def index(self):
92         raise redirect('list')
93
94     @expose(template='kid:%s.templates.list' % __name__)
95     @paginate('records')
96     def list(self):
97         """List records in model"""
98         r = cls.select()
99         return dict(records=r, name=name, namepl=namepl)
100
101     @expose()
102     def activate(self, id, activo):
103         """Save or create record to model"""
104         r = validate_get(id)
105         try:
106             r.activo = bool(int(activo))
107         except ValueError:
108             raise cherrypy.NotFound
109         raise redirect('../../list')
110
111     @expose(template='kid:%s.templates.new' % __name__)
112     def new(self, **kw):
113         """Create new records in model"""
114         return dict(name=name, namepl=namepl, form=form, values=kw)
115
116     @validate(form=form)
117     @error_handler(new)
118     @expose()
119     def create(self, **kw):
120         """Save or create record to model"""
121         r = validate_new(kw)
122         docentes = kw.get('docentes', [])
123         alumnos = kw.get('alumnos', [])
124         """ Elimino todos los docentes asignados al curso y los agrego nuevamente""" 
125         for d in DocenteInscripto.selectBy(curso=r):
126             d.destroySelf()
127         """ Agrego la nueva seleccion """ 
128         for d in docentes:
129             r.add_docente(Docente(d))
130         """ Elimino a los alumnos y los vuelvo a agregar """
131         for a in AlumnoInscripto.selectBy(curso=r):
132             d.destroySelf()
133         for a in alumnos:
134             r.add_alumno(Alumno(a))
135         flash(_(u'Se creó un nuevo %s.') % name)
136         raise redirect('list')
137     
138     @expose(template='kid:%s.templates.edit' % __name__)
139     def edit(self, id, **kw):
140         """Edit record in model"""
141         r = validate_get(id)
142         return dict(name=name, namepl=namepl, record=r, form=form)
143
144     @validate(form=form)
145     @error_handler(edit)
146     @expose()
147     def update(self, id, **kw):
148         """Save or create record to model"""
149         r = validate_set(id, kw)
150         flash(_(u'El %s fue actualizado.') % name)
151         raise redirect('../list')
152
153     @expose(template='kid:%s.templates.show' % __name__)
154     def show(self,id, **kw):
155         """Show record in model"""
156         r = validate_get(id)
157         return dict(name=name, namepl=namepl, record=r)
158
159     @expose()
160     def delete(self, id):
161         """Destroy record in model"""
162         r = validate_get(id)
163         r.destroySelf()
164         flash(_(u'El %s fue eliminado permanentemente.') % name)
165         raise redirect('../list')
166 #}}}
167