Ejemplo n.º 1
0
def process(request):

    #lista de xml que se desean aparear
    docs = request.FILES.getlist('multiple_files')

    #validacion de carga de documentos 
    if len(docs) == 0:
        mensaje_error = 'No se cargaron archivos'
        return render_to_response('error.html', {'mensaje':mensaje_error},
            context_instance=RequestContext(request))
    #validacion de los documentos recibidos
    #se deben copiar los archivos por el paso por referencia de python
    docs_to_validate = deepcopy(docs, memo=None, _nil=[])

    if request.POST.get("type", "") == "1":
        doc_schema = etree.parse('website/schema/Cobranzas.xsd')
        tipo = "cobranzas"
    else: 
        doc_schema = etree.parse('website/schema/Operaciones.xsd')
        tipo = "operaciones"

    xml_schema = etree.XMLSchema(doc_schema)

    for elem in docs_to_validate:
        xml_doc = etree.parse(elem)

        if not xml_schema.validate(xml_doc):
            mensaje_error = 'El archivo "' + elem.name + '" no es un archivo de ' + tipo + ' valido'
            return render_to_response('error.html', {'mensaje':mensaje_error},
                context_instance=RequestContext(request))

    #lista donde se almcacenaran los registros
    registros = []
    
    for elem in docs:
        #se abre el xml
        xmldoc = minidom.parse(elem)
        #se obtienen los registros y se almacenan en la lista
        registros = registros + xmldoc.getElementsByTagName("Registro")
        productor = xmldoc.getElementsByTagName("Productor")[0]

    #se verifica que el usuario tenga registros suficientes.
    disponibles = creditos_disponibles(request.user) 
    if disponibles <0 or disponibles + 300 < len(registros):
        #se devuelve el mensaje de error
        faltante = len(registros) - disponibles

        return render_to_response('errorWContact.html', {'faltante':faltante},
        context_instance=RequestContext(request))

    #se ordena la lista
    registros.sort(compare)

    #se modifica numeros de orden en caso de el archivos sea de operaciones
    if tipo == 'operaciones':
        inicio = int(request.POST.get('numeroOrden', request.user.numero_orden))
        for elem in registros:
            inicio = inicio + 1
            nro_orden=elem.getElementsByTagName("NroOrden")
            nro_orden[0].firstChild.replaceWholeText(str(inicio))

        usuario = request.user
        usuario.numero_orden = inicio
        usuario.save()

    #PROCESO DE ESCRITURA DEL ARCHIVO
    doc = Document()
    #etiqueta ssn
    ssn = doc.createElement('SSN')
    doc.appendChild(ssn)
    #etiqueta cabecera
    cabecera = doc.createElement('Cabecera')
    ssn.appendChild(cabecera)
    #etiqueta version
    version = doc.createElement('Version')
    cabecera.appendChild(version)
    numeroversion = doc.createTextNode('1')
    version.appendChild(numeroversion)
    #etiqueta productor
    cabecera.appendChild(productor)
    #etiqueta cantidad de registros
    cantidad = doc.createElement("CantidadRegistros")
    cabecera.appendChild(cantidad)
    cantidad_registros = doc.createTextNode(str(len(registros)))
    cantidad.appendChild(cantidad_registros)
    #etiqueta detalle
    detalle = doc.createElement('Detalle')
    ssn.appendChild(detalle)
    for elem in registros:
        detalle.appendChild(elem)

    #esribiendo el archivo en el disco
    urlxml = 'website/tmp/' + request.user.username + '.xml'
    doc = doc.toprettyxml(indent=" ", newl="\n", encoding="utf-8")
    archivo_salida = open(urlxml,"w")
    archivo_salida.write(doc)
    archivo_salida.close()

    #creando el zip
    urlzip = 'website/tmp/' + request.user.username + '.zip'
    zf = zipfile.ZipFile(urlzip, 'w')
    compresion = zipfile.ZIP_DEFLATED
    try:
        zf.write(urlxml, basename(urlxml))
    finally:
        zf.close()

    #creando objeto para enviar al usuario

    f = open(urlzip, 'r')
    myfile = File(f)
    
    #almacenando el archivo en la bd
    archivo = Archivo(archivo=myfile, usuario=request.user)
    archivo.save()

    #restando creditos al usuario
    trasacciones = request.user.transaccion_set.all()
    if len(trasacciones) == 1 and creditos_disponibles(request.user) == settings.CANTIDAD_INICIAL:
        #si son los registros de prueba
        nueva_transaccion = Transaccion(tipo='B', cantidad=settings.CANTIDAD_INICIAL, usuario=request.user)
        nueva_transaccion.save()
    else:
        #si son otros
        nueva_transaccion = Transaccion(tipo='B', cantidad=len(registros), usuario=request.user)
        nueva_transaccion.save()
    
    #creando el objeto response
    response = HttpResponse(myfile, mimetype='application/force-download')
    response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(tipo + '.zip')

    #borrando archivos temporales
    os.remove(urlxml)
    os.remove(urlzip)

    return response
