示例#1
0
 def test_user_details_form_fails_with_incorrect_email(self):
     form =  UserDetailsForm({
         'first_name': self.user.first_name,
         'last_name': self.user.last_name,
         'email': 'test_email.com',
     }, instance=self.user)
     self.assertFalse(form.is_valid())
示例#2
0
    def test_changing_user_first_name(self):
        form =  UserDetailsForm({
            'first_name': 'Elizabeth',
            'last_name': self.user.last_name,
            'email': self.user.email,
        }, instance=self.user)

        self.assertTrue(form.is_valid())
        # save details
        form.save()
        # check if new name is user's name now
        self.assertTrue('Elizabeth', self.user.first_name)
示例#3
0
def add_user_details(request, next):
    # Check if next was provided as variable
    if next == None:
        # If not get request origin
        next = request.GET.get('next', '/')
    """Add or edit user details"""
    # Get active user
    active_user = request.user
    # Check if details already exist
    try:
        # If so create form with details
        current_user_details = user_details.objects.get(user=active_user)
        accounts_form = UserDetailsForm(instance=current_user_details)
    except:
        # If not create empty form
        accounts_form = UserDetailsForm({'user': active_user.id})
        current_user_details = None
    # Check if a form was submitted
    if request.method == 'POST':
        # Get request origin from form
        next = request.POST.get('next', '/')
        # If so get the posted form
        accounts_form = UserDetailsForm(
            request.POST, instance=current_user_details)
        if accounts_form.is_valid():
            # Save data to the database
            current_user_details = accounts_form.save()
            messages.success(request, 'Your details have been saved')
            # return to origin
            return redirect(next)
    return render(request, 'userdetails.html',
                  {'accounts_form': accounts_form,
                   'next': next,
                   'title': 'Please provide your shipping details'})
示例#4
0
def profile_edit(request,  template='accounts/profile_edit.html'):
    d = {}
    if request.method == 'GET':
        form = UserDetailsForm(instance = request.user)
    else:
        form = UserDetailsForm(request.POST, request.FILES, instance = request.user)
        if form.is_valid():
            user = form.save()
            profile = user.get_profile()
            profile.save()
            user.save()
            messages.add_message(request, messages.SUCCESS,
                'Your account has been updated')
            return redirect(reverse('profile_edit'))


    d['form'] = form
    return render(request, template, d)
示例#5
0
def user_edit(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('index'))

    if request.method == "POST":
        form = UserDetailsForm(request.POST, instance=request.user,
                                label_suffix='')
        if form.is_valid():
            form.save()
            snapshot_user_details(request.user, password='******')
            return HttpResponseRedirect(reverse('account'))
    else:
        form = UserDetailsForm(instance=request.user, label_suffix='')

    menu = {'parent': 'account'}
    return render(request, 'user_edit.html', {
                  'menu': menu,
                  'form': form,
                  })
示例#6
0
def user_profile(request):
    """Display profile page"""
    next = request.GET.get('next', '/')
    # Get active user
    active_user = request.user
    user_form = UserUpdateForm(instance=active_user)
    # Check if details already exist
    try:
        # If so create form with details
        current_user_details = user_details.objects.get(user=active_user)
        details_form = UserDetailsForm(instance=current_user_details)
    except:
        # If not create empty form
        details_form = UserDetailsForm({'user': active_user.id})
        current_user_details = None

     # Check if this order exists
    try:
        user_orders = orders.objects.filter(user=active_user)

    # if not show the list and rais an error message
    except:
        user_orders = None

    ordered_items = order_items.objects.all()

    return render(request, 'profile.html',
                  {'active_user': active_user,
                   'user_details': current_user_details,
                   'user_form': user_form,
                   'details_form': details_form,
                   'orders': user_orders,
                   'ordered_items': ordered_items,
                   'title': 'Profile for ' + active_user.first_name + ' ' + active_user.last_name,
                   'next': next
                   })
示例#7
0
def allDetails(request):
    userId = request.user.id
    user = request.user
    # user primary details
    userInfo = User.objects.get(pk=userId)
    form1 = UserPrimaryForm(prefix='userInfo', instance=userInfo)
    # # user details
    try:
        details = userDetail.objects.filter(user_id=userId).first()
    except userDetail.DoesNotExist:
        details = None
    form2 = UserDetailsForm(prefix='userDetails', instance=details)

    # user evaluation
    try:
        orgDetails = AdminPanel.objects.get(user=user)
    except Evaluation.DoesNotExist:
        orgDetails = None
    form3 = OrgForm(prefix='eval', instance=orgDetails)

    context = {'form1': form1, 'form2': form2, 'form3': form3}
    return context
