diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 620a947..df7a7ec 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -86,6 +86,7 @@ class StepOperationItem(CommonAModel): help_text='当为布尔类型时候,可以支持自定义显示形式。{"1":"是","0":"否"}或{"1":"需要","0":"不需要"},注意数字也需要引号') field_choice = models.JSONField('radio、checkbox、select的选项', default=dict, blank=True, help_text='radio,checkbox,select,multiselect类型可供选择的选项,格式为json如:{"1":"中国", "2":"美国"},注意数字也需要引号') + sort = models.IntegerField('排序号', default=1) class Meta: verbose_name = '操作记录条目' verbose_name_plural = verbose_name diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index 928c0a3..60fe1c8 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -1,6 +1,6 @@ from rest_framework.serializers import ModelSerializer -from .models import Material, Process, Step +from .models import Material, Process, ProductProcess, Step from apps.system.serializers import FileSimpleSerializer @@ -9,14 +9,35 @@ class MaterialSerializer(ModelSerializer): model = Material fields = '__all__' +class MaterialSimpleSerializer(ModelSerializer): + class Meta: + model = Material + fields = ['id', 'name', 'number'] + class ProcessSerializer(ModelSerializer): instruction_ = FileSimpleSerializer(source='instruction', read_only=True) class Meta: model = Process fields = '__all__' - + +class ProcessSimpleSerializer(ModelSerializer): + class Meta: + model = Process + fields = ['id', 'name', 'number'] class StepSerializer(ModelSerializer): class Meta: model = Step - fields = '__all__' \ No newline at end of file + fields = '__all__' + +class ProductProcessListSerializer(ModelSerializer): + process_ = ProcessSimpleSerializer(source='process', read_only=True) + product_ = MaterialSimpleSerializer(source='product', read_only=True) + class Meta: + model = ProductProcess + fields = '__all__' + +class ProductProcessUpdateSerializer(ModelSerializer): + class Meta: + model = ProductProcess + fields = ['sort'] \ No newline at end of file diff --git a/hb_server/apps/mtm/urls.py b/hb_server/apps/mtm/urls.py index 5772a69..9d4d325 100644 --- a/hb_server/apps/mtm/urls.py +++ b/hb_server/apps/mtm/urls.py @@ -1,12 +1,13 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.mtm.views import MaterialViewSet, ProcessViewSet, StepViewSet +from apps.mtm.views import MaterialViewSet, ProcessViewSet, ProductProcessViewSet, StepViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('material', MaterialViewSet, basename='material') router.register('process', ProcessViewSet, basename='process') +router.register('productprocess', ProductProcessViewSet, basename='productprocess') router.register('step', StepViewSet, basename='step') urlpatterns = [ path('', include(router.urls)), diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 60b8a88..4b98443 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -1,9 +1,9 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet, GenericViewSet -from rest_framework.mixins import CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin +from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin -from apps.mtm.models import Material, Process, Step -from apps.mtm.serializers import MaterialSerializer, ProcessSerializer, StepSerializer +from apps.mtm.models import Material, Process, ProductProcess, Step +from apps.mtm.serializers import MaterialSerializer, ProductProcessListSerializer, ProductProcessUpdateSerializer, ProcessSerializer, StepSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from rest_framework.response import Response @@ -23,6 +23,16 @@ class MaterialViewSet(CreateUpdateModelAMixin, ModelViewSet): ordering_fields = ['number', 'sort_str'] ordering = ['number'] + @action(methods=['get'], detail=True, perms_map={'get':'*'}, pagination_class=None, serializer_class=StepSerializer) + def steps(self, request, pk=None): + """ + 工序下的子工序 + """ + process = self.get_object() + serializer = self.serializer_class(instance=Step.objects.filter(process=process, is_deleted=False), many=True) + return Response(serializer.data) + + class ProcessViewSet(CreateUpdateModelAMixin, ModelViewSet): """ 工序表-增删改查 @@ -46,9 +56,27 @@ class ProcessViewSet(CreateUpdateModelAMixin, ModelViewSet): return Response(serializer.data) class StepViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): + """ + """ perms_map = {'*':'process_update'} queryset = Step.objects.all() serializer_class = StepSerializer search_fields = ['name', 'number'] filterset_fields = ['process'] - ordering = ['sort'] \ No newline at end of file + ordering = ['sort'] + + +class ProductProcessViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, DestroyModelMixin, GenericViewSet): + """ + 产品生产工艺流程增删改查 + """ + perms_map={'*':'*'} + queryset = ProductProcess.objects.select_related('process', 'product').all() + filterset_fields = ['process', 'product'] + serializer_class = ProductProcessListSerializer + ordering = ['sort'] + + def get_serializer_class(self): + if self.action == 'update': + return ProductProcessUpdateSerializer + return super().get_serializer_class() \ No newline at end of file