def test_can_change_if_member_has_organiser_override(self): content_type = ContentType.objects.get_for_model(Event) override_perm = Permission.objects.get(codename="override_organiser", content_type=content_type) self.member.user_permissions.add(override_perm) # refresh member to defeat cache member = Member.objects.get(pk=self.member.pk) self.assertTrue(services.can_change_order(member, self.pizzaEvent))
def perform_update(self, serializer): order = serializer.save() if "payment" in serializer.validated_data and can_change_order( self.request.member, PizzaEvent.current()): self._update_payment( order, serializer.validated_data["payment"]["type"], self.request.user, )
def get_queryset(self): event = PizzaEvent.current() if can_change_order(self.request.member, event): return Order.objects.filter(pizza_event=event) if self.action == "update" or self.action == "destroy": if not event or event.has_ended: return Order.objects.none() return Order.objects.filter( member=self.request.member, payment=None, pizza_event=event, ) return Order.objects.filter(member=self.request.member, pizza_event=event)
def perform_create(self, serializer): try: if serializer.validated_data.get("name"): serializer.save(pizza_event=PizzaEvent.current()) else: if can_change_order(self.request.member, PizzaEvent.current()): order = serializer.save(pizza_event=PizzaEvent.current()) if "payment" in serializer.validated_data: payment_type = serializer.validated_data["payment"][ "type"] else: payment_type = Payment.NONE self._update_payment(order, payment_type, self.request.user) else: serializer.save(member=self.request.member, pizza_event=PizzaEvent.current()) except IntegrityError as e: raise ValidationError( "Something went wrong when saving the order" + str(e))
def get_serializer_class(self): event = PizzaEvent.current() if can_change_order(self.request.member, event): return serializers.AdminOrderSerializer return serializers.OrderSerializer
def test_can_change_if_in_committee(self): self.committee.members.add(self.member) # refresh member object to defeat cache member = Member.objects.get(pk=self.member.pk) self.assertTrue(services.can_change_order(member, self.pizzaEvent))
def test_can_not_change_if_not_in_committee(self): # note that if member is superuser, this might still succeed! self.assertFalse( services.can_change_order(self.member, self.pizzaEvent))
def _is_admin(self, instance): member = self.context["request"].member return can_change_order(member, instance)