]> git.llucax.com Git - z.facultad/75.52/sercom.git/commitdiff
entregas
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 25 Feb 2007 21:04:10 +0000 (21:04 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 25 Feb 2007 21:04:10 +0000 (21:04 +0000)
Quise ponerlo como /ejercicio/entregas que tiene mas onda pero el puto kid se me queja y no
tengo ganas de saber por que :)

sercom/controllers.py
sercom/model.py
sercom/subcontrollers/__init__.py
sercom/subcontrollers/ejercicio/__init__.py
sercom/subcontrollers/ejercicio/templates/list.kid
sercom/subcontrollers/entrega/__init__.py [new file with mode: 0644]
sercom/subcontrollers/entrega/templates/list.kid [new file with mode: 0644]
sercom/subcontrollers/entrega/templates/new.kid [new file with mode: 0644]

index b1e8ed142c3bcdc07a3808631bc6929a0b71769a..6132eb26e0c4d7c43bf954f2f8a4d1e0e52d7ee7 100644 (file)
@@ -85,6 +85,8 @@ class Root(controllers.RootController):
 
     ejercicio = EjercicioController()
 
 
     ejercicio = EjercicioController()
 
+    entrega = EntregaController()
+
     caso_de_prueba = CasoDePruebaController()
 
     curso = CursoController()
     caso_de_prueba = CasoDePruebaController()
 
     curso = CursoController()
index 739bbd7183feb86a3dd7a7b90396366aa07e38f1..dec75addc8ad43f726e2dd18b9480383e7780ae5 100644 (file)
@@ -478,9 +478,10 @@ class InstanciaDeEntrega(SQLObject, ByObject): #{{{
 
     def __init__(self, ejercicio=None, numero=None, inicio=None, fin=None,
             observaciones=None, activo=True, tareas=(), **kargs):
 
     def __init__(self, ejercicio=None, numero=None, inicio=None, fin=None,
             observaciones=None, activo=True, tareas=(), **kargs):
-        SQLObject.__init__(self, ejercicioID=ejercicio.id, numero=numero,
-            fin=fin, inicio=inicio, observaciones=observaciones, activo=activo,
-            **kargs)
+        if ejercicio:
+            SQLObject.__init__(self, ejercicioID=ejercicio.id, numero=numero,
+                fin=fin, inicio=inicio, observaciones=observaciones, activo=activo,
+                **kargs)
         if tareas:
             self.tareas = tareas
 
         if tareas:
             self.tareas = tareas
 
index f650c14cefcf3463f60c223fbfdb6d0eba2f0b47..97976ee8c1be48e026f74e1f3160147a8c85a7b5 100644 (file)
@@ -4,3 +4,4 @@ from curso import CursoController
 from enunciado import EnunciadoController
 from caso_de_prueba import CasoDePruebaController
 from ejercicio import EjercicioController
 from enunciado import EnunciadoController
 from caso_de_prueba import CasoDePruebaController
 from ejercicio import EjercicioController
+from entrega import EntregaController
index 3abb82c33fc94416b6d1fccc44fb6bcc7d4eb88e..c5335063edbd4fcaf1dfffe2d7c84ec28295c77e 100644 (file)
@@ -11,6 +11,7 @@ from docutils.core import publish_parts
 from sercom.subcontrollers import validate as val
 from sercom.model import Ejercicio, Curso, Enunciado
 from cherrypy import request, response
 from sercom.subcontrollers import validate as val
 from sercom.model import Ejercicio, Curso, Enunciado
 from cherrypy import request, response
+
 #}}}
 
 #{{{ Configuración
 #}}}
 
 #{{{ Configuración
index bd7919698859a1b2e7d15d5775aa311b01df0325..035542a06dd07b4c867eeeccb2ad7cb1af43cdab 100644 (file)
@@ -27,6 +27,7 @@
             <span py:replace="record.grupal">grupal</span>
         </td>
         <td>
             <span py:replace="record.grupal">grupal</span>
         </td>
         <td>
+            <a href="${tg.url('/entrega/%d' % record.id)}">Entregas</a>
             <a href="${tg.url('/ejercicio/edit/%d' % record.id)}">Editar</a>
             <a href="${tg.url('/ejercicio/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
         </td>
             <a href="${tg.url('/ejercicio/edit/%d' % record.id)}">Editar</a>
             <a href="${tg.url('/ejercicio/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
         </td>
