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 Alumno, Rol
14 from sqlobject import *
25 return val.validate_get(cls, name, id)
27 def validate_set(id, data):
28 return val.validate_set(cls, name, id, data)
30 def validate_new(data):
31 return val.validate_new(cls, name, data)
35 class AlumnoForm(W.TableForm):
36 class Fields(W.WidgetsList):
37 padron = W.TextField(label=_(u'Padrón'),
38 help_text=_(u'Requerido y único.'),
39 validator=V.UnicodeString(min=3, max=10, strip=True))
40 nombre = W.TextField(label=_(u'Nombre'),
41 help_text=_(u'Requerido.'),
42 validator=V.UnicodeString(min=10, max=255, strip=True))
43 email = W.TextField(label=_(u'E-Mail'),
44 #help_text=_(u'Dirección de e-mail.'),
46 V.Email(not_empty=False, resolve_domain=True),
47 V.UnicodeString(not_empty=False, max=255, strip=True)))
48 telefono = W.TextField(label=_(u'Teléfono'),
49 #help_text=_(u'Texto libre para teléfono, se puede incluir '
50 # 'horarios o varias entradas.'),
51 validator=V.UnicodeString(not_empty=False, min=7, max=255,
53 nota = W.TextField(label=_(u'Nota'),
54 #help_text=_(u'Texto libre para teléfono, se puede incluir '
55 # 'horarios o varias entradas.'),
56 validator=V.Number(not_empty=False, strip=True))
57 observaciones = W.TextArea(label=_(u'Observaciones'),
58 #help_text=_(u'Observaciones.'),
59 validator=V.UnicodeString(not_empty=False, strip=True))
60 activo = W.CheckBox(label=_(u'Activo'), default=1,
61 #help_text=_(u'Si no está activo no puede ingresar al sistema.'),
62 validator=V.Bool(if_empty=1))
64 javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_padron');")]
70 class AlumnoController(controllers.Controller, identity.SecureResource):
71 """Basic model admin interface"""
72 require = identity.has_permission('admin')
75 def default(self, tg_errors=None):
76 """handle non exist urls"""
77 raise redirect('list')
81 raise redirect('list')
83 @expose(template='kid:%s.templates.list' % __name__)
86 """List records in model"""
88 return dict(records=r, name=name, namepl=namepl)
91 def activate(self, id, activo):
92 """Save or create record to model"""
95 r.activo = bool(int(activo))
97 raise cherrypy.NotFound
98 raise redirect('../../list')
100 @expose(template='kid:%s.templates.new' % __name__)
102 """Create new records in model"""
103 return dict(name=name, namepl=namepl, form=form, values=kw)
108 def create(self, **kw):
109 """Save or create record to model"""
110 kw['roles'] = [Rol.by_nombre('alumno')]
112 flash(_(u'Se creó un nuevo %s.') % name)
113 raise redirect('list')
115 @expose(template='kid:%s.templates.edit' % __name__)
116 def edit(self, id, **kw):
117 """Edit record in model"""
119 return dict(name=name, namepl=namepl, record=r, form=form)
124 def update(self, id, **kw):
125 """Save or create record to model"""
126 r = validate_set(id, kw)
127 flash(_(u'El %s fue actualizado.') % name)
128 raise redirect('../list')
130 @expose(template='kid:%s.templates.show' % __name__)
131 def show(self,id, **kw):
132 """Show record in model"""
134 if r.observaciones is None:
137 r.obs = publish_parts(r.observaciones, writer_name='html')['html_body']
138 return dict(name=name, namepl=namepl, record=r)
141 def delete(self, id):
142 """Destroy record in model"""
145 flash(_(u'El %s fue eliminado permanentemente.') % name)
146 raise redirect('../list')
148 @expose(template='kid:%s.templates.from_file' % __name__)
152 @expose(template='kid:%s.templates.import_results' % __name__)
153 def from_file_add(self, archivo):
155 padron,nombre,email,telefono
158 lines = archivo.file.read().split('\n')
161 entregador = Rol.get(2)
163 for row in csv.reader([line]):
167 u = Alumno(row[0], nombre=row[1], roles=[Rol.by_nombre('alumno')])
172 u.add_rol(entregador)
177 return dict(ok=ok, fail=fail)
180 def get_alumno(self, padron):
184 # Busco el alumno inscripto
185 alumno = Alumno.byPadron(padron=padron)
187 msg['id'] = alumno.id
188 msg['value'] = alumno.shortrepr()
189 except SQLObjectNotFound:
190 msg = 'No existe el alumno con padron: %s.' % padron
192 except Exception, (inst):
193 msg = u"""Se ha producido un error inesperado al buscar el registro:\n %s""" % str(inst)
195 return dict(msg=msg, error=error)