]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/subcontrollers/curso/__init__.py
Actualizar TODO.
[software/sercom.git] / sercom / subcontrollers / curso / __init__.py
index 0e488dd92f1dc683b80bedb86d219bc590522b3a..9d1c1f35b455c5bfcde1b52e295b89af8bff80bb 100644 (file)
@@ -23,7 +23,7 @@ name = 'curso'
 namepl = name + 's'
 #}}}
 
-ajax = u""" 
+ajax = u"""
     function alumnos_agregar_a_la_lista(texto, lista)
     {
         t = MochiKit.DOM.getElement(texto);
@@ -67,20 +67,20 @@ ajax = u"""
         var d = loadJSONDoc(url);
         d.addCallbacks(procesar, err);
     }
-    
+
     function onsubmit()
     {
         /* TODO : Validar datos y evitar el submit si no esta completo */
 
         /* Selecciono todos los miembros si no, no llegan al controllere*/
         l = MochiKit.DOM.getElement('form_alumnos');
-        for (i=0; i<l.options.length; i++) { 
-            l.options[i].selected = true; 
+        for (i=0; i<l.options.length; i++) {
+            l.options[i].selected = true;
         }
         /* Selecciono todos los miembros si no, no llegan al controllere*/
         l = MochiKit.DOM.getElement('form_docentes_curso');
-        for (i=0; i<l.options.length; i++) { 
-            l.options[i].selected = true; 
+        for (i=0; i<l.options.length; i++) {
+            l.options[i].selected = true;
         }
         return true; // Dejo hacer el submit
     }
@@ -97,6 +97,9 @@ def validate_set(id, data):
 
 def validate_new(data):
     return val.validate_new(cls, name, data)
+
+def validate_del(id):
+    return val.validate_del(cls, name, id)
 #}}}
 
 def get_ejercicios():
@@ -111,6 +114,7 @@ def get_alumnos():
 def get_grupos():
     return [(fk1.id, fk1.shortrepr()) for fk1 in Grupo.select()]
 
+
 #{{{ Formulario
 class CursoForm(W.TableForm):
     class Fields(W.WidgetsList):
@@ -126,7 +130,7 @@ class CursoForm(W.TableForm):
         descripcion = W.TextArea(name='descripcion', label=_(u'Descripcion'),
             help_text=_(u'Descripcion.'),
             validator=V.UnicodeString(not_empty=False, strip=True))
-        
+
         docentes = W.MultipleSelectField(name="docentes",
             label=_(u'Docentes'),
             attrs=dict(style='width:300px'),
@@ -144,6 +148,7 @@ class CursoForm(W.TableForm):
 
         alumnos = AjaxMultiSelect(label=_(u'Alumnos'),
                 validator=V.Int(),
+                attrs = dict(size='20'),
                 on_add="alumnos_agregar_a_la_lista")
 
     fields = Fields()
@@ -205,7 +210,7 @@ class CursoController(controllers.Controller, identity.SecureResource):
         del(kw['docentes_curso'])
         del(kw['alumnos'])
         r = validate_new(kw)
-        """ Agrego la nueva seleccion de docentes """ 
+        """ Agrego la nueva seleccion de docentes """
         for d in docentes:
             r.add_docente(d)
         """ El curso es nuevo, por ende no hay alumnos inscriptos """
@@ -213,7 +218,7 @@ class CursoController(controllers.Controller, identity.SecureResource):
             r.add_alumno(a)
         flash(_(u'Se creó un nuevo %s.') % name)
         raise redirect('list')
-    
+
     @expose(template='kid:%s.templates.edit' % __name__)
     def edit(self, id, **kw):
         """Edit record in model"""
@@ -229,8 +234,8 @@ class CursoController(controllers.Controller, identity.SecureResource):
         values.descripcion = r.descripcion
         # cargo la lista con los docentes asignados al curso
         values.docentes_curso = [{"id":d.docente.id, "label":d.docente.shortrepr()} for d in DocenteInscripto.selectBy(curso=r.id)]
-        values.alumnos_inscriptos = [{"id":a.alumno.id, "label":a.alumno.nombre} for a in AlumnoInscripto.selectBy(curso=r.id)]
-       
+        values.alumnos_inscriptos = [{"id":a.alumno.id, "label":a.alumno.shortrepr()} for a in AlumnoInscripto.selectBy(curso=r.id)]
+
         return dict(name=name, namepl=namepl, record=values, form=form)
 
     @validate(form=form)
@@ -240,25 +245,32 @@ class CursoController(controllers.Controller, identity.SecureResource):
         """Save or create record to model"""
         params = dict([(k,v) for (k,v) in kw.iteritems() if k in Curso.sqlmeta.columns.keys()])
         r = validate_set(id, params)
-        
+
         docentes = kw.get('docentes_curso', [])
         alumnos = kw.get('alumnos', [])
+        alumnos_inscriptos = AlumnoInscripto.selectBy(curso=id)
         """ levanto los doncentes del curso para ver cuales tengo que agregar """
         docentes_inscriptos = DocenteInscripto.selectBy(curso=id)
-        
+
         """ elimino a los docentes que no fueron seleccionados """
         for di in docentes_inscriptos:
             if di.id not in docentes:
                 r.remove_docente(di.docente)
-        
+
         """ Agrego la nueva seleccion """
         for d in docentes:
             try:
                 r.add_docente(d)
             except:
                 pass
-         
+
         """ Verifico que los alumnos no esten ya inscriptos """
+        for a in alumnos_inscriptos:
+            if (a.id not in alumnos):
+                try:
+                    r.remove_alumno(a.alumno)
+                except:
+                    pass
         for a in alumnos:
             try:
                 r.add_alumno(a)
@@ -276,9 +288,42 @@ class CursoController(controllers.Controller, identity.SecureResource):
     @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')
+
+    @expose(template='kid:%s.templates.from_file' % __name__)
+    def from_file(self, id):
+        return dict(cursoID=int(id))
+
+    @expose(template='kid:%s.templates.import_results' % __name__)
+    def from_file_add(self, id, archivo):
+        """ Se espera :
+             padron,nombre,email,telefono
+        """
+        import csv
+        lines = archivo.file.read().split('\n')
+        ok = []
+        fail = []
+        curso = Curso.get(int(id))
+        for line in lines:
+            for row in csv.reader([line]):
+                if row == []:
+                    continue
+                try:
+                    u = Alumno(row[0], nombre=row[1])
+                except:
+                    u = Alumno.byPadron(row[0])
+                try:
+                    u.email = row[2]
+                    u.telefono = row[3]
+                    u.contrasenia = row[0]
+                    u.activo = True
+                    curso.add_alumno(u)
+                    ok.append(row)
+                except Exception, e:
+                    row.append(str(e))
+                    fail.append(row)
+        return dict(ok=ok, fail=fail)
 #}}}