72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
from rest_framework import serializers
 | 
						|
from apps.utils.serializers import CustomModelSerializer
 | 
						|
from apps.utils.constants import EXCLUDE_FIELDS
 | 
						|
from apps.fim.models import PriceSet, FeeSet, Fee
 | 
						|
from apps.mtm.models import Mgroup
 | 
						|
from apps.wpm.models import SfLog
 | 
						|
from rest_framework.exceptions import ParseError
 | 
						|
from apps.fim.tasks import cal_enstat_when_priceset_change, cal_enstat_when_feeset_change
 | 
						|
 | 
						|
class FeeSerializer(CustomModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Fee
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
 | 
						|
class FeeSetSerializer(CustomModelSerializer):
 | 
						|
    mgroup_name = serializers.CharField(source='mgroup.name', read_only=True)
 | 
						|
    fee_ = FeeSerializer(source='fee', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = FeeSet
 | 
						|
        fields = '__all__'
 | 
						|
        read_only_fields = EXCLUDE_FIELDS
 | 
						|
 | 
						|
    def update(self, instance, validated_data):
 | 
						|
        validated_data.pop('year', None)
 | 
						|
        validated_data.pop('month', None)
 | 
						|
        validated_data.pop('mgroup', None)
 | 
						|
        validated_data.pop('fee', None)
 | 
						|
        old_cost_unit = instance.cost_unit
 | 
						|
        instance = super().update(instance, validated_data)
 | 
						|
        new_cost_unit = instance.cost_unit
 | 
						|
        if new_cost_unit != old_cost_unit:
 | 
						|
            cal_enstat_when_feeset_change.delay(instance.id)
 | 
						|
        return instance
 | 
						|
 | 
						|
class PriceSetSerializer(CustomModelSerializer):
 | 
						|
    material_name = serializers.CharField(source='material.name', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = PriceSet
 | 
						|
        fields = '__all__'
 | 
						|
        read_only_fields = EXCLUDE_FIELDS
 | 
						|
 | 
						|
    def update(self, instance, validated_data):
 | 
						|
        validated_data.pop('year', None)
 | 
						|
        validated_data.pop('month', None)
 | 
						|
        validated_data.pop('material', None)
 | 
						|
        old_price_unit = instance.price_unit
 | 
						|
        instance = super().update(instance, validated_data)
 | 
						|
        new_price_unit = instance.price_unit
 | 
						|
        if new_price_unit != old_price_unit:
 | 
						|
            cal_enstat_when_priceset_change.delay(instance.id)
 | 
						|
        return instance
 | 
						|
 | 
						|
 | 
						|
class CostStatSerializer(serializers.Serializer):
 | 
						|
    type = serializers.CharField(label="统计维度", help_text="sflog/day_s/month_s/year_s")
 | 
						|
    mgroup = serializers.PrimaryKeyRelatedField(label='工段ID', required=False, queryset=Mgroup.objects.all())
 | 
						|
    sflog = serializers.PrimaryKeyRelatedField(label='值班记录ID', required=False, queryset=SfLog.objects.all())
 | 
						|
    year_s = serializers.IntegerField(label="年", required=False)
 | 
						|
    month_s = serializers.IntegerField(label="月", required=False)
 | 
						|
    day_s = serializers.IntegerField(label="日", required=False)
 | 
						|
 | 
						|
    def validate(self, attrs):
 | 
						|
        if type == 'sflog' and 'sflog' not in attrs:
 | 
						|
            raise ParseError('未提供值班记录')
 | 
						|
        elif type in ['year_s', 'month_s', 'day_s'] and 'mgroup' not in attrs:
 | 
						|
            raise ParseError('未提供工段ID')
 | 
						|
        elif type not in attrs:
 | 
						|
            raise ParseError('缺少年月日')
 | 
						|
        return super().validate(attrs)
 | 
						|
 | 
						|
     |