forked from CGM_Public/pretix_original
Overview over user's orders
This commit is contained in:
26
src/pretix/base/migrations/0019_auto_20150314_1247.py
Normal file
26
src/pretix/base/migrations/0019_auto_20150314_1247.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import versions.models
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pretixbase', '0018_auto_20150314_1232'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='order',
|
||||
name='event',
|
||||
field=versions.models.VersionedForeignKey(to='pretixbase.Event', related_name='orders', verbose_name='Event'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='order',
|
||||
name='user',
|
||||
field=models.ForeignKey(to=settings.AUTH_USER_MODEL, blank=True, related_name='orders', null=True, verbose_name='User'),
|
||||
),
|
||||
]
|
||||
@@ -1264,11 +1264,13 @@ class Order(Versionable):
|
||||
)
|
||||
event = VersionedForeignKey(
|
||||
Event,
|
||||
verbose_name=_("Event")
|
||||
verbose_name=_("Event"),
|
||||
related_name="orders"
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
User, null=True, blank=True,
|
||||
verbose_name=_("User")
|
||||
verbose_name=_("User"),
|
||||
related_name="orders"
|
||||
)
|
||||
datetime = models.DateTimeField(
|
||||
verbose_name=_("Date")
|
||||
|
||||
@@ -10,3 +10,11 @@ footer {
|
||||
padding: 10px 0;
|
||||
font-size: 11px;
|
||||
}
|
||||
.page-header {
|
||||
position: relative;
|
||||
}
|
||||
.page-header .loginbox {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 20px;
|
||||
}
|
||||
@@ -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 %} ·
|
||||
<a href="{% url "presale:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}">
|
||||
{% trans "My orders" %}</a> ·
|
||||
<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 }}">
|
||||
|
||||
@@ -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" %}
|
||||
|
||||
@@ -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 %}
|
||||
@@ -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>
|
||||
|
||||
47
src/pretix/presale/templates/pretixpresale/event/orders.html
Normal file
47
src/pretix/presale/templates/pretixpresale/event/orders.html
Normal 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 %}
|
||||
@@ -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'),
|
||||
])),
|
||||
]
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user