116 lines
3.9 KiB
Python
116 lines
3.9 KiB
Python
from django.db import transaction
|
|
from django.shortcuts import render
|
|
from rest_framework.decorators import action
|
|
from rest_framework.exceptions import ParseError
|
|
from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin
|
|
from rest_framework.response import Response
|
|
|
|
from apps.mtm.models import Material
|
|
from apps.pm.models import Mtask
|
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
|
from apps.utils.mixins import BulkCreateModelMixin
|
|
|
|
from .filters import SfLogExpFilter, SfLogFilter
|
|
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog
|
|
from .serializers import SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogSerializer
|
|
|
|
# Create your views here.
|
|
|
|
|
|
class StLogViewSet(ListModelMixin, CustomGenericViewSet):
|
|
"""
|
|
list:停机记录
|
|
|
|
停机记录
|
|
"""
|
|
perms_map = {'get': '*'}
|
|
queryset = StLog.objects.all()
|
|
serializer_class = StLogSerializer
|
|
select_related_fields = ['mgroup']
|
|
filterset_fields = ['mgroup']
|
|
ordering = ['-start_time']
|
|
|
|
|
|
class SfLogViewSet(UpdateModelMixin, ListModelMixin, DestroyModelMixin, CustomGenericViewSet):
|
|
"""
|
|
list:值班记录
|
|
|
|
值班记录
|
|
"""
|
|
perms_map = {'get': '*', 'put': 'sflog.update', 'delete': 'sflog.delete'}
|
|
queryset = SfLog.objects.all()
|
|
serializer_class = SfLogSerializer
|
|
select_related_fields = ['mgroup', 'shift', 'team', 'leader']
|
|
filterset_class = SfLogFilter
|
|
search_fields = ['note']
|
|
ordering = ['-start_time']
|
|
|
|
@action(methods=['get'], detail=True, perms_map={'get': '*'})
|
|
def init_test(self, request, pk=None):
|
|
"""
|
|
初始化检测录入
|
|
|
|
初始化检测录入
|
|
"""
|
|
from apps.qm.models import QuaStat, TestItem
|
|
from apps.qm.serializers import QuaStatSerializer
|
|
obj = self.get_object()
|
|
test_materials = Material.objects.filter(
|
|
id__in=obj.mgroup.test_materials).order_by('sort', '-create_time')
|
|
for material in test_materials:
|
|
testitems = TestItem.objects.filter(
|
|
id__in=material.testitems).order_by('sort', '-create_time')
|
|
for testitem in testitems:
|
|
params = {'material': material,
|
|
'testitem': testitem, 'sflog': obj}
|
|
QuaStat.objects.get_or_create(
|
|
**params, defaults={**params, **{'create_by': request.user, 'belong_dept': obj.mgroup.belong_dept}})
|
|
qs = QuaStat.objects.filter(sflog=obj).order_by(
|
|
'material__sort', 'material__create_time', 'testitem__sort', 'testitem__create_time')
|
|
sr = QuaStatSerializer(instance=qs, many=True)
|
|
return Response(sr.data)
|
|
|
|
|
|
class SfLogExpViewSet(CustomModelViewSet):
|
|
"""
|
|
list:生产异常动态
|
|
|
|
生产异常动态
|
|
"""
|
|
queryset = SfLogExp.objects.all()
|
|
serializer_class = SflogExpSerializer
|
|
select_related_fields = ['sflog', 'sflog__mgroup', 'stlog']
|
|
filterset_class = SfLogExpFilter
|
|
|
|
|
|
class WMaterialViewSet(ListModelMixin, CustomGenericViewSet):
|
|
"""
|
|
list: 车间库存
|
|
|
|
车间库存
|
|
"""
|
|
queryset = WMaterial.objects.all()
|
|
serializer_class = WMaterialSerializer
|
|
select_related_fields = ['material', 'belong_dept']
|
|
search_fields = ['material__name',
|
|
'material__number', 'material__specification']
|
|
filterset_fields = ['material', 'belong_dept']
|
|
|
|
|
|
class MlogViewSet(CustomModelViewSet):
|
|
"""
|
|
list: 生产日志
|
|
|
|
生产日志
|
|
"""
|
|
perms_map = {'get': '', 'post': 'mlog.create', 'delete': 'mlog.delete'}
|
|
queryset = Mlog.objects.all()
|
|
serializer_class = MlogSerializer
|
|
select_related_fields = ['create_by', 'update_by', 'mtask']
|
|
filterset_fields = ['mtask']
|
|
|
|
def perform_destroy(self, instance):
|
|
if instance.mtask.state == Mtask.MTASK_DONE:
|
|
raise ParseError('任务已提交日志不可变动')
|
|
return super().perform_destroy(instance)
|