]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/subcontrollers/ejercicio/__init__.py
Actualizar TODO.
[software/sercom.git] / sercom / subcontrollers / ejercicio / __init__.py
index 3abb82c33fc94416b6d1fccc44fb6bcc7d4eb88e..cacbad59d6349574b87b747b657fa264f5ecad08 100644 (file)
@@ -11,6 +11,9 @@ 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
+
+from entrega import  *
+
 #}}}
 
 #{{{ Configuración
 #}}}
 
 #{{{ Configuración
@@ -68,14 +71,80 @@ def validate_new(data):
     validate_fk(data)
     validate_fk1(data)
     return val.validate_new(cls, name, data)
     validate_fk(data)
     validate_fk1(data)
     return val.validate_new(cls, name, data)
+
+def validate_del(id):
+    return val.validate_del(cls, name, id)
 #}}}
 
 #{{{ Formulario
 def get_options():
     return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
 
 #}}}
 
 #{{{ Formulario
 def get_options():
     return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
 
-def get_options1():
-    return [(0, _(u'--'))] + [(fk1.id, fk1.shortrepr()) for fk1 in fk1cls.select()]
+# Un poco de ajax para llenar los cursos
+ajax = """
+    function showHint()
+    {
+        MochiKit.DOM.showElement('hint')
+    }
+
+    function hideHint()
+    {
+        MochiKit.DOM.hideElement('hint')
+    }
+
+    function clearEnunciados ()
+    {
+        l = MochiKit.DOM.getElement('form_enunciadoID');
+        l.options.length = 0;
+        l.disabled = true;
+    }
+
+    function mostrarEnunciados (res)
+    {
+        clearEnunciados();
+        for(i in res.enunciados) {
+            id = res.enunciados[i].id;
+            label = res.enunciados[i].nombre;
+            MochiKit.DOM.appendChildNodes("form_enunciadoID", OPTION({"value":id}, label))
+        }
+        l.disabled = false;
+        hideHint();
+    }
+
+    function err (err)
+    {
+        alert("The metadata for MochiKit.Async could not be fetched :(");
+        hideHint();
+    }
+
+    function actualizar_enunciados ()
+    {
+        l = MochiKit.DOM.getElement('form_cursoID');
+        id = l.options[l.selectedIndex].value;
+        if (id == 0) {
+            clearEnunciados();
+            return;
+        }
+
+        url = "/enunciado/de_curso?curso_id="+id;
+        var d = loadJSONDoc(url);
+        d.addCallbacks(mostrarEnunciados, err);
+        showHint();
+    }
+
+    function prepare()
+    {
+        connect('form_cursoID', 'onchange', actualizar_enunciados);
+        hideHint();
+        clearEnunciados();
+        actualizar_enunciados();
+        if (select_enunciado) {
+            wait(0.1).addCallback(function (res) { return select_enunciado() });
+        }
+    }
+
+    MochiKit.DOM.addLoadEvent(prepare)
+"""
 
 class EjercicioForm(W.TableForm):
     class Fields(W.WidgetsList):
 
 class EjercicioForm(W.TableForm):
     class Fields(W.WidgetsList):
@@ -85,10 +154,10 @@ class EjercicioForm(W.TableForm):
             help_text=_(u'Requerido.'),
             validator=V.Int(not_empty=True))
         fk1 = W.SingleSelectField(name=fk1name+'ID', label=_(fk1name.capitalize()),
             help_text=_(u'Requerido.'),
             validator=V.Int(not_empty=True))
         fk1 = W.SingleSelectField(name=fk1name+'ID', label=_(fk1name.capitalize()),
-            options=get_options1, validator=V.Int(not_empty=True))
+            validator=V.Int(not_empty=True))
         grupal = W.CheckBox(name='grupal', label=_(u"Grupal?"))
     fields = Fields()
         grupal = W.CheckBox(name='grupal', label=_(u"Grupal?"))
     fields = Fields()
-    javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")]
+    javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');"), W.JSSource(ajax)]
 
 form = EjercicioForm()
 #}}}
 
 form = EjercicioForm()
 #}}}
@@ -98,6 +167,8 @@ class EjercicioController(controllers.Controller, identity.SecureResource):
     """Basic model admin interface"""
     require = identity.has_permission('admin')
 
     """Basic model admin interface"""
     require = identity.has_permission('admin')
 
+    entrega = EntregaController()
+
     @expose()
     def default(self, tg_errors=None):
         """handle non exist urls"""
     @expose()
     def default(self, tg_errors=None):
         """handle non exist urls"""
@@ -153,8 +224,7 @@ class EjercicioController(controllers.Controller, identity.SecureResource):
     @expose()
     def delete(self, id):
         """Destroy record in model"""
     @expose()
     def delete(self, id):
         """Destroy record in model"""
-        r = validate_get(id)
-        r.destroySelf()
+        validate_del(id)
         flash(_(u'El %s fue eliminado permanentemente.') % name)
         raise redirect('../list')
 
         flash(_(u'El %s fue eliminado permanentemente.') % name)
         raise redirect('../list')