123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744 |
- #coding=utf-8
- from libs import utils
- from django.db.models import Q, Sum
- from django.conf import settings
- from rest_framework import serializers
- 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 models import PurchasePlan, PurchaseUser, PurchasePlanDetail, PurchasePrice, PurchaseOrder, PurchaseOrderDetail, \
- GodownEntry, PurchaseInvoiceImage, \
- PurchasePayment, PurchasePaymentDetail, GodownEntry, GodownEntryDetail, GodownEntryReturn, GodownEntryReturnDetail, \
- PurchasePay
- from libs.booleancharfield import BooleanCharField, PriceShowCharField, AmountShowCharField, CountShowCharField, \
- TimeCharField, AmountShowCharFieldWithTwoDecimalPlaces
- from apps.warehouse.models import WarehouseStock
- from apps import base
- class PurchasePlanSerializer(serializers.ModelSerializer):
- status = serializers.CharField(read_only=True)
- total_count = CountShowCharField(read_only=True)
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- demend_user_text = serializers.CharField(source='demend_user.name', read_only=True)
- demend_department_text = serializers.CharField(source='demend_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)
- create_user_text = serializers.CharField(source='create_user.name', read_only=True)
- purchase_users = serializers.SerializerMethodField()
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- is_compact_text = serializers.SerializerMethodField()
- report_text = serializers.SerializerMethodField()
- # 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 = PurchasePlan
- fields = '__all__'
- def get_purchase_users(self, obj):
- data = []
- rows = PurchaseUser.objects.filter(purchase=obj)
- data.extend([s[0] for s in rows.values_list('purchase_user__name')])
- return ','.join(data)
- def get_is_compact_text(self, obj):
- data = obj.isCompart()
- return data
- def get_report_text(self, obj):
- data = obj.isReport()
- return data
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = PurchasePlan.getById(id)
- else:
- instance = None
- serializer = PurchasePlanSerializer(instance, data=data)
- serializer.user = user
- return serializer
- def validate(self, data):
- data['demend_department'] = None
- if 'demend_user' in data and data['demend_user']:
- data['demend_department'] = data['demend_user'].department
- return data
- def create(self, validated_data):
- validated_data['create_user'] = self.user
- validated_data['department'] = self.user.department
- production = PurchasePlan.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(PurchasePlanSerializer, 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 PurchasePlanDetailSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='product.name', read_only=True)
- model = serializers.CharField(source='product.model', read_only=True)
- stock_count = CountShowCharField(source='product.stock_count', read_only=True)
- purchase_count = CountShowCharField()
- class Meta:
- model = PurchasePlanDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instances = PurchasePlanDetail.getById(id)
- else:
- instances = None
- serializer = PurchasePlanDetailSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- production = PurchasePlanDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购计划明细[%s],id=%d" % (production.product.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):
- data['purchase_count'] = Formater.formatCount(data['purchase_count'])
- return data
- def update(self, instance, validated_data):
- instance = super(PurchasePlanDetailSerializer, 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 PurchaseUserSerializer(serializers.ModelSerializer):
- purchase_user_text = serializers.CharField(source='purchase_user.name', read_only=True)
- class Meta:
- model = PurchaseUser
- fields = '__all__'
- @staticmethod
- def factory(user, data):
- instances = None
- serializer = PurchaseUserSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- purchaseuser = PurchaseUser.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购计划[%s]采购员[%s],id=%d" % (purchaseuser.purchase.no, purchaseuser.purchase_user.name, purchaseuser.id),
- validated_data
- )
- return purchaseuser
- 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(PurchaseUserSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改采购计划[%s]采购员[%s],id=%d" % (instance.purchase.no, instance.purchase_user.name, instance.id),
- validated_data
- )
- return instance
- class PurchasePriceSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='purchase_detail.product.name', read_only=True)
- model = serializers.CharField(source='purchase_detail.product.model', read_only=True)
- type_id = serializers.CharField(source='purchase_detail.product.type', read_only=True)
- type_text = serializers.CharField(source='purchase_detail.product.get_type_display', read_only=True)
- quality_request_text = serializers.CharField(source='purchase_detail.quality_request_text', read_only=True)
- purchase_count = CountShowCharField(source='purchase_detail.purchase_count', read_only=True)
- unit = serializers.CharField(source='purchase_detail.product.unit', read_only=True)
- demend_user_text = serializers.CharField(source='purchase_user.purchase.demend_user.name', read_only=True)
- purchase_user_text = serializers.CharField(source='purchase_user.name', read_only=True)
- product_time = serializers.DateTimeField(format=base.DATE_FORMAT, source='purchase_detail.product_time', read_only=True)
- supplier_text = serializers.CharField(source='supplier.name', read_only=True)
- price = PriceShowCharField()
- report_text = BooleanCharField(source='report', read_only=True)
- class Meta:
- model = PurchasePrice
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instances = PurchasePrice.getById(id)
- else:
- instances = None
- serializer = PurchasePriceSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- purchaseprice = PurchasePrice.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购计划[%s]报价[%s],id=%d" % (purchaseprice.purchase_detail.purchase.no, purchaseprice.price, purchaseprice.id),
- validated_data
- )
- return purchaseprice
- def validate(self, data):
- if 'price' in data:
- data['price'] = Formater.formatPrice(data['price'])
- return data
- 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(PurchasePriceSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改采购计划[%s]报价[%s],id=%d" % (instance.purchase_detail.purchase.no, instance.price, instance.id),
- validated_data
- )
- return instance
- class PurchaseOrderSerializer(serializers.ModelSerializer):
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- arrval_text = serializers.CharField(source='get_arrval_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)
- supplier_name = serializers.CharField(source='supplier.name', read_only=True)
- supplier_type = serializers.CharField(source='supplier.type', read_only=True)
- supplier_contacts = serializers.CharField(source='supplier.contacts', read_only=True)
- supplier_phone_number = serializers.CharField(source='supplier.phone_number', read_only=True)
- supplier_opening_bank = serializers.CharField(source='supplier.opening_bank', read_only=True)
- supplier_account = serializers.CharField(source='supplier.account', read_only=True)
- products = serializers.SerializerMethodField()
- entries = serializers.SerializerMethodField()
- arrvals = serializers.SerializerMethodField()
- is_pay = serializers.SerializerMethodField()
- payment_amount = serializers.SerializerMethodField()
- count = CountShowCharField()
- amount = AmountShowCharFieldWithTwoDecimalPlaces()
- apply_amount = AmountShowCharFieldWithTwoDecimalPlaces(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 = PurchaseOrder
- fields = '__all__'
- def get_products(self, obj):
- data = []
- rows = PurchaseOrderDetail.objects.filter(main=obj)
- data.extend([s[0] for s in rows.values_list('product__name')])
- return ','.join(data)
- def get_entries(self, obj):
- data = []
- rows = GodownEntry.objects.filter(purchase_order=obj)
- data.extend([s[0] for s in rows.values_list('no')])
- return ','.join(data)
- def get_is_pay(self, obj):
- data = 0
- rows = PurchasePayment.objects.filter(order=obj)
- if rows:
- data = 1
- return data
- def get_arrvals(self, obj):
- sum_rows = PurchaseOrderDetail.objects.filter(main=obj).aggregate(sum_count=Sum('arrval_count'))
- return Formater.formatCountShow(sum_rows['sum_count'] or 0)
- def get_payment_amount(self, obj):
- sum_rows = PurchasePayment.objects.filter(order=obj).aggregate(sum_amount=Sum('actual_amount'))
- return Formater.formatAmountShowWithTwoDecimalPlaces(sum_rows['sum_amount'] or 0)
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = PurchaseOrder.getById(id)
- else:
- instance = None
- serializer = PurchaseOrderSerializer(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
- order = PurchaseOrder.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购合同[%s],id=%d" % (order.no, order.id),
- validated_data
- )
- return order
- 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(PurchaseOrderSerializer, 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 PurchaseOrderDetailSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='product.name', read_only=True)
- model = serializers.CharField(source='product.model', read_only=True)
- supplier_name = serializers.CharField(source='main.supplier.name', read_only=True)
- order_no = serializers.CharField(source='main.no', read_only=True)
- count = CountShowCharField()
- arrval_count = CountShowCharField(read_only=True)
- price = PriceShowCharField()
- amount = AmountShowCharField(read_only=True)
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- invoice_date = serializers.DateField(format=base.DATE_FORMAT, read_only=True)
- create_user_text = serializers.CharField(source='create_user.name', read_only=True)
- check_user_text = serializers.CharField(source='check_user.name', read_only=True)
- invoice_amount = AmountShowCharField(read_only=True)
- check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
- images = serializers.SerializerMethodField()
- class Meta:
- model = PurchaseOrderDetail
- fields = '__all__'
- def get_images(self, obj):
- data = []
- rows = PurchaseInvoiceImage.objects.filter(order_detail=obj)
- data.extend([s[0] for s in rows.values_list('invoice_image')])
- return ','.join(data)
- @staticmethod
- def factory(user, data):
- instances = None
- serializer = PurchaseOrderDetailSerializer(instances, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- order = PurchaseOrderDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购合同明细[%s],id=%d" % (order.main.no, order.id),
- validated_data
- )
- return order
- 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 update(self, instance, validated_data):
- instance = super(PurchaseOrderDetailSerializer, self).update(instance, validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.UPDATE,
- u"修改采购合同明细[%s],id=%d" % (instance.main.no, instance.id),
- validated_data
- )
- return instance
- class GodownEntrySerializer(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)
- supplier_text = serializers.CharField(source='supplier.name', read_only=True)
- total_count = CountShowCharField(read_only=True)
- total_amount = AmountShowCharField(read_only=True)
- total_invoice_amount = AmountShowCharField(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)
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- warehouse_text = serializers.CharField(source='warehouse.name', read_only=True)
- purchase_order_no = serializers.CharField(source='purchase_order.no', read_only=True)
- class Meta:
- model = GodownEntry
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = GodownEntry.getById(id)
- else:
- instance = None
- serializer = GodownEntrySerializer(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 = GodownEntry.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(GodownEntrySerializer, 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 GodownEntryDetailSerializer(serializers.ModelSerializer):
- product_base_text = serializers.CharField(source='product_base.name', read_only=True)
- product_base_model = serializers.CharField(source='product_base.model', read_only=True)
- unit_text = serializers.CharField(source='product_base.unit', read_only=True)
- count = CountShowCharField()
- price = PriceShowCharField()
- amount = AmountShowCharField(read_only=True)
- invoice_amount = AmountShowCharField()
- class Meta:
- model = GodownEntryDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data):
- serializer = GodownEntryDetailSerializer(None, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- instance = GodownEntryDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加入库明细[%s],id=%d" % (instance.product_base.name, instance.id),
- validated_data
- )
- return instance
- 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']
- data['invoice_amount'] = Formater.formatAmount(data['invoice_amount'])
- warehouse_stock = WarehouseStock.getByWarehouseAndProduct(data['main'].warehouse, data['product_base'])
- data['warehouse_stock'] = warehouse_stock
- return data
- class GodownEntryReturnSerializer(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)
- supplier_text = serializers.CharField(source='supplier.name', read_only=True)
- total_count = CountShowCharField(read_only=True)
- total_amount = AmountShowCharField(read_only=True)
- warehouse_text = serializers.CharField(source='warehouse.name', 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)
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- class Meta:
- model = GodownEntryReturn
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = GodownEntryReturn.getById(id)
- else:
- instance = None
- serializer = GodownEntryReturnSerializer(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 = GodownEntryReturn.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(GodownEntryReturnSerializer, 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 GodownEntryReturnDetailSerializer(serializers.ModelSerializer):
- main_no = serializers.CharField(source='main.no', read_only=True)
- main_supplier = serializers.CharField(source='main.supplier.name', read_only=True)
- godownentry_no = serializers.CharField(source='godownentry_detail.main.no', read_only=True)
- main_warehouse = serializers.CharField(source='main.warehouse.name', read_only=True)
- main_create_user = serializers.CharField(source='main.create_user.name', read_only=True)
- main_create_time = TimeCharField(source='main.create_time', read_only=True)
- main_check_user = serializers.CharField(source='main.create_user.name', read_only=True)
- main_check_time = TimeCharField(source='main.check_time.name', read_only=True)
- product_base_text = serializers.CharField(source='product_base.name', read_only=True)
- product_base_model = serializers.CharField(source='product_base.model', read_only=True)
- main_notes = serializers.CharField(source='main.notes', read_only=True)
- count = CountShowCharField()
- price = PriceShowCharField(read_only=True)
- amount = AmountShowCharField()
- class Meta:
- model = GodownEntryReturnDetail
- fields = '__all__'
- @staticmethod
- def factory(user, data):
- serializer = GodownEntryReturnDetailSerializer(None, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- instance = GodownEntryReturnDetail.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加退货明细[%s],id=%d" % (instance.product_base.name, instance.id),
- validated_data
- )
- return instance
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
- def validate(self, data):
- data['count'] = Formater.formatCount(data['count'])
- data['amount'] = Formater.formatAmount(data['amount'])
- data['price'] = data['amount'] / data['count']
- warehouse_stock = WarehouseStock.getByWarehouseAndProduct(data['main'].warehouse, data['product_base'])
- data['warehouse_stock'] = warehouse_stock
- return data
- class PurchasePaymentSerializer(serializers.ModelSerializer):
- create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- 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)
- supplier_name = serializers.CharField(source='order.supplier.name', read_only=True)
- supplier_account = serializers.CharField(source='order.supplier.account', read_only=True)
- supplier_bank = serializers.CharField(source='order.supplier.opening_bank', read_only=True)
- order_no = serializers.CharField(source='order.no', read_only=True)
- payment = BooleanCharField(source='is_pay', read_only=True)
- amount = AmountShowCharFieldWithTwoDecimalPlaces()
- actual_amount = AmountShowCharFieldWithTwoDecimalPlaces()
- apply_amount = AmountShowCharFieldWithTwoDecimalPlaces()
- amount_CNY = serializers.SerializerMethodField()
- actual_amount_CNY = serializers.SerializerMethodField()
- apply_amount_CNY = serializers.SerializerMethodField()
- review_user_text = serializers.CharField(source='review_user.name', read_only=True)
- review_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- ratify_user_text = serializers.CharField(source='ratify_user.name', read_only=True)
- ratify_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- class Meta:
- model = PurchasePayment
- fields = '__all__'
- def get_amount_CNY(self, obj):
- retval = Formater.formatAmountShow(obj.amount)
- return utils.number2CNY(float(retval))
- def get_actual_amount_CNY(self, obj):
- retval = Formater.formatAmountShow(obj.actual_amount)
- return utils.number2CNY(float(retval))
- def get_apply_amount_CNY(self, obj):
- retval = Formater.formatAmountShow(obj.apply_amount)
- return utils.number2CNY(float(retval))
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = PurchasePayment.getById(id)
- else:
- instance = None
- serializer = PurchasePaymentSerializer(instance, data=data, partial=True)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- validated_data['create_user'] = self.user
- validated_data['department'] = self.user.department
- order = PurchasePayment.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购付款单[%s],id=%d" % (order.no, order.id),
- validated_data
- )
- return order
- 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(PurchasePaymentSerializer, 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 PurchasePaySerializer(serializers.ModelSerializer):
- payment_type_text = serializers.CharField(source='get_status_display', read_only=True)
- payment_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
- payment_user_text = serializers.CharField(source='payment_user.name', read_only=True)
- class Meta:
- model = PurchasePay
- fields = '__all__'
- @staticmethod
- def factory(user, data, id=None):
- if id:
- instance = PurchasePay.getById(id)
- else:
- instance = None
- serializer = PurchasePaySerializer(instance, data=data)
- serializer.user = user
- return serializer
- def create(self, validated_data):
- validated_data['payment_user'] = self.user
- validated_data['payment_department'] = self.user.department
- order = PurchasePay.objects.create(**validated_data)
- BizLog.objects.addnew(
- self.user,
- BizLog.INSERT,
- u"添加采购付款单明细id=%d" % (order.id),
- validated_data
- )
- return order
- def validSave(self):
- if self.is_valid():
- return self.save()
- else:
- raise CustomError(dump_serializer_errors(self))
|