101 lines
4.2 KiB
Python
101 lines
4.2 KiB
Python
from rest_framework import serializers
|
|
from apps.utils.serializers import CustomModelSerializer
|
|
from apps.utils.constants import EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS_BASE
|
|
from rest_framework.exceptions import ValidationError
|
|
|
|
from apps.pum.models import Supplier, PuPlan, PuPlanItem, PuOrder, PuOrderItem
|
|
from apps.mtm.serializers import MaterialSerializer
|
|
|
|
class SupplierSerializer(CustomModelSerializer):
|
|
class Meta:
|
|
model = Supplier
|
|
fields = '__all__'
|
|
read_only_fields = EXCLUDE_FIELDS_DEPT
|
|
|
|
|
|
class PuPlanSerializer(CustomModelSerializer):
|
|
class Meta:
|
|
model = PuPlan
|
|
fields = '__all__'
|
|
read_only_fields = EXCLUDE_FIELDS_DEPT + ['state']
|
|
|
|
def update(self, instance, validated_data):
|
|
if instance.state != PuPlan.PUPLAN_CREATE:
|
|
raise ValidationError('该状态下不可编辑')
|
|
return super().update(instance, validated_data)
|
|
|
|
|
|
class PuPlanItemSerializer(CustomModelSerializer):
|
|
material_ = MaterialSerializer(source='material', read_only=True)
|
|
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
|
|
class Meta:
|
|
model = PuPlanItem
|
|
fields = '__all__'
|
|
read_only_fields = EXCLUDE_FIELDS_DEPT + ['pu_order']
|
|
|
|
def create(self, validated_data):
|
|
pu_plan = validated_data['pu_plan']
|
|
if pu_plan.state != PuPlan.PUPLAN_CREATE:
|
|
raise ValidationError('该状态下不可添加需求')
|
|
material = validated_data['material']
|
|
user = self.context['request'].user
|
|
if PuPlanItem.objects.filter(material=material, belong_dept=user.belong_dept).exists():
|
|
raise ValidationError('同部门已提交该物料需求,请确认!')
|
|
return super().create(validated_data)
|
|
|
|
def update(self, instance, validated_data):
|
|
validated_data.pop('pu_plan')
|
|
pu_plan = instance.pu_plan
|
|
if pu_plan.state != PuPlan.PUPLAN_CREATE:
|
|
raise ValidationError('该状态下不可编辑需求')
|
|
material = validated_data['material']
|
|
user = self.context['request'].user
|
|
if instance.create_by != user:
|
|
raise ValidationError('非创建人不可编辑')
|
|
if PuPlanItem.objects.exclude(id=instance.id).filter(material=material, belong_dept=user.belong_dept).exists():
|
|
raise ValidationError('同部门已提交该物料需求,请确认!')
|
|
return super().update(instance, validated_data)
|
|
|
|
|
|
class PuOrderSerializer(CustomModelSerializer):
|
|
class Meta:
|
|
model = PuOrder
|
|
fields = '__all__'
|
|
read_only_fields = EXCLUDE_FIELDS_DEPT + ['state']
|
|
|
|
def update(self, instance, validated_data):
|
|
validated_data.pop('supplier')
|
|
if instance.steate != PuOrder.PUORDER_CREATE:
|
|
raise ValidationError('该状态下不可编辑')
|
|
return super().update(instance, validated_data)
|
|
|
|
|
|
class PuOrderItemSerializer(CustomModelSerializer):
|
|
material_ = MaterialSerializer(source='material', read_only=True)
|
|
class Meta:
|
|
model = PuOrderItem
|
|
fields = '__all__'
|
|
read_only_fields = EXCLUDE_FIELDS_BASE + ['delivered_count']
|
|
|
|
def create(self, validated_data):
|
|
pu_order = validated_data['pu_order']
|
|
material = validated_data['material']
|
|
if pu_order.state != PuOrder.PUORDER_CREATE:
|
|
raise ValidationError('采购订单该状态下不可添加明细')
|
|
if PuOrder.objects.filter(pu_order=pu_order, material=material).exists():
|
|
raise ValidationError('该物料已添加')
|
|
return super().create(validated_data)
|
|
|
|
def update(self, instance, validated_data):
|
|
validated_data.pop('material')
|
|
validated_data.pop('pu_order')
|
|
pu_order = instance.pu_order
|
|
if pu_order.state != PuOrder.PUORDER_CREATE:
|
|
raise ValidationError('采购订单该状态下不可编辑')
|
|
return super().update(instance, validated_data)
|
|
|
|
|
|
class AddSerializer(serializers.Serializer):
|
|
pu_order = serializers.PrimaryKeyRelatedField(label='采购订单ID', queryset=PuOrder.objects.all())
|
|
pu_planitems = serializers.PrimaryKeyRelatedField(label='计划明细ID', queryset=PuPlanItem.objects.all(), many=True)
|