Repository URL to install this package:
|
Version:
0.1.4 ▾
|
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, viewsets
from rest_framework.decorators import detail_route
from rest_framework.decorators import api_view, authentication_classes
from rest_framework.authentication import TokenAuthentication, SessionAuthentication
from rest_framework.response import Response
from wbfsm.views import detail_fsm_route
from crm.models.activities import Activity, ActivityType, ActivityReoccuranceRule
from crm.serializers.activities import (
ActivitySerializer,
ActivityTypeSerializer,
ActivityReoccuranceRuleModelSerializer,
)
from io import StringIO
from ics import Calendar
from datetime import datetime, timedelta
from crm.filters.activities import ActivityFilter
from wbutils.views import AppModelResponseHeaderMixin
# def get_ics_stuff(request):
# # TODO: Check if token is authenticated
# user = request.token.user
# if user:
# activies = user.profile.activity_participants.all()
# return ResponseToICS(activies)
# else:
# return Error400
from django.http import HttpResponse, Http404
from rest_framework.authtoken.models import Token
def get_ics(request):
token = request.GET.get('token', None)
if token:
try:
auth_token = Token.objects.get(key=token)
user = auth_token.user
if user:
minimum_date = datetime.now() - timedelta(days=30)
activities = user.profile.participates.filter(end__isnull=False, start__gte=minimum_date)
iCal = Calendar()
for activity in activities:
event = activity.to_ics()
if event:
iCal.events.add(event)
data = StringIO(str(iCal))
response = HttpResponse(data, content_type='text/calendar')
response['Content-Disposition'] = f'attachment; filename="{user.profile.search_name}.ics"'
else:
response = HttpResponse("Wrong authentification")
except Token.DoesNotExist:
raise Http404("No model matches the given query.")
else:
response = HttpResponse("Please provide an token as query parameter")
return response
# class ICalendarView(viewsets.ModelViewSet):
# """
# ICalendar ViewSet
# """
# filter_class = ActivityFilter
# queryset = Activity.objects.none()
# def get_queryset(self):
# if self.request.user.is_superuser or self.request.user.profile.is_employee:
# return activities2ics(self.user.profile.activities.all())
# return Activity.objects.none()
class ActivityViewSet(AppModelResponseHeaderMixin, viewsets.ModelViewSet):
"""
Activity ViewSet
"""
IDENTIFIER = "crm:activity"
filter_backends = (
DjangoFilterBackend,
filters.SearchFilter,
filters.OrderingFilter,
)
filter_class = ActivityFilter
search_fields = ("title", "description", "result")
queryset = Activity.objects.none()
serializer_class = ActivitySerializer
def get_queryset(self):
if self.request.user.is_superuser or self.request.user.profile.is_employee:
return Activity.objects.all()
return Activity.objects.none()
@detail_route(methods=["GET", "PATCH"])
def plan(self, request, pk=None):
return detail_fsm_route(
self.get_object(), "plan", request, self.serializer_class
)
@detail_route(methods=["GET", "PATCH"])
def finish(self, request, pk=None):
return detail_fsm_route(
self.get_object(), "finish", request, self.serializer_class
)
@detail_route(methods=["GET", "PATCH"])
def review(self, request, pk=None):
return detail_fsm_route(
self.get_object(), "review", request, self.serializer_class
)
@detail_route(methods=["GET", "PATCH"])
def cancel(self, request, pk=None):
return detail_fsm_route(
self.get_object(), "cancel", request, self.serializer_class
)
class ActivityTypeViewSet(AppModelResponseHeaderMixin, viewsets.ModelViewSet):
"""
Activity Type ViewSet
"""
IDENTIFIER = "crm:activitytype"
queryset = ActivityType.objects.all()
serializer_class = ActivityTypeSerializer
class ActivityReoccuranceRuleModelView(
AppModelResponseHeaderMixin, viewsets.ModelViewSet
):
"""
Model View for ActivityReoccuranceRule
"""
IDENTIFIER = "crm:activityreoccurancerule"
queryset = ActivityReoccuranceRule.objects.all()
serializer_class = ActivityReoccuranceRuleModelSerializer