Repository URL to install this package:
|
Version:
0.1.4 ▾
|
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import detail_route
from rest_framework.response import Response
from slugify import slugify
from wbutils.permissions import RestAPIModelPermissions
from crm.filters.entries import CompanyFilter, EntryFilter, PersonFilter
from crm.models.entries import Company, Entry, Person
from crm.permissions import EmployeePermission
from crm.serializers.entries import (CompanyDetailSerializer, CompanySerializer,
EntrySerializer, PersonDetailedSerializer,
PersonSerializer)
from wbutils.views import AppModelResponseHeaderMixin
class EntryViewSet(AppModelResponseHeaderMixin, viewsets.ReadOnlyModelViewSet):
IDENTIFIER = 'crm:entry'
filter_backends = (DjangoFilterBackend, filters.SearchFilter)
filter_class = EntryFilter
search_fields = ('search_name',)
queryset = Entry.objects.none()
serializer_class = EntrySerializer
def get_queryset(self):
user_profile = self.request.user.profile
return Entry.get_queryset_for_profile(user_profile)
class EmployeeViewSet(AppModelResponseHeaderMixin, viewsets.ReadOnlyModelViewSet):
IDENTIFIER = 'crm:person'
filter_backends = (DjangoFilterBackend,
filters.SearchFilter, filters.OrderingFilter)
filter_class = PersonFilter
search_fields = ('first_name', 'last_name', 'employer__title',)
ordering_fields = ('first_name', 'last_name',
'status__title', 'employer__title', 'rating')
queryset = Person.employees.all()
serializer_class = PersonDetailedSerializer
permission_classes = (IsAuthenticated, RestAPIModelPermissions, EmployeePermission,)
class PersonViewSet(AppModelResponseHeaderMixin, viewsets.ModelViewSet):
IDENTIFIER = 'crm:person'
filter_backends = (DjangoFilterBackend,
filters.SearchFilter, filters.OrderingFilter)
filter_class = PersonFilter
search_fields = ('first_name', 'last_name', 'employer__title',)
ordering_fields = ('first_name', 'last_name',
'status__title', 'employer__title', 'rating')
queryset = Person.objects.none()
serializer_class = PersonSerializer
def get_queryset(self):
user_profile = self.request.user.profile
if user_profile.is_employee or self.request.user.is_superuser:
return self.get_serializer_class().prefetch_fields(Person.objects.all(), self.request)
if user_profile.head and user_profile.employer:
return self.get_serializer_class().prefetch_fields(Person.objects.filter(employer=user_profile.employer), self.request)
return self.get_serializer_class().prefetch_fields(Person.objects.filter(id=user_profile.id), self.request)
def get_serializer_class(self):
user_profile = self.request.user.profile
if user_profile.is_employee or self.request.user.is_superuser:
return PersonDetailedSerializer
return PersonSerializer
@detail_route(methods=['post'])
def create_user_model(self, request, pk=None):
person = Person.objects.get(pk=pk)
if hasattr(person, 'user_account'):
return Response({'user_account': 'Already exists.'})
else:
email = person.primary_email_contact()
if email is None:
return Response({'primary_email_contact': 'Does not have an E-Mail.'})
if 'password' in request.data:
password = request.data['password']
user = get_user_model().objects.create_user(
username=slugify(person.first_name + person.last_name),
email=email.address,
profile=person,
is_active=True,
password=password
)
else:
user = get_user_model().objects.create_user(
username=slugify(person.first_name + person.last_name),
email=email.address,
profile=person,
is_active=True
)
access_group = Group.objects.get(name='access')
access_group.user_set.add(user)
customer_group = Group.objects.get(name='customer')
customer_group.user_set.add(user)
return Response({'detail': 'Account created with E-Mail: %s' % email})
class CompanyViewSet(AppModelResponseHeaderMixin, viewsets.ModelViewSet):
IDENTIFIER = 'crm:company'
filter_backends = (DjangoFilterBackend,
filters.SearchFilter, filters.OrderingFilter)
filter_class = CompanyFilter
search_fields = ('title',)
ordering_fields = ('title', 'rating')
queryset = Company.objects.none()
serializer_class = CompanySerializer
def get_queryset(self):
user_profile = self.request.user.profile
if user_profile.is_employee or self.request.user.is_superuser:
return self.get_serializer_class().prefetch_fields(Company.objects.all(), self.request)
if user_profile.head and user_profile.employer:
return self.get_serializer_class().prefetch_fields(Company.objects.filter(id=user_profile.employer.id), self.request)
return Company.objects.none()
def get_serializer_class(self):
user_profile = self.request.user.profile
if user_profile.is_employee or self.request.user.is_superuser:
return CompanyDetailSerializer
return CompanySerializer