diff --git a/hb_server/apps/inm/migrations/0011_rename_fifodetail_fifoitem.py b/hb_server/apps/inm/migrations/0011_rename_fifodetail_fifoitem.py new file mode 100644 index 0000000..46f6dc7 --- /dev/null +++ b/hb_server/apps/inm/migrations/0011_rename_fifodetail_fifoitem.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.6 on 2021-11-08 01:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0028_auto_20211102_1707'), + ('qm', '0003_testrecord'), + ('inm', '0010_auto_20211102_1631'), + ] + + operations = [ + migrations.RenameModel( + old_name='FIFODetail', + new_name='FIFOItem', + ), + ] diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index eefa002..fc21596 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -68,9 +68,9 @@ class FIFO(CommonAModel): remark = models.CharField('备注', max_length=1000, default='') -class FIFODetail(BaseModel): +class FIFOItem(BaseModel): """ - 出入库详细记录 + 出入库详细条目 """ is_tested = models.BooleanField('是否已检测', default=False) is_testok = models.BooleanField('是否检测合格', default=False) diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index 0087fae..62461c4 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from apps.inm.models import FIFO, FIFODetail, IProduct, MaterialBatch, WareHouse,Inventory +from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse,Inventory from apps.system.serializers import UserSimpleSerializer from apps.mtm.serializers import MaterialSimpleSerializer @@ -42,10 +42,10 @@ class FIFOListSerializer(serializers.ModelSerializer): model=FIFO fields = '__all__' -class FIFODetailSerializer(serializers.ModelSerializer): +class FIFOItemSerializer(serializers.ModelSerializer): material_= MaterialSimpleSerializer(source='material', read_only=True) class Meta: - model=FIFODetail + model= FIFOItem fields = '__all__' class IProductInPurSerializer(serializers.ModelSerializer): @@ -56,7 +56,7 @@ class IProductInPurSerializer(serializers.ModelSerializer): class FIFODetailInPurSerializer(serializers.ModelSerializer): details = IProductInPurSerializer(many=True, required=False) class Meta: - model = FIFODetail + model = FIFOItem fields = ['material', 'count', 'batch', 'details'] class MaterialBatchQuerySerializer(serializers.Serializer): @@ -101,7 +101,7 @@ class FIFOInPurSerializer(serializers.ModelSerializer): raise serializers.ValidationError('数目对不上') else: i['fifo'] = obj - fifod = FIFODetail.objects.create(**i) + fifod = FIFOItem.objects.create(**i) p_list = [] for x in p_details: x['state'] = 1 @@ -113,6 +113,6 @@ class FIFOInPurSerializer(serializers.ModelSerializer): IProduct.objects.bulk_create(p_list) else: i['fifo'] = obj - FIFODetail.objects.create(**i) + FIFOItem.objects.create(**i) return obj diff --git a/hb_server/apps/inm/signals.py b/hb_server/apps/inm/signals.py index c4b74ee..f3fd13f 100644 --- a/hb_server/apps/inm/signals.py +++ b/hb_server/apps/inm/signals.py @@ -1,7 +1,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver -from apps.inm.models import Inventory, MaterialBatch, FIFO, FIFODetail +from apps.inm.models import Inventory, MaterialBatch, FIFO, FIFOItem def update_inm(instance:FIFO, type:int=1): @@ -11,7 +11,7 @@ def update_inm(instance:FIFO, type:int=1): warehouse = instance.warehouse if instance.type in [3]: # 采购入库 # 更新相关表 - for i in FIFODetail.objects.filter(fifo=instance): + for i in FIFOItem.objects.filter(fifo=instance): material = i.material o1, _ = Inventory.objects.get_or_create(material=material, warehouse=warehouse, \ defaults={'material':material, 'warehouse':warehouse, 'count':0}) @@ -25,7 +25,7 @@ def update_inm(instance:FIFO, type:int=1): material.save() elif instance.type in [1]: # 生产领料 # 更新相关表 - for i in FIFODetail.objects.filter(fifo=instance): + for i in FIFOItem.objects.filter(fifo=instance): material = i.material o1 = Inventory.objects.get(material=material, warehouse=warehouse) o1.count = o1.count - i.count diff --git a/hb_server/apps/inm/urls.py b/hb_server/apps/inm/urls.py index 4b968ff..f5d68de 100644 --- a/hb_server/apps/inm/urls.py +++ b/hb_server/apps/inm/urls.py @@ -1,6 +1,6 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.inm.views import FIFODetailViewSet, FIFOViewSet, MaterialBatchViewSet, WarehouseViewSet,InventoryViewSet +from apps.inm.views import FIFOItemViewSet, FIFOViewSet, MaterialBatchViewSet, WarehouseViewSet,InventoryViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -9,7 +9,7 @@ router.register('warehouse', WarehouseViewSet, basename='warehouse') router.register('inventory', InventoryViewSet, basename='inventory') router.register('materialbatch', MaterialBatchViewSet, basename='materialbatch') router.register('fifo', FIFOViewSet, basename='fifo'), -router.register('fifodetail', FIFODetailViewSet, basename='fifodetail') +router.register('fifodetail', FIFOItemViewSet, basename='fifodetail') urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/inm/views.py b/hb_server/apps/inm/views.py index 10eb4b5..032124a 100644 --- a/hb_server/apps/inm/views.py +++ b/hb_server/apps/inm/views.py @@ -5,8 +5,8 @@ from rest_framework.mixins import DestroyModelMixin, ListModelMixin, RetrieveMod from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.inm.filters import MbFilterSet -from apps.inm.models import FIFO, FIFODetail, MaterialBatch, WareHouse,Inventory -from apps.inm.serializers import FIFODetailSerializer, FIFOInPurSerializer, FIFOListSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, WareHouseCreateUpdateSerializer,InventorySerializer +from apps.inm.models import FIFO, FIFOItem, MaterialBatch, WareHouse,Inventory +from apps.inm.serializers import FIFOItemSerializer, FIFOInPurSerializer, FIFOListSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, WareHouseCreateUpdateSerializer,InventorySerializer from apps.inm.signals import update_inm from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action @@ -63,13 +63,13 @@ class MaterialBatchViewSet(ListModelMixin, GenericViewSet): queryset = self.queryset.filter(warehouse__id=data['warehouse'], material__id__in=data['materials']) return Response(MaterialBatchSerializer(instance=queryset, many=True).data) -class FIFODetailViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): +class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): """ 出入库记录详情表 """ perms_map = {'*': '*'} - queryset = FIFODetail.objects.select_related('material', 'fifo').all() - serializer_class = FIFODetailSerializer + queryset = FIFOItem.objects.select_related('material', 'fifo').all() + serializer_class = FIFOItemSerializer filterset_fields = ['material', 'fifo'] search_fields = [] ordering_fields = ['create_time'] @@ -113,7 +113,7 @@ class FIFOViewSet(ListModelMixin, GenericViewSet): 审核通过 """ obj = self.get_object() - for i in FIFODetail.objects.filter(fifo=obj): + for i in FIFOItem.objects.filter(fifo=obj): if not i.is_testok: raise APIException('未检验通过, 不可审核') if obj.is_audited: diff --git a/hb_server/apps/qm/migrations/0004_auto_20211108_0951.py b/hb_server/apps/qm/migrations/0004_auto_20211108_0951.py new file mode 100644 index 0000000..853a26e --- /dev/null +++ b/hb_server/apps/qm/migrations/0004_auto_20211108_0951.py @@ -0,0 +1,41 @@ +# Generated by Django 3.2.6 on 2021-11-08 01:51 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0028_auto_20211102_1707'), + ('qm', '0003_testrecord'), + ] + + operations = [ + migrations.RenameField( + model_name='testrecord', + old_name='fifo_detail', + new_name='fifo_item', + ), + migrations.CreateModel( + name='TestRecordItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('field_name', models.CharField(max_length=50, verbose_name='字段名')), + ('field_key', models.CharField(max_length=50, verbose_name='字段标识')), + ('field_type', models.IntegerField(choices=[(1, '生产记录'), (2, '检验记录')], verbose_name='字段类型')), + ('field_value', models.JSONField(blank=True, default=dict, verbose_name='录入值')), + ('need_judge', models.BooleanField(default=False, verbose_name='是否需要判定')), + ('is_testok', models.BooleanField(default=True, verbose_name='是否合格')), + ('form_field', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, to='mtm.recordformfield', verbose_name='关联字段')), + ('test_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.testrecord', verbose_name='关联的检测记录')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/hb_server/apps/qm/models.py b/hb_server/apps/qm/models.py index 2d5a917..ac58211 100644 --- a/hb_server/apps/qm/models.py +++ b/hb_server/apps/qm/models.py @@ -51,7 +51,7 @@ class TestRecord(CommonAModel): form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE) record_data = models.JSONField('记录数据', default=dict, blank=True) is_testok = models.BooleanField('是否合格', default=True) - fifo_detail = models.ForeignKey('inm.fifodetail', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True) + fifo_item = models.ForeignKey('inm.fifoitem', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True) class TestRecordItem(BaseModel): diff --git a/hb_server/apps/qm/serializers.py b/hb_server/apps/qm/serializers.py index 51d5cb7..8924a14 100644 --- a/hb_server/apps/qm/serializers.py +++ b/hb_server/apps/qm/serializers.py @@ -2,7 +2,7 @@ from rest_framework import serializers from apps.mtm.models import RecordForm, RecordFormField from apps.mtm.serializers import RecordFormFieldSerializer, RecordFormSimpleSerializer from apps.system.serializers import FileSimpleSerializer -from .models import Standard, TestItem, TestRecord +from .models import Standard, TestItem, TestRecord, TestRecordItem class StandardCreateUpdateSerializer(serializers.ModelSerializer): class Meta: @@ -35,10 +35,16 @@ class AnalysisItemSerializer(serializers.ModelSerializer): pass +class TestRecordItemSerializer(serializers.ModelSerializer): + class Meta: + model = TestRecordItem + fields = ['form_field', 'field_value'] + class TestRecordCreateSerializer(serializers.ModelSerializer): + record_data = TestRecordItemSerializer(many=True) class Meta: model = TestRecord - fields = ['form', 'record_data', 'is_testok', 'fifo_detail'] + fields = ['form', 'record_data', 'is_testok', 'fifo_item'] def create(self, validated_data): if 'is_testok' not in validated_data: diff --git a/hb_server/apps/qm/views.py b/hb_server/apps/qm/views.py index 41133f5..e43ec38 100644 --- a/hb_server/apps/qm/views.py +++ b/hb_server/apps/qm/views.py @@ -43,7 +43,7 @@ class TestRecordViewSet(ModelViewSet): 检测记录 """ perms_map = {'*': '*'} - queryset = TestRecord.objects.select_related('fifo_detail', 'form').all() + queryset = TestRecord.objects.select_related('fifo_item', 'form').all() serializer_class = TestRecordListSerializer ordering = ['-id'] @@ -59,7 +59,7 @@ class TestRecordViewSet(ModelViewSet): def perform_create(self, serializer): obj = serializer.save(create_by = self.request.user) # 如果检测合格 - if obj.fifo_detail: - obj.fifo_detail.is_testok = True if obj.is_testok else False - obj.fifo_detail.is_tested = True - obj.fifo_detail.save() \ No newline at end of file + if obj.fifo_item: + obj.fifo_item.is_testok = True if obj.is_testok else False + obj.fifo_item.is_tested = True + obj.fifo_item.save() \ No newline at end of file diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 035fa4a..3226671 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers from rest_framework.serializers import ModelSerializer -from apps.inm.models import FIFO, FIFODetail, MaterialBatch, WareHouse +from apps.inm.models import FIFO, FIFOItem, MaterialBatch, WareHouse from apps.inm.signals import update_inm from apps.mtm.models import Material, RecordForm, Step from apps.mtm.serializers import MaterialSimpleSerializer @@ -46,7 +46,7 @@ class PickSerializer(serializers.Serializer): i['fifo'] = fifo i['count'] = i.pop('pick_count') i['is_teskok'] = True - FIFODetail.objects.create(**i) + FIFOItem.objects.create(**i) # 更新车间物料 wm, _ = WMaterial.objects.get_or_create(material=i['material'], batch=i['batch'], \ subproduction_plan=sp,defaults={