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

1from rest_framework import serializers 

2 

3from payments.api.v2.serializers.payment_amount import PaymentAmountSerializer 

4from sales.models.product import ProductListItem 

5from sales.models.shift import Shift 

6 

7 

8class ProductListItemSerializer(serializers.ModelSerializer): 

9 """Serializer for product list items.""" 

10 

11 class Meta: 

12 model = ProductListItem 

13 fields = ("name", "price", "age_restricted") 

14 read_only_fields = ("name", "price", "age_restricted") 

15 

16 name = serializers.SerializerMethodField("_name") 

17 age_restricted = serializers.SerializerMethodField("_age_restricted") 

18 

19 def _name(self, instance): 

20 return instance.product.name 

21 

22 def _age_restricted(self, instance): 

23 return instance.product.age_restricted 

24 

25 

26class ShiftSerializer(serializers.ModelSerializer): 

27 """Serializer for shifts.""" 

28 

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 ) 

44 

45 total_revenue = PaymentAmountSerializer(min_value=0.0, read_only=True) 

46 total_revenue_paid = PaymentAmountSerializer(min_value=0.0, read_only=True) 

47 

48 products = ProductListItemSerializer( 

49 source="product_list.product_items", many=True, read_only=True 

50 ) 

51 

52 title = serializers.SerializerMethodField("_get_title") 

53 

54 def _get_title(self, instance): 

55 return instance.title 

56 

57 product_sales = serializers.JSONField()