Overview over user's orders

This commit is contained in:
Raphael Michel
2015-03-14 13:55:26 +01:00
parent 197fbbd180
commit 8875a6328f
10 changed files with 155 additions and 21 deletions

View File

@@ -10,3 +10,11 @@ footer {
padding: 10px 0;
font-size: 11px;
}
.page-header {
position: relative;
}
.page-header .loginbox {
position: absolute;
right: 0;
bottom: 20px;
}

View File

@@ -17,7 +17,23 @@
</head>
<body>
<div class="container event">
<h1>{{ event.name }} <small>{{ event.date_from|date }}{% if event.show_date_to %} {{ event.date_to|date }}{% endif %}</small></h1>
<div class="page-header">
<div class="pull-right loginbox">
{% if request.user.is_authenticated %}
{% blocktrans trimmed with name=request.user.identifier %}
Hello, {{ name }}!
{% endblocktrans %} &middot;
<a href="{% url "presale:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}">
{% trans "My orders" %}</a> &middot;
<a href="{% url "presale:event.logout" event=request.event.slug organizer=request.event.organizer.slug %}">
{% trans "Logout" %}</a>
{% else %}
<a href="{% url "presale:event.checkout.login" event=request.event.slug organizer=request.event.organizer.slug %}">
{% trans "Login" %}</a>
{% endif %}
</div>
<h1>{{ event.name }} <small>{{ event.date_from|date }}{% if event.show_date_to %} {{ event.date_to|date }}{% endif %}</small></h1>
</div>
{% if messages %}
{% for message in messages %}
<div class="alert {{ message.tags }}">

View File

@@ -10,7 +10,10 @@
<div class="panel panel-primary cart">
<div class="panel-heading">
<div class="pull-right">
<a href="{% url "presale:event.index" organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Modify" %}</a>
<a href="{% url "presale:event.index" organizer=request.event.organizer.slug event=request.event.slug %}">
<span class="fa fa-edit"></span>
{% trans "Modify" %}
</a>
</div>
<h3 class="panel-title">
{% trans "Your cart" %}
@@ -37,7 +40,10 @@
<div class="panel panel-primary">
<div class="panel-heading">
<div class="pull-right">
<a href="{% url "presale:event.checkout.payment" organizer=request.event.organizer.slug event=request.event.slug %}">{% trans "Modify" %}</a>
<a href="{% url "presale:event.checkout.payment" organizer=request.event.organizer.slug event=request.event.slug %}">
<span class="fa fa-edit"></span>
{% trans "Modify" %}
</a>
</div>
<h3 class="panel-title">
{% trans "Payment" %}

View File

@@ -0,0 +1,13 @@
{% load i18n %}
{% load bootstrap3 %}
{% if order.status == "n" %}
<span class="label label-warning {{ class }}">{% trans "Payment pending" %}</span>
{% elif order.status == "p" %}
<span class="label label-success {{ class }}">{% trans "Paid" %}</span>
{% elif order.status == "e" %}
<span class="label label-danger {{ class }}">{% trans "Payment pending" %}</span>
{% elif order.status == "c" %}
<span class="label label-danger {{ class }}">{% trans "Cancelled" %}</span>
{% elif order.status == "r" %}
<span class="label label-danger {{ class }}">{% trans "Refunded" %}</span>
{% endif %}

View File

@@ -7,17 +7,7 @@
{% blocktrans trimmed with code=order.code %}
Your order: {{ code }}
{% endblocktrans %}
{% if order.status == "n" %}
<span class="label label-warning pull-right">{% trans "Payment pending" %}</span>
{% elif order.status == "p" %}
<span class="label label-success pull-right">{% trans "Paid" %}</span>
{% elif order.status == "e" %}
<span class="label label-danger pull-right">{% trans "Payment pending" %}</span>
{% elif order.status == "c" %}
<span class="label label-danger pull-right">{% trans "Cancelled" %}</span>
{% elif order.status == "r" %}
<span class="label label-danger pull-right">{% trans "Refunded" %}</span>
{% endif %}
{% include "pretixpresale/event/fragment_order_status.html" with order=order class="pull-right" %}
</h2>
{% if order.status == "n" %}
<div class="panel panel-danger">
@@ -39,6 +29,7 @@
{% if order.can_modify_answers %}
<div class="pull-right">
<a href="{% url "presale:event.order.modify" organizer=request.event.organizer.slug event=request.event.slug order=order.code %}">
<span class="fa fa-edit"></span>
{% trans "Change answers" %}
</a>
</div>
@@ -56,7 +47,10 @@
<div class="col-md-12 text-right">
<p>
<a href="{% url 'presale:event.order.cancel' event=request.event.slug organizer=request.event.organizer.slug order=order.code %}"
class="btn btn-danger">{% trans "Cancel order" %}</a>
class="btn btn-danger">
<span class="fa fa-remove"></span>
{% trans "Cancel order" %}
</a>
</p>
</div>
</div>

