Selaa lähdekoodia

Added order notes to the order admin

master
David Winterbottom 15 vuotta sitten
vanhempi
commit
f3697a8ea4

+ 23
- 9
oscar/order/abstract_models.py Näytä tiedosto

@@ -4,8 +4,6 @@ from django.template.defaultfilters import slugify
4 4
 from django.utils.translation import ugettext_lazy as _
5 5
 
6 6
 
7
-
8
-
9 7
 class AbstractOrder(models.Model):
10 8
     """
11 9
     An order
@@ -51,22 +49,38 @@ class AbstractOrder(models.Model):
51 49
         return u"#%s (amount: %.2f)" % (self.number, self.total_incl_tax)
52 50
 
53 51
 
54
-class AbstractOrderEvent(models.Model):
52
+class AbstractOrderNote(models.Model):
53
+    """
54
+    A note against an order.
55
+    """
56
+    order = models.ForeignKey('order.Order', related_name="notes")
57
+    user = models.ForeignKey('auth.User')
58
+    message = models.TextField()
59
+    date = models.DateTimeField(auto_now_add=True)
60
+    
61
+    class Meta:
62
+        abstract = True
63
+        
64
+    def __unicode__(self):
65
+        return u"'%s' (%s)" % (self.message[0:50], self.user)
66
+
67
+
68
+class AbstractCommunicationEvent(models.Model):
55 69
     """
56
-    An event that happens to the order (rather than to one of its lines)
70
+    An order-level event involving a communication to the customer, such
71
+    as an confirmation email being sent.
57 72
     """
58 73
     order = models.ForeignKey('order.Order', related_name="events")
59
-    type = models.ForeignKey('order.OrderEventType')
60
-    notes = models.TextField(_("Event notes"), blank=True, null=True)
74
+    type = models.ForeignKey('order.CommunicationEventType')
61 75
     date = models.DateTimeField(auto_now_add=True)
62 76
     
63 77
     class Meta:
64 78
         abstract = True
65 79
     
66 80
     
67
-class AbstractOrderEventType(models.Model):
81
+class AbstractCommunicationEventType(models.Model):
68 82
     """ 
