]> git.llucax.com Git - software/sercom.git/blob - sercom/subcontrollers/correccion/__init__.py
Especificar con más detalle TODO del backend.
[software/sercom.git] / sercom / subcontrollers / correccion / __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 Correccion, Curso, Ejercicio, InstanciaDeEntrega
14 from sqlobject import *
15
16 #}}}
17
18 #{{{ Configuración
19 cls = Correccion
20 name = 'correccion'
21 namepl = name + 'es'
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 #{{{ Formulario
36 class CorreccionForm(W.TableForm):
37     class Fields(W.WidgetsList):
38         linstancia = W.Label(label=_(u'Instancia de Entrega'))
39         lentregador = W.Label(label=_(u'Entregador'))
40         lentrega = W.Label(label=_(u'Entrega'))
41         lcorrector = W.Label(label=_(u'Corrector'))
42         nota = W.TextField(label=_(u'Nota'), validator=V.Number(not_empty=True, strip=True))
43         observaciones = W.TextArea(label=_(u'Observaciones'), validator=V.UnicodeString(not_empty=False, strip=True))
44     fields = Fields()
45     javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_instancia');")]
46
47 def get_cursos():
48     return [(0, u'---')] + [(fk1.id, fk1.shortrepr()) for fk1 in Curso.select()]
49
50 class CorreccionFiltros(W.TableForm):
51     class Fields(W.WidgetsList):
52         cursoID = W.SingleSelectField(label=_(u'Curso'), options = get_cursos, validator = V.Int(not_empty=True))
53     form_attrs={'class':"filter"}
54     fields = Fields()
55
56 filtro = CorreccionFiltros()
57 form = CorreccionForm()
58 #}}}
59
60 #{{{ Controlador
61 class CorreccionController(controllers.Controller, identity.SecureResource):
62     """Basic model admin interface"""
63     require = identity.has_permission('admin')
64
65     @expose()
66     def default(self, tg_errors=None):
67         """handle non exist urls"""
68         raise redirect('list')
69
70     @expose()
71     def index(self):
72         raise redirect('list')
73
74     @expose(template='kid:%s.templates.list' % __name__)
75     @paginate('records')
76     def list(self, cursoID = 0):
77         """List records in model"""
78         vfilter = dict(cursoID = cursoID)
79         if int(cursoID) == 0:
80             r = cls.selectBy(corrector=identity.current.user)
81         else:
82             r = cls.select(
83                 AND(
84                     cls.q.correctorID == identity.current.user.id,
85                     Ejercicio.q.id == InstanciaDeEntrega.q.ejercicioID,
86                     InstanciaDeEntrega.q.id == Correccion.q.instanciaID,
87                     Ejercicio.q.cursoID == cursoID
88                 )
89             )
90         return dict(records=r, name=name, namepl=namepl, form=filtro, vfilter=vfilter)
91
92     @expose(template='kid:%s.templates.edit' % __name__)
93     def edit(self, id, **kw):
94         """Edit record in model"""
95         r = validate_get(id)
96         r.linstancia = r.instancia.shortrepr()
97         r.lentregador = r.entregador.shortrepr()
98         r.lentrega = r.entrega.shortrepr()
99         r.lcorrector = r.corrector.shortrepr()
100         return dict(name=name, namepl=namepl, record=r, form=form)
101
102     @validate(form=form)
103     @error_handler(edit)
104     @expose()
105     def update(self, id, **kw):
106         """Save or create record to model"""
107         from sqlobject import DateTimeCol
108         r = Correccion.get(id)
109         r.nota = kw['nota']
110         r.observaciones = kw['observaciones']
111         r.corregido = DateTimeCol.now()
112         flash(_(u'El %s fue actualizado.') % name)
113         raise redirect('../list')
114
115     @expose(template='kid:%s.templates.show' % __name__)
116     def show(self,id, **kw):
117         """Show record in model"""
118         r = validate_get(id)
119         if r.observaciones is None:
120             r.obs = ''
121         else:
122             r.obs = publish_parts(r.observaciones, writer_name='html')['html_body']
123         return dict(name=name, namepl=namepl, record=r)
124
125     @expose(template='kid:%s.templates.entregas' % __name__)
126     @paginate('records')
127     def entregas(self, id):
128         r = validate_get(id)
129         return dict(records=r.entregas, correccion = id)
130         
131 #}}}
132