invite team member route
This commit is contained in:
parent
2db59131a8
commit
fc0cf3e25b
|
|
@ -113,6 +113,26 @@ class UserManager(BaseUserManager):
|
||||||
obj.save()
|
obj.save()
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
def invite_for_team(self, email: str, establishment: Establishment):
|
||||||
|
created = False
|
||||||
|
user = User.objects.filter(email=email).first()
|
||||||
|
if user is None:
|
||||||
|
from utils.methods import string_random
|
||||||
|
user = self.make(email, string_random(), True, string_random())
|
||||||
|
created = True
|
||||||
|
if created:
|
||||||
|
pass # TODO: send email with password reset and role id
|
||||||
|
else:
|
||||||
|
pass # TODO: send email-notification with role activation link
|
||||||
|
user_role_defaults = {'for_team': True, 'state': UserRole.PENDING}
|
||||||
|
role, is_role_created = Role.objects.get_or_create(role=Role.ESTABLISHMENT_ADMINISTRATOR)
|
||||||
|
user_role, is_user_role_created = UserRole.objects.get_or_create(user=user, establishment=establishment,
|
||||||
|
role=role, defaults=user_role_defaults)
|
||||||
|
if not is_user_role_created:
|
||||||
|
from rest_framework.serializers import ValidationError
|
||||||
|
raise ValidationError({'detail': f'User with this role already exists. State: {user_role.state}'})
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
class UserQuerySet(models.QuerySet):
|
class UserQuerySet(models.QuerySet):
|
||||||
"""Extended queryset for User model."""
|
"""Extended queryset for User model."""
|
||||||
|
|
@ -595,6 +615,8 @@ class UserRole(ProjectBaseMixin):
|
||||||
help_text='A user (REQUESTER) who requests a '
|
help_text='A user (REQUESTER) who requests a '
|
||||||
'role change for a USER')
|
'role change for a USER')
|
||||||
|
|
||||||
|
for_team = models.BooleanField(verbose_name=_('is this role for team membership'), default=False)
|
||||||
|
|
||||||
objects = UserRoleQueryset.as_manager()
|
objects = UserRoleQueryset.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
|
|
@ -174,3 +174,18 @@ class UserCSVSerializer(serializers.ModelSerializer):
|
||||||
'last_ip',
|
'last_ip',
|
||||||
'roles_list',
|
'roles_list',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class InviteTeamSerializer(serializers.ModelSerializer):
|
||||||
|
email = serializers.EmailField(required=True, allow_blank=False, allow_null=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.User
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'email',
|
||||||
|
)
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
establishment = self.context['view'].kwargs['establishment']
|
||||||
|
return models.User.objects.invite_for_team(validated_data['email'], establishment)
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,6 @@ urlpatterns = [
|
||||||
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
||||||
path('user/<int:id>/csv/', views.get_user_csv, name='user-csv'),
|
path('user/<int:id>/csv/', views.get_user_csv, name='user-csv'),
|
||||||
path('user/csv/', views.UserCSVViewSet.as_view({'get': 'to_csv'}), name='user-csv-list'),
|
path('user/csv/', views.UserCSVViewSet.as_view({'get': 'to_csv'}), name='user-csv-list'),
|
||||||
|
path('team/invite/<int:establishment_id>', views.EstablishmentTeamInviteView.as_view(),
|
||||||
|
name='invite-to-establishment-team'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from datetime import datetime
|
||||||
|
|
||||||
from django.http import HttpResponse, HttpResponseNotFound
|
from django.http import HttpResponse, HttpResponseNotFound
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
from rest_framework import generics, status
|
from rest_framework import generics, status
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
@ -14,6 +15,7 @@ from account import models, filters
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from account.serializers import back as serializers
|
from account.serializers import back as serializers
|
||||||
from account.serializers.common import RoleBaseSerializer
|
from account.serializers.common import RoleBaseSerializer
|
||||||
|
from establishment.models import Establishment
|
||||||
from utils.methods import get_permission_classes
|
from utils.methods import get_permission_classes
|
||||||
from utils.permissions import IsReviewManager
|
from utils.permissions import IsReviewManager
|
||||||
|
|
||||||
|
|
@ -187,3 +189,16 @@ class UserCSVViewSet(ModelViewSet):
|
||||||
writer.writerow(item.values())
|
writer.writerow(item.values())
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentTeamInviteView(generics.CreateAPIView):
|
||||||
|
"""View to invite new team member by email"""
|
||||||
|
queryset = User.objects.all()
|
||||||
|
# permission_classes = get_permission_classes()
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
|
permission_classes = (AllowAny, )
|
||||||
|
serializer_class = serializers.InviteTeamSerializer
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
self.kwargs['establishment'] = get_object_or_404(klass=Establishment, pk=self.kwargs['establishment_id'])
|
||||||
|
return super().create(request, *args, **kwargs)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user