Quellcode durchsuchen

fixes issue with sending order related messages using Dispatcher

master
Sebastian Vetter vor 13 Jahren
Ursprung
Commit
c718580cec

+ 15
- 14
oscar/apps/customer/utils.py Datei anzeigen

8
 Email = get_model('customer', 'Email')
8
 Email = get_model('customer', 'Email')
9
 
9
 
10
 
10
 
11
-class Dispatcher(object): 
11
+class Dispatcher(object):
12
     def __init__(self, logger=None):
12
     def __init__(self, logger=None):
13
         if not logger:
13
         if not logger:
14
             logger = logging.getLogger(__name__)
14
             logger = logging.getLogger(__name__)
22
         """
22
         """
23
         if messages['subject'] and messages['body']:
23
         if messages['subject'] and messages['body']:
24
             self.send_email_messages(recipient, messages)
24
             self.send_email_messages(recipient, messages)
25
-    
25
+
26
     def dispatch_order_messages(self, order, messages, event_type=None, **kwargs):
26
     def dispatch_order_messages(self, order, messages, event_type=None, **kwargs):
27
         """
27
         """
28
         Dispatch order-related messages to the customer
28
         Dispatch order-related messages to the customer
36
                 return
36
                 return
37
         else:
37
         else:
38
             self.dispatch_user_messages(order.user, messages)
38
             self.dispatch_user_messages(order.user, messages)
39
-            
39
+
40
         # Create order comms event for audit
40
         # Create order comms event for audit
41
         if event_type:
41
         if event_type:
42
-            CommunicationEvent._default_manager.create(order=order, type=event_type)
43
-    
42
+            CommunicationEvent._default_manager.create(order=order,
43
+                                                       event_type=event_type)
44
+
44
     def dispatch_user_messages(self, user, messages):
45
     def dispatch_user_messages(self, user, messages):
45
         """
46
         """
46
         Send messages to a site user
47
         Send messages to a site user
49
             self.send_user_email_messages(user, messages)
50
             self.send_user_email_messages(user, messages)
50
         if messages['sms']:
51
         if messages['sms']:
51
             self.send_text_message(user, messages['sms'])
52
             self.send_text_message(user, messages['sms'])
52
-    
53
+
53
     # Internal
54
     # Internal
54
-    
55
+
55
     def send_user_email_messages(self, user, messages):
56
     def send_user_email_messages(self, user, messages):
56
         """
57
         """
57
         Sends message to the registered user / customer and collects data in database
58
         Sends message to the registered user / customer and collects data in database
59
         if not user.email:
60
         if not user.email:
60
             self.logger.warning("Unable to send email messages as user #%d has no email address", user.id)
61
             self.logger.warning("Unable to send email messages as user #%d has no email address", user.id)
61
             return
62
             return
62
-        
63
+
63
         email = self.send_email_messages(user.email, messages)
64
         email = self.send_email_messages(user.email, messages)
64
-        
65
+
65
         # Is user is signed in, record the event for audit
66
         # Is user is signed in, record the event for audit
66
         if email and user.is_authenticated():
67
         if email and user.is_authenticated():
67
-            Email._default_manager.create(user=user, 
68
+            Email._default_manager.create(user=user,
68
                                           subject=email.subject,
69
                                           subject=email.subject,
69
                                           body_text=email.body,
70
                                           body_text=email.body,
70
                                           body_html=messages['html'])
71
                                           body_html=messages['html'])
71
-    
72
+
72
     def send_email_messages(self, recipient, messages):
73
     def send_email_messages(self, recipient, messages):
73
         """
74
         """
74
         Plain email sending to the specified recipient
75
         Plain email sending to the specified recipient
77
             from_email = settings.OSCAR_FROM_EMAIL
78
             from_email = settings.OSCAR_FROM_EMAIL
78
         else:
79
         else:
79
             from_email = None
80
             from_email = None
80
-            
81
+
81
         # Determine whether we are sending a HTML version too
82
         # Determine whether we are sending a HTML version too
82
         if messages['html']:
83
         if messages['html']:
