From ff386204b52acec76ec9411845d8cbdbe3a66144 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 18 Feb 2022 16:57:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=A6=96=E4=BB=B6=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E8=A1=A8first=5Ftest=5Finit=20part1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pm/migrations/0026_auto_20220218_1636.py | 65 +++++++++++++++++++ hb_server/apps/pm/models.py | 17 +++-- hb_server/apps/pm/serializers.py | 29 ++++++++- hb_server/apps/pm/views.py | 19 +++++- .../migrations/0005_user_last_check_time.py | 18 +++++ 5 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 hb_server/apps/pm/migrations/0026_auto_20220218_1636.py create mode 100644 hb_server/apps/system/migrations/0005_user_last_check_time.py diff --git a/hb_server/apps/pm/migrations/0026_auto_20220218_1636.py b/hb_server/apps/pm/migrations/0026_auto_20220218_1636.py new file mode 100644 index 0000000..bde5e8c --- /dev/null +++ b/hb_server/apps/pm/migrations/0026_auto_20220218_1636.py @@ -0,0 +1,65 @@ +# Generated by Django 3.2.9 on 2022-02-18 08:36 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0047_packitem'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('pm', '0025_auto_20220218_1616'), + ] + + operations = [ + migrations.RemoveField( + model_name='subproductionplan', + name='first_tester', + ), + migrations.RemoveField( + model_name='subproductionplan', + name='is_first_testok', + ), + migrations.AddField( + model_name='subproductionplan', + name='first_sign_time', + field=models.DateTimeField(blank=True, null=True, verbose_name='首件签字时间'), + ), + migrations.AddField( + model_name='subproductionplan', + name='form', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.recordform', verbose_name='首件检查表'), + ), + migrations.AddField( + model_name='subproductionplan', + name='is_testok', + field=models.BooleanField(blank=True, null=True, verbose_name='首件是否合格'), + ), + migrations.AddField( + model_name='subproductionplan', + name='leader_1', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='first_leader_1', to=settings.AUTH_USER_MODEL, verbose_name='工序负责人'), + ), + migrations.AddField( + model_name='subproductionplan', + name='leader_2', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='first_leader_2', to=settings.AUTH_USER_MODEL, verbose_name='技术负责人'), + ), + migrations.AddField( + model_name='subproductionplan', + name='leader_3', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='first_leader_3', to=settings.AUTH_USER_MODEL, verbose_name='总检'), + ), + migrations.AddField( + model_name='subproductionplan', + name='remark', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='备注'), + ), + migrations.AddField( + model_name='subproductionplan', + name='tester', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='first_tester', to=settings.AUTH_USER_MODEL, verbose_name='首件检查员'), + ), + ] diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index f872e60..3b4607d 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -7,7 +7,7 @@ import django.utils.timezone as timezone from django.db.models.query import QuerySet from utils.model import SoftModel, BaseModel -from apps.mtm.models import Material, Process, RecordFormField, SubProduction, SubprodctionMaterial +from apps.mtm.models import Material, Process, RecordForm, RecordFormField, SubProduction, SubprodctionMaterial from apps.sam.models import Order class ProductionPlan(CommonAModel): @@ -92,9 +92,18 @@ class SubProductionPlan(CommonAModel): is_picked = models.BooleanField('是否已领料', default=False) # wproducts = models.JSONField('半成品表', default=list, blank=True) - is_first_testok = models.BooleanField('首件是否合格', default=True) - first_tester = models.ForeignKey(User, on_delete=models.CASCADE, - verbose_name="首件检查员", null=True, blank=True) + is_testok = models.BooleanField('首件是否合格', null=True, blank=True) + form = models.ForeignKey(RecordForm, verbose_name='首件检查表', on_delete=models.CASCADE, null=True, blank=True) + tester = models.ForeignKey(User, on_delete=models.CASCADE, + verbose_name="首件检查员", null=True, blank=True, related_name='first_tester') + leader_1 = models.ForeignKey(User, on_delete=models.CASCADE, + verbose_name="工序负责人", null=True, blank=True, related_name='first_leader_1') + leader_2 = models.ForeignKey(User, on_delete=models.CASCADE, + verbose_name="技术负责人", null=True, blank=True, related_name='first_leader_2') + leader_3 = models.ForeignKey(User, on_delete=models.CASCADE, + verbose_name="总检", null=True, blank=True, related_name='first_leader_3') + first_sign_time = models.DateTimeField('首件签字时间', null=True, blank=True) + remark = models.CharField('备注', max_length=100, null=True, blank=True) class Meta: verbose_name = '子生产计划' diff --git a/hb_server/apps/pm/serializers.py b/hb_server/apps/pm/serializers.py index a537ae9..d098511 100644 --- a/hb_server/apps/pm/serializers.py +++ b/hb_server/apps/pm/serializers.py @@ -1,8 +1,9 @@ +from apps.mtm.models import RecordForm from apps.pm.models import ProductionPlan, SubProductionPlan, SubProductionProgress from rest_framework import serializers from apps.sam.serializers import OrderSerializer, OrderSimpleSerializer -from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, SubProductionSimpleSerializer -from apps.system.serializers import OrganizationSimpleSerializer +from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, RecordFormSimpleSerializer, SubProductionSimpleSerializer +from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer from utils.mixins import DynamicFieldsSerializerMixin @@ -74,4 +75,26 @@ class SubProductionProgressSerializer(serializers.ModelSerializer): subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True) class Meta: model = SubProductionProgress - fields = '__all__' \ No newline at end of file + fields = '__all__' + + +class FirstTestInitSerializer(serializers.Serializer): + form = serializers.PrimaryKeyRelatedField(queryset=RecordForm.objects.all(), required=True) + +class FirstTestDetailSerializer(serializers.ModelSerializer): + tester_ = UserSimpleSerializer(source='tester', read_only=True) + leader_1_ = UserSimpleSerializer(source='leader_1', read_only=True) + leader_2_ = UserSimpleSerializer(source='leader_2', read_only=True) + leader_3_ = UserSimpleSerializer(source='leader_3', read_only=True) + form_ = RecordFormSimpleSerializer(source='form', read_only=True) + # record_data = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True) + record_data = serializers.SerializerMethodField() + + class Meta: + model = SubProductionPlan + fields = ['id', 'form', 'form_', 'is_testok', 'remark', 'first_sign_time' + 'tester', 'tester_', 'leader_1', 'leader_1_', 'leader_2', + 'leader_2_', 'leader_3', 'leader_3_'] + + def get_record_data(self, obj): + return None \ No newline at end of file diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index 5df4d6f..e7bcfd2 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -10,7 +10,7 @@ from apps.inm.serializers import MaterialBatchSerializer from apps.mtm.models import Material, Step, SubProduction, SubprodctionMaterial from apps.pm.filters import PlanFilterSet, SubproductionProgressFilterSet from apps.system.mixins import CreateUpdateModelAMixin -from apps.pm.serializers import GenSubPlanSerializer, PickNeedSerializer, PlanDestorySerializer, ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer, ResourceConvertListSerializer, ResourceConvertSerializer, SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer +from apps.pm.serializers import FirstTestInitSerializer, GenSubPlanSerializer, PickNeedSerializer, PlanDestorySerializer, ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer, ResourceConvertListSerializer, ResourceConvertSerializer, SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin from apps.pm.models import ProductionPlan, SubProductionProgress, SubProductionPlan from rest_framework.viewsets import GenericViewSet, ModelViewSet @@ -229,6 +229,23 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo have = MaterialBatchSerializer(instance=objs, many=True).data return Response({'need':need, 'have':have}) + @action(methods=['put'], detail=True, perms_map={'post':'first_test'}, serializer_class=FirstTestInitSerializer) + @transaction.atomic + def first_test_init(self, request, pk=None): + """ + 获取首件检查表 + """ + obj = self.get_object() + if obj.is_testok is None: + rdata = request.data + serializer = self.get_serializer(data=rdata) + serializer.is_valid(raise_exception=True) + form = serializer.validated_data.get('form') + + raise APIException('已经过首件确认') + + + class SubProductionProgressViewSet(ListModelMixin, GenericViewSet): """ 生产进度 diff --git a/hb_server/apps/system/migrations/0005_user_last_check_time.py b/hb_server/apps/system/migrations/0005_user_last_check_time.py new file mode 100644 index 0000000..284e91b --- /dev/null +++ b/hb_server/apps/system/migrations/0005_user_last_check_time.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2022-01-25 08:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0004_user_is_atwork'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='last_check_time', + field=models.DateTimeField(blank=True, null=True, verbose_name='打卡时间'), + ), + ]