This page covers the design ideas for Order Fulfillment in Django-Oscar.
General Idea:
- Fulfill enrollments synchronously through the Enrollment API.
- Persist fulfillment status in django-oscar based on success or failure of request to Enrollment API.
- Allow manual resubmission of failed fulfillment from django-oscar, if the Enrollment API fails to enroll students.
Related Sections of Code in django-oscar
- order.processing.EventHandler is responsible for fulfillment via the "handle_shipping_event()" function.
- For all our digital product types, "handle_shipping_event()" will need to be extended to handle fulfillment.
- Each ProductType will require unique fulfillment actions, such as Enrollments requiring the Enrollment API.
- Each ProductType must have a unique fulfillment strategy defined in a new fulfillment.py module.
- We can use Order Status via order.abstract_models.AbstractOrder to have statuses for failed fulfillment.