Skip to content
Snippets Groups Projects
Commit cce615e9 authored by s2536528's avatar s2536528
Browse files

Merged the develop branch with test branch

parent 6e959063
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ class AssociationMembershipSerializerList(BaseSerializer):
'association': {'lookup_field': 'slug'}
}
class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers.HyperlinkedModelSerializer):
specific_data = AssociationSpecificDataSerializerSimple(many=True)
debt_collection_mandate_id = serializers.ReadOnlyField(source="sepa_mandate.mandate_id")
......@@ -36,7 +37,8 @@ class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers
class Meta:
model = AssociationMembership
fields = ('url', 'slug', 'profile', 'association', 'date_joined', 'date_left', 'current', 'new_type', 'pay_by',
'debt_collection_mandate_id', 'debt_collection_mandate_given', 'debt_collection_mandate_signature_date',
'debt_collection_mandate_id', 'debt_collection_mandate_given',
'debt_collection_mandate_signature_date',
'status', 'type', 'visible_after_date_left', 'specific_data', 'financial_obligations_satisfied',
'data_fields_last_modified', 'last_modified')
extra_kwargs = {
......@@ -90,9 +92,11 @@ class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers
errors['date_left'] = "End date must be after start date."
if pay_by == AssociationMembership.PayBy.DEBT_COLLECTION.value:
if (self.instance and self.instance.pay_by != AssociationMembership.PayBy.DEBT_COLLECTION.value) or (self.instance is None):
if (self.instance and self.instance.pay_by != AssociationMembership.PayBy.DEBT_COLLECTION.value) or (
self.instance is None):
if not debt_collection_mandate_given:
errors["debt_collection_mandate_given"] = "Mandate for debt collection has to be given when paying by debt collection."
errors[
"debt_collection_mandate_given"] = "Mandate for debt collection has to be given when paying by debt collection."
if type_.association != association:
errors["membertype E_1"] = "Association of membertype does not belong to this association"
......@@ -102,7 +106,8 @@ class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers
if old_type is not None and old_type != type_:
errors["membertype E_3"] = "Only the board can change current membertype"
if change_type_on_period_end and new_type is None:
errors["change_type_on_period_end"] = "You cannot say you change your type, but not have a type to change to"
errors[
"change_type_on_period_end"] = "You cannot say you change your type, but not have a type to change to"
if type_.disabled:
errors["membertype E_4"] = "This is not a valid type, it has been disabled."
if new_type and new_type.disabled:
......@@ -116,9 +121,9 @@ class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers
# \\\\\\\\\\\\\\\\\\\\\\\\\\
if self.instance is None:
not_supplied_all_mandatory_data_fields = AssociationSpecificDataFields.objects\
.filter(association=association, mandatory=True)\
.exclude(slug__in=[data['data_field'].slug for data in specific_data])\
not_supplied_all_mandatory_data_fields = AssociationSpecificDataFields.objects \
.filter(association=association, mandatory=True) \
.exclude(slug__in=[data['data_field'].slug for data in specific_data]) \
.exists()
if not_supplied_all_mandatory_data_fields:
errors["mandatory"] = "Not all mandatory data fields have been supplied."
......@@ -126,7 +131,8 @@ class AssociationMembershipSerializerBase(FlexFieldsModelSerializer, serializers
if specific_data:
for data in specific_data:
if association != data["data_field"].association:
errors[data["data_field"].name] = f"{association.slug}, doesn't match the association, {data['data_field'].association.slug}, of the data_field {data['data_field'].slug}"
errors[data[
"data_field"].name] = f"{association.slug}, doesn't match the association, {data['data_field'].association.slug}, of the data_field {data['data_field'].slug}"
if data["data_field"].type == AssociationSpecificDataFields.Type.BOOLEAN.value:
if data["value"] not in ("True", "False"):
......@@ -173,7 +179,8 @@ class AssociationMembershipSerializerUpdate(AssociationMembershipSerializerBase)
# Update sepa mandate
# \\\\\\\\\\\\\\\\\\\\\\\\\\
if validated_data.get("pay_by", ""):
if instance.pay_by != AssociationMembership.PayBy.DEBT_COLLECTION and validated_data["pay_by"] == AssociationMembership.PayBy.DEBT_COLLECTION:
if instance.pay_by != AssociationMembership.PayBy.DEBT_COLLECTION and validated_data[
"pay_by"] == AssociationMembership.PayBy.DEBT_COLLECTION:
sepa_mandate = SepaMandate.objects.create(
mandate_id=uuid.uuid4(),
signature_date=datetime.date.today(),
......@@ -181,7 +188,8 @@ class AssociationMembershipSerializerUpdate(AssociationMembershipSerializerBase)
profile=instance.profile,
)
instance.sepa_mandate = sepa_mandate
elif instance.pay_by == AssociationMembership.PayBy.DEBT_COLLECTION and validated_data["pay_by"] != AssociationMembership.PayBy.DEBT_COLLECTION:
elif instance.pay_by == AssociationMembership.PayBy.DEBT_COLLECTION and validated_data[
"pay_by"] != AssociationMembership.PayBy.DEBT_COLLECTION:
sepa_mandate = instance.sepa_mandate
sepa_mandate.withdrawal_date = datetime.date.today()
sepa_mandate.save()
......
from django.db.models import Prefetch
from rest_framework import viewsets
from rest_framework import viewsets, status
from rest_framework.permissions import BasePermission
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from url_filter import filtersets
from apps.MySU.models import AssociationMembership
......@@ -60,6 +61,8 @@ class UserViewSet(viewsets.ModelViewSet):
def get_queryset(self):
queryset = User.objects.filter(username=self.request.user.username)
token = super().get_authenticators()
print(token)
membership_subquery = AssociationMembership.objects.filter(user=self.request.user)
membership_subquery = membership_subquery\
.select_related('association', 'new_type', 'type', 'profile', 'profile__study')\
......
......@@ -19,6 +19,7 @@ class EventSerializer(FlexFieldsModelSerializer, BaseSerializer):
fields = ('start_date', 'end_date', 'public', 'enrollable', 'enrollable_from', 'enrollable_until', 'unenrollable',
'unenrollable_until', 'max_number_of_enrollments', 'association', 'type', 'type_name', 'hidden_for_members',
'slug', 'url', 'name', 'description', 'location', 'debt_collection')
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field': 'slug'},
'association': {'lookup_field': 'slug'},
......
from django.conf.urls import url
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.calendar.views.enrollments_emails import EmailEnrollmentsView
......@@ -8,7 +9,7 @@ from apps.calendar.viewsets.event import EventViewSet
from apps.calendar.viewsets.eventtype import EventTypeViewSet
router = DefaultRouter()
router.register(r'events', EventViewSet)
router.register(r'events', EventViewSet, basename='event')
router.register(r'event_types', EventTypeViewSet)
router.register(r'enrollments', EnrollmentViewSet)
router.register(r'enrollment_options', EnrollmentOptionViewSet)
......@@ -16,3 +17,4 @@ router.register(r'enrollment_options', EnrollmentOptionViewSet)
urlpatterns = [
url(r'^enrollments/email', EmailEnrollmentsView.as_view(), name='enrollements-email'),
]
from django.contrib.auth.models import Permission
from django.shortcuts import get_object_or_404
from django.utils import timezone
from guardian.shortcuts import get_objects_for_user
from guardian.shortcuts import Q
......@@ -34,13 +36,17 @@ class EventHttpPermissions(BasePermission):
return request.user.has_perm('board', obj.association)
return False
def has_permission(self, request, view):
def has_permission(self, request, view): # this is subject to change !
if request.method == "GET": # HANDLES THE LIST
return True
if request.method == "POST": # HANDLES THE CREATION/INSERTION
return get_objects_for_user(request.user, 'MySU.board').count() > 0
if request.method == "PUT" or request.method == "PATCH":
return True
return True
# and self.user.has_perm('board')
class EventFilterSet(filtersets.ModelFilterSet):
class Meta:
......@@ -71,6 +77,17 @@ class EventViewSet(viewsets.ModelViewSet):
queryset = queryset.select_related(field)
return queryset.distinct()
def patch(self, request, *args, **kwargs):
instance = self.get_object()
if not instance:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = self.get_serializer(instance, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
def destroy(self, request: 'Request', *args: 'Any', **kwargs: 'Any') -> 'Response':
event = self.get_object()
if event.attendants.exists():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment