diff --git a/hb_server/apps/mtm/migrations/0036_auto_20211123_1052.py b/hb_server/apps/mtm/migrations/0036_auto_20211123_1052.py new file mode 100644 index 0000000..c0e36de --- /dev/null +++ b/hb_server/apps/mtm/migrations/0036_auto_20211123_1052.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.9 on 2021-11-23 02:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0035_auto_20211117_1637'), + ] + + operations = [ + migrations.AddField( + model_name='recordformfield', + name='draw_template', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='绘图模板'), + ), + migrations.AlterField( + model_name='recordformfield', + name='field_type', + field=models.CharField(choices=[('string', '字符串'), ('int', '整型'), ('float', '浮点'), ('boolean', '布尔'), ('date', '日期'), ('time', '时间'), ('datetime', '日期时间'), ('radio', '单选'), ('checkbox', '多选'), ('select', '单选下拉'), ('selects', '多选下拉'), ('textarea', '文本域'), ('draw', '绘图')], max_length=50, verbose_name='类型'), + ), + ] diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 46e82b4..c6ebc6e 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -131,6 +131,7 @@ class RecordFormField(CommonAModel): ('select', '单选下拉'), ('selects', '多选下拉'), ('textarea', '文本域'), + ('draw', '绘图') ) high_rule_choices = ( (1, '小于'), @@ -161,6 +162,8 @@ class RecordFormField(CommonAModel): is_hidden = models.BooleanField('是否隐藏', default=False) parent = models.ForeignKey('self', verbose_name='父', on_delete=models.CASCADE, null=True, blank=True) + draw_template = models.CharField('绘图模板', max_length=200, null=True, blank=True) + class Meta: verbose_name = '记录表格字段' diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 3b87574..ed2850a 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -3,7 +3,7 @@ from rest_framework.serializers import ModelSerializer from apps.em.serializers import EquipmentSimpleSerializer from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse from apps.inm.signals import update_inm -from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial +from apps.mtm.models import Material, RecordForm, RecordFormField, Step, SubprodctionMaterial from apps.mtm.serializers import MaterialSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer from apps.pm.models import SubProductionPlan, SubProductionProgress @@ -239,19 +239,18 @@ class OperationRecordItemSerializer(serializers.ModelSerializer): model = OperationRecordItem fields = ['form_field', 'field_value'] -class OperationRecordSerializer(serializers.ModelSerializer): - record_data = OperationRecordItemSerializer(many=True) - class Meta: - model = OperationRecord - fields = ['form', 'record_data'] - - class OperationRecordSubmitSerializer(serializers.ModelSerializer): record_data = OperationRecordItemSerializer(many=True) class Meta: model = OperationRecord fields = ['record_data'] +class OperationRecordSerializer(serializers.ModelSerializer): + record_data = OperationRecordItemSerializer(many=True) + class Meta: + model = OperationRecord + fields = ['form', 'record_data'] + class OperationWproductListSerializer(serializers.ModelSerializer): material_ = MaterialSimpleSerializer(source='material', read_only=True) subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True) diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index c0fc856..2b2a75f 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -7,7 +7,7 @@ from rest_framework.views import APIView from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, WareHouse from apps.inm.signals import update_inm -from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial, TechDoc +from apps.mtm.models import Material, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc from apps.mtm.serializers import RecordFormDetailSerializer, SubprodctionMaterialListSerializer, TechDocListSerializer from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.pm.serializers import SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer @@ -284,12 +284,19 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd return OperationUpdateSerializer return super().get_serializer_class() + def update(self, request, *args, **kwargs): + instance = self.get_object() + if instance.is_submited: + raise exceptions.APIException('该操作已提交') + return super().update(request, *args, **kwargs) + def destroy(self, request, *args, **kwargs): instance = self.get_object() if instance.is_submited: raise exceptions.APIException('该操作已提交') self.perform_destroy(instance) return Response(status=status.HTTP_204_NO_CONTENT) + @transaction.atomic def create(self, request, *args, **kwargs): data = request.data @@ -465,6 +472,13 @@ class OperationEquipViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin, if self.action == 'update': return OperationEquipUpdateSerializer return super().get_serializer_class() + + def update(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + return super().update(request, *args, **kwargs) + @transaction.atomic() def destroy(self, request, *args, **kwargs): instance = self.get_object() @@ -500,7 +514,8 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): opr = self.get_object() wrds = [] for m in vdata['record_data']: # 保存记录详情 - form_field = m['form_field'] + form_field = RecordFormField.objects.get(pk=m['form_field']) + m['form_field'] = form_field m['field_name'] = form_field.field_name m['field_key'] = form_field.field_key m['field_type'] = form_field.field_type @@ -529,6 +544,20 @@ class OperationMaterialInputViewSet(ListModelMixin, CreateModelMixin, DestroyMod if self.action == 'create': return OperationMaterialCreate1Serailizer return super().get_serializer_class() + + def create(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + return super().create(request, *args, **kwargs) + + @transaction.atomic() + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + instance.delete() + return Response() class OperationMaterialOutputViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, GenericViewSet): """ @@ -545,6 +574,20 @@ class OperationMaterialOutputViewSet(ListModelMixin, CreateModelMixin, DestroyMo if self.action == 'create': return OperationMaterialCreate2Serailizer return super().get_serializer_class() + + def create(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + return super().create(request, *args, **kwargs) + + @transaction.atomic() + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + instance.delete() + return Response() class OperationMaterialToolViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, GenericViewSet): """ @@ -562,6 +605,20 @@ class OperationMaterialToolViewSet(ListModelMixin, CreateModelMixin, DestroyMode return OperationMaterialCreate3Serializer return super().get_serializer_class() + def create(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + return super().create(request, *args, **kwargs) + + @transaction.atomic() + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + if instance.operation.is_submited: + raise exceptions.APIException('该操作已提交') + instance.delete() + return Response() + class DoFormInit(CreateAPIView, GenericAPIView): perms_map={'*':'*'} serializer_class=OperationInitSerializer