83
             email = EmailMultiAlternatives(messages['subject'],
84
             email = EmailMultiAlternatives(messages['subject'],
92
                                  to=[recipient])
93
                                  to=[recipient])
93
         self.logger.info("Sending email to %s" % recipient)
94
         self.logger.info("Sending email to %s" % recipient)
94
         email.send()
95
         email.send()
95
-        
96
+
96
         return email
97
         return email
97
-        
98
+
98
     def send_text_message(self, user, event_type):
99
     def send_text_message(self, user, event_type):
99
         raise NotImplementedError
100
         raise NotImplementedError
100
 
101
 

+ 1
- 1
oscar/templates/oscar/customer/emails/commtype_order_placed_body.html Datei anzeigen

1
 {% load currency_filters i18n %}<p xmlns="http://www.w3.org/1999/html">{% trans 'Hello,' %}</p>
1
 {% load currency_filters i18n %}<p xmlns="http://www.w3.org/1999/html">{% trans 'Hello,' %}</p>
2
 
2
 
3
-<p>{% blocktrans %}We are pleased to confirm your order {{ order.number }} has been received and
3
+<p>{% blocktrans with order_number=order.number %}We are pleased to confirm your order {{ order_number }} has been received and
4
 will be processed shortly.{% endblocktrans %}</p>
4
 will be processed shortly.{% endblocktrans %}</p>
5
 
5
 
6
 <p>{% trans 'Your order contains:' %}</p>
6
 <p>{% trans 'Your order contains:' %}</p>

+ 2
- 2
oscar/templates/oscar/customer/emails/commtype_order_placed_body.txt Datei anzeigen

1
-{% load currency_filters i18n %}{% blocktrans %}Hello,
1
+{% load currency_filters i18n %}{% blocktrans with order_number=order.number %}Hello,
2
 
2
 
3
-We are pleased to confirm your order {{ order.number }} has been received and
3
+We are pleased to confirm your order {{ order_number }} has been received and
4
 will be processed shortly.{% endblocktrans %}
4
 will be processed shortly.{% endblocktrans %}
5
 
5
 
6
 {% trans 'Your order contains:' %}
6
 {% trans 'Your order contains:' %}

+ 34
- 0
tests/unit/customer/customer_tests.py Datei anzeigen

1
 from django.test import TestCase
1
 from django.test import TestCase
2
+from django.core import mail
3
+from django.contrib.auth.models import User
2
 
4
 
5
+from oscar.apps.customer.utils import Dispatcher
6
+from oscar.test.helpers import create_order
3
 from oscar.apps.customer.models import CommunicationEventType
7
 from oscar.apps.customer.models import CommunicationEventType
4
 
8
 
5
 
9
 
17
         ctx = {'name': 'world'}
21
         ctx = {'name': 'world'}
18
         messages = et.get_messages(ctx)
22
         messages = et.get_messages(ctx)
19
         self.assertEqual('Hello world', messages['subject'])
23
         self.assertEqual('Hello world', messages['subject'])
24
+
25
+
26
+class TestDispatcher(TestCase):
27
+
28
+    def test_sending_a_order_related_messages(self):
29
+        email = 'testuser@example.com'
30
+        user = User.objects.create_user('testuser', email,
31
+                                        'somesimplepassword')
32
+
33
+        order_number = '12345'
34
+        order = create_order(number=order_number, user=user)
35
+        et = CommunicationEventType.objects.create(code="ORDER_PLACED",
36
+                                                   name="Order Placed",
37
+                                                   category="Order related")
38
+
39
+        messages = et.get_messages({
40
+            'order': order,
41
+            'lines': order.lines.all()
42
+        })
43
+
44
+        self.assertIn(order_number, messages['body'])
45
+        self.assertIn(order_number, messages['html'])
46
+
47
+        dispatcher = Dispatcher()
48
+        dispatcher.dispatch_order_messages(order, messages, et)
49
+
50
+        self.assertEquals(len(mail.outbox), 1)
51
+
52
+        message = mail.outbox[0]
53
+        self.assertIn(order_number, message.body)

Laden…
Abbrechen
Speichern