]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sc_suwi
Se agrega listado de entregas rechazadas.
[software/sercom-old.git] / src / sc_suwi
index e438f2878d363cfbfeecb477d5bc80fad7bf1d6f..be472154a07a86ac261eaa50ed0c18614a9d1adb 100755 (executable)
@@ -21,6 +21,10 @@ import cgitb; cgitb.enable()
 #XXX HORRIBLE
 PASSWD = conf.get('general', 'cgipw')
 
+def cmp_correccion_padron(e1, e2):
+    'Compara 2 entregas, según el padrón del alumno.'
+    return cmp(e1.inscripto.padron, e2.inscripto.padron)
+
 def http_header_html(req):
     return 'Content-type: text/html\r\n\r\n'
 
@@ -48,6 +52,11 @@ def header(req):
                 border: medium black solid;
                 border-collapse: collapse;
             }
+            caption
+            {
+                margin: 5pt;
+                font-weight: bold;
+            }
             th
             {
                 border: thin black solid;
@@ -61,7 +70,6 @@ def header(req):
             {
                 border: thin black solid;
                 padding: 3pt;
-                text-align: center;
                 vertical-align: middle;
             }
             .warn
@@ -247,7 +255,7 @@ def zip(req, entrega_id):
     def zip_path(path, base, zipfd):
         paths = os.listdir(path)
         for p in paths:
-            if os.path.isdir(p):
+            if os.path.isdir(os.path.join(path, p)):
                 zip_path(os.path.join(path, p), os.path.join(base, p), zipfd)
             else:
                 zipfd.write(os.path.join(path, p), os.path.join(base, p))
@@ -267,45 +275,84 @@ def zip(req, entrega_id):
     os.unlink(tmpfname)
 
 def correcciones(req, entrega_id):
-    def header():
+    def correccion_header():
         return '''<table>
-    <tr>
-        <th>Padrón</th>
-        <th>Pruebas</th>
-        <th>Intentos</th>
-    <tr>
+    <caption>Entregas aceptadas</caption>
+    <thead>
+        <tr>
+            <th>Padrón</th>
+            <th>Pruebas</th>
+            <th>Intentos</th>
+        <tr>
+    </thead>
+    <tbody>
 '''
         pass
-    def footer():
-        r = '</table>\n<p>\n'
-        r += form(req, 'Elegir curso', input_login(req))
-        r += form(req, 'Elegir entrega', input_curso(req, e.curso.id))
-        r += form(req, 'Bajar entrega en .zip', input_zip(req, entrega_id))
-        r += '</p>\n'
-        return r
-    def row(c):
+    def correccion_footer():
+        return '    </tbody>\n</table>\n'
+    def correccion_row(c):
         if c.intento.pruebasPasadas: pruebas = 'BIEN'
         elif not c.intento.compila: prubas = None
         else: pruebas = 'MAL'
         intentos = int(Intento.selectBy(inscriptoID=c.inscriptoID,
             entregaID=c.entregaID, connection=conn).count())
         return '''
-    <tr>
-        <td>%d</td>
-        <td>%s</td>
-        <td>%s</td>
-    </tr>
+            <tr>
+                <td>%d</td>
+                <td>%s</td>
+                <td>%s</td>
+            </tr>
 ''' % (c.inscripto.padron,
         form(req, pruebas, input_pruebas(req, c.intento.id)),
         form(req, intentos, input_intentos(req, c.entrega.id, c.inscripto.id)))
+    def problematico_header():
+        return '''<table>
+    <caption>Entregas rechazadas</caption>
+    <thead>
+        <tr>
+            <th>Padrón</th>
+            <th>Intentos</th>
+        <tr>
+    </thead>
+    <tbody>
+'''
+        pass
+    def problematico_footer():
+        return '    </tbody>\n</table>\n'
+    def problematico_row(inscripto, entrega):
+        intentos = int(Intento.selectBy(inscriptoID=inscripto.id,
+            entregaID=entrega.id, connection=conn).count())
+        return '''
+        <tr>
+            <td>%d</td>
+            <td>%s</td>
+        </tr>
+''' % (inscripto.padron,
+        form(req, intentos, input_intentos(req, entrega.id, inscripto.id)))
+    def footer():
+        r = '<p>\n'
+        r += form(req, 'Elegir curso', input_login(req))
+        r += form(req, 'Elegir entrega', input_curso(req, e.curso.id))
+        r += form(req, 'Bajar entrega en .zip', input_zip(req, entrega_id))
+        r += '</p>\n'
+        return r
 
     e = Entrega.get(entrega_id, connection=conn)
     c = e.curso
     r = '<h1>Entrega %d.%d del curso %d-%d-%d</h1>\n' \
         % (e.nroEjercicio, e.entrega, c.anio, c.cuatrimestre, c.curso)
-    r += header()
-    for c in e.correcciones:
-        r += row(c)
+    correcciones = list(e.correcciones)
+    correcciones.sort(cmp_correccion_padron)
+    r += correccion_header()
+    for c in correcciones:
+        r += correccion_row(c)
+    r += correccion_footer()
+    inscriptos_ok = set([c.inscripto for c in correcciones])
+    inscriptos = set([i.inscripto for i in e.intentos])
+    r += problematico_header()
+    for i in inscriptos - inscriptos_ok:
+        r += problematico_row(i, e)
+    r += problematico_footer()
     r += footer()
     return r