打包装箱接口
This commit is contained in:
parent
3528e18192
commit
a1df3434d7
|
@ -24,6 +24,8 @@ class MaterialDetailSerializer(serializers.ModelSerializer):
|
||||||
objs = Process.objects.filter(subproduction_process__product=obj, subproduction_process__is_deleted=False, is_deleted=False).distinct().order_by('number')
|
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
|
return ProcessSimpleSerializer(instance=objs, many=True).data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PackItemSerializer(serializers.ModelSerializer):
|
class PackItemSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PackItem
|
model = PackItem
|
||||||
|
@ -44,6 +46,12 @@ class MaterialSimpleSerializer(serializers.ModelSerializer):
|
||||||
model = Material
|
model = Material
|
||||||
fields = ['id', 'name', 'number', 'unit','specification', 'type']
|
fields = ['id', 'name', 'number', 'unit','specification', 'type']
|
||||||
|
|
||||||
|
class PackItemDetailSerializer(serializers.ModelSerializer):
|
||||||
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = PackItem
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
class ProcessSerializer(serializers.ModelSerializer):
|
class ProcessSerializer(serializers.ModelSerializer):
|
||||||
instruction_ = FileSimpleSerializer(source='instruction', read_only=True)
|
instruction_ = FileSimpleSerializer(source='instruction', read_only=True)
|
||||||
workshop_ = OrganizationSimpleSerializer(source='workshop', read_only=True)
|
workshop_ = OrganizationSimpleSerializer(source='workshop', read_only=True)
|
||||||
|
|
|
@ -272,6 +272,9 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo
|
||||||
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=FirstTestAuditSerializer)
|
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=FirstTestAuditSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def first_audit(self, request, pk=None):
|
def first_audit(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
首件审核
|
||||||
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
if obj.leader_1 and obj.leader_2 and obj.leader_3:
|
if obj.leader_1 and obj.leader_2 and obj.leader_3:
|
||||||
raise ValidationError('首件确认已完成')
|
raise ValidationError('首件确认已完成')
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Generated by Django 3.2.9 on 2022-02-22 07:30
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mtm', '0049_auto_20220222_0944'),
|
||||||
|
('sam', '0013_auto_20220222_0941'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='saleproduct',
|
||||||
|
name='packnum',
|
||||||
|
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='装箱单号'),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SalePack',
|
||||||
|
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.PositiveSmallIntegerField(verbose_name='打包数量')),
|
||||||
|
('packitem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.packitem', verbose_name='打包项目')),
|
||||||
|
('sale_product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sam.saleproduct', verbose_name='关联销售产品')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -94,7 +94,6 @@ class Sale(CommonADModel):
|
||||||
receiver_address = models.CharField('收获地址', null=True, blank=True, max_length=200)
|
receiver_address = models.CharField('收获地址', null=True, blank=True, max_length=200)
|
||||||
remark = models.CharField('备注', null=True, blank=True, max_length=200)
|
remark = models.CharField('备注', null=True, blank=True, max_length=200)
|
||||||
|
|
||||||
|
|
||||||
class SaleProduct(BaseModel):
|
class SaleProduct(BaseModel):
|
||||||
"""
|
"""
|
||||||
具体产品
|
具体产品
|
||||||
|
@ -117,6 +116,7 @@ class SalePack(BaseModel):
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
packitem = models.ForeignKey(PackItem, verbose_name='打包项目',
|
packitem = models.ForeignKey(PackItem, verbose_name='打包项目',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
|
count = models.PositiveSmallIntegerField('打包数量')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,9 @@ from rest_framework import serializers
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
from apps.inm.models import IProduct
|
from apps.inm.models import IProduct
|
||||||
from apps.inm.serializers import IProductListSerializer
|
from apps.inm.serializers import IProductListSerializer
|
||||||
from apps.mtm.serializers import MaterialSimpleSerializer
|
from apps.mtm.models import Material, PackItem
|
||||||
from apps.sam.models import Sale, SaleProduct
|
from apps.mtm.serializers import MaterialSimpleSerializer, PackItemDetailSerializer
|
||||||
|
from apps.sam.models import Sale, SalePack, SaleProduct
|
||||||
from apps.sam.serializers import CustomerSimpleSerializer, OrderSimpleSerializer
|
from apps.sam.serializers import CustomerSimpleSerializer, OrderSimpleSerializer
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
@ -61,3 +62,32 @@ class SaleProductCreateSerializer(serializers.ModelSerializer):
|
||||||
if sale.count+order.delivered_count>order.count:
|
if sale.count+order.delivered_count>order.count:
|
||||||
raise exceptions.APIException('超过订单所需数量')
|
raise exceptions.APIException('超过订单所需数量')
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
class SPackItemSerializer(serializers.ModelSerializer):
|
||||||
|
name = serializers.CharField(source='packitem.name', read_only=True)
|
||||||
|
specification = serializers.CharField(source='packitem.specification', read_only=True)
|
||||||
|
unit = serializers.CharField(source='packitem.unit', read_only=True)
|
||||||
|
material_ = MaterialSimpleSerializer(source='packitem.material', read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = SalePack
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class SaleProductPackDetailSerializer(serializers.ModelSerializer):
|
||||||
|
detail = serializers.SerializerMethodField()
|
||||||
|
class Meta:
|
||||||
|
model = ['packnum', 'detail']
|
||||||
|
|
||||||
|
def get_detail(self, obj):
|
||||||
|
return SPackItemSerializer(instance=SalePack.objects.filter(sale_product=obj)
|
||||||
|
, many=True).data
|
||||||
|
|
||||||
|
class SPackItemCreateSerializer(serializers.Serializer):
|
||||||
|
id = serializers.PrimaryKeyRelatedField(queryset=PackItem.objects.all())
|
||||||
|
count = serializers.IntegerField()
|
||||||
|
|
||||||
|
class SaleProductPackSerializer(serializers.ModelSerializer):
|
||||||
|
detail = SPackItemCreateSerializer(many=True)
|
||||||
|
class Meta:
|
||||||
|
model = SaleProduct
|
||||||
|
fields = ['packnum', 'detail']
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
|
|
||||||
from rest_framework.mixins import ListModelMixin, DestroyModelMixin, CreateModelMixin, RetrieveModelMixin
|
from rest_framework.mixins import ListModelMixin, DestroyModelMixin, CreateModelMixin, RetrieveModelMixin
|
||||||
from rest_framework.viewsets import GenericViewSet
|
from rest_framework.viewsets import GenericViewSet
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, WareHouse
|
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, WareHouse
|
||||||
from apps.inm.services import InmService
|
from apps.inm.services import InmService
|
||||||
from apps.mtm.models import Material
|
from apps.mtm.models import Material, PackItem
|
||||||
from apps.sam.models import Sale, SaleProduct
|
from apps.sam.models import Sale, SalePack, SaleProduct
|
||||||
from apps.sam.serializers_sale import SaleCreateSerializer, SaleListSerializer, SaleProductCreateSerializer, SaleProductListSerializer
|
from apps.sam.serializers_sale import SaleCreateSerializer, SaleListSerializer, SaleProductCreateSerializer, SaleProductListSerializer, SaleProductPackDetailSerializer, SaleProductPackSerializer
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
@ -158,3 +159,31 @@ class SaleProductViewSet(ListModelMixin, DestroyModelMixin, CreateModelMixin, Ge
|
||||||
sale.count = SaleProduct.objects.filter(sale=obj.sale).count()
|
sale.count = SaleProduct.objects.filter(sale=obj.sale).count()
|
||||||
sale.save()
|
sale.save()
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
|
||||||
|
@action(methods=['get', 'post'], detail=True, perms_map={'post':'sale_pack'}, serializer_class=serializers.Serializer)
|
||||||
|
@transaction.atomic
|
||||||
|
def pack(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
打包装箱
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
if request.method == 'GET':
|
||||||
|
for i in PackItem.objects.filter(product=obj.product.material, is_deleted=False):
|
||||||
|
SalePack.objects.get_or_create(sale_product=obj, packitem=i,
|
||||||
|
defaults={
|
||||||
|
"sale_product":obj,
|
||||||
|
"packitem":i,
|
||||||
|
"count":i.count
|
||||||
|
})
|
||||||
|
return Response(SaleProductPackDetailSerializer(instance=obj).data)
|
||||||
|
elif request.method == 'POST':
|
||||||
|
serializer = SaleProductPackSerializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
vdata = serializer.validated_data
|
||||||
|
obj.packnum = vdata['packnum']
|
||||||
|
for i in vdata['detail']:
|
||||||
|
pi = i['id']
|
||||||
|
pi.count = i['count']
|
||||||
|
pi.save()
|
||||||
|
return Response()
|
Loading…
Reference in New Issue