From 5289e712805d6e6889b3e79620ddb4a84b6be3ef Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 30 Aug 2024 09:21:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wmaterial=E6=B7=BB=E5=8A=A0=E5=A4=96?= =?UTF-8?q?=E5=8D=8F=E5=AD=97=E6=AE=B5=E5=8F=8A=E7=9B=B8=E5=85=B3=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/filters.py | 3 ++- .../wpm/migrations/0063_wmaterial_supplier.py | 20 +++++++++++++++++++ apps/wpm/models.py | 1 + apps/wpm/serializers.py | 1 + apps/wpm/services.py | 3 +++ apps/wpm/views.py | 2 +- 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 apps/wpm/migrations/0063_wmaterial_supplier.py diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index 06f4217d..5499c14b 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -50,7 +50,8 @@ class WMaterialFilter(filters.FilterSet): "mgroup__name": ["exact", "in"], "count": ["gte", "lte", "exact"], "notok_sign": ["exact", "in", "isnull"], - "count_xtest": ["gte", "isnull"] + "count_xtest": ["gte", "isnull"], + "supplier": ["exact"], } class MlogFilter(filters.FilterSet): diff --git a/apps/wpm/migrations/0063_wmaterial_supplier.py b/apps/wpm/migrations/0063_wmaterial_supplier.py new file mode 100644 index 00000000..7948d9dc --- /dev/null +++ b/apps/wpm/migrations/0063_wmaterial_supplier.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.12 on 2024-08-30 01:17 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('pum', '0008_auto_20240731_1829'), + ('wpm', '0062_auto_20240828_1052'), + ] + + operations = [ + migrations.AddField( + model_name='wmaterial', + 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 41237f6f..4d2f3026 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -97,6 +97,7 @@ class WMaterial(CommonBDModel): state = models.PositiveSmallIntegerField('状态', default=10, choices=((10, '合格'), (20, '不合格'), (30, '返修'), (40, '检验'), (50, '报废'))) material = models.ForeignKey( Material, verbose_name='物料', on_delete=models.CASCADE, related_name='wm_m') + supplier = models.ForeignKey(Supplier, verbose_name='外协供应商', on_delete=models.SET_NULL, null=True, blank=True) mgroup = models.ForeignKey(Mgroup, verbose_name='所在工段', on_delete=models.CASCADE, null=True, blank=True) batch = models.CharField('批次号', max_length=50) count = models.PositiveIntegerField('当前数量', default=0) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 06f0bfc7..4668e9d7 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -172,6 +172,7 @@ class SflogExpSerializer(CustomModelSerializer): class WMaterialSerializer(CustomModelSerializer): material_ = MaterialSimpleSerializer(source='material', read_only=True) + supplier_name = serializers.CharField(source='supplier.name', read_only=True) material_name = serializers.StringRelatedField( source='material', read_only=True) mgroup_name = serializers.StringRelatedField(source='mgroup.name', read_only=True) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index f12122b7..0d31384f 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -204,6 +204,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): belong_dept = mgroup.belong_dept material_out = mlog.material_out material_in = mlog.material_in + supplier = mlog.supplier # 外协 if material_in: # 需要进行车间库存管理 m_ins = Mlogb.objects.filter(mlog=mlog, material_in__isnull=False) if m_ins.exists(): @@ -271,6 +272,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): wm.count = wm.count + mo_count wm.count_eweight = mo_count_eweight wm.update_by = user + if supplier is not None: + wm.supplier = supplier wm.save() mlog.submit_time = now diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 99bd2794..e8d2ea34 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -112,7 +112,7 @@ class WMaterialViewSet(ListModelMixin, CustomGenericViewSet): perms_map = {'get': '*'} queryset = WMaterial.objects.filter(count__gt=0) serializer_class = WMaterialSerializer - select_related_fields = ['material', 'belong_dept', 'material__process'] + select_related_fields = ['material', 'belong_dept', 'material__process', 'supplier'] search_fields = ['material__name', 'material__number', 'material__specification', 'batch', 'material__model'] filterset_class = WMaterialFilter