#coding=utf-8 from rest_framework import serializers from django.db.models import Q from apps import base from apps.account.models import User from apps.base import Formater from apps.exceptions import CustomError from apps.foundation.models import BizLog from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome from apps.serializer_errors import dump_serializer_errors from libs.booleancharfield import CountShowCharField class FinanceCategorySerializer(serializers.ModelSerializer): enabled_text = serializers.SerializerMethodField() class Meta: model = FinanceCategory fields = '__all__' def get_enabled_text(self, obj): if obj.enabled: return u'是' return u'否' @staticmethod def factory(user, data, id=None): if id: instance = FinanceCategory.getById(id) else: instance = None serializer = FinanceCategorySerializer(instance, data=data) serializer.user = user return serializer def create(self, validated_data): validated_data['create_user'] = self.user instance = FinanceCategory.objects.create(**validated_data) BizLog.objects.addnew( self.user, BizLog.INSERT, u"添加财务收支类别[%s],id=%d" % (instance.name, instance.id), validated_data ) return instance def update(self, instance, validated_data): instance = super(FinanceCategorySerializer, self).update(instance, validated_data) BizLog.objects.addnew( self.user, BizLog.UPDATE, u"修改财务收支类别[%s],id=%d" % (instance.name, instance.id), validated_data ) return instance def validSave(self): if self.is_valid(): return self.save() else: raise CustomError(dump_serializer_errors(self)) class FinancePurposeSerializer(serializers.ModelSerializer): category_text = serializers.CharField(source='category.name', read_only=True) type_text = serializers.CharField(source='get_type_display', read_only=True) enabled_text = serializers.SerializerMethodField() def get_enabled_text(self, obj): if obj.enabled: return u'是' return u'否' class Meta: model = FinancePurpose fields = '__all__' @staticmethod def factory(user, data, id=None): if id: instance = FinancePurpose.getById(id) else: instance = None serializer = FinancePurposeSerializer(instance, data=data) serializer.user = user return serializer def create(self, validated_data): validated_data['create_user'] = self.user instance = FinancePurpose.objects.create(**validated_data) BizLog.objects.addnew( self.user, BizLog.INSERT, u"添加财务收支用途[%s],id=%d" % (instance.name, instance.id), validated_data ) return instance def update(self, instance, validated_data): instance = super(FinancePurposeSerializer, self).update(instance, validated_data) BizLog.objects.addnew( self.user, BizLog.UPDATE, u"修改财务收支用途[%s],id=%d" % (instance.name, instance.id), validated_data ) return instance def validSave(self): if self.is_valid(): return self.save() else: raise CustomError(dump_serializer_errors(self))