Example #1
0
    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)
Example #2
0
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))
Example #3
0
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")
Example #4
0
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")
Example #5
0
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))
Example #6
0
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))
Example #7
0
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})
Example #8
0
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))
Example #9
0
    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)
Example #10
0
    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)
Example #11
0
    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)
Example #12
0
    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())