Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 372

Importacion de ficheros csv con portatiles

Ver diferencias:

controlies/trunk/applications/controlies/views/gestion/base_datos.html
<ol>
<li>Generar el archivo de intercambio correspondiente con la herramienta de exportaci&Oacute;n. Hay que generar un archivo de intercambio para los port&aacute;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&oacute;n. La herramienta genera dos ficheros: <strong>profesores.csv</strong> (con los port&aacute;tiles de profesores) y <strong>alumnos.csv</strong> (con los port&aacute;tiles de los alumnos).</li>
<li>Subir, usando el botón <strong>Explorar fichero de importaci&oacute;n</strong>, el
archivo correspondiente (por separado). Si el port&aacute;til existe en la BD, no se har&aacute; 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