Coverage for apps/products/views.py: 86%

52 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2024-04-19 09:45 -0600

1from rest_framework.mixins import CreateModelMixin as Create 

2from rest_framework.mixins import ListModelMixin as List 

3from rest_framework.mixins import RetrieveModelMixin as Detail 

4from rest_framework.viewsets import GenericViewSet, ModelViewSet 

5 

6from app.stripe.serializers import StripePriceSerializer, StripeProductSerializer 

7from apps.users.mixins import AdminMixin, UserMixin 

8 

9from .filters import ProductFilter 

10from .serializers import ( 

11 ConsultationProductSerializer, 

12 PolymorphicProductSerializer, 

13 ProcedureProductSerializer, 

14 ProductOrganizationPriceSerializer, 

15 SellableProductSerializer, 

16 SurgicalProductSerializer, 

17) 

18 

19 

20class AdminProductViewSet(AdminMixin, ModelViewSet): 

21 """ 

22 Model ViewSet for Products 

23 """ 

24 

25 serializer_class = PolymorphicProductSerializer 

26 

27 

28class AdminProductOrganizationPriceViewSet(AdminMixin, ModelViewSet): 

29 """ 

30 Model ViewSet for Product Organizations 

31 """ 

32 

33 serializer_class = ProductOrganizationPriceSerializer 

34 

35 

36class AdminStripeProductViewSet(AdminMixin, GenericViewSet, Create, List, Detail): 

37 """ 

38 Stripe Product ViewSet for Admin 

39 """ 

40 

41 serializer_class = StripeProductSerializer 

42 

43 

44class AdminStripePriceViewSet(AdminMixin, GenericViewSet, Create, List, Detail): 

45 """ 

46 Stripe Price ViewSet for Admin 

47 """ 

48 

49 serializer_class = StripePriceSerializer 

50 

51 

52class UserStripeProductViewSet(UserMixin, GenericViewSet, List, Detail): 

53 """ 

54 Stripe Product ViewSet for User 

55 """ 

56 

57 serializer_class = StripeProductSerializer 

58 

59 

60class UserProductViewSet(UserMixin, ModelViewSet): 

61 """ 

62 Model ViewSet for Products 

63 """ 

64 

65 serializer_class = PolymorphicProductSerializer 

66 filterset_class = ProductFilter 

67 ordering_fields = ["name", "polymorphic_ctype", "ordering"] 

68 

69 def create(self, request, *args, **kwargs): 

70 request.data["practitioner"] = request.user.practitioner.pk 

71 return super().create(request, args, kwargs) 

72 

73 def perform_destroy(self, instance): 

74 instance.is_active = False 

75 instance.save() 

76 

77 def get_queryset(self, *args, **kwargs): 

78 return super().get_queryset(*args, **kwargs).filter(practitioner__user=self.request.user, is_active=True) 

79 

80 

81class UserProductOrganizationPriceViewSet(UserMixin, ModelViewSet): 

82 """ 

83 Model ViewSet for Product Organizations 

84 """ 

85 

86 serializer_class = ProductOrganizationPriceSerializer 

87 filterset_fields = ["product", "organization"] 

88 ordering_fields = ["prodcut__name", "prodcut__polymorphic_ctype", "prodcut__ordering"] 

89 

90 def get_queryset(self): 

91 return ( 

92 super() 

93 .get_queryset() 

94 .filter(organization__in=self.user.affiliations.values_list("organization"), product__is_active=True) 

95 ) 

96 

97 

98class UserConsultationProductViewSet(UserMixin, ModelViewSet): 

99 """ 

100 Model ViewSet for Consultation Products 

101 """ 

102 

103 serializer_class = ConsultationProductSerializer 

104 

105 def get_queryset(self, *args, **kwargs): 

106 return super().get_queryset(*args, **kwargs).filter(practitioner__user=self.request.user, is_active=True) 

107 

108 

109class UserProcedureProductViewSet(UserMixin, ModelViewSet): 

110 """ 

111 Model ViewSet for Procedure Products 

112 """ 

113 

114 serializer_class = ProcedureProductSerializer 

115 

116 def get_queryset(self, *args, **kwargs): 

117 return super().get_queryset(*args, **kwargs).filter(practitioner__user=self.request.user, is_active=True) 

118 

119 

120class UserSellableProductViewSet(UserMixin, ModelViewSet): 

121 """ 

122 Model ViewSet for Sellable Products 

123 """ 

124 

125 serializer_class = SellableProductSerializer 

126 

127 def get_queryset(self, *args, **kwargs): 

128 return super().get_queryset(*args, **kwargs).filter(practitioner__user=self.request.user, is_active=True) 

129 

130 

131class UserSurgicalProductViewSet(UserMixin, ModelViewSet): 

132 """ 

133 Model ViewSet for Surgical Products 

134 """ 

135 

136 serializer_class = SurgicalProductSerializer 

137 

138 def get_queryset(self, *args, **kwargs): 

139 return super().get_queryset(*args, **kwargs).filter(practitioner__user=self.request.user, is_active=True)