Index: controlies/trunk/applications/controlies/views/reports/laptops_authorization.html
===================================================================
--- controlies/trunk/applications/controlies/views/reports/laptops_authorization.html	(revision 402)
+++ controlies/trunk/applications/controlies/views/reports/laptops_authorization.html	(revision 403)
@@ -42,10 +42,10 @@
                 <li><a href="#tabs-1"><span id="actions">Compromisos portÃ¡tiles</span></a></li>
             </ul>
             <div id="tabs-1" style="padding:3px;">  
-                <table>
+                <table style="width:100%">
                     <tr>
-                        <td HEIGHT="200PX">
-                        	Tipo usuario
+                        <td>
+                        	Tipo usuario<br>
                         	<select id="id_user_type" name="id_user_type">
                         		<option value="1">Profesores</option>
                         		<option value="2">Alumnos</option>
@@ -52,17 +52,24 @@
                         	</select>
                         </td>
                         <td>
-                        	Filtro
-                        	<input type="text" id="search" name="search"/>
+                        	Curso<br><select id="classroom" name="classroom"></select>
                         </td>
                         <td>
-                        	Curso
-                        	<select id="classroom" name="classroom"></select>
+                        	Filtro<br><input type="text" id="search" name="search"/>
                         </td>
                         <td>
+                        	Tipo Informe<br>
+                        	<select id="report_type" name="report_type">
+                        		<option value="compromisos">Compromisos portÃ¡tiles</option>
+                        		<option value="listado">Listado de Usuarios</option>
+                        	</select>
+                        </td>
+                   </tr>
+                   <tr>
+                        <td colspan="4" style="text-align:center;"><br><br>
                         	<input type="button" value="Generar listado" onClick="javascript:report();">
                         </td>
-                    </tr>
+                   </tr>
                 </table>
             </div>
         </div>              
Index: controlies/trunk/applications/controlies/controllers/reports.py
===================================================================
--- controlies/trunk/applications/controlies/controllers/reports.py	(revision 402)
+++ controlies/trunk/applications/controlies/controllers/reports.py	(revision 403)
@@ -13,30 +13,20 @@
 
 @auth.requires_login()      
 def report():
-    
-    from gluon.contrib.pyfpdf import FPDF, HTMLMixin
+
     from applications.controlies.modules.Groups import Groups
+
+    sql = "SELECT lh.username, l.serial_number, lh.name, lt.trademark, lt.model "
+    sql = sql+" FROM laptops l, laptops_historical lh"
+    sql = sql+" LEFT JOIN laptops_trademarks lt ON l.id_trademark=lt.id_trademark "        
+    sql = sql+" LEFT JOIN users_types ut ON ut.id_user_type=lh.id_user_type "     
+    sql = sql+" WHERE lh.id_user_type="+request.vars['id_user_type']
+    sql = sql+" AND l.id_laptop=lh.id_laptop "
+    sql = sql+" AND lh.id_historical IN (SELECT MAX(lh2.id_historical) FROM laptops_historical lh2 WHERE lh2.id_laptop=l.id_laptop) "
     
-    class MyFPDF(FPDF, HTMLMixin):
-        def header(self):
-            #logo=os.path.join(request.env.web2py_path,"applications","controlies","static","logo_consejeria.jpg")
-            #self.image(logo,145,4,60)
-            #self.ln(80)
-            pass          
-            
-        def footer(self):
-            #self.set_y(-15)
-            #self.set_font('Arial','I',8)
-            #self.cell(0,10,"IES Sta Eulalia - Mérida".decode("utf8").encode("latin1"),0,0,'L')
-            #self.cell(0,10,"Consejería de Educación - Gobierno de Extremadura".decode("utf8").encode("latin1"),0,0,'R')
-            pass
-        
-    pdf=MyFPDF()
+    if request.vars["search"]!="":
+        sql = sql+" AND (lh.username like '%"+request.vars["search"]+"%' OR lh.name like '%"+request.vars["search"]+"%' OR l.serial_number like '%"+request.vars["search"]+"%' OR lt.trademark like '%"+request.vars["search"]+"%' OR lt.model like '%"+request.vars["search"]+"%')"
     
