Browse Source

Reworked the order history search view and templates

master
David Winterbottom 14 years ago
parent
commit
dc22b2d4e0

+ 16
- 8
oscar/apps/customer/app.py View File

@@ -31,15 +31,23 @@ class CustomerApplication(Application):
31 31
             url(r'^$', login_required(self.summary_view.as_view()), name='summary'),
32 32
             url(r'^login/$', self.login_view.as_view(), name='login'),
33 33
             url(r'^orders/$', login_required(self.order_history_view.as_view()), name='order-list'),
34
-            url(r'^order-status/(?P<order_number>[\w-]*)/(?P<hash>\w+)/$', self.anon_order_detail_view.as_view(), name='anon-order'),
35
-            url(r'^orders/(?P<order_number>[\w-]*)/$', login_required(self.order_detail_view.as_view()), name='order'),
36
-            url(r'^orders/(?P<order_number>[\w-]*)/(?P<line_id>\d+)$', login_required(self.order_line_view.as_view()), name='order-line'),
37
-            url(r'^addresses/$', login_required(self.address_list_view.as_view()), name='address-list'),
38
-            url(r'^addresses/add/$', login_required(self.address_create_view.as_view()), name='address-create'),
39
-            url(r'^addresses/(?P<pk>\d+)/$', login_required(self.address_update_view.as_view()), name='address-detail'),
40
-            url(r'^addresses/(?P<pk>\d+)/delete/$', login_required(self.address_delete_view.as_view()), name='address-delete'),
34
+            url(r'^order-status/(?P<order_number>[\w-]*)/(?P<hash>\w+)/$', 
35
+                self.anon_order_detail_view.as_view(), name='anon-order'),
36
+            url(r'^orders/(?P<order_number>[\w-]*)/$', login_required(self.order_detail_view.as_view()),
37
+                name='order'),
38
+            url(r'^orders/(?P<order_number>[\w-]*)/(?P<line_id>\d+)$', 
39
+                login_required(self.order_line_view.as_view()), name='order-line'),
40
+            url(r'^addresses/$', login_required(self.address_list_view.as_view()),
41
+                name='address-list'),
42
+            url(r'^addresses/add/$', login_required(self.address_create_view.as_view()),
43
+                name='address-create'),
44
+            url(r'^addresses/(?P<pk>\d+)/$', login_required(self.address_update_view.as_view()),
45
+                name='address-detail'),
46
+            url(r'^addresses/(?P<pk>\d+)/delete/$', login_required(self.address_delete_view.as_view()),
47
+                name='address-delete'),
41 48
             url(r'^emails/$', login_required(self.email_list_view.as_view()), name='email-list'),
42
-            url(r'^emails/(?P<email_id>\d+)/$', login_required(self.email_detail_view.as_view()), name='email-detail'),
49
+            url(r'^emails/(?P<email_id>\d+)/$', login_required(self.email_detail_view.as_view()),
50
+                name='email-detail'),
43 51
             )
44 52
         return self.post_process_urls(urlpatterns)
45 53
 

+ 13
- 2
oscar/apps/customer/forms.py View File

@@ -6,6 +6,7 @@ from django.utils.translation import ugettext_lazy as _
6 6
 from django import forms
7 7
 from django.contrib.auth.models import User
8 8
 
9
+
9 10
 def generate_username():
10 11
     uname = ''.join([random.choice(string.letters + string.digits + '_') for i in range(30)])
11 12
 
@@ -65,12 +66,22 @@ class SearchByDateRangeForm(forms.Form):
65 66
     date_to = forms.DateField(required=False, label="To")
66 67
 
67 68
     def clean(self):
68
-
69 69
         if self.is_valid() and not self.cleaned_data['date_from'] and not self.cleaned_data['date_to']:
70 70
             raise forms.ValidationError(_("At least one date field is required."))
71
-
72 71
         return super(SearchByDateRangeForm, self).clean()
73 72
 
73
+    def description(self):
74
+        if not self.is_bound:
75
+            return 'All orders'
76
+        date_from = self.cleaned_data['date_from']
77
+        date_to = self.cleaned_data['date_to']
78
+        if date_from and date_to:
79
+            return 'Orders placed between %s and %s' % (date_from, date_to)
80
+        elif date_from and not date_to:
81
+            return 'Orders placed since %s' % date_from
82
+        elif not date_from and date_to:
83
+            return 'Orders placed until %s' % date_to
84
+
74 85
     def get_filters(self):
