Revisión 401
Añadido por Manu Mora Gordillo hace más de 12 años
controlies/trunk/applications/controlies/views/reports/laptops_authorization.html | ||
---|---|---|
jQuery.post("call/json/getClassrooms",
|
||
function(data){
|
||
jQuery.each(data.classrooms, function(i,item){
|
||
jQuery("#classrooms").append("<option value='"+item+"'>"+item+"</option>");
|
||
jQuery("#classroom").append("<option value='"+item+"'>"+item+"</option>");
|
||
});
|
||
}
|
||
);
|
||
... | ... | |
|
||
function report(){
|
||
jQuery.ajax({url:"report",data:jQuery("#form_authorization").serialize()})
|
||
.done(function ( data ){
|
||
eval(data);
|
||
.done(function ( data ){
|
||
switch(data){
|
||
case 'noPeople':{
|
||
alert("no hay gente");
|
||
break
|
||
}
|
||
default: eval(data);
|
||
}
|
||
}
|
||
);
|
||
|
||
... | ... | |
<tr>
|
||
<td HEIGHT="200PX">
|
||
Tipo usuario
|
||
<select id="user_type" name="user_type">
|
||
<option value="Profesor">Profesores</option>
|
||
<option value="Alumno">Alumnos</option>
|
||
<select id="id_user_type" name="id_user_type">
|
||
<option value="1">Profesores</option>
|
||
<option value="2">Alumnos</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
... | ... | |
</td>
|
||
<td>
|
||
Curso
|
||
<select multiple="multiple" size="20" id="classrooms" name="classrooms[]"></select>
|
||
<select id="classroom" name="classroom"></select>
|
||
</td>
|
||
<td>
|
||
<input type="button" value="Generar listado" onClick="javascript:report();">
|
||
... | ... | |
</td>
|
||
</tr>
|
||
</table>
|
||
</form>
|
||
|
||
<div id="dialog-details"></div>
|
controlies/trunk/applications/controlies/controllers/reports.py | ||
---|---|---|
# -*- coding: utf-8 -*-.
|
||
# coding: latin1
|
||
|
||
def laptops_authorization():
|
||
return dict()
|
||
... | ... | |
def report():
|
||
|
||
from gluon.contrib.pyfpdf import FPDF, HTMLMixin
|
||
|
||
from applications.controlies.modules.Groups import Groups
|
||
|
||
class MyFPDF(FPDF, HTMLMixin):
|
||
def header(self):
|
||
#logo=os.path.join(request.env.web2py_path,"applications","controlies","static","logo_consejeria.jpg")
|
||
... | ... | |
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')
|
||
#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
|
||
|
||
sql = "SELECT lh.name, lt.trademark, lt.model, l.serial_number, ut.user_type, lh.username"
|
||
sql = sql+" FROM laptops l, laptops_historical lh"
|
||
pdf=MyFPDF()
|
||
|
||
# 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+" LEFT JOIN states s ON lh.id_state=s.id_state"
|
||
sql = sql+" LEFT JOIN users_types ut ON ut.id_user_type=lh.id_user_type"
|
||
sql = sql+" WHERE s.state='Asignado' AND user_type='"+request.vars['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)"
|
||
sql = sql+" GROUP BY l.id_laptop ORDER BY lh.datetime desc"
|
||
result = cdb.executesql(sql)
|
||
|
||
pdf=MyFPDF()
|
||
serials={}
|
||
for r in result:
|
||
if str(r[0])!="" and str(r[0])!="None":
|
||
serials[str(r[0])] = { 'serial':str(r[1]), 'name':str(r[2]) , 'trademark':str(r[3])+' - '+str(r[4]) }
|
||
|
||
people = []
|
||
if request.vars['id_user_type']=="1":
|
||
# Para profesores
|
||
for s in serials:
|
||
people.append(serials[s])
|
||
else:
|
||
# Para alumnos
|
||
l=conecta()
|
||
g = Groups(l,"",request.vars['classroom'],"")
|
||
users = g.getGroupUsers()
|
||
l.close()
|
||
|
||
for u in users:
|
||
if u in serials:
|
||
people.append(serials[u])
|
||
|
||
if len(people)==0:
|
||
return "noPeople"
|
||
|
||
result = cdb.executesql(sql)
|
||
count = 0
|
||
for reg in result:
|
||
titulo = "Compromiso para el cuidado y mantenimiento del ordenador port?til"
|
||
|
||
for p in people:
|
||
|
||
titulo = "Compromiso para el cuidado y mantenimiento del ordenador portátil"
|
||
|
||
if request.vars['user_type']=="Profesor":
|
||
parrafo1 = "D/Dña <b>"+reg[0]+"</b>, profesor/a de este centro , recibe en el día de hoy, de la Dirección del Centro, el ordenador portátil <b>"+reg[1]+" - "+reg[2]+"</b> número de serie: <b>"+reg[3]+"</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 ......"
|
||
if request.vars['id_user_type']=="1":
|
||
parrafo1 = "D/D?a <b>"+p['name'].encode('latin1')+"</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'].encode('latin1')+"</b> n?mero de serie: <b>"+p['serial'].encode('latin1')+"</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>"+reg[0]+"</b> alumno/a de este centro perteneciente al curso/grupo .... , me comprometo a cuidar, custodiar y mantener en perfecto estado el ORDENADOR <b>"+reg[1]+" - "+reg[2]+"</b> número de serie: <b>"+reg[3]+"</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 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 ......"
|
||
parrafo1 = "Yo <b>"+p['name'].encode('latin1')+"</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'].encode('latin1')+"</b> (n?mero de serie: <b>"+p['serial'].encode('latin1')+"</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:
|
||
... | ... | |
else:
|
||
pdf.write_html("<br><br><br><center><p>______________________________________________________________________________________</p></center><br><br>")
|
||
|
||
pdf.write_html("<center><h1>"+titulo.decode("utf8").encode("latin1")+"</h1></center><br>")
|
||
pdf.write_html("<p>"+parrafo1.decode("utf8").encode("latin1")+"</p><br>")
|
||
pdf.write_html("<p>"+parrafo2.decode("utf8").encode("latin1")+"</p>")
|
||
pdf.write_html("<br><br><center><p>"+parrafo3.decode("utf8").encode("latin1")+"</p></center>")
|
||
pdf.write_html("<br><br><br><br><center><p>"+parrafo4.decode("utf8").encode("latin1")+"</p></center>")
|
||
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:
|
||
response.headers['Content-Type']='application/pdf'
|
||
doc=pdf.output(dest='S')
|
||
... | ... | |
supports xml, json, xmlrpc, jsonrpc, amfrpc, rss, csv
|
||
"""
|
||
session.forget()
|
||
return service()
|
||
return service()
|
controlies/trunk/applications/controlies/modules/Groups.py | ||
---|---|---|
|
||
def getGroupUsers(self):
|
||
result = self.ldap.search("ou=Group","cn="+self.name,["cn","memberUid"])
|
||
|
||
members = []
|
||
for m in result:
|
||
members.append(m[0][1]["memberUid"][0])
|
||
|
||
members = result[0][0][1]["memberUid"]
|
||
members.sort()
|
||
|
||
|
||
return members
|
controlies/trunk/applications/controlies/modules/Utils/LdapUtils.py | ||
---|---|---|
|
||
return { "classrooms":classrooms }
|
||
|
||
def getClassroomGroupsWithUsers(ldap):
|
||
result = ldap.search("ou=Group","(|(groupType=school_class))",["cn","groupType","memberUid"])
|
||
|
||
classrooms = []
|
||
for g in result:
|
||
try:
|
||
d = {g[0][1]["cn"][0]:g[0][1]["memberUid"]}
|
||
classrooms.append(d)
|
||
except:
|
||
pass
|
||
|
||
classrooms.sort()
|
||
return { "classrooms":classrooms }
|
||
|
||
def getAllRanges(ldap):
|
||
myRange = []
|
||
mySubRange = []
|
Exportar a: Unified diff
Compromisos portátiles