from django.shortcuts import render from apps.em.models import Equipment, EcheckRecord from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from apps.em.serializers import EquipmentSerializer, EcheckRecordSerializer from apps.em.filters import EquipFilterSet from rest_framework.exceptions import ParseError from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModelMixin from dateutil.relativedelta import relativedelta # Create your views here. class EquipmentViewSet(CustomModelViewSet): queryset = Equipment.objects.all() serializer_class = EquipmentSerializer select_related_fields = ['create_by', 'belong_dept', 'keeper'] search_fields = ['number', 'name'] filterset_class = EquipFilterSet def filter_queryset(self, queryset): if not self.detail and not self.request.query_params.get('type', None): raise ParseError('请指定设备类型') return super().filter_queryset(queryset) class EcheckRecordViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, CustomGenericViewSet): perms_map = {'get': '*', 'post': 'echeckreocrd.create', 'put': 'echeckrecord.update', 'delete': 'echeckreocrd.delete'} queryset = EcheckRecord.objects.all() serializer_class = EcheckRecordSerializer select_related_fields = ['equipment', 'create_by'] filterset_fields = ['equipment', 'result'] def perform_create(self, serializer): instance = serializer.save() equipment = instance.equipment if equipment.cycle: equipment.check_date = instance.check_date equipment.next_check_date = instance.check_date + relativedelta(months=equipment.cycle) equipment.save() def perform_destroy(self, instance): instance.delete() equipment = instance.equipment er = EcheckRecord.objects.filter(equipment=equipment).order_by('check_date').last() if er: equipment.check_date = instance.check_date equipment.next_check_date = instance.check_date + relativedelta(months=equipment.cycle) equipment.save() else: equipment.check_date = None equipment.next_check_date = None equipment.save()