From cf1759c7444b16e24ba7672c8642d0ff30ee9ce0 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 7 Dec 2021 08:43:28 +0800 Subject: [PATCH] =?UTF-8?q?is=5Fmtestok=20=E9=BB=98=E8=AE=A4=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0021_fifoitemproduct_iproduct.py | 19 +++++++++++ hb_server/apps/inm/models.py | 21 +++++++----- .../0009_alter_saleproduct_is_mtestok.py | 18 ++++++++++ hb_server/apps/sam/models.py | 2 +- hb_server/apps/sam/views.py | 33 +++++++++++++++++-- 5 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 hb_server/apps/inm/migrations/0021_fifoitemproduct_iproduct.py create mode 100644 hb_server/apps/sam/migrations/0009_alter_saleproduct_is_mtestok.py diff --git a/hb_server/apps/inm/migrations/0021_fifoitemproduct_iproduct.py b/hb_server/apps/inm/migrations/0021_fifoitemproduct_iproduct.py new file mode 100644 index 0000000..9d9ea22 --- /dev/null +++ b/hb_server/apps/inm/migrations/0021_fifoitemproduct_iproduct.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.9 on 2021-12-07 00:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('inm', '0020_iproduct_is_saled'), + ] + + operations = [ + migrations.AddField( + model_name='fifoitemproduct', + name='iproduct', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='inm.iproduct', verbose_name='关联库存产品'), + ), + ] diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 5c485d0..9059a91 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -84,15 +84,6 @@ class FIFOItem(BaseModel): fifo = models.ForeignKey(FIFO, verbose_name='关联出入库', on_delete=models.CASCADE) subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.CASCADE, null=True, blank=True) -class FIFOItemProduct(BaseModel): - """ - 出入库产品 - """ - fifoitem = models.ForeignKey(FIFOItem, verbose_name='关联出入库具体产品', on_delete=models.CASCADE) - wproduct = models.ForeignKey('wpm.wproduct', on_delete=models.CASCADE, verbose_name='关联的动态产品', db_constraint=False, null=True, blank=True) - number = models.CharField('物品编号', max_length=50) - material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE) - class IProduct(BaseModel): """ 具体产品条目 @@ -104,4 +95,16 @@ class IProduct(BaseModel): wproduct = models.ForeignKey('wpm.wproduct', on_delete=models.CASCADE, verbose_name='关联的动态产品', db_constraint=False, null=True, blank=True) is_saled = models.BooleanField('是否售出', default=False) +class FIFOItemProduct(BaseModel): + """ + 出入库产品 + """ + fifoitem = models.ForeignKey(FIFOItem, verbose_name='关联出入库具体产品', on_delete=models.CASCADE) + wproduct = models.ForeignKey('wpm.wproduct', on_delete=models.CASCADE, verbose_name='关联的动态产品', db_constraint=False, null=True, blank=True) + number = models.CharField('物品编号', max_length=50) + material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE) + iproduct = models.ForeignKey(IProduct, verbose_name='关联库存产品', null=True, blank=True, on_delete=models.SET_NULL) + + + diff --git a/hb_server/apps/sam/migrations/0009_alter_saleproduct_is_mtestok.py b/hb_server/apps/sam/migrations/0009_alter_saleproduct_is_mtestok.py new file mode 100644 index 0000000..d034dfa --- /dev/null +++ b/hb_server/apps/sam/migrations/0009_alter_saleproduct_is_mtestok.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2021-12-07 00:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sam', '0008_alter_saleproduct_number'), + ] + + operations = [ + migrations.AlterField( + model_name='saleproduct', + name='is_mtestok', + field=models.BooleanField(blank=True, null=True, verbose_name='是否军检合格'), + ), + ] diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index bb0fb8e..e82137a 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -90,7 +90,7 @@ class SaleProduct(BaseModel): number = models.CharField('物品编号', max_length=50) iproduct = models.ForeignKey('inm.iproduct', verbose_name='关联库存产品', on_delete=models.CASCADE, related_name='sale_iproduct') is_mtested = models.BooleanField('是否军检', default=False) - is_mtestok = models.BooleanField('是否军检合格', default=True) + is_mtestok = models.BooleanField('是否军检合格', null=True, blank=True) remark = models.TextField('备注', null=True, blank=True) class Meta: diff --git a/hb_server/apps/sam/views.py b/hb_server/apps/sam/views.py index 624aa2d..f6e51c1 100644 --- a/hb_server/apps/sam/views.py +++ b/hb_server/apps/sam/views.py @@ -1,7 +1,9 @@ from django.db import transaction +from django.db.models.aggregates import Count from rest_framework import exceptions, serializers from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin -from apps.inm.models import FIFO +from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct +from apps.inm.signals import update_inm from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer, SaleCreateSerializer, SaleListSerializer, SaleProductCreateSerializer, SaleProductListSerializer, SaleProductMtestSerializer from apps.sam.models import Contract, Customer, Order, Sale, SaleProduct from rest_framework.viewsets import GenericViewSet, ModelViewSet @@ -75,7 +77,7 @@ class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet): return Response(serializer.data) -class SaleViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin, GenericViewSet): +class SaleViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin, GenericViewSet): """ 销售记录 """ @@ -136,7 +138,34 @@ class SaleViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, C pass else: raise exceptions.APIException('存在未军检产品') + # 创建出库条目 + ips = IProduct.objects.filter(sale_iproduct__sale=obj) + items = ips.values('warehouse', 'material', 'batch').annotate(total=Count('id')) + for i in items: + fifoitem = FIFOItem() + fifoitem.is_tested = True + fifoitem.is_testok = True + fifoitem.warehouse = i['warehouse'] + fifoitem.material = i['material'] + fifoitem.count = i['total'] + fifoitem.batch = i['batch'] + fifoitem.fifo = fifo + fifoitem.save() + items_p = ips.filter(warehouse=i['warehouse'], batch=i['batch']) + ips = [] + for i in items_p: + # 创建入库明细半成品 + ip = {} + ip['fifoitem'] = fifoitem + ip['number'] = i.number + ip['material'] = i.material + ip['iproduct'] = i + ips.append(FIFOItemProduct(**ip)) + FIFOItemProduct.objects.bulk_create(ips) # 更新库存 + update_inm(fifo) + # 更新成品库情况 + ips.update(is_saled=True) return Response() class SaleProductViewSet(ListModelMixin, DestroyModelMixin, CreateModelMixin, GenericViewSet):