Coverage for website/sales/api/v2/admin/serializers/shift.py: 100.00%
26 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from rest_framework import serializers
3from payments.api.v2.serializers.payment_amount import PaymentAmountSerializer
4from sales.models.product import ProductListItem
5from sales.models.shift import Shift
8class ProductListItemSerializer(serializers.ModelSerializer):
9 """Serializer for product list items."""
11 class Meta:
12 model = ProductListItem
13 fields = ("name", "price", "age_restricted")
14 read_only_fields = ("name", "price", "age_restricted")
16 name = serializers.SerializerMethodField("_name")
17 age_restricted = serializers.SerializerMethodField("_age_restricted")
19 def _name(self, instance):
20 return instance.product.name
22 def _age_restricted(self, instance):
23 return instance.product.age_restricted
26class ShiftSerializer(serializers.ModelSerializer):
27 """Serializer for shifts."""
29 class Meta:
30 model = Shift
31 fields = (
32 "pk",
33 "title",
34 "locked",
35 "active",
36 "start",
37 "end",
38 "products",
39 "total_revenue",
40 "total_revenue_paid",
41 "num_orders",
42 "product_sales",
43 )
45 total_revenue = PaymentAmountSerializer(min_value=0.0, read_only=True)
46 total_revenue_paid = PaymentAmountSerializer(min_value=0.0, read_only=True)
48 products = ProductListItemSerializer(
49 source="product_list.product_items", many=True, read_only=True
50 )
52 title = serializers.SerializerMethodField("_get_title")
54 def _get_title(self, instance):
55 return instance.title
57 product_sales = serializers.JSONField()