75 86
         date_from = self.cleaned_data['date_from']
76 87
         date_to = self.cleaned_data['date_to']

+ 15
- 9
oscar/apps/customer/views.py View File

@@ -145,7 +145,9 @@ class EmailDetailView(DetailView):
145 145
 
146 146
 
147 147
 class OrderHistoryView(ListView):
148
-    """Customer order history"""
148
+    """
149
+    Customer order history
150
+    """
149 151
     context_object_name = "orders"
150 152
     template_name = 'customer/order-history.html'
151 153
     paginate_by = 20
@@ -153,20 +155,24 @@ class OrderHistoryView(ListView):
153 155
     form_class = SearchByDateRangeForm
154 156
 
155 157
     def get(self, request, *args, **kwargs):
156
-        self.filter_form = SearchByDateRangeForm(self.request.GET)
158
+        if 'date_from' in request.GET:
159
+            self.form = SearchByDateRangeForm(self.request.GET)
160
+            if not self.form.is_valid():
161
+                ctx = self.get_context_data()
162
+                return self.render_to_response(ctx)
163
+        else:
164
+            self.form = SearchByDateRangeForm()
157 165
         return super(OrderHistoryView, self).get(request, *args, **kwargs)
158 166
 
159 167
     def get_queryset(self):
160
-        """Return a customer's orders"""
161
-        return self.model._default_manager.filter(user=self.request.user)
168
+        qs = self.model._default_manager.filter(user=self.request.user)
169
+        if self.form.is_bound:
170
+            qs = qs.filter(**self.form.get_filters())
171
+        return qs
162 172
 
163 173
     def get_context_data(self, *args, **kwargs):
164 174
         ctx = super(OrderHistoryView, self).get_context_data(*args, **kwargs)
165
-        ctx['search_date_form'] = self.filter_form
166
-        if self.filter_form.is_valid():
167
-            # Return filtered data from date_from to date_to
168
-            ctx['orders'] = self.model._default_manager.filter(user=self.request.user, **self.filter_form.get_filters())
169
-            return ctx
175
+        ctx['form'] = self.form
170 176
         return ctx
171 177
 
172 178
 

+ 10
- 14
oscar/templates/customer/order-history.html View File

@@ -14,21 +14,15 @@ Order history | {{ block.super }}
14 14
 
15 15
 {% block content %}
16 16
 
17
-<div class="sub-header">
18
-    <h3>Order history</h3>
19
-</div>
20
-
21
-<h2>Search in orders</h2>
17
+<h3>Search in orders</h3>
22 18
 <form action="." method="get">
23
-    <table>
24
-        {{ search_date_form.as_table }}
25
-        <tr>
26
-            <td>
27
-                <button type="submit" class="btn btn-primary">Filter results</button>
28
-            </td>
29
-    </table>
19
+	{% include "partials/form_fields.html" with form=form %}
20
+	<button type="submit" class="btn btn-primary">Filter results</button>
21
+	<a href="{% url customer:order-list %}" class="btn">Reset</a>
30 22
 </form>
31 23
 
24
+<h3>{{ form.description }}</h3>
25
+{% if orders %}
32 26
 <table class="table table-striped table-bordered">
33 27
     <tr>
34 28
         <th>Order number</th>
@@ -42,12 +36,14 @@ Order history | {{ block.super }}
42 36
         <td>{{ order.total_incl_tax|currency }}</td>
43 37
         <td>{{ order.date_placed }}</td>
44 38
         <td>
45
-            <a href="{% url customer:order order.number %}">View order details</a>
39
+            <a class="btn btn-info" href="{% url customer:order order.number %}">View</a>
46 40
         </td>
47 41
     </tr>
48 42
     {% endfor %}
49
-
50 43
 </table>
44
+{% else %}
45
+<p>No orders found</p>
46
+{% endif %}
51 47
 
52 48
 {% if page_obj %}
53 49
 {% include "catalogue/partials/pagination.html" %}

Loading…
Cancel
Save