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 / activities.py
Size: Mime:
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