示例#8
0
def accountInfo(request):
    print(request.user.id)
    user = request.user
    if request.method == "POST":
        userId = request.user.id
        try:
            userInfo = User.objects.get(pk=userId)
        except:
            userInfo = None
        form1 = UserPrimaryForm(request.POST or None, prefix='userInfo', instance=userInfo)

        try:
            details = userDetail.objects.get(user_id=userId)
        except:
            details = None
        form2 = UserDetailsForm(request.POST or None, prefix='userDetails', instance=details)

        try:
            orgDetails = AdminPanel.objects.get(user=user)
        except:
            orgDetails = None

        form3 = OrgForm(request.POST or None, prefix='eval', instance=orgDetails)

        if form1.is_valid() and form2.is_valid() and form3.is_valid():
            print("Admin : All forms are cleared")
            form1.save()

            update = form2.save(commit=False)
            update.user_id = request.user.id
            form2.save()

            update = form3.save(commit=False)
            update.user_id = request.user.id
            form3.save()
            context = allDetails(request)
            return render(request, 'admin_account_info.html', context)
        context = allDetails(request)
        return render(request, 'admin_account_info.html', context)

    else:
        context = allDetails(request)
        return render(request, 'admin_account_info.html', context)
示例#9
0
def check_out(request):
    next = request.GET.get('next', '/')
    if not request.user.is_authenticated:
        messages.error(request, "Please register before checking out")
        return redirect('accounts:register_user')
    # Get logged in user
    active_user = request.user
    # Get cart contents
    cart = request.session.get('cart', {})
    total = 0
    try:
        current_user_details = user_details.objects.get(user=active_user)
    except:
        # If not show shipping details form
        messages.error(request, "Please provide your shipping details")
        return redirect('accounts:shipping_details')
    # Attach user details to form
    accounts_form = UserDetailsForm(instance=current_user_details)
    # Check if a form was submitted
    if request.method == "POST":
        # Get both forms
        accounts_form = UserDetailsForm(
            request.POST, instance=current_user_details)
        payment_form = PaymentForm(request.POST)
        # If shipping details were changed update and return
        if accounts_form.is_valid():
            current_user_details = accounts_form.save()
            messages.success(request, 'Updated shipping details')
            return redirect('checkout:check_out')
        # if payment form is valid create order
        if payment_form.is_valid():
            order = orders(user=active_user,
                           date=timezone.now(),
                           shipping=current_user_details.shipping.price,
                           address1=current_user_details.address1,
                           address2=current_user_details.address2,
                           postcode=current_user_details.postcode,
                           city=current_user_details.city,
                           country=current_user_details.country,
                           telephone=current_user_details.telephone,
                           )
            order.save()
            # Add shipping cost to total
            total = current_user_details.shipping.price
            # Create order items for order
            for id, quantity in cart.items():
                work = get_object_or_404(work_items, pk=id)
                # Check if there is a discount
                if work.shop_settings.on_sale == True:
                    price = work.shop_settings.discount_price
                else:
                    price = work.shop_settings.price
                total += quantity * price
                order_item = order_items(
                    order=order,
                    work_item=work,
                    quantity=quantity,
                    price=price
                )
                order_item.save()
            # Make payment
            try:
                customer = stripe.Charge.create(
                    amount=int(total * 100),
                    currency="EUR",
                    description=request.user.email,
                    card=payment_form.cleaned_data['stripe_id'],
                )
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

            if customer.paid:
                messages.error(request, "You have successfully paid")
                order.paid = True
                order.total = total
                order.save()
                # Adjust the stock for sold items
                for id, quantity in cart.items():
                    work = get_object_or_404(work_items, pk=id)
                    work.shop_settings.stock -= quantity
                    work.shop_settings.save()
                request.session['cart'] = {}
                try:
                    send_mail(
                        'Thank you for your order',
                        'I will prepare the package with the greatest care and sent you an e-mail with the tracking code when I shipped it. If there is anything you would want to change or inform me about, please do not hesitate to send me an email.',
                        '*****@*****.**',
                        [active_user.email],
                        fail_silently=False,
                    )
                    send_mail(
                        'New order in the shop',
                        'A new order is waiting to be shipped.',
                        '*****@*****.**',
                        ['*****@*****.**'],
                        fail_silently=False,
                    )
                except:
                    pass
                return redirect(reverse('shop:all_shop_works'))
            else:
                order.paid = False
                order.save()
                messages.error(request, "Unable to take payment")
        else:
            print(payment_form.errors)
            messages.error(
                request, "We were unable to take a payment with that card!")
    else:
        for id, quantity in cart.items():
            # Get work object
            work = get_object_or_404(work_items, pk=id)
            # Check if there is a discount
            if work.shop_settings.on_sale == True:
                price = work.shop_settings.discount_price
            else:
                price = work.shop_settings.price
            total += quantity * price
        payment_form = PaymentForm()
    return render(request, "checkout.html",
                  {'total': total,
                   'user': active_user,
                   'user_details': current_user_details,
                   'accounts_form': accounts_form,
                   'payment_form': payment_form,
                   'publishable': settings.STRIPE_PUBLISHABLE,
                   'next': next})
示例#10
0
 def test_user_details_form_fails_without_last_name(self):
     form =  UserDetailsForm({
         'first_name': self.user.first_name,
         'email': self.user.email,
     }, instance=self.user)
     self.assertFalse(form.is_valid())