factory/apps/wpm/views.py

96 lines
3.2 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.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from .filters import SfLogExpFilter, SfLogFilter
from .models import SfLog, SfLogExp, StLog, WMaterial
from .serializers import SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer
# 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']