diff --git a/hb_server/apps/mtm/migrations/0047_packitem.py b/hb_server/apps/mtm/migrations/0047_packitem.py new file mode 100644 index 0000000..5338aee --- /dev/null +++ b/hb_server/apps/mtm/migrations/0047_packitem.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.9 on 2022-02-18 07:20 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('mtm', '0046_alter_recordform_type'), + ] + + operations = [ + migrations.CreateModel( + name='PackItem', + 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='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='名称')), + ('specification', models.CharField(blank=True, max_length=100, null=True, verbose_name='型号')), + ('unit', models.CharField(max_length=10, verbose_name='单位')), + ('count', models.PositiveIntegerField(default=1, verbose_name='数量')), + ('sort', models.PositiveIntegerField(default=1, verbose_name='序号')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='packitem_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='关联成品')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='packitem_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 9bb007f..cd9be3e 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -1,3 +1,4 @@ +from cv2 import meanStdDev from django.db import models from django.db.models.base import Model import django.utils.timezone as timezone @@ -49,6 +50,18 @@ class Material(CommonAModel): def __str__(self): return self.name +class PackItem(CommonAModel): + """ + 装箱项目 + """ + material = models.ForeignKey(Material, verbose_name='关联成品', + on_delete=models.CASCADE) + name = models.CharField('名称', max_length=100) + specification = models.CharField('型号', max_length=100, null=True, blank=True) + unit = models.CharField('单位', max_length=10) + count = models.PositiveIntegerField('数量', default=1) + sort = models.PositiveIntegerField('序号', default=1) + class Process(CommonAModel): """ 工序 diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index 7d97aa4..603ff5c 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers from rest_framework.exceptions import ParseError, ValidationError from utils.mixins import DynamicFieldsSerializerMixin -from .models import Material, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction +from .models import Material, PackItem, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer @@ -24,6 +24,20 @@ class MaterialDetailSerializer(serializers.ModelSerializer): objs = Process.objects.filter(subproduction_process__product=obj, subproduction_process__is_deleted=False, is_deleted=False).distinct().order_by('number') return ProcessSimpleSerializer(instance=objs, many=True).data +class PackItemSerializer(serializers.ModelSerializer): + class Meta: + model = PackItem + fields = '__all__' + +class PackItemCreateSerializer(serializers.ModelSerializer): + class Meta: + model = PackItem + fields = ['material', 'name', 'specification', 'unit', 'count', 'sort'] + +class PackItemUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = PackItem + fields = ['count', 'sort'] class MaterialSimpleSerializer(serializers.ModelSerializer): class Meta: diff --git a/hb_server/apps/mtm/urls.py b/hb_server/apps/mtm/urls.py index 2010738..968f8d3 100644 --- a/hb_server/apps/mtm/urls.py +++ b/hb_server/apps/mtm/urls.py @@ -1,11 +1,12 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.mtm.views import InputMaterialViewSet, MaterialViewSet, OtherMaterialViewSet, OutputMaterialViewSet, ProcessViewSet, RecordFormFieldViewSet, RecordFormViewSet, StepViewSet, SubProductionViewSet, TechDocViewSet, UsedStepViewSet +from apps.mtm.views import InputMaterialViewSet, MaterialViewSet, OtherMaterialViewSet, OutputMaterialViewSet, PackItemViewSet, ProcessViewSet, RecordFormFieldViewSet, RecordFormViewSet, StepViewSet, SubProductionViewSet, TechDocViewSet, UsedStepViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('material', MaterialViewSet, basename='material') +router.register('packitem', PackItemViewSet, basename='packitem') router.register('process', ProcessViewSet, basename='process') router.register('step', StepViewSet, basename='step') router.register('subproducation', SubProductionViewSet, basename='subproducation') diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 5a89d8b..5a3f3e0 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -3,8 +3,8 @@ from rest_framework.viewsets import ModelViewSet, GenericViewSet from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin from apps.mtm.filters import MaterialFilterSet, TechDocFilterset -from apps.mtm.models import Material, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction -from apps.mtm.serializers import InputMaterialSerializer, InputMaterialUpdateSerializer, MaterialDetailSerializer, MaterialSerializer, MaterialSimpleSerializer, OtherMaterialSerializer, OutputMaterialSerializer, OutputMaterialUpdateSerializer, ProcessSerializer, RecordFormCreateSerializer, RecordFormDetailSerializer, RecordFormFieldCreateSerializer, RecordFormFieldSerializer, RecordFormFieldUpdateSerializer, RecordFormSerializer, RecordFormUpdateSerializer, StepDetailSerializer, StepSerializer, SubProductionCreateUpdateSerializer, SubProductionSerializer, SubprodctionMaterialListSerializer, TechDocCreateSerializer, TechDocListSerializer, TechDocUpdateSerializer, UsedStepCreateSerializer, UsedStepListSerializer, UsedStepUpdateSerializer +from apps.mtm.models import Material, PackItem, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction +from apps.mtm.serializers import InputMaterialSerializer, InputMaterialUpdateSerializer, MaterialDetailSerializer, MaterialSerializer, MaterialSimpleSerializer, OtherMaterialSerializer, OutputMaterialSerializer, OutputMaterialUpdateSerializer, PackItemCreateSerializer, PackItemUpdateSerializer, ProcessSerializer, RecordFormCreateSerializer, RecordFormDetailSerializer, RecordFormFieldCreateSerializer, RecordFormFieldSerializer, RecordFormFieldUpdateSerializer, RecordFormSerializer, RecordFormUpdateSerializer, StepDetailSerializer, StepSerializer, SubProductionCreateUpdateSerializer, SubProductionSerializer, SubprodctionMaterialListSerializer, TechDocCreateSerializer, TechDocListSerializer, TechDocUpdateSerializer, UsedStepCreateSerializer, UsedStepListSerializer, UsedStepUpdateSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from rest_framework.response import Response @@ -31,6 +31,25 @@ class MaterialViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): return MaterialDetailSerializer return MaterialSerializer +class PackItemViewSet(CreateUpdateModelAMixin, ModelViewSet): + """ + 装箱项目-增删改查 + """ + perms_map = {'get': '*', 'post': 'packitem_create', + 'put': 'packitem_update', 'delete': 'packitem_delete'} + queryset = PackItem.objects.all() + serializer_class = MaterialSerializer + search_fields = ['name', 'number'] + filterset_fields = ['material'] + ordering = ['sort'] + + def get_serializer_class(self): + if self.action == 'create': + return PackItemCreateSerializer + elif self.action == 'update': + return PackItemUpdateSerializer + return super().get_serializer_class() + class ProcessViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): """