View File

@@ -0,0 +1,47 @@
{% extends "pretixpresale/event/base.html" %}
{% load i18n %}
{% block title %}{% trans "Your orders" %}{% endblock %}
{% block content %}
<h2>{% trans "Welcome back!" %}</h2>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Your orders" %}</h3>
</div>
<div class="panel-body">
<table class="table">
<thead>
<th>{% trans "Order code" %}</th>
<th>{% trans "Date" %}</th>
<th>{% trans "Total" %}</th>
<th>{% trans "Status" %}</th>
<th></th>
</thead>
<tbody>
{% for order in orders %}
<tr>
<td>{{ order.code }}</td>
<td>{{ order.datetime|date }}</td>
<td>{{ event.currency }} {{ order.total|floatformat:2 }}</td>
<td>{% include "pretixpresale/event/fragment_order_status.html" with order=order %}</td>
<td><a href="{% url "presale:event.order" event=request.event.slug organizer=request.event.organizer.slug order=order.code %}">
{% trans "View details" %}
</a></td>
</tr>
{% empty %}
<tr>
<td colspan="5">
<em>{% trans "You did not yet place any orders." %}</em>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="{% url "presale:event.index" event=request.event.slug organizer=request.event.organizer.slug %}"
class="btn btn-primary btn-lg">
<span class="fa fa-plus"></span>
{% trans "Place new order" %}
</a>
</div>
</div>
{% endblock %}

View File

@@ -23,5 +23,7 @@ urlpatterns = [
url(r'^order/(?P<order>[^/]+)/modify$', pretix.presale.views.order.OrderModify.as_view(),
name='event.order.modify'),
url(r'^login$', pretix.presale.views.event.EventLogin.as_view(), name='event.checkout.login'),
url(r'^logout$', pretix.presale.views.event.EventLogout.as_view(), name='event.logout'),
url(r'^orders$', pretix.presale.views.event.EventOrders.as_view(), name='event.orders'),
])),
]

View File

@@ -1,5 +1,5 @@
import json
from django.contrib.auth import authenticate
from django.contrib.auth import authenticate, logout
from django.core.urlresolvers import reverse
from django.core.validators import RegexValidator
from django.db.models import Count
@@ -8,12 +8,12 @@ from django.shortcuts import redirect
from django.utils.functional import cached_property
from django.contrib.auth.forms import AuthenticationForm as BaseAuthenticationForm
from django.contrib.auth import login
from django.views.generic import TemplateView
from django.views.generic import TemplateView, View
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from pretix.base.models import User
from pretix.presale.views import EventViewMixin, CartDisplayMixin
from pretix.presale.views import EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin
from pretix.presale.views.cart import CartAdd
@@ -222,7 +222,7 @@ class EventLogin(EventViewMixin, TemplateView):
return redirect(self.request.GET.get('next'))
else:
return redirect(reverse(
'presale:event.index', kwargs={
'presale:event.orders', kwargs={
'organizer': self.request.event.organizer.slug,
'event': self.request.event.slug,
}
@@ -290,3 +290,23 @@ class EventLogin(EventViewMixin, TemplateView):
context['global_registration_form'] = self.global_registration_form
context['local_registration_form'] = self.local_registration_form
return context
class EventLogout(EventViewMixin, View):
def get(self, request, *args, **kwargs):
logout(request)
return redirect(reverse(
'presale:event.index', kwargs={
'organizer': self.request.event.organizer.slug,
'event': self.request.event.slug,
}
))
class EventOrders(EventLoginRequiredMixin, EventViewMixin, TemplateView):
template_name = 'pretixpresale/event/orders.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['orders'] = self.request.user.orders.all()
return context