From 332c4b7729208ccd8e26159778837c8ee0963f9d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 6 Dec 2021 13:26:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=9B=E6=A3=80=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/inm/serializers.py | 9 ---- .../sam/migrations/0007_saleproduct_remark.py | 18 ++++++++ hb_server/apps/sam/models.py | 1 + hb_server/apps/sam/serializers.py | 21 ++++++++++ hb_server/apps/sam/views.py | 41 ++++++++++++++++--- 5 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 hb_server/apps/sam/migrations/0007_saleproduct_remark.py diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index 0a44f79..7f050fc 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -2,7 +2,6 @@ from rest_framework import serializers from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse,Inventory from apps.qm.models import TestRecord, TestRecordItem -from apps.sam.serializers import OrderSimpleSerializer from apps.system.serializers import UserSimpleSerializer from apps.mtm.serializers import MaterialSimpleSerializer @@ -41,18 +40,10 @@ class MaterialBatchSerializer(serializers. ModelSerializer): class IProductListSerializer(serializers.ModelSerializer): material_= MaterialSimpleSerializer(source='material', read_only=True) warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) - order_ = serializers.SerializerMethodField() class Meta: model = IProduct fields = '__all__' - def get_order_(self, obj): - if obj.wproduct: - order = obj.wproduct.subproduction_plan.production_plan.order - if order: - return OrderSimpleSerializer(instance=order).data - return None - class FIFOListSerializer(serializers.ModelSerializer): auditor_ = UserSimpleSerializer(source='auditor', read_only=True) diff --git a/hb_server/apps/sam/migrations/0007_saleproduct_remark.py b/hb_server/apps/sam/migrations/0007_saleproduct_remark.py new file mode 100644 index 0000000..846c3bc --- /dev/null +++ b/hb_server/apps/sam/migrations/0007_saleproduct_remark.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2021-12-06 05:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sam', '0006_auto_20211206_0958'), + ] + + operations = [ + migrations.AddField( + model_name='saleproduct', + name='remark', + field=models.TextField(blank=True, null=True, verbose_name='备注'), + ), + ] diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index 631a472..774b3ef 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -94,6 +94,7 @@ class SaleProduct(BaseModel): 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) + remark = models.TextField('备注', null=True, blank=True) class Meta: unique_together = ( diff --git a/hb_server/apps/sam/serializers.py b/hb_server/apps/sam/serializers.py index e4ce902..1087e23 100644 --- a/hb_server/apps/sam/serializers.py +++ b/hb_server/apps/sam/serializers.py @@ -2,6 +2,7 @@ from django.db import transaction from rest_framework import serializers from apps.inm.models import IProduct +from apps.inm.serializers import IProductListSerializer from .models import Contract, Customer, Order, Sale, SaleProduct @@ -94,3 +95,23 @@ class SaleListSerializer(serializers.ModelSerializer): class Meta: model = Sale fields = '__all__' + +class SaleProductListSerializer(serializers.ModelSerializer): + iproduct_ = IProductListSerializer(source='iproduct', read_only=True) + class Meta: + model = SaleProduct + fields = '__all__' + +class SaleProductCreateSerializer(serializers.ModelSerializer): + class Meta: + model = SaleProduct + fields = ['sale', 'iproduct'] + + def create(self, validated_data): + validated_data['number'] = validated_data['iproduct'].number + return super().create(validated_data) + +class SaleProductMtestSerializer(serializers.ModelSerializer): + class Meta: + model = SaleProduct + fields = ['remark', 'is_mtestok'] \ No newline at end of file diff --git a/hb_server/apps/sam/views.py b/hb_server/apps/sam/views.py index 98bced6..4ac3eff 100644 --- a/hb_server/apps/sam/views.py +++ b/hb_server/apps/sam/views.py @@ -1,6 +1,7 @@ -from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin -from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer, SaleCreateSerializer, SaleListSerializer -from apps.sam.models import Contract, Customer, Order, Sale +from rest_framework import exceptions +from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin +from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer, SaleCreateSerializer, SaleListSerializer, SaleProductCreateSerializer, SaleProductListSerializer +from apps.sam.models import Contract, Customer, Order, Sale, SaleProduct from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.system.mixins import CreateUpdateCustomMixin from django.shortcuts import render @@ -76,7 +77,7 @@ class SaleViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, C 销售记录 """ perms_map = {'*': '*'} - queryset = Sale.objects.select_related('customer', 'order', 'product').all() + queryset = Sale.objects.select_related('customer', 'order', 'product', 'order__contract').all() serializer_class = SaleListSerializer search_fields = ['customer__name', 'order__number'] filterset_fields = ['product', 'order', 'customer'] @@ -88,4 +89,34 @@ class SaleViewSet(CreateUpdateCustomMixin, ListModelMixin, RetrieveModelMixin, C return SaleCreateSerializer elif self.action == 'retrieve': return SaleListSerializer - return super().get_serializer_class() \ No newline at end of file + return super().get_serializer_class() + +class SaleProductViewSet(ListModelMixin, DestroyModelMixin, CreateModelMixin, GenericViewSet): + """ + 销售记录关联产品 + """ + perms_map = {'*': '*'} + queryset = SaleProduct.objects.select_related('iproduct', 'iproduct__material', 'iproduct__warehouse').all() + serializer_class = SaleProductListSerializer + search_fields = [] + filterset_fields = ['sale', 'iproduct'] + ordering_fields = ['create_time'] + ordering = ['id'] + + def get_serializer_class(self): + if self.action == 'create': + return SaleProductCreateSerializer + return super().get_serializer_class() + + @action(methods=['post'], detail=True, perms_map={'post':'*'}) + def mtest(self, request, pk=None): + """ + 军检 + """ + obj = self.get_object() + if obj.is_mtested: + raise exceptions.APIException('已进行军检') + obj.remark = request.data.get('remark', None) + obj.is_mtestok = request.data.get('is_mtestok') + obj.save() + return Response() \ No newline at end of file