Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
wbcrm / crm / views / api / entries.py
Size: Mime:
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