Basket

Basket reference.

Modifiers

To use the modifiers:

from salesman.basket.modifiers import basket_modifiers_pool

modifiers = basket_modifiers_pool.get_modifiers()
class salesman.basket.modifiers.BasketModifier[source]

Basket modifier base, all modifiers defined in SALESMAN_BASKET_MODIFIERS must extend this class.

add_extra_row(obj: BasketOrItem, label: str, amount: decimal.Decimal, extra: dict = {}, charge: bool = True) → None[source]

Adds extra row to either the basket or item.

Parameters
  • obj (BasketOrItem) – Basket or BasketItem instance

  • label (str) – Row label

  • amount (Decimal) – Row amount

  • extra (dict, optional) – Row extra data. Defaults to {}.

  • charge (bool, optional) – Whether to charge the amount. Defaults to True.

process_item(item: salesman.basket.models.BasketItem, request: django.http.request.HttpRequest) → None[source]

Process item. Add extra row to item using self.add_extra_row() method.

Parameters
  • item (BasketItem) – Basket item instance

  • request (HttpRequest) – Django request

process_basket(basket: salesman.basket.models.Basket, request: django.http.request.HttpRequest) → None[source]

Process basket. Add extra row to bakset using self.add_extra_row() method.

Parameters
  • basket (Basket) – Basket instance

  • request (HttpRequest) – Django request

class salesman.basket.modifiers.BasketModifiersPool[source]

Pool for storing modifier instances.

get_modifiers() → List[salesman.basket.modifiers.BasketModifier][source]

Returns modifier instances.

Returns

Modifier instances

Return type

list

modifiers.basket_modifiers_pool = <salesman.basket.modifiers.BasketModifiersPool object>

Models

class salesman.basket.models.BasketManager[source]
get_or_create_from_request(request: django.http.request.HttpRequest) → Tuple[salesman.basket.models.Basket, bool][source]

Get basket from request or create a new one. If user is logged in session basket gets merged into a user basket.

Returns

(basket, created)

Return type

tuple

class salesman.basket.models.Basket(id, owner, extra, date_created, date_updated)[source]
update(request: django.http.request.HttpRequest) → None[source]

Process basket with modifiers defined in SALESMAN_BASKET_MODIFIERS. This method sets subtotal, total and extra_rows attributes on the basket and updates the items. Should be called every time the basket item is added, removed or updated or basket extra is updated.

Parameters

request (HttpRequest) – Django request

add(product: object, quantity: int = 1, ref: Optional[str] = None, extra: Optional[dict] = None) → salesman.basket.models.BasketItem[source]

Add product to the basket.

Returns

BasketItem instance

Return type

BasketItem

remove(ref: str) → None[source]

Remove item with given ref from the basket.

Parameters

ref (str) – Item ref to remove.

clear() → None[source]

Clear all items from the basket.

merge(other: salesman.basket.models.Basket) → None[source]

Merge other basket with this one, delete afterwards.

Parameters

other (Basket) – Basket which to merge

get_items() → list[source]

Returns items from cache or stores new ones.

property count

Returns basket item count.

property quantity

Returns the total quantity of all items in a basket.

class salesman.basket.models.BasketItem(id, basket, ref, product_content_type, product_id, quantity, extra, date_created, date_updated)[source]
update(request: django.http.request.HttpRequest) → None[source]

Process items with modifiers defined in SALESMAN_BASKET_MODIFIERS. This method sets unit_price, subtotal, total and extra_rows attributes on the item. Should be called every time the basket item is added, removed or updated.

Parameters

request (HttpRequest) – Django request

classmethod get_product_ref(product: object) → str[source]

Returns default item ref for given product.

Parameters

product (object) – Product instance

Returns

Item ref

Return type

str

Serializers

class salesman.basket.serializers.ProductField(*args, **kwargs)[source]

Related product field that uses a serializer based on product type taken from SALESMAN_PRODUCT_TYPES setting.

class salesman.basket.serializers.ExtraRowsField(*args, **kwargs)[source]

Field to display a list of ExtraRowSerializer instances.

class salesman.basket.serializers.ExtraRowSerializer(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[source]

Extra row serializer used for adding extra data to extra_rows dict on both the basket and basket item model. Mostly used when processing basket modifiers.

class salesman.basket.serializers.BasketItemSerializer(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[source]

Serializer for basket item.

class salesman.basket.serializers.BasketItemCreateSerializer(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[source]

Bases: rest_framework.serializers.ModelSerializer

Serializer used to add a new item to basket.

class salesman.basket.serializers.BasketSerializer(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[source]

Serializer for basket.

class salesman.basket.serializers.BasketExtraSerializer(instance=None, data=<class 'rest_framework.fields.empty'>, **kwargs)[source]

Bases: rest_framework.serializers.ModelSerializer

Serializer for updating basket extra data.