from rest_framework import serializers from rest_framework.exceptions import ValidationError from apps.mtm.serializers import MaterialSerializer from apps.pm.models import Mtask, Utask from apps.sam.models import OrderItem from apps.utils.serializers import CustomModelSerializer from apps.system.models import Dept class UtaskSerializer(CustomModelSerializer): material_ = MaterialSerializer(source='material', read_only=True) belong_dept = serializers.PrimaryKeyRelatedField( queryset=Dept.objects.all(), required=False) class Meta: model = Utask fields = '__all__' def validate(self, attrs): if 'mgroup' in attrs and attrs['mgroup']: attrs['belong_dept'] = attrs['mgroup'].belong_dept return attrs def update(self, instance, validated_data): if instance.state != Mtask.MTASK_CREATED: raise ValidationError('任务非创建中不可编辑') new_data = {key: validated_data[key] for key in [ 'number', 'count', 'start_date', 'end_date']} return super().update(instance, new_data) class MtaskSerializer(CustomModelSerializer): material_out_ = MaterialSerializer(source='material_out', read_only=True) mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) class Meta: model = Mtask fields = '__all__' read_only_fields = ['utask'] def update(self, instance, validated_data): if instance.state != Mtask.MTASK_CREATED: raise ValidationError('任务非创建中不可编辑') if instance.utask is not None: new_data = {'count': validated_data['count']} else: new_data = {key: validated_data[key] for key in [ 'number', 'count', 'start_date', 'end_date']} return super().update(instance, new_data) class SchedueSerializer(serializers.Serializer): orderitems = serializers.PrimaryKeyRelatedField( label='orderitem的ID列表', queryset=OrderItem.objects.all(), many=True) start_date = serializers.DateField(label='计划开工日期') end_date = serializers.DateField(label='计划完工日期') belong_dept = serializers.PrimaryKeyRelatedField( label='车间ID', queryset=Dept.objects.all(), required=False) class MtaskDaySerializer(serializers.Serializer): belong_dept_name = serializers.CharField(label='车间名称') date = serializers.DateField(label='日期')