From c8c6945a381405539fe007abee53e022824d9e3e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 27 Jan 2022 15:48:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=87=E8=B4=AD=E8=AE=A2?= =?UTF-8?q?=E5=8D=95part1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/inm/migrations/0029_fifo_pu_order.py | 20 +++++++ hb_server/apps/inm/models.py | 3 +- .../migrations/0004_puorder_puorderitem.py | 53 +++++++++++++++++++ hb_server/apps/pum/models.py | 12 +++-- hb_server/apps/pum/serializers.py | 26 ++++++++- hb_server/apps/pum/views.py | 32 +++++++++-- .../0012_alter_order_delivery_date.py | 18 +++++++ 7 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 hb_server/apps/inm/migrations/0029_fifo_pu_order.py create mode 100644 hb_server/apps/pum/migrations/0004_puorder_puorderitem.py create mode 100644 hb_server/apps/sam/migrations/0012_alter_order_delivery_date.py diff --git a/hb_server/apps/inm/migrations/0029_fifo_pu_order.py b/hb_server/apps/inm/migrations/0029_fifo_pu_order.py new file mode 100644 index 0000000..ff2736d --- /dev/null +++ b/hb_server/apps/inm/migrations/0029_fifo_pu_order.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.9 on 2022-01-27 07:47 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('pum', '0004_puorder_puorderitem'), + ('inm', '0028_alter_fifoitem_files'), + ] + + operations = [ + migrations.AddField( + model_name='fifo', + name='pu_order', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pum.puorder', verbose_name='关联采购订单'), + ), + ] diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 6bba339..4042844 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -79,7 +79,8 @@ class FIFO(CommonADModel): User, verbose_name='审核人', on_delete=models.CASCADE, null=True, blank=True) inout_date = models.DateField('出入库日期', null=True, blank=True) remark = models.CharField('备注', max_length=1000, default='') - pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单', null=True, blank=True) + pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单', + null=True, blank=True, on_delete=models.CASCADE) class FIFOItem(BaseModel): diff --git a/hb_server/apps/pum/migrations/0004_puorder_puorderitem.py b/hb_server/apps/pum/migrations/0004_puorder_puorderitem.py new file mode 100644 index 0000000..03bb346 --- /dev/null +++ b/hb_server/apps/pum/migrations/0004_puorder_puorderitem.py @@ -0,0 +1,53 @@ +# Generated by Django 3.2.9 on 2022-01-27 07:47 + +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', '0044_subproduction_need_combtest'), + ('pum', '0003_remove_vendor_material'), + ] + + operations = [ + migrations.CreateModel( + name='PuOrder', + 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='删除标记')), + ('number', models.CharField(max_length=100, unique=True, verbose_name='订单编号')), + ('is_audited', models.BooleanField(default=False, verbose_name='是否审核')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='puorder_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='puorder_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('vendor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pum.vendor', verbose_name='供应商')), + ], + options={ + 'verbose_name': '采购订单', + 'verbose_name_plural': '采购订单', + }, + ), + migrations.CreateModel( + name='PuOrderItem', + 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='删除标记')), + ('count', models.PositiveIntegerField(default=0, verbose_name='所需数量')), + ('delivered_count', models.PositiveIntegerField(default=0, verbose_name='已到货数量')), + ('delivery_date', models.DateField(verbose_name='截止到货日期')), + ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='采购材料')), + ('pu_order', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='item_pu_order', to='pum.puorder', verbose_name='关联采购订单')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/hb_server/apps/pum/models.py b/hb_server/apps/pum/models.py index c69fb51..d66086a 100644 --- a/hb_server/apps/pum/models.py +++ b/hb_server/apps/pum/models.py @@ -31,12 +31,18 @@ class PuOrder(CommonAModel): """ number = models.CharField('订单编号', max_length=100, unique=True) vendor = models.ForeignKey(Vendor, verbose_name='供应商', on_delete=models.CASCADE) + is_audited = models.BooleanField('是否审核', default=False) class Meta: verbose_name = '采购订单' verbose_name_plural = verbose_name -class PuOrderItem(CommonAModel): +class PuOrderItem(BaseModel): """ - 采购订单具体项目 + 采购具体项目 """ - pass \ No newline at end of file + material = models.ForeignKey(Material, verbose_name='采购材料', on_delete=models.CASCADE) + count = models.PositiveIntegerField('所需数量', default=0) + delivered_count = models.PositiveIntegerField('已到货数量', default=0) + delivery_date = models.DateField('截止到货日期') + pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单', + on_delete=models.CASCADE, null=True, blank=True, related_name='item_pu_order') \ No newline at end of file diff --git a/hb_server/apps/pum/serializers.py b/hb_server/apps/pum/serializers.py index 037f7ef..4fe4ae7 100644 --- a/hb_server/apps/pum/serializers.py +++ b/hb_server/apps/pum/serializers.py @@ -1,9 +1,31 @@ from rest_framework.serializers import ModelSerializer - -from .models import Vendor +from apps.mtm.serializers import MaterialSimpleSerializer +from .models import PuOrder, PuOrderItem, Vendor class VendorSerializer(ModelSerializer): class Meta: model = Vendor fields = '__all__' + +class VendorSimpleSerializer(ModelSerializer): + class Meta: + model = Vendor + fields = ['id', 'name'] + +class PuOrderItemSerializer(ModelSerializer): + material_ = MaterialSimpleSerializer(source='material', read_only=True) + class Meta: + model = PuOrderItem + fields = '__all__' + +class PuOrderSerializer(ModelSerializer): + vendor_ = VendorSimpleSerializer(source='vendor', read_only=True) + items = PuOrderItemSerializer(source='item_pu_order', many=True, read_only=True) + class Meta: + model = PuOrder + fields = '__all__' + +class PuOrderCreateUpdateSerializer(ModelSerializer): + class Meta: + fields = ['number', 'vendor'] \ No newline at end of file diff --git a/hb_server/apps/pum/views.py b/hb_server/apps/pum/views.py index 1258ca9..ec11c43 100644 --- a/hb_server/apps/pum/views.py +++ b/hb_server/apps/pum/views.py @@ -1,8 +1,10 @@ + from django.shortcuts import render from rest_framework.viewsets import ModelViewSet - -from apps.pum.models import Vendor -from apps.pum.serializers import VendorSerializer +from rest_framework.mixins import CreateModelMixin, DestroyModelMixin +from rest_framework.viewsets import GenericViewSet +from apps.pum.models import PuOrder, Vendor +from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderSerializer, VendorSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin @@ -19,3 +21,27 @@ class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet): filterset_fields = [] ordering_fields = ['create_time'] ordering = ['-create_time'] + + +class PuOrderViewSet(CreateUpdateModelAMixin, ModelViewSet): + """ + 采购订单-增删改查 + """ + perms_map = {'get': '*', 'post': '*', + 'put': '*', 'delete': '*'} + queryset = PuOrder.objects.select_related('vendor').\ + prefetch_related('item_pu_order').all() + serializer_class = PuOrderSerializer + search_fields = ['number', 'vendor__name'] + filterset_fields = ['vendor'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return PuOrderCreateUpdateSerializer + return super().get_serializer_class() + + + +class PuOrderItemViewSet(CreateModelMixin, DestroyModelMixin, GenericViewSet): + pass \ No newline at end of file diff --git a/hb_server/apps/sam/migrations/0012_alter_order_delivery_date.py b/hb_server/apps/sam/migrations/0012_alter_order_delivery_date.py new file mode 100644 index 0000000..00af49b --- /dev/null +++ b/hb_server/apps/sam/migrations/0012_alter_order_delivery_date.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2022-01-27 07:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sam', '0011_order_need_mtest'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='delivery_date', + field=models.DateField(verbose_name='截止交货日期'), + ), + ]