]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/subcontrollers/ejercicio/__init__.py
vuelvo a poner en el widget el tip
[software/sercom.git] / sercom / subcontrollers / ejercicio / __init__.py
index 3abb82c33fc94416b6d1fccc44fb6bcc7d4eb88e..d04dde1583f160b37d4becd7198a5b0669ca0e16 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
@@ -74,8 +77,71 @@ def validate_new(data):
 def get_options():
     return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
 
 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 +151,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 +164,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"""