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
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))