You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

processing.py 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django.db.models.loading import get_model
  2. from oscar.apps.order.exceptions import InvalidShippingEvent
  3. ShippingEventQuantity = get_model('order', 'ShippingEventQuantity')
  4. PaymentEventQuantity = get_model('order', 'PaymentEventQuantity')
  5. class EventHandler(object):
  6. def handle_order_status_change(self, order, new_status):
  7. """
  8. Handle a requested order status change
  9. """
  10. order.set_status(new_status)
  11. def handle_shipping_event(self, order, event_type, lines, line_quantities, **kwargs):
  12. """
  13. Handle a shipping event for a given order.
  14. This might involve taking payment, sending messages and
  15. creating the event models themeselves.
  16. """
  17. self.create_shipping_event(order, event_type, lines, line_quantities, **kwargs)
  18. def handle_payment_event(self, order, event_type, amount, lines=None,
  19. line_quantities=None, **kwargs):
  20. """
  21. Handle a payment event for a given order.
  22. """
  23. self.create_payment_event(order, event_type, amount, lines, line_quantities, **kwargs)
  24. def create_shipping_event(self, order, event_type, lines, line_quantities,
  25. **kwargs):
  26. reference = kwargs.get('reference', None)
  27. event = order.shipping_events.create(event_type=event_type,
  28. notes=reference)
  29. try:
  30. for line, quantity in zip(lines, line_quantities):
  31. ShippingEventQuantity.objects.create(event=event,
  32. line=line,
  33. quantity=quantity)
  34. except InvalidShippingEvent:
  35. event.delete()
  36. raise
  37. def create_payment_event(self, order, event_type, amount, lines=None,
  38. line_quantities=None, **kwargs):
  39. event = order.payment_events.create(event_type=event_type, amount=amount)
  40. if lines and line_quantities:
  41. for line, quantity in zip(lines, line_quantities):
  42. PaymentEventQuantity.objects.create(event=event,
  43. line=line,
  44. quantity=quantity)
  45. def create_communication_event(self, order, event_type):
  46. order.communication_events.create(event_type=event_type)
  47. def create_note(self, order, message, note_type='System'):
  48. order.notes.create(message=message, note_type=note_type)