from apps.ecm.models import Event, EventCate, Remind, NotifySetting from apps.ecm.serializers import (EventCateCreateUpdateSerializer, EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer, EventSerializer, RemindSerializer, NotifySettingsSerializer) from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin from django.db import transaction from rest_framework.decorators import action from rest_framework import serializers from django.utils import timezone from rest_framework.response import Response # Create your views here. class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, CustomGenericViewSet): perms_map = {'put': 'event_cate:update', 'post': 'event_cate:create'} queryset = EventCate.objects.all() list_serializer_class = EventCateListSerializer create_serializer_class = EventCateCreateUpdateSerializer update_serializer_class = EventCateCreateUpdateSerializer serializer_class = EventCateListSerializer filterset_fields = ['self_algo'] class NotifySettingViewSet(CustomModelViewSet): queryset = NotifySetting.objects.all() serializer_class = NotifySettingsSerializer class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): perms_map = {'get': 'event:view'} queryset = Event.objects.all() serializer_class = EventSerializer @transaction.atomic @action(methods=['post'], detail=True, perms_map={'post': 'event:handle'}, serializer_class=EventHandleSerializer) def handle(self, request, pk=None): """处理事件 处理事件 """ obj = self.get_object() data = request.data obj.handle_desc = data.get('handle_desc', '') obj.handle_user = request.user obj.handle_time = timezone.now() obj.save() return Response() class RemindViewSet(ListModelMixin, CustomGenericViewSet): perms_map = {'get': 'envent:view'} queryset = Remind.objects.all() serializer_class = RemindSerializer @action(methods=['get'], detail=False, perms_map={'get': '*'}) def my(self, request, *args, **kwargs): """推送给我的 推送给我的 """ user = self.request.user queryset = self.filter_queryset(self.get_queryset().filter(recipient=user)) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)