fixed create_company_user endoint, tests working
This commit is contained in:
@@ -20,6 +20,7 @@ from rest_framework.generics import UpdateAPIView
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
|
||||
from companies.models import Company
|
||||
from companies.serializers import CompanySerializer
|
||||
from geo.models import City
|
||||
|
||||
from . import models
|
||||
@@ -112,51 +113,47 @@ class UpdateUserView(UpdateAPIView):
|
||||
@permission_classes([CustomUserPermissions,])
|
||||
def create_company_user(request):
|
||||
"""
|
||||
Create non-validated company and manager user associated
|
||||
Create non-validated company and associated managing user
|
||||
"""
|
||||
user_data = {
|
||||
'full_name': request.data['user']['full_name'],
|
||||
'email': request.data['user']['email'],
|
||||
'password': request.data['user']['password']
|
||||
}
|
||||
company_data = {
|
||||
'cif': request.data['company']['cif'],
|
||||
'company_name': request.data['company']['company_name'],
|
||||
'short_name': request.data['company']['short_name'],
|
||||
'web_link': request.data['company']['web_link'],
|
||||
'shop': request.data['company']['shop'],
|
||||
'city': request.data['company']['city'],
|
||||
'geo': request.data['company']['geo'],
|
||||
'address': request.data['company']['address']
|
||||
}
|
||||
try:
|
||||
user = models.CustomUser.objects.create(email=user_data['email'], full_name=user_data['full_name'])
|
||||
except IntegrityError as e:
|
||||
return Response({"errors": {"details": str(e)}}, status=status.HTTP_409_CONFLICT)
|
||||
if 'user' not in request.data:
|
||||
return Response({"error": "Missing parameter: user"}, status=406)
|
||||
if 'company' not in request.data:
|
||||
return Response({"error": "Missing parameter: company"}, status=406)
|
||||
|
||||
try:
|
||||
city = company_data.pop('city')
|
||||
#city = City.objects.get(name=city)
|
||||
# create company
|
||||
company_data = request.data['company']
|
||||
# substitute coordinates for Point
|
||||
geo = company_data.pop('geo')
|
||||
if geo:
|
||||
company_data['geo'] = Point(geo['latitude'],geo['longitude'])
|
||||
company_serializer = CompanySerializer(
|
||||
data=company_data,
|
||||
)
|
||||
if company_serializer.is_valid():
|
||||
# save model instance data
|
||||
new_company = Company.objects.create(**company_serializer.validated_data)
|
||||
else:
|
||||
return Response({"error": "Company data is not valid"}, status=406)
|
||||
|
||||
geo = company_data.pop('geo')
|
||||
geo = Point(geo['latitude'],geo['longitude'])
|
||||
# create user
|
||||
user_data = request.data['user']
|
||||
user_data['role'] = 'COOP_MANAGER'
|
||||
user_data['company'] = new_company.id
|
||||
user_serializer = core_serializers.CustomUserWriteSerializer(
|
||||
data=user_data,
|
||||
)
|
||||
if user_serializer.is_valid():
|
||||
# save model instance data
|
||||
password = user_serializer.validated_data.pop('password')
|
||||
new_user = User(**user_serializer.validated_data)
|
||||
new_user.set_password(password)
|
||||
new_user.save()
|
||||
# send verification email
|
||||
utils.send_verification_email(request, new_user)
|
||||
else:
|
||||
return Response({"error": "User data is not valid"}, status=406)
|
||||
|
||||
company = Company.objects.create(**company_data, city=city, geo=geo)
|
||||
except Exception as e:
|
||||
user.delete()
|
||||
return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
user.set_password(user_data['password'])
|
||||
user.company = company
|
||||
user.role = 'COOP_MANAGER'
|
||||
user.save()
|
||||
|
||||
company.creator = user
|
||||
company.save()
|
||||
|
||||
serializer = core_serializers.CustomUserSerializer(user)
|
||||
|
||||
return Response(data=serializer.data,status=status.HTTP_201_CREATED)
|
||||
return Response(status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
@api_view(['GET',])
|
||||
|
||||
Reference in New Issue
Block a user