=======
Signals
=======

Oscar implements a number of custom signals that provide useful hook-points for
adding functionality.

product_viewed
--------------

.. data:: oscar.apps.catalogue.signals.product_viewed
    :class:

Raised when a product detail page is viewed.  

Arguments sent with this signal:

``product``
    The product being viewed

``user``
    The user in question

``request``
    The request instance

``response``
    The response instance

product_search
--------------

.. data:: oscar.apps.catalogue.signals.product_search
    :class:

Raised when a search is performed.

Arguments sent with this signal:

``query``
    The search term

``user``
    The user in question

basket_addition
---------------

.. data:: oscar.apps.basket.signals.basket_addition
    :class:

Raised when a product is added to a basket

Arguments sent with this signal:

``product``
    The product being added

``user``
    The user in question

voucher_addition
----------------

.. data:: oscar.apps.basket.signals.voucher_addition
    :class:

Raised when a valid voucher is added to a basket

Arguments sent with this signal:

``basket``
    The basket in question

``voucher``
    The voucher in question

pre_payment
-----------

.. data:: oscar.apps.checkout.signals.pre_payment
    :class:

Raised immediately before attempting to take payment in the checkout.

Arguments sent with this signal:

``view``
    The view class instance

post_payment
------------

.. data:: oscar.apps.checkout.signals.post_payment
    :class:

Raised immediately after payment has been taken.

Arguments sent with this signal:

``view``
    The view class instance

order_placed
------------

.. data:: oscar.apps.order.signals.order_placed
    :class:

Raised by the :class:`oscar.apps.order.utils.OrderCreator` class when creating an order.

Arguments sent with this signal:

``order``
    The order created

``user``
    The user creating the order (not necessarily the user linked to the order
    instance!)