-    # Obtenemos los numeros de serie de los portatiles
-    sql = "SELECT lh.username, l.serial_number, lh.name, lt.trademark, lt.model FROM laptops l" 
-    sql = sql+" LEFT JOIN laptops_historical lh ON l.id_laptop=lh.id_laptop AND lh.id_user_type="+request.vars['id_user_type']
-    sql = sql+" LEFT JOIN laptops_trademarks lt ON l.id_trademark=lt.id_trademark"
     sql = sql+" GROUP BY l.id_laptop ORDER BY lh.datetime desc"
     result = cdb.executesql(sql)
 
@@ -63,43 +53,107 @@
 
     if len(people)==0:
         return "noPeople"
+
+    from gluon.contrib.pyfpdf import FPDF, HTMLMixin
+        
+    if request.vars["report_type"]=="compromisos":
+        
+        class MyFPDF(FPDF, HTMLMixin):
+            def header(self):
+                #logo=os.path.join(request.env.web2py_path,"applications","controlies","static","logo_consejeria.jpg")
+                #self.image(logo,145,4,60)
+                #self.ln(80)
+                pass          
+                
+            def footer(self):
+                #self.set_y(-15)
+                #self.set_font('Arial','I',8)
+                #self.cell(0,10,"IES Sta Eulalia - Mérida".decode("utf8").encode("latin1"),0,0,'L')
+                #self.cell(0,10,"Consejería de Educación - Gobierno de Extremadura".decode("utf8").encode("latin1"),0,0,'R')
+                pass
+            
+        pdf=MyFPDF()
     
-    count = 0
-    titulo = "Compromiso para el cuidado y mantenimiento del ordenador portátil"
+        count = 0
+        titulo = "Compromiso para el cuidado y mantenimiento del ordenador portátil"
+        
+        for p in people:
     
-    for p in people:
-
-        if request.vars['id_user_type']=="1":
-            parrafo1 = "D/Dña <b>"+p['name']+"</b>, profesor/a de este centro , recibe en el día de hoy, de la Dirección del Centro, el ordenador portátil <b>"+p['trademark']+"</b> número de serie: <b>"+p['serial']+"</b>, comprometiéndose a utilizarlo como herramienta didáctica en los cursos pertenecientes al Proyecto Escuela 2.0."
-            parrafo2 = "Asimismo, se compromete a devolver a esta Dirección dicho ordenador portátil en el momento en que deje de tener vinculación laboral con este centro o no sea profesor de algún curso integrado en el citado Proyecto Escuela 2.0."        
-            parrafo3 = "Mérida, a ...... de ....................... de ......"
-            parrafo4 = "Firmado: ............................................."
-        else:
-            parrafo1 = "Yo <b>"+p['name']+"</b> alumno/a de este centro perteneciente al curso/grupo <b>"+request.vars['classroom']+"</b>, me comprometo a cuidar, custodiar y mantener en perfecto estado el ORDENADOR <b>"+p['trademark']+"</b> (número de serie: <b>"+p['serial']+"</b>) y ACCESORIOS que me ha entregado el centro para su uso en las distintas áreas de conocimientos, con la supervisión de los profesores/as correspondientes y siguiendo siempre las indicaciones e instrucciones para su correcto manejo."
-            parrafo2 = "El deteriodo intencionado, pérdida, robo o cualquier otra circunstancia que se produzca en el equipo será valorado por al Dirección/Jefatura del centro para tomar las medidas oportunas para su esclarecimiento y en su caso la reposición o arreglo por cuenta del alumno/a asignado/a, padres o tutores del mismo."        
-            parrafo3 = "Mérida, a ...... de ....................... de ......"
-            parrafo4 = "Firma del alumno: ....................................                     Firma de los padres/tutores: ...................................."
+            if request.vars['id_user_type']=="1":
+                parrafo1 = "D/Dña <b>"+p['name']+"</b>, profesor/a de este centro , recibe en el día de hoy, de la Dirección del Centro, el ordenador portátil <b>"+p['trademark']+"</b> número de serie: <b>"+p['serial']+"</b>, comprometiéndose a utilizarlo como herramienta didáctica en los cursos pertenecientes al Proyecto Escuela 2.0."
+                parrafo2 = "Asimismo, se compromete a devolver a esta Dirección dicho ordenador portátil en el momento en que deje de tener vinculación laboral con este centro o no sea profesor de algún curso integrado en el citado Proyecto Escuela 2.0."        
+                parrafo3 = "Mérida, a ...... de ....................... de ......"
+                parrafo4 = "Firmado: ............................................."
+            else:
+                parrafo1 = "Yo <b>"+p['name']+"</b> alumno/a de este centro perteneciente al curso/grupo <b>"+request.vars['classroom']+"</b>, me comprometo a cuidar, custodiar y mantener en perfecto estado el ORDENADOR <b>"+p['trademark']+"</b> (número de serie: <b>"+p['serial']+"</b>) y ACCESORIOS que me ha entregado el centro para su uso en las distintas áreas de conocimientos, con la supervisión de los profesores/as correspondientes y siguiendo siempre las indicaciones e instrucciones para su correcto manejo."
+                parrafo2 = "El deteriodo intencionado, pérdida, robo o cualquier otra circunstancia que se produzca en el equipo será valorado por al Dirección/Jefatura del centro para tomar las medidas oportunas para su esclarecimiento y en su caso la reposición o arreglo por cuenta del alumno/a asignado/a, padres o tutores del mismo."        
+                parrafo3 = "Mérida, a ...... de ....................... de ......"
+                parrafo4 = "Firma del alumno: ....................................                     Firma de los padres/tutores: ...................................."
+            
+            if count%2==0:
+                pdf.add_page()
+            else:
+                pdf.write_html("<br><br><br><center><p>______________________________________________________________________________________</p></center><br><br>")
+    
+            pdf.write_html("<center><h1>"+titulo+"</h1></center><br>")
+            pdf.write_html("<p>"+parrafo1+"</p><br>")
+            pdf.write_html("<p>"+parrafo2+"</p>")
+            pdf.write_html("<br><br><center><p>"+parrafo3+"</p></center>")
+            pdf.write_html("<br><br><br><br><center><p>"+parrafo4+"</p></center>")
+            
+            count+=1            
+    
+    elif request.vars["report_type"]=="listado":
+        response.title = "Listado de portátiles"
         
