inm 原入库改为其他入库
This commit is contained in:
parent
2b5e54ed03
commit
2d260e694d
|
@ -2,7 +2,7 @@ from django.db import models
|
|||
from django.db.models.base import Model
|
||||
import django.utils.timezone as timezone
|
||||
from django.db.models.query import QuerySet
|
||||
from apps.pum.models import PuOrder
|
||||
from apps.pum.models import PuOrder, Vendor
|
||||
from apps.system.models import CommonADModel, CommonAModel, CommonBModel, Organization, User, Dict, File
|
||||
from utils.model import SoftModel, BaseModel
|
||||
from simple_history.models import HistoricalRecords
|
||||
|
@ -79,6 +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='')
|
||||
vendor = models.ForeignKey(Vendor, verbose_name='供应商',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
pu_order = models.ForeignKey(PuOrder, verbose_name='关联采购订单',
|
||||
null=True, blank=True, on_delete=models.CASCADE)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ from rest_framework import exceptions
|
|||
from rest_framework import serializers
|
||||
|
||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse, Inventory
|
||||
from apps.pum.models import Vendor
|
||||
from apps.qm.models import TestRecord, TestRecordItem
|
||||
from apps.sam.serializers import OrderSimpleSerializer
|
||||
|
||||
|
@ -73,6 +74,15 @@ class FIFOListSerializer(serializers.ModelSerializer):
|
|||
model = FIFO
|
||||
fields = '__all__'
|
||||
|
||||
class FIFOItemCreateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = FIFOItem
|
||||
fields = ['warehouse', 'material', 'batch', 'fifo', 'files']
|
||||
|
||||
class FIFOItemUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = FIFOItem
|
||||
fields = ['warehouse', 'batch', 'files']
|
||||
|
||||
class FIFOItemSerializer(serializers.ModelSerializer):
|
||||
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
||||
|
@ -101,6 +111,49 @@ class MaterialBatchQuerySerializer(serializers.Serializer):
|
|||
warehouse = serializers.IntegerField(label="仓库ID", required=False)
|
||||
materials = serializers.ListField(child=serializers.IntegerField(label="物料ID"), required=False)
|
||||
|
||||
class FIFOInOtherSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
其他入库序列化
|
||||
"""
|
||||
details = FIFODetailInPurSerializer(many=True, required=False)
|
||||
vendor = serializers.PrimaryKeyRelatedField(label='供应商ID',
|
||||
queryset=Vendor.objects.all())
|
||||
class Meta:
|
||||
model = FIFO
|
||||
fields = ['details', 'vendor']
|
||||
|
||||
def create(self, validated_data):
|
||||
details = validated_data.pop('details')
|
||||
with transaction.atomic():
|
||||
validated_data['type'] = FIFO.FIFO_TYPE_PUR_IN
|
||||
obj = FIFO(**validated_data)
|
||||
obj.save()
|
||||
for i in details:
|
||||
if 'details' in i:
|
||||
p_details = i.pop('details')
|
||||
if len(p_details) != i['count']:
|
||||
raise serializers.ValidationError('数目对不上')
|
||||
else:
|
||||
i['fifo'] = obj
|
||||
fifoitem = FIFOItem.objects.create(**i)
|
||||
p_list0 = []
|
||||
for x in p_details:
|
||||
x['material'] = i['material']
|
||||
x['fifoitem'] = fifoitem
|
||||
p_list0.append(FIFOItemProduct(**x))
|
||||
FIFOItemProduct.objects.bulk_create(p_list0)
|
||||
|
||||
p_list = []
|
||||
for x in p_details:
|
||||
x['material'] = i['material']
|
||||
x['warehouse'] = validated_data['warehouse']
|
||||
x['batch'] = i['batch']
|
||||
p_list.append(IProduct(**x))
|
||||
IProduct.objects.bulk_create(p_list)
|
||||
else:
|
||||
i['fifo'] = obj
|
||||
FIFOItem.objects.create(**i)
|
||||
return obj
|
||||
|
||||
class FIFOInPurSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
|
@ -118,18 +171,6 @@ class FIFOInPurSerializer(serializers.ModelSerializer):
|
|||
pass
|
||||
else:
|
||||
raise serializers.ValidationError('没有入库内容')
|
||||
|
||||
# for i in details:
|
||||
# # 校验批次
|
||||
# try:
|
||||
# if i['batch']:
|
||||
# obj = MaterialBatch.objects.get(batch=i['batch'], material=i['material'])
|
||||
# if obj.warehouse != validated_data['warehouse']:
|
||||
# raise serializers.ValidationError('批次号{}在其他仓库已存在'.format(i['batch']))
|
||||
# except:
|
||||
# pass
|
||||
|
||||
# 创建采购入库
|
||||
with transaction.atomic():
|
||||
validated_data['type'] = FIFO.FIFO_TYPE_PUR_IN
|
||||
obj = FIFO(**validated_data)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from rest_framework import serializers
|
||||
from rest_framework import exceptions
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin
|
||||
from rest_framework.exceptions import APIException, ValidationError
|
||||
from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin, CreateModelMixin
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
from apps.inm.filters import IProductFilterSet, MbFilterSet
|
||||
|
||||
from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse, Inventory
|
||||
from apps.inm.serializers import FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, IProductListSerializer, \
|
||||
from apps.inm.serializers import FIFOInOtherSerializer, FIFOItemCreateSerializer, FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, IProductListSerializer, \
|
||||
InmTestRecordCreateSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, \
|
||||
WareHouseCreateUpdateSerializer, InventorySerializer
|
||||
from apps.inm.signals import update_inm
|
||||
|
@ -77,7 +77,7 @@ class MaterialBatchViewSet(ListModelMixin, GenericViewSet):
|
|||
return Response(MaterialBatchSerializer(instance=queryset, many=True).data)
|
||||
|
||||
|
||||
class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
|
||||
class FIFOItemViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
|
||||
"""
|
||||
出入库记录详情表
|
||||
"""
|
||||
|
@ -93,12 +93,27 @@ class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin, Gener
|
|||
def get_serializer_class(self):
|
||||
if self.action == 'update':
|
||||
return FIFOItemUpdateSerializer
|
||||
elif self.action == 'create':
|
||||
return FIFOItemCreateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
def perform_destroy(self, instance):
|
||||
if instance.fifo.is_audited:
|
||||
raise APIException('该出入库记录已通过审核, 无法删除')
|
||||
return super().perform_destroy(instance)
|
||||
def create(self, request, *args, **kwargs):
|
||||
obj = self.get_object()
|
||||
if obj.fifo.is_audited:
|
||||
raise ValidationError('该出入库记录已审核')
|
||||
return super().create(request, *args, **kwargs)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
obj = self.get_object()
|
||||
if obj.fifo.is_audited:
|
||||
raise ValidationError('该出入库记录已审核')
|
||||
return super().update(request, *args, **kwargs)
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
obj = self.get_object()
|
||||
if obj.fifo.is_audited:
|
||||
raise ValidationError('该出入库记录已审核')
|
||||
return super().destroy(request, *args, **kwargs)
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=InmTestRecordCreateSerializer)
|
||||
def test(self, request, pk=None):
|
||||
|
@ -161,12 +176,25 @@ class FIFOViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
|
|||
serializer.save(create_by=request.user)
|
||||
return Response()
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
||||
serializer_class=FIFOInOtherSerializer)
|
||||
def in_other(self, request, pk=None):
|
||||
"""
|
||||
其他入库
|
||||
"""
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save(create_by=request.user)
|
||||
return Response()
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post': '*'}, serializer_class=serializers.Serializer)
|
||||
def audit(self, request, pk=None):
|
||||
"""
|
||||
审核通过
|
||||
"""
|
||||
obj = self.get_object()
|
||||
if not FIFOItem.objects.filter(fifo=obj).exists():
|
||||
raise ValidationError('出入库条目为空')
|
||||
for i in FIFOItem.objects.filter(fifo=obj, need_test=True):
|
||||
if not i.is_testok:
|
||||
raise APIException('未检验通过, 不可审核')
|
||||
|
|
|
@ -19,7 +19,12 @@ class PuOrderItemSerializer(ModelSerializer):
|
|||
model = PuOrderItem
|
||||
fields = '__all__'
|
||||
|
||||
class PuOrderItemCreateUpdateSerializer(ModelSerializer):
|
||||
class PuOrderItemCreateSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = PuOrderItem
|
||||
fields = ['count', 'delivery_date', 'pu_order', 'material']
|
||||
|
||||
class PuOrderItemUpdateSerializer(ModelSerializer):
|
||||
class Meta:
|
||||
model = PuOrderItem
|
||||
fields = ['count', 'delivery_date']
|
||||
|
|
|
@ -5,7 +5,7 @@ from rest_framework.viewsets import ModelViewSet
|
|||
from rest_framework.mixins import CreateModelMixin, DestroyModelMixin
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
from apps.pum.models import PuOrder, PuOrderItem, Vendor
|
||||
from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderItemCreateUpdateSerializer, PuOrderItemSerializer, PuOrderSerializer, VendorSerializer
|
||||
from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderItemCreateSerializer, PuOrderItemSerializer, PuOrderItemUpdateSerializer, PuOrderSerializer, VendorSerializer
|
||||
from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin
|
||||
from rest_framework.exceptions import APIException, ValidationError
|
||||
from rest_framework.decorators import action
|
||||
|
@ -80,8 +80,10 @@ class PuOrderItemViewSet(CreateModelMixin, DestroyModelMixin, GenericViewSet):
|
|||
ordering = ['-create_time']
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['create', 'update']:
|
||||
return PuOrderItemCreateUpdateSerializer
|
||||
if self.action == 'create':
|
||||
return PuOrderItemCreateSerializer
|
||||
elif self.action == 'update':
|
||||
return PuOrderItemUpdateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
|
|
Loading…
Reference in New Issue