Ejemplo n.º 2
0
def register(request):

    if request.method=='POST':
       
        name = request.POST['name']
        last_name = request.POST['surname']
        dni = request.POST['dni']
        username = request.POST['username']
        direccion = request.POST['adress']
        ciudad = request.POST['city']
        cp = request.POST['cp']
        email = request.POST['email']
        telefono = request.POST['phone']
        password = request.POST['password']
        confirm_password = request.POST['confirmPassword']
        factura_a_nombre = request.POST["nameFact"]
        cuit =  request.POST["cuit"]
        direccion_factura = request.POST["adressFact"]
        tipo_factura = request.POST["fact"]
        direccion_envio_fisico = request.POST["adressCFact"]
        direccion_envio_email = request.POST["emailFact"]

        #verficiando pass
        if password != confirm_password: 
            mensaje_error = 'Las claves no coinciden'
            return render_to_response('error.html', {'mensaje':mensaje_error},
                context_instance=RequestContext(request))

        #validar email
        try:
            validate_email(email)
            validate_email(direccion_envio_email)
        except forms.ValidationError:
            mensaje_error = 'email no valido'
            return render_to_response('error.html', {'mensaje':mensaje_error},
                context_instance=RequestContext(request))
        #creando el usuario
        try:
            user = User.objects.create_user(username=username,
                password=password,
                email=email,
                first_name=name,
                last_name=last_name,
                dni=dni,
                direccion=direccion,
                ciudad=ciudad,
                cp=cp,
                telefono=telefono,
                factura_a_nombre=factura_a_nombre,
                cuit=cuit,
                direccion_factura=direccion_factura,
                tipo_factura=tipo_factura,
                direccion_envio_fisico=direccion_envio_fisico,
                direccion_envio_email=direccion_envio_email,
                numero_orden=0,
                )
            user.is_active = False
            user.save()
        except IntegrityError:
            mensaje_error = 'El usuario ' + username + ' ya existe.'
            return render_to_response('error.html', {'mensaje':mensaje_error},
                context_instance=RequestContext(request))
        
        #autenticamos al usuario recien creado --> cambio en el proceso de negocio
        #user = authenticate(username=username, password=password)
        #login(request, user)

        #le asignamos los creditos iniciales
        transaccion = Transaccion(tipo='A', cantidad=settings.CANTIDAD_INICIAL, usuario=user)
        transaccion.save()

        #enviamos mail con los datos 
        usuario = user
        url = 'rubricaonline.com.ar/admin/auth/user/'+ str(user.id)

        body = 'Datos de contacto: ' + '\n'
        body = body + 'Matricula: ' + usuario.username + '\n'
        body = body + 'Nombre: ' + usuario.first_name + '\n'
        body = body + 'DNI: ' + usuario.dni + '\n'
        body = body + 'Apellido: ' + usuario.last_name + '\n'
        body = body + 'Telefono: ' + usuario.telefono + '\n'
        body = body + 'Codigo postal: ' + usuario.cp + '\n'
        body = body + 'Localidad: ' + usuario.ciudad + '\n'
        body = body + 'e-mail: ' + usuario.email + '\n \n'
        body = body + 'Datos de facturacion: ' + '\n'
        body = body + 'Factura a nombre: ' + usuario.factura_a_nombre + '\n'
        body = body + 'CUIT: ' + usuario.cuit + '\n'
        body = body + 'Direccion: ' + usuario.direccion + '\n'
        body = body + 'Factura tipo: ' + usuario.tipo_factura + '\n'
        body = body + 'Direccion envio factura: ' + usuario.direccion_envio_fisico + '\n'
        body = body + 'Direccion envio email: ' + usuario.direccion_envio_email + '\n \n'
        body =  body + 'Siga este enlace para activar al usuario: ' + url + '\n'
        email_enviar = EmailMessage(subject='Nuevo e-mail de Registro', body= body, to=['*****@*****.**','*****@*****.**','*****@*****.**'])
        email_enviar.send()
        message = 'Su solicitud fue procesada correctamente. Verificaremos sus datos y nos comunicaremos con usted cuando su cuenta este activa.'

    else:
        return render_to_response('signup.html',
            context_instance=RequestContext(request))

    return render_to_response('index.html', {'user':usuario, 'message': message},
        context_instance=RequestContext(request))