123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- #coding=utf-8
- from django.conf import settings
- from rest_framework import serializers
- from apps import base
- from apps.base import Formater
- from apps.exceptions import CustomError
- from apps.foundation.models import BizLog
- from apps.serializer_errors import dump_serializer_errors
- from libs.booleancharfield import CountShowCharField, PriceShowCharField, AmountShowCharField, EmptyPriceShowCharField, \
- EmptyAmountShowCharField
- from models import ProductionPlan, SalePlan, ProductionPlanDetail, SalePlanDetail, ProductionDemand, ProductionDemandDetail
- class ProductionDemandSerializer(serializers.ModelSerializer):
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_status_text = serializers.CharField(source='get_status_display', read_only=True)
- check_user_text = serializers.CharField(source='check_user.name', read_only=True)
- create_user_text = serializers.CharField(source='create_user.name', read_only=True)
- customer_name = serializers.CharField(source='customer.name', read_only=True)
- customer_id = serializers.CharField(source='customer.id', read_only=True)
- customer_tel = serializers.CharField(source='customer.mobile', read_only=True)
- products = serializers.SerializerMethodField()
- count = CountShowCharField(read_only=True)
- receive_count = CountShowCharField(read_only=True)
- receiveable_count = serializers.SerializerMethodField()
- class Meta:
- model = ProductionDemand
- fields = '__all__'
- def get_products(self, obj):
- data = []
- rows = ProductionDemandDetail.objects.filter(main=obj)
- data.extend([s[0] for s in rows.values_list('goods__product_base__name')])
- return ','.join(data)
- def get_receiveable_count(self, obj):
- count = Formater.formatCountShow((obj.count or 0) - (obj.receive_count or 0))
- return count
- @staticmethod
- def factory(user, data,id=None):
- if id:
- instance = ProductionDemand.getById(id)
- else:
- instance = None
- serializer = ProductionDemandSerializer(instance, data=data)
- serializer.user = user
- return serializer
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def create(self, validated_data):
- validated_data['create_user'] = self.user
- validated_data['department'] = self.user.department
- instance = super(ProductionDemandSerializer, self).create(validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加生产需求[%s],id=%d" % (instance.no, instance.id),
- validated_data
- )
- return instance
- def update(self, instance, validated_data):
- instance = super(ProductionDemandSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改生产需求[%s],id=%d" % (instance.no, instance.id),
- validated_data
- )
- return instance
- class ProductionDemandDetailSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='goods.product_base.name', read_only=True)
- model = serializers.CharField(source='goods.product_base.model', read_only=True)
- quality_request_text = serializers.CharField(source='quality_request.name', read_only=True)
- quality_request_id = serializers.CharField(source='quality_request.id', read_only=True)
- count = CountShowCharField()
- receive_count = CountShowCharField(read_only=True)
- price = PriceShowCharField()
- amount = AmountShowCharField(read_only=True)
- class Meta:
- model = ProductionDemandDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data):
- instances = None
- serializer = ProductionDemandDetailSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def validate(self, data):
- data['price'] = Formater.formatPrice(data['price'])
- data['count'] = Formater.formatCount(data['count'])
- data['amount'] = data['count'] * data['price']
- return data
- def create(self, validated_data):
- instance = super(ProductionDemandDetailSerializer, self).create(validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加生产需求明细[%s],id=%d" % (instance.main.no, instance.id),
- validated_data
- )
- return instance
-
- class ProductionPlanSerializer(serializers.ModelSerializer):
- status = serializers.CharField(read_only=True)
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- create_user_text = serializers.CharField(source='create_user.name', read_only=True)
- total_count = CountShowCharField(read_only=True)
- department_text = serializers.CharField(source='department.name', read_only=True)
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_user_text = serializers.CharField(source='check_user.name', read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_user_text2 = serializers.CharField(source='check_user2.name', read_only=True)
- check_time2 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_user_text3 = serializers.CharField(source='check_user3.name', read_only=True)
- check_time3 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- class Meta:
- model = ProductionPlan
- fields = '__all__'
- @staticmethod
- def factory(user,data, id=None):
- if id:
- instance = ProductionPlan.getById(id)
- else:
- instance = None
- serializer = ProductionPlanSerializer(instance, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- validated_data['create_user'] = self.user
- validated_data['department'] = self.user.department
- production = ProductionPlan.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加生产计划[%s],id=%d" % (production.name, production.id),
- validated_data
- )
- return production
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def update(self, instance, validated_data):
- instance = super(ProductionPlanSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改生产计划[%s],id=%d" % (instance.name, instance.id),
- validated_data
- )
- return instance
- class SalePlanSerializer(serializers.ModelSerializer):
- status = serializers.CharField(read_only=True)
- no = serializers.CharField(read_only=True)
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- create_user_text = serializers.CharField(source='create_user.name', read_only=True)
- department_text = serializers.CharField(source='department.name', read_only=True)
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_user_text = serializers.CharField(source='check_user.name', read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- customer_text = serializers.CharField(source='customer.name', read_only=True)
- goods_text = serializers.SerializerMethodField()
- total_count = CountShowCharField(read_only=True)
- total_amount = EmptyAmountShowCharField(read_only=True)
- class Meta:
- model = SalePlan
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = SalePlan.getById(id)
- else:
- instance = None
- serializer = SalePlanSerializer(instance, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- validated_data['create_user'] = self.user
- validated_data['department'] = self.user.department
- instance = SalePlan.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加销售计划[%s],id=%d" % (instance.no, instance.id),
- validated_data
- )
- return instance
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def update(self, instance, validated_data):
- instance = super(SalePlanSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改销售计划[%s],id=%d" % (instance.no, instance.id),
- validated_data
- )
- return instance
- def get_goods_text(self, obj):
- data = []
- rows = SalePlanDetail.objects.filter(main=obj)
- data.extend([row.goods.product_base.name for row in rows])
- return ','.join(data)
- class ProductionPlanDetailSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='product.product_base.name', read_only=True)
- model = serializers.CharField(source='product.product_base.model', read_only=True)
- count = CountShowCharField()
- quality_request_text = serializers.CharField(source='quality_request.name', read_only=True)
- product_user_id = serializers.CharField(source='product_user.id', read_only=True)
- p_department_id = serializers.CharField(source='p_department.id', read_only=True)
- department_id = serializers.CharField(source='department.id', read_only=True)
- product_user_text = serializers.CharField(source='product_user.name', read_only=True)
- p_department_text = serializers.CharField(source='p_department.name', read_only=True)
- department_text = serializers.CharField(source='department.name', read_only=True)
- class Meta:
- model = ProductionPlanDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instances = ProductionPlanDetail.getById(id)
- else:
- instances = None
- serializer = ProductionPlanDetailSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- production = ProductionPlanDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加生产计划明细[%s],id=%d" % (production.product.product_base.name, production.id),
- validated_data
- )
- return production
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def validate(self, data):
- if 'count' in data:
- data['count'] = Formater.formatCount(data['count'])
- data['department'] = None
- if 'product_user' in data and data['product_user']:
- data['department'] = data['product_user'].department
- return data
- def update(self, instance, validated_data):
- instance = super(ProductionPlanDetailSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改生产计划明细[%s],id=%d" % (instance.name, instance.id),
- validated_data
- )
- return instance
- class SalePlanDetailSerializer(serializers.ModelSerializer):
- status = serializers.CharField(read_only=True)
- goods_text = serializers.CharField(source='goods.product_base.name', read_only=True)
- goods_model = serializers.CharField(source='goods.product_base.model', read_only=True)
- require_time_text = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- quality_request_text = serializers.CharField(source='quality_request.name', read_only=True)
- quality_request_id = serializers.CharField(source='quality_request.id', read_only=True)
- current_count = serializers.CharField(source='goods.product_base.stock_count', read_only=True)
- require_production_count = serializers.SerializerMethodField()
- require_count = CountShowCharField()
- price = EmptyPriceShowCharField(allow_blank=True)
- amount = EmptyAmountShowCharField(read_only=True)
- class Meta:
- model = SalePlanDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data):
- instance = None
- serializer = SalePlanDetailSerializer(instance, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- instance = SalePlanDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加销售计划明细[%s],id=%d" % (instance.goods, instance.id),
- validated_data
- )
- return instance
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def get_require_production_count(self, obj):
- require_production_count = 0
- if obj.require_count > obj.goods.product_base.stock_count:
- require_production_count = obj.require_count-obj.goods.product_base.stock_count
- return Formater.formatCountShow(require_production_count)
- def validate(self, data):
- if 'require_count' in data:
- data['require_count'] = Formater.formatCount(data['require_count'])
- if 'price' in data:
- if data['price'] == '':
- data['price'] = None
- else:
- data['price'] = Formater.formatPrice(data['price'])
- data['amount'] = data['require_count'] * data['price']
- return data
|