===========================================
How to add an own shipping price calculator
===========================================
In this how to you will learn how to add your own shipping price calculator.
Create an application
=====================
First you need to create a default Django application (or use an existing one),
where you can put in your plugin. If you do not know how to do this, please
refer to the excellent `Django tutorial
`_.
Implement the ``ShippingMethodPriceCalculator`` class
======================================================
The main part of the plugin consists of a class which must provide a certain
API.
Create the class
----------------
Create a class which inherits from ``lfs.plugins.ShippingMethodPriceCalculator``:
.. code-block:: python
from lfs.plugins import ShippingMethodPriceCalculator
class MyShippingMethodPriceCalculator(ShippingMethodPriceCalculator):
pass
Add the ``get_price_net`` and ``get_price_gross`` methods
----------------------------------------------------------
This methods are called from LFS to display the shipping price or to calculate
the total price of the cart or order.
.. code-block:: python
def get_price_net(self):
# This doesn't make much sense, but the net price is always 11.0
return 11.0
def get_price_gross(self):
return 11.0 * ((100 + self.shipping_method.tax.rate) / 100)
The complete plugin
===================
Following all pieces are sticked together to the complete plugin:
.. code-block:: python
from lfs.plugins import ShippingMethodPriceCalculator
class MyShippingMethodPriceCalculator(ShippingMethodPriceCalculator):
def get_price_net(self):
# This doesn't make much sense, but the net price is always 11.0
return 11.0
def get_price_gross(self):
return 11.0 * ((100 + self.shipping_method.tax.rate) / 100)
Plug in your payment method
===========================
Now as the code is ready, you can easily plugin your shipping method price
calculator:
#. Add your application to the PYTHONPATH.
#. Add the class to the :ref:`LFS_SHIPPING_METHOD_PRICE_CALCULATORS
` setting.
#. If your are using models (which is completely up to you), add the application
to settings.INSTALLED_APPS and sync your database.
#. :doc:`Add a new shipping method ` and
select your price calculator within the ``price_calculator`` field.
#. Save the shipping method.
Further hints
=============
* Within the ``ShippingMethodPriceCalculator`` the current request and the
shipping method are available as instance variables::
self.request
self.shipping_method
* With the ``request`` you have access to the current cart (in case you need
it)::
from lfs.cart.utils import get_cart
cart = get_cart(self.request)
* With the ``request`` you have access to the current customer (in case you need
it)::
from lfs.customer.utils import get_customer
customer = get_customer(self.request)