1 # vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
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 Docente
24 return val.validate_get(cls, name, id)
26 def validate_set(id, data):
27 return val.validate_set(cls, name, id, data)
29 def validate_new(data):
30 return val.validate_new(cls, name, data)
34 class DocenteForm(W.TableForm):
36 W.TextField(name='usuario', label=_(u'Usuario'),
37 help_text=_(u'Requerido y único.'),
38 validator=V.UnicodeString(min=3, max=10, strip=True)),
39 W.TextField(name='nombre', label=_(u'Nombre'),
40 help_text=_(u'Requerido.'),
41 validator=V.UnicodeString(min=10, max=255, strip=True)),
42 W.TextField(name='email', label=_(u'E-Mail'),
43 #help_text=_(u'Dirección de e-mail.'),
45 V.Email(not_empty=False, resolve_domain=True),
46 V.UnicodeString(not_empty=False, max=255, strip=True))),
47 W.TextField(name='telefono', label=_(u'Teléfono'),
48 #help_text=_(u'Texto libre para teléfono, se puede incluir '
49 # 'horarios o varias entradas.'),
50 validator=V.UnicodeString(not_empty=False, min=7, max=255,
52 W.TextArea(name='observaciones', label=_(u'Observaciones'),
53 #help_text=_(u'Observaciones.'),
54 validator=V.UnicodeString(not_empty=False, strip=True)),
55 W.CheckBox(name='nombrado', label=_(u'Nombrado'), default=1,
56 #help_text=_(u'Indica si tiene cargo.'),
57 validator=V.Bool(if_empty=1)),
58 W.CheckBox(name='activo', label=_(u'Activo'), default=1,
59 #help_text=_(u'Si no está activo no puede ingresar al sistema.'),
60 validator=V.Bool(if_empty=1)),
62 javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_usuario');")]
68 class DocenteController(controllers.Controller, identity.SecureResource):
69 """Basic model admin interface"""
70 require = identity.has_permission('admin')
73 def default(self, tg_errors=None):
74 """handle non exist urls"""
75 raise redirect('list')
79 raise redirect('list')
81 @expose(template='kid:%s.templates.list' % __name__)
84 """List records in model"""
86 return dict(records=r, name=name, namepl=namepl)
89 def activate(self, id, activo):
90 """Save or create record to model"""
93 r.activo = bool(int(activo))
95 raise cherrypy.NotFound
96 raise redirect('../../list')
98 @expose(template='kid:%s.templates.new' % __name__)
100 """Create new records in model"""
101 return dict(name=name, namepl=namepl, form=form, values=kw)
106 def create(self, **kw):
107 """Save or create record to model"""
109 flash(_(u'Se creó un nuevo %s.') % name)
110 raise redirect('list')
112 @expose(template='kid:%s.templates.edit' % __name__)
113 def edit(self, id, **kw):
114 """Edit record in model"""
116 return dict(name=name, namepl=namepl, record=r, form=form)
121 def update(self, id, **kw):
122 """Save or create record to model"""
123 r = validate_set(id, kw)
124 flash(_(u'El %s fue actualizado.') % name)
125 raise redirect('../list')
127 @expose(template='kid:%s.templates.show' % __name__)
128 def show(self,id, **kw):
129 """Show record in model"""
131 if r.observaciones is None:
134 r.obs = publish_parts(r.observaciones, writer_name='html')['html_body']
135 return dict(name=name, namepl=namepl, record=r)
138 def delete(self, id):
139 """Destroy record in model"""
142 flash(_(u'El %s fue eliminado permanentemente.') % name)
143 raise redirect('../list')