From c068c47bc772fff4d538f39c22f8484d5df47310 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 23 Jul 2024 10:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=A4=96=E5=8D=8F?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=97=A5=E5=BF=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wpm/migrations/0058_auto_20240723_1006.py | 25 +++++++++++++++++++ apps/wpm/models.py | 5 ++++ apps/wpm/serializers.py | 12 +++++++-- apps/wpm/views.py | 2 +- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 apps/wpm/migrations/0058_auto_20240723_1006.py diff --git a/apps/wpm/migrations/0058_auto_20240723_1006.py b/apps/wpm/migrations/0058_auto_20240723_1006.py new file mode 100644 index 00000000..cdd0eaca --- /dev/null +++ b/apps/wpm/migrations/0058_auto_20240723_1006.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2024-07-23 02:06 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('pum', '0006_supplier_can_outsource'), + ('wpm', '0057_auto_20240719_1002'), + ] + + operations = [ + migrations.AddField( + model_name='mlog', + name='mtype', + field=models.PositiveSmallIntegerField(choices=[(10, '自生产'), (20, '外协生产')], default=10, help_text='10:自生产;20:外协生产', verbose_name='生产类型'), + ), + migrations.AddField( + model_name='mlog', + name='supplier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pum.supplier', verbose_name='外协供应商'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 4e5f62f1..ceb74ee8 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -7,6 +7,7 @@ from django.utils.timezone import localtime from apps.em.models import Equipment from apps.system.models import Dept from datetime import timedelta +from apps.pum.models import Supplier # Create your models here. @@ -105,7 +106,11 @@ class Mlog(CommonADModel): # 变成父级的字段 MLOG_ONETIME = 10 MLOG_STEP = 20 + MTYPE_SELF = 10 + MTYPE_OUT = 20 fill_way = models.PositiveSmallIntegerField("填写方式", default=10, help_text='10:一次填写;20:分步填写') + mtype = models.PositiveSmallIntegerField('生产类型', default=10, help_text='10:自生产;20:外协生产', choices=((10, '自生产'), (20, '外协生产'))) + supplier = models.ForeignKey(Supplier, verbose_name='外协供应商', on_delete=models.SET_NULL, null=True, blank=True) work_start_time = models.DateTimeField('生产开始时间', null=True, blank=True) work_end_time = models.DateTimeField('生产结束时间', null=True, blank=True) hour_work = models.FloatField('预计工时', null=True, blank=True) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index dba7b9fb..385fb911 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -208,6 +208,7 @@ class MlogbDetailSerializer(CustomModelSerializer): fields = '__all__' class MlogSerializer(CustomModelSerializer): + supplier_name = serializers.CharField(source='supplier.name', read_only=True) belong_dept = serializers.CharField( source='mgroup.belong_dept.id', read_only=True) belong_dept_name = serializers.CharField( @@ -311,6 +312,7 @@ class MlogSerializer(CustomModelSerializer): def validate(self, attrs): attrs['fill_way'] = Mlog.MLOG_ONETIME + attrs['mtype'] = Mlog.MTYPE_SELF # 默认为自生产 mtask = attrs.get('mtask', None) count_notok = 0 for i in attrs: @@ -335,14 +337,16 @@ class MlogSerializer(CustomModelSerializer): class MlogInitSerializer(CustomModelSerializer): class Meta: model = Mlog - fields = ['id', 'work_start_time', 'mgroup', 'reminder_interval_list', 'route', 'equipment', 'handle_user', 'note'] + fields = ['id', 'work_start_time', 'mgroup', 'reminder_interval_list', 'route', 'equipment', 'handle_user', 'note', 'mtype', 'supplier'] extra_kwargs = { 'work_start_time': {'required': True}, 'route':{'required': True}, - 'mgroup': {'required': True} + 'mgroup': {'required': True}, + 'mtype': {'required': True} } def validate(self, attrs): + mtype = attrs['mtype'] route: Route = attrs['route'] mgroup: Mgroup = attrs['mgroup'] if route.process != mgroup.process: @@ -351,6 +355,10 @@ class MlogInitSerializer(CustomModelSerializer): attrs['material_in'] = route.material_in attrs['material_out'] = route.material_out attrs['fill_way'] = Mlog.MLOG_STEP + if mtype == Mlog.MTYPE_OUT: + supplier = attrs.get('supplier', None) + if not supplier: + raise ValidationError('外协必须选择外协单位') return attrs class MlogChangeSerializer(CustomModelSerializer): diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 6edb24ec..e4c3a3f8 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -141,7 +141,7 @@ class MlogViewSet(CustomModelViewSet): queryset = Mlog.objects.all() serializer_class = MlogSerializer select_related_fields = ['create_by', 'update_by', 'mtask', - 'handle_user', 'handle_user_2', 'equipment', 'equipment_2', 'material_in', 'material_out'] + 'handle_user', 'handle_user_2', 'equipment', 'equipment_2', 'material_in', 'material_out', 'supplier'] prefetch_related_fields = ['handle_users', 'material_outs', 'b_mlog', 'equipments'] filterset_class = MlogFilter