-        if count%2==0:
-            pdf.add_page()
-        else:
-            pdf.write_html("<br><br><br><center><p>______________________________________________________________________________________</p></center><br><br>")
+        head = THEAD(TR(TH("Nombre y apellidos",_width="35%"), 
+                        TH("Marca/Modelo",_width="25%"),
+                        TH("Nº Serie",_width="40%"), 
+                        _bgcolor="#A0A0A0"))
+        
+        rows = []
+        i=0;
+        for p in people:
+            col = i % 2 and "#F0F0F0" or "#FFFFFF"
+            rows.append(TR(TD(p["name"]),
+                           TD(p["trademark"], _align="center"),
+                           TD(p["serial"], _align="center"),
+                           _bgcolor=col))
+            i+=1 
+    
+        body = TBODY(*rows)
+        table = TABLE(*[head, body], 
+                      _border="1", _align="center", _width="100%")
 
-        pdf.write_html("<center><h1>"+titulo+"</h1></center><br>")
-        pdf.write_html("<p>"+parrafo1+"</p><br>")
-        pdf.write_html("<p>"+parrafo2+"</p>")
-        pdf.write_html("<br><br><center><p>"+parrafo3+"</p></center>")
-        pdf.write_html("<br><br><br><br><center><p>"+parrafo4+"</p></center>")
-        
-        count+=1
-        
-    # prepare PDF to download:
+        class MyFPDF(FPDF, HTMLMixin):
+            def header(self):
+                self.set_font('Arial','B',15)
+                self.cell(0,10, response.title ,1,0,'C')
+                self.set_font('Arial','I',10)
+                
+                if request.vars['id_user_type']=="1": # Para profesores
+                    self.text(20,29, "Grupo: Profesores")                    
+                else:
+                    self.text(20,29, "Grupo: "+request.vars['classroom'])
+                    
+                self.ln(10)
+                
+            def footer(self):
+                self.set_y(-15)
+                self.set_font('Arial','I',8)
+                self.cell(0,10,"IES Sta Eulalia",0,0,'L')
+                txt = 'Página %s de %s' % (self.page_no(), self.alias_nb_pages())
+                self.cell(0,10,txt,0,0,'R')
+                    
+        pdf=MyFPDF()
+        pdf.add_page()
+        pdf.write_html(str(XML(table, sanitize=False)))        
+
     response.headers['Content-Type']='application/pdf'
     doc=pdf.output(dest='S')
-    doc64=embed64(data=doc,extension='application/pdf')
-
+    doc64=embed64(data=doc,extension='application/pdf')    
     return 'window.location="%s";' % doc64     
-    
+        
 def call():
     """
     exposes services. for example:
