invite team member route
This commit is contained in:
parent
2db59131a8
commit
fc0cf3e25b
|
|
@ -113,6 +113,26 @@ class UserManager(BaseUserManager):
|
|||
obj.save()
|
||||
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):
|
||||
"""Extended queryset for User model."""
|
||||
|
|
@ -595,6 +615,8 @@ class UserRole(ProjectBaseMixin):
|
|||
help_text='A user (REQUESTER) who requests a '
|
||||
'role change for a USER')
|
||||
|
||||
for_team = models.BooleanField(verbose_name=_('is this role for team membership'), default=False)
|
||||
|
||||
objects = UserRoleQueryset.as_manager()
|
||||
|
||||
class Meta:
|
||||
|
|
|
|||
|
|
@ -174,3 +174,18 @@ class UserCSVSerializer(serializers.ModelSerializer):
|
|||
'last_ip',
|
||||
'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>/csv/', views.get_user_csv, name='user-csv'),
|
||||
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_filters.rest_framework import DjangoFilterBackend
|
||||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework import generics, status
|
||||
from rest_framework import permissions
|
||||
from rest_framework.authtoken.models import Token
|
||||
|
|
@ -14,6 +15,7 @@ from account import models, filters
|
|||
from account.models import User
|
||||
from account.serializers import back as serializers
|
||||
from account.serializers.common import RoleBaseSerializer
|
||||
from establishment.models import Establishment
|
||||
from utils.methods import get_permission_classes
|
||||
from utils.permissions import IsReviewManager
|
||||
|
||||
|
|
@ -187,3 +189,16 @@ class UserCSVViewSet(ModelViewSet):
|
|||
writer.writerow(item.values())
|
||||
|
||||
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