diff --git a/sercom/subcontrollers/entrega/__init__.py b/sercom/subcontrollers/entrega/__init__.py
new file mode 100644 (file)
index 0000000..9159f73
--- /dev/null
@@ -0,0 +1,112 @@
+# vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
+
+#{{{ Imports
+from turbogears import controllers, expose, redirect
+from turbogears import validate, flash, error_handler
+from turbogears import validators as V
+from turbogears import widgets as W
+from turbogears import identity
+from turbogears import paginate
+from docutils.core import publish_parts
+from sercom.subcontrollers import validate as val
+from sercom.model import Ejercicio, Curso, Enunciado, InstanciaDeEntrega
+from cherrypy import request, response
+#}}}
+
+#{{{ Configuración
+cls = InstanciaDeEntrega
+name = 'instancia de entrega'
+namepl = 'instancias de entrega'
+
+fkcls = Ejercicio
+fkname = 'ejercicio'
+fknamepl = fkname + 's'
+
+#}}}
+
+#{{{ Validación
+def validate_fk(data):
+    fk = data.get(fkname + 'ID', None)
+    if fk == 0: fk = None
+    if fk is not None:
+        try:
+            fk = fkcls.get(fk)
+        except LookupError:
+            flash(_(u'No se pudo crear el nuevo %s porque el %s con '
+                'identificador %d no existe.' % (name, fkname, fk)))
+            raise redirect('new', **data)
+    data.pop(fkname + 'ID', None)
+    data[fkname] = fk
+    return fk
+
+def validate_get(id):
+    return val.validate_get(cls, name, id)
+
+def validate_set(id, data):
+    validate_fk(data)
+    return val.validate_set(cls, name, id, data)
+
+def validate_new(data):
+    validate_fk(data)
+    return val.validate_new(cls, name, data)
+#}}}
+
+#{{{ Formulario
+def get_options():
+    return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
+
+class EntregaForm(W.TableForm):
+    class Fields(W.WidgetsList):
+        numero = W.TextField(name="numero",label=_(u'Nro'), help_text=_(u'Requerido.'),
+            validator=V.Int(not_empty=True))
+        inicio = W.CalendarDateTimePicker(label=_(u"Inicio"))
+        fin = W.CalendarDateTimePicker(label=_(u"Fin"))
+        procesada = W.CheckBox(label=_(u"Procesada?"))
+        activo = W.CheckBox(label=_(u"Activo?"))
+        observaciones = W.TextArea(rows="5", cols="40")
+        ejercicio_id= W.HiddenField()
+    fields = Fields()
+    javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")]
+
+form = EntregaForm()
+#}}}
+
+#{{{ Controlador
+class EntregaController(controllers.Controller, identity.SecureResource):
+    """Basic model admin interface"""
+    require = identity.has_permission('admin')
+
+    @expose(template='kid:%s.templates.list' % __name__)
+    @validate(validators=dict(ejercicio_id=V.Int))
+    @paginate('records')
+    def default(self, ejercicio_id):
+        e = Ejercicio.get(ejercicio_id)
+        r = e.instancias
+        return dict(records=r, name=name, namepl=namepl, parcial=str(ejercicio_id))
+
+    @expose(template='kid:%s.templates.new' % __name__)
+    def new(self, ejercicio_id, **kw):
+        """Create new records in model"""
+        form.fields[6].attrs['value'] = ejercicio_id
+        return dict(name=name, namepl=namepl, form=form, values=kw, partial=str(ejercicio_id))
+
+    @validate(form=form)
+    @error_handler(new)
+    @expose()
+    def create(self, ejercicio_id, **kw):
+        """Save or create record to model"""
+        e = Ejercicio.get(ejercicio_id)
+        e.add_instancia(**kw)
+        flash(_(u'Se creó un nuevo %s.') % name)
+        raise redirect('/entrega/'+str(e.id))
+
+    @expose()
+    def delete(self, id):
+        """Destroy record in model"""
+        r = validate_get(id)
+        r.destroySelf()
+        flash(_(u'El %s fue eliminado permanentemente.') % name)
+        raise redirect('../list')
+
+#}}}
+
diff --git a/sercom/subcontrollers/entrega/templates/list.kid b/sercom/subcontrollers/entrega/templates/list.kid
new file mode 100644 (file)
index 0000000..6ab783b
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
+    py:extends="'../../../templates/master.kid'">
+<head>
+<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
+<title>list</title>
+</head>
+<body>
+
+<h1>Administración de <span py:replace="namepl">Objetos</span></h1>
+
+<table>
+    <tr>
+        <th>Nro</th>
+        <th>Inicio</th>
+        <th>Fin</th>
+        <th>Procesada?</th>
+        <th>Activa?</th>
+        <th>Observaciones</th>
+        <th>Operaciones</th>
+    </tr>
+    <tr py:for="record in records">
+        <td><span py:replace="record.numero">numero</span></td>
+        <td><span py:replace="record.inicio">inicio</span></td>
+        <td><span py:replace="record.fin">fin</span></td>
+        <td><span py:replace="record.procesada">procesada</span></td>
+        <td><span py:replace="record.activo">activa</span></td>
+        <td><span py:replace="record.observaciones">obs</span></td>
+        <td>
+            <a href="${tg.url('/entrega/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
+        </td>
+    </tr>
+</table>
+
+<br/>
+<a href="${tg.url('/entrega/new/'+parcial)}">Agregar</a>
+
+<div py:for="page in tg.paginate.pages">
+    <a py:if="page != tg.paginate.current_page"
+        href="${tg.paginate.get_href(page)}">${page}</a>
+    <b py:if="page == tg.paginate.current_page">${page}</b>
+</div>
+
+</body>
+</html>
+
+<!-- vim: set et sw=4 sts=4 : -->
diff --git a/sercom/subcontrollers/entrega/templates/new.kid b/sercom/subcontrollers/entrega/templates/new.kid
new file mode 100644 (file)
index 0000000..500ed08
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
+    py:extends="'../../../templates/master.kid'">
+<head>
+<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
+<title>new</title>
+</head>
+<body>
+
+<h1>Crear Nuevo <span py:replace="name">Objeto</span></h1>
+
+<p py:replace="form(action=tg.url('/entrega/create'), value=values, submit_text=_('Crear'))">Formulario</p>
+
+<br/>
+<a href="${tg.url('/entrega/list'+partial)}">Cancelar</a>
+
+</body>
+</html>