69
-    Order events are things like 'Cancellation', 'NoteAdded', 'ConfirmationEmailSent'
83
+    Communication events are things like 'OrderConfirmationEmailSent'
70 84
     """
71 85
     # Code is used in forms
72 86
     code = models.CharField(max_length=128)
@@ -80,7 +94,7 @@ class AbstractOrderEventType(models.Model):
80 94
     
81 95
     class Meta:
82 96
         abstract = True
83
-        verbose_name_plural = _("Order event types")
97
+        verbose_name_plural = _("Communication event types")
84 98
         
85 99
     def __unicode__(self):
86 100
         return self.name    

+ 12
- 3
oscar/order/admin.py Näytä tiedosto

@@ -7,7 +7,7 @@ class BatchAdmin(admin.ModelAdmin):
7 7
 class BatchLineAdmin(admin.ModelAdmin):
8 8
     list_display = ('batch', 'product', 'quantity')
9 9
 
10
-class OrderEventTypeAdmin(admin.ModelAdmin):
10
+class CommunicationEventTypeAdmin(admin.ModelAdmin):
11 11
     exclude = ('code',)
12 12
 
13 13
 class ShippingEventTypeAdmin(admin.ModelAdmin):
@@ -15,10 +15,19 @@ class ShippingEventTypeAdmin(admin.ModelAdmin):
15 15
     
16 16
 class PaymentEventTypeAdmin(admin.ModelAdmin):
17 17
     exclude = ('code',)
18
+    
19
+class OrderNoteAdmin(admin.ModelAdmin):
20
+    exclude = ('user',)
21
+    
22
+    def save_model(self, request, obj, form, change):
23
+        if not change:
24
+            obj.user = request.user
25
+        obj.save()
18 26
 
19 27
 admin.site.register(Order)
20
-admin.site.register(OrderEvent)
21
-admin.site.register(OrderEventType, OrderEventTypeAdmin)
28
+admin.site.register(OrderNote, OrderNoteAdmin)
29
+admin.site.register(CommunicationEvent)
30
+admin.site.register(CommunicationEventType, CommunicationEventTypeAdmin)
22 31
 admin.site.register(BillingAddress)
23 32
 admin.site.register(Batch, BatchAdmin)
24 33
 admin.site.register(ShippingAddress)

+ 5
- 2
oscar/order/models.py Näytä tiedosto

@@ -9,10 +9,13 @@ from oscar.address.abstract_models import AbstractShippingAddress, AbstractBilli
9 9
 class Order(AbstractOrder):
10 10
     pass
11 11
 
12
-class OrderEvent(AbstractOrderEvent):
12
+class OrderNote(AbstractOrderNote):
13 13
     pass
14 14
 
15
-class OrderEventType(AbstractOrderEventType):
15
+class CommunicationEvent(AbstractCommunicationEvent):
16
+    pass
17
+
18
+class CommunicationEventType(AbstractCommunicationEventType):
16 19
     pass
17 20
 
18 21
 class Batch(AbstractBatch):

+ 52
- 1
oscar/order_management/templates/order_management/order.html Näytä tiedosto

@@ -7,6 +7,30 @@
7 7
 
8 8
 {% block content %}
9 9
 
10
+<h3>Shipping address</h3>
11
+<table>
12
+    <tr>
13
+        <th>Address</th>
14
+        <td>
15
+            {% for field in order.shipping_address.active_address_fields %}
16
+            {{ field }}<br/>
17
+            {% endfor %}
18
+        </td>
19
+    </tr>
20
+    {% if order.shipping_address.phone_number %}
21
+    <tr>
22
+        <th>Concact number</th>
23
+        <td>{{ shipping_address.phone_number }}</td>
24
+    </tr>
25
+    {% endif %}
26
+    {% if order.shipping_address.notes %}
27
+    <tr>
28
+        <th>Shipping notes</th>
29
+        <td>{{ shipping_address.notes }}</td>
30
+    </tr>
31
+    {% endif %} 
32
+</table>
33
+
10 34
 <h3>Order contents</h3>
11 35
 
12 36
 {% for batch in order.batches.all %}
@@ -65,7 +89,8 @@
65 89
     </tr>
66 90
 </table>
67 91
 
68
-<h4>Shipping events</h4>
92
+{% if order.shipping_events.count %}
93
+<h3>Shipping events</h3>
69 94
 <table>
70 95
 <tr>
71 96
     <th>Partner</th>
@@ -82,7 +107,33 @@
82 107
 </tr>
83 108
 {% endfor %}
84 109
 </table>
110
+{% endif %}
111
+
112
+<h3>Order notes</h3>
113
+
114
+{% if order.notes.count %}
115
+<table>
116
+<tr>
117
+    <th>Note</th>
118
+    <th>User</th>
119
+    <th>Date</th>
120
+</tr>
121
+{% for note in order.notes.all %}
122
+<tr>
123
+    <td>{{ note.message }}</td>
124
+    <td>{{ note.user }}</td>
125
+    <td>{{ note.date }}</td>
126
+</tr>
127
+{% endfor %}
128
+</table>
129
+{% endif %}
85 130
 
131
+<form method="post" action="{%url oscar-order-management-order order.number %}"/>
132
+    <input type="hidden" name="action" value="add_note" />
133
+    <label for="message">Message:</label>
134
+    <textarea id="message" name="message"></textarea>
135
+    <input type="submit" value="Add note" />
136
+</form>
86 137
 
87 138
 {% endblock content %}
88 139
 

+ 10
- 1
oscar/order_management/views.py Näytä tiedosto

@@ -8,7 +8,7 @@ from django.views.generic import ListView, DetailView
8 8
 from oscar.views import ModelView
9 9
 from oscar.services import import_module
10 10
 order_models = import_module('order.models', ['Order', 'BatchLine', 'ShippingEvent', 'ShippingEventQuantity', 
11
-                                              'ShippingEventType', 'PaymentEvent', 'PaymentEventType'])
11
+                                              'ShippingEventType', 'PaymentEvent', 'PaymentEventType', 'OrderNote'])
12 12
 
13 13
 
14 14
 class OrderListView(ListView):
@@ -58,4 +58,13 @@ class OrderView(ModelView):
58 58
         for line in lines.values():
59 59
             order_models.PaymentEvent.objects.create(order=order, line=line, 
60 60
                                                      quantity=line.quantity, event_type=event_type)
61
+            
62
+    def do_add_note(self, order):
63
+        """
64
+        Save a note against the order.
65
+        """
66
+        if self.request.user.is_authenticated():
67
+            note = order_models.OrderNote(order=order, message=self.request.POST['message'],
68
+                                          user=self.request.user)
69
+            note.save()
61 70
     

Loading…
Peruuta
Tallenna