Revisión 372
Añadido por Francisco Damián Méndez Palma hace casi 13 años
controlies/trunk/applications/controlies/views/gestion/base_datos.html | ||
---|---|---|
|
||
|
||
<ol>
|
||
<li>Generar el archivo de intercambio correspondiente con la herramienta de exportaciÓn. Hay que generar un archivo de intercambio para los portátiles de alumnos y otro para los de los profesores, por separado.</li>
|
||
<li>Generar el archivo de intercambio correspondiente con la herramienta de exportación. La herramienta genera dos ficheros: <strong>profesores.csv</strong> (con los portátiles de profesores) y <strong>alumnos.csv</strong> (con los portátiles de los alumnos).</li>
|
||
<li>Subir, usando el botón <strong>Explorar fichero de importación</strong>, el
|
||
archivo correspondiente (por separado). Si el portátil existe en la BD, no se hará nada.</li>
|
||
</ol>
|
||
... | ... | |
|
||
</div>
|
||
{{else:}}
|
||
<div id="upload_button">Subir un fichero</div>
|
||
<div id="upload_button">Subir fichero</div>
|
||
<ul id="lista">
|
||
</ul>
|
||
{{pass}}
|
||
... | ... | |
onProgress: function(id, fileName, loaded, total){},
|
||
onComplete: function(id, fileName, responseJSON){},
|
||
onCancel: function(id, fileName){},
|
||
allowedExtensions: ['zip','xml'],
|
||
allowedExtensions: ['csv'],
|
||
messages: {
|
||
typeError: "{file} {{='Tiene una extensión incorrecta.'}} {{='Sólo se permiten estas extensiones: '}} {extensions}",
|
||
typeError: "{file} {{='Tiene una extensión incorrecta.'}} {{='Sólo se permiten archivos csv '}} {extensions}",
|
||
sizeError: "{file} {{'es demasiado grande, el tamaño máximo permitido es'}} {sizeLimit}.",
|
||
minSizeError: "{file} {{='es demasiado pequeño, el tamaño mínimo de archivo es'}} {minSizeLimit}.",
|
||
emptyError: "{file} {{='está vacío, selecciona archivos de nuevo'}}",
|
||
... | ... | |
new AjaxUpload('#upload_button', {
|
||
action: '{{=URL("subida_rayuela")}}',
|
||
onSubmit : function(file , ext){
|
||
if (! (ext && /^(zip|xml)$/.test(ext))){
|
||
if (! (ext && /^(csv)$/.test(ext))){
|
||
// extensiones permitidas
|
||
alert('Error: Tiene una extensión incorrecta. Sólo se permiten estas extensiones: xml, zip');
|
||
alert('Error: Tiene una extensión incorrecta. Sólo se permiten archivos .csv');
|
||
// cancela upload
|
||
return false;
|
||
} else {
|
controlies/trunk/applications/controlies/controllers/gestion.py | ||
---|---|---|
from applications.controlies.modules.Hosts import Hosts
|
||
from applications.controlies.modules.Rayuela2Ldap import Rayuela
|
||
import applications.controlies.modules.Utils.LdapUtils as LdapUtils
|
||
from applications.controlies.modules.SQLiteConnection import SQLiteConnection
|
||
|
||
@service.json
|
||
@auth.requires_login()
|
||
def base_datos():
|
||
import StringIO
|
||
import pdb
|
||
import os
|
||
|
||
right_version=right_firefox_version(request.env.http_user_agent)
|
||
|
||
if not "archivos" in session.keys():
|
||
session.archivos=[]
|
||
form=SQLFORM.factory(Field('principiocurso','boolean',default=False ),submit_button='Enviar')
|
||
form=SQLFORM.factory(submit_button='Enviar')
|
||
if form.accepts(request.vars, session):
|
||
import pdb
|
||
response.flash = 'Procesando datos, espere'
|
||
borrando = form.vars.principiocurso
|
||
#borrando = form.vars.principiocurso
|
||
if len(session.archivos)>0:
|
||
l=conecta()
|
||
usuarios=[]
|
||
import pdb
|
||
lista_completa=[]
|
||
SQLite=SQLiteConnection()
|
||
SQLite.define_tables()
|
||
|
||
dbcontrolies = SQLite.getDB()
|
||
#result = db.executesql(sql)
|
||
for archivo in session.archivos:
|
||
f = open(archivo)
|
||
linea = f.readline()
|
||
while linea:
|
||
if linea!= '\n' and linea != '':
|
||
linea = linea.split(",")
|
||
# Datos del portatil
|
||
|
||
serial_number = linea[1]
|
||
id_trademark = linea[2]
|
||
|
||
# comprobar que no existe el portatil con el nº de serie
|
||
row = dbcontrolies(dbcontrolies.laptops.serial_number == serial_number).select(dbcontrolies.laptops.id_laptop)
|
||
if not row:
|
||
attributes = dict ()
|
||
attributes["serial_number"] = serial_number
|
||
attributes["id_trademark"] = id_trademark
|
||
#attributes="[serial_number="+serial_number+", id_trademark="+id_trademark + "]"
|
||
dbcontrolies.laptops.insert (**attributes)
|
||
# Obtener id del registro insertado
|
||
for row in dbcontrolies(dbcontrolies.laptops.serial_number == serial_number).select(dbcontrolies.laptops.id_laptop):
|
||
last_id = row.id_laptop
|
||
|
||
try:
|
||
os.mkdir( "/tmp/rayuela-ldap")
|
||
except:
|
||
pass #problema de permisos o directorio ya creado
|
||
if last_id:
|
||
# Datos del registro historico
|
||
attributes = dict ()
|
||
attributes ["id_laptop"] = last_id
|
||
attributes ["datetime"] = linea [4]
|
||
attributes ["username"] = linea [9]
|
||
attributes ["name"] = linea [10]
|
||
attributes ["id_user_type"] = linea [6]
|
||
attributes ["nif"] = linea [5]
|
||
attributes ["comment"] = ""
|
||
attributes ["id_state"] = linea [8]
|
||
|
||
dbcontrolies.laptops_historical.insert (**attributes)
|
||
linea = f.readline()
|
||
|
||
lista_completa=[]
|
||
for archivo in session.archivos:
|
||
rayuela=Rayuela(l,archivo,borrando)
|
||
todos=rayuela.gestiona_archivo()
|
||
lista_completa +=[(archivo,)]
|
||
lista_completa +=todos
|
||
lista_completa +=[("--",)]
|
||
|
||
session.archivos=[]
|
||
response.flash = T('Ficheros importados correctamente')
|
||
session.archivos=[]
|
||
#LdapUtils.sanea_grupos(l)
|
||
l.close()
|
||
#l.close()
|
||
|
||
#generamos el archivo de salida
|
||
s=StringIO.StringIO()
|
||
#s=StringIO.StringIO()
|
||
|
||
for entrada in lista_completa:
|
||
if len(entrada)<3:
|
||
s.write(entrada[0]+ '\n' + '\n')
|
||
else:
|
||
linea=entrada[0] + " - "
|
||
if entrada[1]:
|
||
linea +=entrada[2]
|
||
linea +='\n'
|
||
else:
|
||
linea += "USUARIO ANTIGUO\n"
|
||
s.write(linea)
|
||
|
||
response.headers['Content-Type']='text/txt'
|
||
response.headers['Content-Disposition'] = 'attachment;filename=usuarios.txt'
|
||
return s.getvalue()
|
||
#return s.getvalue()
|
||
|
||
|
||
session.archivos=[]
|
||
#session.archivos=[]
|
||
|
||
|
||
|
||
return dict(form=form,right_version=right_version)
|
||
|
||
@service.json
|
controlies/trunk/applications/controlies/modules/Laptops.py | ||
---|---|---|
|
||
def list(self,args):
|
||
db = self.SQLite.getDB()
|
||
import pdb
|
||
|
||
sql = "SELECT l.id_laptop, lt.trademark, lt.model, l.serial_number, lh.username, s.state"
|
||
sql = sql+" FROM laptops l"
|
Exportar a: Unified diff
Importacion de ficheros csv con portatiles