def get(self, request, *args, **kwargs): cart = RequestContext(request).get('Cart') price = RequestContext(request).get('CartPrice') product_list = RequestContext(request).get('CartProducts') iva = Iva.objects.filter(is_active=True).get() transfer_data = ProjectSettings.objects.values('company', 'invoice_address', 'invoice_cp', 'invoice_town', 'invoice_country', 'bank_account', 'bank_iban').get() # Creates a PreOrder pre_order = PreOrder.objects.create(cart=cart, user=request.user, price=price, iva=Decimal(str(iva)), payed=False, deleted=False) # Mark the cart as checked out cart.checked_out = True cart.save() # Send a confirmation email with the transfer data subject = _("Dades d'INOXtags per tramitar comanda.") email = request.user.email html_content = render_to_string('email/bank_transfer.html', {'pre_order':pre_order, 'products':product_list, 'transfer_data':transfer_data}) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, to=[email]) msg.attach_alternative(html_content, "text/html") msg.send() return super(BankTransferView, self).get(request, *args, **kwargs)
def file_upload(request): user = RequestContext(request)['user'] file = request.FILES['file'] if 'elaboration_id' in request.POST: elaboration_id = request.POST.get('elaboration_id') try: elaboration = Elaboration.objects.get(pk=elaboration_id) if not elaboration.user == user: return file_upload_failed_response() if not elaboration.is_submitted(): upload_file = UploadFile(user=user, elaboration_id=elaboration_id, upload_file=file) else: upload_file = UploadFile(user=user, elaboration_id=elaboration_id, upload_file=file, elaboration_version='revision') except Exception as e: return file_upload_failed_response(str(e)) if file.name.endswith('.pdf'): with open(settings.STATIC_ROOT + '/img/pdf_icon.jpg', 'rb') as pdf_icon: create_thumbnail(File(pdf_icon), file.name, upload_file.thumbnail.save) else: try: create_thumbnail(file, file.name, upload_file.thumbnail.save) except Exception: with open(settings.STATIC_ROOT + '/img/info.jpg', 'rb') as pdf_icon: create_thumbnail(File(pdf_icon), file.name, upload_file.thumbnail.save) upload_file.save() elif 'user_id' in request.POST: if not request.POST.get('user_id') == str(user.id): raise Http404 filename = 'avatar_' + str(user.id) create_thumbnail(file, filename, user.avatar.save) user.save() return HttpResponse(user.avatar.name) response = {'id': upload_file.id, 'url': upload_file.upload_file.url, 'thumbnail_url': upload_file.thumbnail.url} return HttpResponse(json.dumps(response))
def course(request): user = RequestContext(request)['user'] response_data = {} if request.method == 'POST': try: course = Course.objects.get(short_title=request.POST['short_title']) if not course.user_is_enlisted(user): raise Http404 except: raise Http404 if course: user.last_selected_course = course user.save() response_data['success'] = True return HttpResponse(json.dumps(response_data), content_type="application/json")
def course(request): user = RequestContext(request)['user'] response_data = {} if request.method == 'POST': try: course = Course.objects.get( short_title=request.POST['short_title']) if not course.user_is_enlisted(user): raise Http404 except: raise Http404 if course: user.last_selected_course = course user.save() response_data['success'] = True return HttpResponse(json.dumps(response_data), content_type="application/json")
def profile_save(request, course_short_title): data = {} user = RequestContext(request)['user'] text_limit = 100 valid_nickname = True if 'nickname' in request.POST and request.POST['nickname'] == "": data['error'] = "empty nickname not allowed" valid_nickname = False nickname_limit = 30 if len(request.POST['nickname']) > nickname_limit: data[ 'error'] = "nickname too long (%s character limit)" % nickname_limit valid_nickname = False users_with_same_nickname = AuroraUser.objects.filter( nickname=request.POST['nickname']) for user_with_same_nickname in users_with_same_nickname: if user.id is not user_with_same_nickname.id: data['error'] = "nickname already taken" valid_nickname = False if valid_nickname: user.nickname = request.POST['nickname'] if is_valid_email(request.POST['email'], text_limit): user.email = request.POST['email'] else: data['error'] = "not a valid email address" if 'file' in request.FILES: user.avatar = request.FILES['file'] if len(request.POST['study_code']) < text_limit: user.study_code = request.POST['study_code'] else: data['error'] = "not a valid study code" if len(request.POST['statement']) < text_limit: user.statement = request.POST['statement'] else: data['error'] = "statement too long (%s character limit)" % text_limit user.save() data['nickname'] = user.nickname data['email'] = user.email data['study_code'] = user.study_code data['statement'] = user.statement return HttpResponse(json.dumps(data))
def profile_save(request, course_short_title): data = {} user = RequestContext(request)['user'] text_limit = 100 valid_nickname = True if 'nickname' in request.POST and request.POST['nickname'] == "": data['error'] = "empty nickname not allowed" valid_nickname = False nickname_limit = 30 if len(request.POST['nickname']) > nickname_limit: data['error'] = "nickname too long (%s character limit)" % nickname_limit valid_nickname = False users_with_same_nickname = AuroraUser.objects.filter(nickname=request.POST['nickname']) for user_with_same_nickname in users_with_same_nickname: if user.id is not user_with_same_nickname.id: data['error'] = "nickname already taken" valid_nickname = False if valid_nickname: user.nickname = request.POST['nickname'] if is_valid_email(request.POST['email'], text_limit): user.email = request.POST['email'] else: data['error'] = "not a valid email address" if 'file' in request.FILES: user.avatar = request.FILES['file'] if len(request.POST['study_code']) < text_limit: user.study_code = request.POST['study_code'] else: data['error'] = "not a valid study code" if len(request.POST['statement']) < text_limit: user.statement = request.POST['statement'] else: data['error'] = "statement too long (%s character limit)" % text_limit user.save() data['nickname'] = user.nickname data['email'] = user.email data['study_code'] = user.study_code data['statement'] = user.statement return HttpResponse(json.dumps(data))
def profile(request): uprofile = RequestContext(request).get('profile') if request.openid: sreg = request.openid.sreg # If we have the email from OpenID and not in their profile, pre-populate it if not request.user.email and sreg.has_key('email'): request.user.email = sreg['email'] if sreg.has_key('fullname'): uprofile.fullname = sreg['fullname'] if sreg.has_key('nickname'): uprofile.nickname = sreg['nickname'] # These should only be updated if they haven't already been changed if uprofile.timezone is None and sreg.has_key('timezone'): uprofile.timezone = sreg['timezone'] if uprofile.language is None and sreg.has_key('language'): uprofile.language = sreg['language'] if uprofile.country is None and sreg.has_key('country'): uprofile.country = sreg['country'] uprofile.save() if settings.LANGUAGE_COOKIE_NAME in request.session: log.debug("Updating language to %s" % request.session.get(settings.LANGUAGE_COOKIE_NAME)) uprofile.language = request.session.get(settings.LANGUAGE_COOKIE_NAME) uprofile.save() if request.method == 'POST': form = ProfileForm(request.POST, instance=uprofile) if form.is_valid(): form.save() message = _("Your profile has been updated.") else: form = ProfileForm(instance=uprofile) message = None if 'msg' in request.GET: message = request.GET['msg'] return direct_to_template(request, 'auth/profile.html', {'form':form, 'prefs':uprofile, 'message':message})
def file_upload(request): user = RequestContext(request)['user'] file = request.FILES['file'] if 'elaboration_id' in request.POST: elaboration_id = request.POST.get('elaboration_id') try: elaboration = Elaboration.objects.get(pk=elaboration_id) if not elaboration.user == user: return file_upload_failed_response() upload_file = UploadFile(user=user, elaboration_id=elaboration_id, upload_file=file) except Exception as e: return file_upload_failed_response(str(e)) if file.name.endswith('.pdf'): with open(settings.STATIC_ROOT + '/img/pdf_icon.jpg', 'rb') as pdf_icon: create_thumbnail(File(pdf_icon), file.name, upload_file.thumbnail.save) else: try: create_thumbnail(file, file.name, upload_file.thumbnail.save) except Exception: with open(settings.STATIC_ROOT + '/img/info.jpg', 'rb') as pdf_icon: create_thumbnail(File(pdf_icon), file.name, upload_file.thumbnail.save) upload_file.save() elif 'user_id' in request.POST: if not request.POST.get('user_id') == str(user.id): raise Http404 filename = 'avatar_' + str(user.id) create_thumbnail(file, filename, user.avatar.save) user.save() return HttpResponse(user.avatar.name) response = { 'id': upload_file.id, 'url': upload_file.upload_file.url, 'thumbnail_url': upload_file.thumbnail.url } return HttpResponse(json.dumps(response))
def get(self, request, *args, **kwargs): cart = RequestContext(request).get('Cart') price = RequestContext(request).get('CartPrice') product_list = RequestContext(request).get('CartProducts') iva = Iva.objects.filter(is_active=True).get() user = request.user count_total = cart.get_count_total() management = False if user.is_professional: if not user.hand_delivery: management = True # Creates the Order order = Order.objects.create( cart=cart, user=user, to=user.name, address=user.shipping_address, postal_code=user.shipping_code, town=user.shipping_town, country=user.shipping_country.country, count=count_total, price=price, iva=Decimal(str(iva)), payed=False, hand_delivery=user.hand_delivery, management = management, ) # Creates the order items for item in product_list: if user.is_professional: if user.hand_delivery: price = item.price_in_hand else: price = item.price_prof else: price = item.price_normal OrderItem.objects.create( order=order, quantity=item.quantity, product=item.product, color=item.color, front_main=item.front_main, front_tel=item.front_tel, back_1=item.back_1, back_2=item.back_2, back_3=item.back_3, price=price, made=item.made, repetition=item.repetition ) # Mark the cart as checked out cart.checked_out = True cart.save() # Send a confirmation email subject = _("Comanda gestionada correctament a la web d'INOXtags.") email = user.email html_content = render_to_string('email/conf_order.html', {'order': order, 'products': product_list}) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, to=[email]) msg.attach_alternative(html_content, "text/html") msg.send() return super(UnpayedCheckoutView, self).get(request, *args, **kwargs)
def get(self, request, *args, **kwargs): cart = RequestContext(request).get("Cart") price = RequestContext(request).get("CartPrice") product_list = RequestContext(request).get("CartProducts") query_string = ( "http_status=" + request.GET.get("http_status") + "&id=" + request.GET.get("id", "") + "&kind=" + request.GET.get("kind") + "&hash=" + request.GET.get("hash") ) raw_log = BraintreeRawLog.objects.create(user=request.user, queryset=query_string) result = braintree.TransparentRedirect.confirm(query_string) if result.is_success: self.status = None PaymentLog.objects.create( rawlog=raw_log, user=request.user, amount=price, transaction_id=result.transaction.id ) iva = Iva.objects.filter(is_active=True).get() count_total = cart.get_count_total() # Creates the order order = Order.objects.create( cart=cart, user=request.user, to=request.user.name, address=request.user.shipping_address, postal_code=request.user.shipping_code, town=request.user.shipping_town, country=request.user.shipping_country.country, count=count_total, price=price, iva=Decimal(str(iva)), payed=True, ) # Creates the order items for item in product_list: OrderItem.objects.create( order=order, quantity=item.quantity, product=item.product, color=item.color, front_main=item.front_main, front_tel=item.front_tel, back_1=item.back_1, back_2=item.back_2, back_3=item.back_3, price=item.price, price_special_1=item.price_special_1, price_special_2=item.price_special_2, price_special_3=item.price_special_3, price_special_4=item.price_special_4, price_in_hand=item.price_in_hand, made=item.made, repetition=item.repetition, ) # Send a confirmation email subject = _("Comanda gestionada correctament a la web d'INOXtags.") email = request.user.email html_content = render_to_string("email/conf_order.html", {"order": order, "products": product_list}) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, to=[email]) msg.attach_alternative(html_content, "text/html") msg.send() # Mark the cart as checked out cart.checked_out = True cart.save() else: self.status = result.message PaymentErrorLog.objects.create( rawlog=raw_log, user=request.user, amount=price, cart=cart, error=self.status ) return super(PaymentResultView, self).get(request, *args, **kwargs)
def form_valid(self, form): # Get the CartPrice context_price = RequestContext(self.request).get('CartPrice') price_cents = int(context_price * 100) # Creates the description count_items = RequestContext(self.request).get('CountCartItems') cart = RequestContext(self.request).get('Cart') description = str(count_items) + ' items(' + str(context_price) + '€) from cart #' + str(cart) # Get the products in the current cart product_list = RequestContext(self.request).get('CartProducts') # Get the credit card details submitted by the form token = form.cleaned_data['stripeToken'] # Create the charge on Stripe's servers - this will charge the user's # card try: charge = stripe.Charge.create( amount=price_cents, # amount in cents, again currency="eur", card=token, description=description ) # Once the charge is made, creates the order, the order items, # sends the confirmation email and marks the cart as checked out. iva = Iva.objects.filter(is_active=True).get() count_total = cart.get_count_total() user = self.request.user management = False if user.is_professional: if not user.hand_delivery: management = True # Creates the order order = Order.objects.create( cart=cart, user=user, to=user.name, address=user.shipping_address, postal_code=user.shipping_code, town=user.shipping_town, country=user.shipping_country.country, count=count_total, price=context_price, iva=Decimal(str(iva)), payed=True, management=management, ) # Creates the order items for item in product_list: if user.is_professional: if user.hand_delivery: price = item.price_in_hand else: price = item.price_prof else: price = item.price_normal OrderItem.objects.create( order=order, quantity=item.quantity, product=item.product, color=item.color, front_main=item.front_main, front_tel=item.front_tel, back_1=item.back_1, back_2=item.back_2, back_3=item.back_3, price=price, made=item.made, repetition=item.repetition ) # Send a confirmation email subject = _("Comanda gestionada correctament a la web d'INOXtags.") email = user.email html_content = render_to_string('email/conf_order.html', {'order': order, 'products': product_list}) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, to=[email]) msg.attach_alternative(html_content, "text/html") msg.send() # Mark the cart as checked out cart.checked_out = True cart.save() except stripe.CardError: # The card has been declined pass return super(ChargeView, self).form_valid(form)
def form_valid(self, form): cart = RequestContext(self.request).get("Cart") product_list = RequestContext(self.request).get("CartProducts") iva = Iva.objects.filter(is_active=True).get() # Creates the order from the form data order = form.save(commit=False) order.cart = cart order.to = order.user.name order.address = order.user.shipping_address order.postal_code = order.user.shipping_code order.town = order.user.shipping_town order.country = order.user.shipping_country.name order.count = cart.get_count_total() order.price = cart.get_price(order.user) order.iva = Decimal(str(iva)) order.payed = False order.hand_delivery = order.user.hand_delivery if order.user.is_professional: if not order.user.hand_delivery: order.management = True order.save() # Creates the order items from the customized products for product in product_list: if not product.repetition: if order.user.is_professional: if order.user.hand_delivery: price = product.price_in_hand else: price = product.price_prof else: price = product.price_normal else: price = 0 OrderItem.objects.create( order=order, quantity=product.quantity, product=product.product, color=product.color, front_main=product.front_main, front_tel=product.front_tel, back_1=product.back_1, back_2=product.back_2, back_3=product.back_3, price=price, made=product.made, repetition=product.repetition, ) # Mark the cart as checked out cart.checked_out = True cart.save() # Send the confirmation email mail = order.user.email try: if order.user.lang == "ca": subject = _("Nova comanda a INOXtags.com") html_content = render_to_string( "email/conf_order_ca.html", {"order": order, "product_list": product_list} ) elif order.user.lang == "es": subject = _("Nuevo pedido en INOXtags.com") html_content = render_to_string( "email/conf_order_es.html", {"order": order, "product_list": product_list} ) else: subject = _("Your new order from INOXtags.com") html_content = render_to_string( "email/conf_order_en.html", {"order": order, "product_list": product_list} ) except: subject = _("Your new order from INOXtags.com") html_content = render_to_string("email/conf_order_en.html", {"order": order, "product_list": product_list}) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, to=[mail]) msg.attach_alternative(html_content, "text/html") msg.send() return HttpResponseRedirect(self.get_success_url())