serializers.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. #coding=utf-8
  2. from libs import utils
  3. from django.db.models import Q, Sum
  4. from django.conf import settings
  5. from rest_framework import serializers
  6. from apps.base import Formater
  7. from apps.exceptions import CustomError
  8. from apps.foundation.models import BizLog
  9. from apps.serializer_errors import dump_serializer_errors
  10. from models import PurchasePlan, PurchaseUser, PurchasePlanDetail, PurchasePrice, PurchaseOrder, PurchaseOrderDetail, \
  11. PurchaseInvoiceImage, \
  12. PurchasePayment, PurchasePaymentDetail, GodownEntry, GodownEntryDetail, GodownEntryReturn, GodownEntryReturnDetail, \
  13. PurchasePay
  14. from libs.booleancharfield import BooleanCharField, PriceShowCharField, AmountShowCharField, CountShowCharField, \
  15. TimeCharField, AmountShowCharFieldWithTwoDecimalPlaces
  16. from apps.warehouse.models import WarehouseStock
  17. from apps import base
  18. class PurchasePlanSerializer(serializers.ModelSerializer):
  19. status = serializers.CharField(read_only=True)
  20. total_count = CountShowCharField(read_only=True)
  21. status_text = serializers.CharField(source='get_status_display', read_only=True)
  22. demend_user_text = serializers.CharField(source='demend_user.name', read_only=True)
  23. demend_department_text = serializers.CharField(source='demend_department.name', read_only=True)
  24. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  25. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  26. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  27. purchase_users = serializers.SerializerMethodField()
  28. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  29. is_compact_text = serializers.SerializerMethodField()
  30. report_text = serializers.SerializerMethodField()
  31. # check_user_text2 = serializers.CharField(source='check_user2.name', read_only=True)
  32. # check_time2 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  33. # check_user_text3 = serializers.CharField(source='check_user3.name', read_only=True)
  34. # check_time3 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  35. class Meta:
  36. model = PurchasePlan
  37. fields = '__all__'
  38. def get_purchase_users(self, obj):
  39. data = []
  40. rows = PurchaseUser.objects.filter(purchase=obj)
  41. data.extend([s[0] for s in rows.values_list('purchase_user__name')])
  42. return ','.join(data)
  43. def get_is_compact_text(self, obj):
  44. data = obj.isCompart()
  45. return data
  46. def get_report_text(self, obj):
  47. data = obj.isReport()
  48. return data
  49. @staticmethod
  50. def factory(user, data, id=None):
  51. if id:
  52. instance = PurchasePlan.getById(id)
  53. else:
  54. instance = None
  55. serializer = PurchasePlanSerializer(instance, data=data)
  56. serializer.user = user
  57. return serializer
  58. def validate(self, data):
  59. data['demend_department'] = None
  60. if 'demend_user' in data and data['demend_user']:
  61. data['demend_department'] = data['demend_user'].department
  62. return data
  63. def create(self, validated_data):
  64. validated_data['create_user'] = self.user
  65. validated_data['department'] = self.user.department
  66. production = PurchasePlan.objects.create(**validated_data)
  67. BizLog.objects.addnew(
  68. self.user,
  69. BizLog.INSERT,
  70. u"添加采购计划[%s],id=%d" % (production.name, production.id),
  71. validated_data
  72. )
  73. return production
  74. def validSave(self):
  75. if self.is_valid():
  76. return self.save()
  77. else:
  78. raise CustomError(dump_serializer_errors(self))
  79. def update(self, instance, validated_data):
  80. instance = super(PurchasePlanSerializer, self).update(instance, validated_data)
  81. BizLog.objects.addnew(
  82. self.user,
  83. BizLog.UPDATE,
  84. u"修改采购计划[%s],id=%d" % (instance.name, instance.id),
  85. validated_data
  86. )
  87. return instance
  88. class PurchasePlanDetailSerializer(serializers.ModelSerializer):
  89. name = serializers.CharField(source='product.name', read_only=True)
  90. model = serializers.CharField(source='product.model', read_only=True)
  91. stock_count = CountShowCharField(source='product.stock_count', read_only=True)
  92. purchase_count = CountShowCharField()
  93. class Meta:
  94. model = PurchasePlanDetail
  95. fields = '__all__'
  96. @staticmethod
  97. def factory(user, data, id=None):
  98. if id:
  99. instances = PurchasePlanDetail.getById(id)
  100. else:
  101. instances = None
  102. serializer = PurchasePlanDetailSerializer(instances, data=data)
  103. serializer.user = user
  104. return serializer
  105. def create(self, validated_data):
  106. production = PurchasePlanDetail.objects.create(**validated_data)
  107. BizLog.objects.addnew(
  108. self.user,
  109. BizLog.INSERT,
  110. u"添加采购计划明细[%s],id=%d" % (production.product.name, production.id),
  111. validated_data
  112. )
  113. return production
  114. def validSave(self):
  115. if self.is_valid():
  116. return self.save()
  117. else:
  118. raise CustomError(dump_serializer_errors(self))
  119. def validate(self, data):
  120. data['purchase_count'] = Formater.formatCount(data['purchase_count'])
  121. return data
  122. def update(self, instance, validated_data):
  123. instance = super(PurchasePlanDetailSerializer, self).update(instance, validated_data)
  124. BizLog.objects.addnew(
  125. self.user,
  126. BizLog.UPDATE,
  127. u"修改采购计划明细[%s],id=%d" % (instance.name, instance.id),
  128. validated_data
  129. )
  130. return instance
  131. class PurchaseUserSerializer(serializers.ModelSerializer):
  132. purchase_user_text = serializers.CharField(source='purchase_user.name', read_only=True)
  133. class Meta:
  134. model = PurchaseUser
  135. fields = '__all__'
  136. @staticmethod
  137. def factory(user, data):
  138. instances = None
  139. serializer = PurchaseUserSerializer(instances, data=data)
  140. serializer.user = user
  141. return serializer
  142. def create(self, validated_data):
  143. purchaseuser = PurchaseUser.objects.create(**validated_data)
  144. BizLog.objects.addnew(
  145. self.user,
  146. BizLog.INSERT,
  147. u"添加采购计划[%s]采购员[%s],id=%d" % (purchaseuser.purchase.no, purchaseuser.purchase_user.name, purchaseuser.id),
  148. validated_data
  149. )
  150. return purchaseuser
  151. def validSave(self):
  152. if self.is_valid():
  153. return self.save()
  154. else:
  155. raise CustomError(dump_serializer_errors(self))
  156. def update(self, instance, validated_data):
  157. instance = super(PurchaseUserSerializer, self).update(instance, validated_data)
  158. BizLog.objects.addnew(
  159. self.user,
  160. BizLog.UPDATE,
  161. u"修改采购计划[%s]采购员[%s],id=%d" % (instance.purchase.no, instance.purchase_user.name, instance.id),
  162. validated_data
  163. )
  164. return instance
  165. class PurchasePriceSerializer(serializers.ModelSerializer):
  166. name = serializers.CharField(source='purchase_detail.product.name', read_only=True)
  167. model = serializers.CharField(source='purchase_detail.product.model', read_only=True)
  168. type_id = serializers.CharField(source='purchase_detail.product.type', read_only=True)
  169. type_text = serializers.CharField(source='purchase_detail.product.get_type_display', read_only=True)
  170. quality_request_text = serializers.CharField(source='purchase_detail.quality_request_text', read_only=True)
  171. purchase_count = CountShowCharField(source='purchase_detail.purchase_count', read_only=True)
  172. unit = serializers.CharField(source='purchase_detail.product.unit', read_only=True)
  173. demend_user_text = serializers.CharField(source='purchase_user.purchase.demend_user.name', read_only=True)
  174. purchase_user_text = serializers.CharField(source='purchase_user.name', read_only=True)
  175. product_time = serializers.DateTimeField(format=base.DATE_FORMAT, source='purchase_detail.product_time', read_only=True)
  176. supplier_text = serializers.CharField(source='supplier.name', read_only=True)
  177. price = PriceShowCharField()
  178. report_text = BooleanCharField(source='report', read_only=True)
  179. class Meta:
  180. model = PurchasePrice
  181. fields = '__all__'
  182. @staticmethod
  183. def factory(user, data, id=None):
  184. if id:
  185. instances = PurchasePrice.getById(id)
  186. else:
  187. instances = None
  188. serializer = PurchasePriceSerializer(instances, data=data)
  189. serializer.user = user
  190. return serializer
  191. def create(self, validated_data):
  192. purchaseprice = PurchasePrice.objects.create(**validated_data)
  193. BizLog.objects.addnew(
  194. self.user,
  195. BizLog.INSERT,
  196. u"添加采购计划[%s]报价[%s],id=%d" % (purchaseprice.purchase_detail.purchase.no, purchaseprice.price, purchaseprice.id),
  197. validated_data
  198. )
  199. return purchaseprice
  200. def validate(self, data):
  201. if 'price' in data:
  202. data['price'] = Formater.formatPrice(data['price'])
  203. return data
  204. def validSave(self):
  205. if self.is_valid():
  206. return self.save()
  207. else:
  208. raise CustomError(dump_serializer_errors(self))
  209. def update(self, instance, validated_data):
  210. instance = super(PurchasePriceSerializer, self).update(instance, validated_data)
  211. BizLog.objects.addnew(
  212. self.user,
  213. BizLog.UPDATE,
  214. u"修改采购计划[%s]报价[%s],id=%d" % (instance.purchase_detail.purchase.no, instance.price, instance.id),
  215. validated_data
  216. )
  217. return instance
  218. class PurchaseOrderSerializer(serializers.ModelSerializer):
  219. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  220. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  221. status_text = serializers.CharField(source='get_status_display', read_only=True)
  222. arrval_text = serializers.CharField(source='get_arrval_display', read_only=True)
  223. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  224. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  225. supplier_name = serializers.CharField(source='supplier.name', read_only=True)
  226. supplier_type = serializers.CharField(source='supplier.type', read_only=True)
  227. supplier_contacts = serializers.CharField(source='supplier.contacts', read_only=True)
  228. supplier_phone_number = serializers.CharField(source='supplier.phone_number', read_only=True)
  229. supplier_opening_bank = serializers.CharField(source='supplier.opening_bank', read_only=True)
  230. supplier_account = serializers.CharField(source='supplier.account', read_only=True)
  231. products = serializers.SerializerMethodField()
  232. entries = serializers.SerializerMethodField()
  233. arrvals = serializers.SerializerMethodField()
  234. is_pay = serializers.SerializerMethodField()
  235. payment_amount = serializers.SerializerMethodField()
  236. count = CountShowCharField()
  237. amount = AmountShowCharFieldWithTwoDecimalPlaces()
  238. apply_amount = AmountShowCharFieldWithTwoDecimalPlaces(read_only=True)
  239. # check_user_text2 = serializers.CharField(source='check_user2.name', read_only=True)
  240. # check_time2 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  241. # check_user_text3 = serializers.CharField(source='check_user3.name', read_only=True)
  242. # check_time3 = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  243. class Meta:
  244. model = PurchaseOrder
  245. fields = '__all__'
  246. def get_products(self, obj):
  247. data = []
  248. rows = PurchaseOrderDetail.objects.filter(main=obj)
  249. data.extend([s[0] for s in rows.values_list('product__name')])
  250. return ','.join(data)
  251. def get_entries(self, obj):
  252. data = []
  253. rows = GodownEntry.objects.filter(purchase_order=obj)
  254. data.extend([s[0] for s in rows.values_list('no')])
  255. return ','.join(data)
  256. def get_is_pay(self, obj):
  257. data = 0
  258. rows = PurchasePayment.objects.filter(order=obj)
  259. if rows:
  260. data = 1
  261. return data
  262. def get_arrvals(self, obj):
  263. sum_rows = PurchaseOrderDetail.objects.filter(main=obj).aggregate(sum_count=Sum('arrval_count'))
  264. return Formater.formatCountShow(sum_rows['sum_count'] or 0)
  265. def get_payment_amount(self, obj):
  266. sum_rows = PurchasePayment.objects.filter(order=obj).aggregate(sum_amount=Sum('actual_amount'))
  267. return Formater.formatAmountShowWithTwoDecimalPlaces(sum_rows['sum_amount'] or 0)
  268. @staticmethod
  269. def factory(user, data, id=None):
  270. if id:
  271. instance = PurchaseOrder.getById(id)
  272. else:
  273. instance = None
  274. serializer = PurchaseOrderSerializer(instance, data=data)
  275. serializer.user = user
  276. return serializer
  277. def create(self, validated_data):
  278. validated_data['create_user'] = self.user
  279. validated_data['department'] = self.user.department
  280. order = PurchaseOrder.objects.create(**validated_data)
  281. BizLog.objects.addnew(
  282. self.user,
  283. BizLog.INSERT,
  284. u"添加采购合同[%s],id=%d" % (order.no, order.id),
  285. validated_data
  286. )
  287. return order
  288. def validSave(self):
  289. if self.is_valid():
  290. return self.save()
  291. else:
  292. raise CustomError(dump_serializer_errors(self))
  293. def update(self, instance, validated_data):
  294. instance = super(PurchaseOrderSerializer, self).update(instance, validated_data)
  295. BizLog.objects.addnew(
  296. self.user,
  297. BizLog.UPDATE,
  298. u"修改采购合同[%s],id=%d" % (instance.no, instance.id),
  299. validated_data
  300. )
  301. return instance
  302. class PurchaseOrderDetailSerializer(serializers.ModelSerializer):
  303. name = serializers.CharField(source='product.name', read_only=True)
  304. model = serializers.CharField(source='product.model', read_only=True)
  305. supplier_name = serializers.CharField(source='main.supplier.name', read_only=True)
  306. order_no = serializers.CharField(source='main.no', read_only=True)
  307. count = CountShowCharField()
  308. arrval_count = CountShowCharField(read_only=True)
  309. price = PriceShowCharField()
  310. amount = AmountShowCharField(read_only=True)
  311. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  312. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  313. invoice_date = serializers.DateField(format=base.DATE_FORMAT, read_only=True)
  314. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  315. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  316. invoice_amount = AmountShowCharField(read_only=True)
  317. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  318. images = serializers.SerializerMethodField()
  319. class Meta:
  320. model = PurchaseOrderDetail
  321. fields = '__all__'
  322. def get_images(self, obj):
  323. data = []
  324. rows = PurchaseInvoiceImage.objects.filter(order_detail=obj)
  325. data.extend([s[0] for s in rows.values_list('invoice_image')])
  326. return ','.join(data)
  327. @staticmethod
  328. def factory(user, data):
  329. instances = None
  330. serializer = PurchaseOrderDetailSerializer(instances, data=data)
  331. serializer.user = user
  332. return serializer
  333. def create(self, validated_data):
  334. order = PurchaseOrderDetail.objects.create(**validated_data)
  335. BizLog.objects.addnew(
  336. self.user,
  337. BizLog.INSERT,
  338. u"添加采购合同明细[%s],id=%d" % (order.main.no, order.id),
  339. validated_data
  340. )
  341. return order
  342. def validSave(self):
  343. if self.is_valid():
  344. return self.save()
  345. else:
  346. raise CustomError(dump_serializer_errors(self))
  347. def validate(self, data):
  348. data['price'] = Formater.formatPrice(data['price'])
  349. data['count'] = Formater.formatCount(data['count'])
  350. data['amount'] = data['count'] * data['price']
  351. return data
  352. def update(self, instance, validated_data):
  353. instance = super(PurchaseOrderDetailSerializer, self).update(instance, validated_data)
  354. BizLog.objects.addnew(
  355. self.user,
  356. BizLog.UPDATE,
  357. u"修改采购合同明细[%s],id=%d" % (instance.main.no, instance.id),
  358. validated_data
  359. )
  360. return instance
  361. class GodownEntrySerializer(serializers.ModelSerializer):
  362. status = serializers.CharField(read_only=True)
  363. no = serializers.CharField(read_only=True)
  364. status_text = serializers.CharField(source='get_status_display', read_only=True)
  365. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  366. department_text = serializers.CharField(source='department.name', read_only=True)
  367. supplier_text = serializers.CharField(source='supplier.name', read_only=True)
  368. total_count = CountShowCharField(read_only=True)
  369. total_amount = AmountShowCharField(read_only=True)
  370. total_invoice_amount = AmountShowCharField(read_only=True)
  371. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  372. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  373. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  374. warehouse_text = serializers.CharField(source='warehouse.name', read_only=True)
  375. purchase_order_no = serializers.CharField(source='purchase_order.no', read_only=True)
  376. is_clear_text = serializers.SerializerMethodField()
  377. def get_is_clear_text(self, obj):
  378. payment = PurchasePayment.objects.filter(order=obj.purchase_order).first()
  379. if payment and payment.is_clear:
  380. return '是'
  381. else:
  382. return '否'
  383. class Meta:
  384. model = GodownEntry
  385. fields = '__all__'
  386. @staticmethod
  387. def factory(user, data, id=None):
  388. if id:
  389. instance = GodownEntry.getById(id)
  390. else:
  391. instance = None
  392. serializer = GodownEntrySerializer(instance, data=data)
  393. serializer.user = user
  394. return serializer
  395. def create(self, validated_data):
  396. validated_data['create_user'] = self.user
  397. validated_data['department'] = self.user.department
  398. instance = GodownEntry.objects.create(**validated_data)
  399. BizLog.objects.addnew(
  400. self.user,
  401. BizLog.INSERT,
  402. u"添加入库单[%s],id=%d" % (instance.no, instance.id),
  403. validated_data
  404. )
  405. return instance
  406. def validSave(self):
  407. if self.is_valid():
  408. return self.save()
  409. else:
  410. raise CustomError(dump_serializer_errors(self))
  411. def update(self, instance, validated_data):
  412. instance = super(GodownEntrySerializer, self).update(instance, validated_data)
  413. BizLog.objects.addnew(
  414. self.user,
  415. BizLog.UPDATE,
  416. u"修改入库单[%s],id=%d" % (instance.no, instance.id),
  417. validated_data
  418. )
  419. return instance
  420. class GodownEntryDetailSerializer(serializers.ModelSerializer):
  421. product_base_text = serializers.CharField(source='product_base.name', read_only=True)
  422. product_base_model = serializers.CharField(source='product_base.model', read_only=True)
  423. unit_text = serializers.CharField(source='product_base.unit', read_only=True)
  424. count = CountShowCharField()
  425. price = PriceShowCharField()
  426. amount = AmountShowCharField(read_only=True)
  427. invoice_amount = AmountShowCharField()
  428. class Meta:
  429. model = GodownEntryDetail
  430. fields = '__all__'
  431. @staticmethod
  432. def factory(user, data):
  433. serializer = GodownEntryDetailSerializer(None, data=data)
  434. serializer.user = user
  435. return serializer
  436. def create(self, validated_data):
  437. instance = GodownEntryDetail.objects.create(**validated_data)
  438. BizLog.objects.addnew(
  439. self.user,
  440. BizLog.INSERT,
  441. u"添加入库明细[%s],id=%d" % (instance.product_base.name, instance.id),
  442. validated_data
  443. )
  444. return instance
  445. def validSave(self):
  446. if self.is_valid():
  447. return self.save()
  448. else:
  449. raise CustomError(dump_serializer_errors(self))
  450. def validate(self, data):
  451. data['price'] = Formater.formatPrice(data['price'])
  452. data['count'] = Formater.formatCount(data['count'])
  453. data['amount'] = data['count'] * data['price']
  454. data['invoice_amount'] = Formater.formatAmount(data['invoice_amount'])
  455. warehouse_stock = WarehouseStock.getByWarehouseAndProduct(data['main'].warehouse, data['product_base'])
  456. data['warehouse_stock'] = warehouse_stock
  457. return data
  458. class GodownEntryReturnSerializer(serializers.ModelSerializer):
  459. status = serializers.CharField(read_only=True)
  460. no = serializers.CharField(read_only=True)
  461. status_text = serializers.CharField(source='get_status_display', read_only=True)
  462. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  463. department_text = serializers.CharField(source='department.name', read_only=True)
  464. supplier_text = serializers.CharField(source='supplier.name', read_only=True)
  465. total_count = CountShowCharField(read_only=True)
  466. total_amount = AmountShowCharField(read_only=True)
  467. warehouse_text = serializers.CharField(source='warehouse.name', read_only=True)
  468. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  469. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  470. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  471. class Meta:
  472. model = GodownEntryReturn
  473. fields = '__all__'
  474. @staticmethod
  475. def factory(user, data, id=None):
  476. if id:
  477. instance = GodownEntryReturn.getById(id)
  478. else:
  479. instance = None
  480. serializer = GodownEntryReturnSerializer(instance, data=data)
  481. serializer.user = user
  482. return serializer
  483. def create(self, validated_data):
  484. validated_data['create_user'] = self.user
  485. validated_data['department'] = self.user.department
  486. instance = GodownEntryReturn.objects.create(**validated_data)
  487. BizLog.objects.addnew(
  488. self.user,
  489. BizLog.INSERT,
  490. u"添加退货单[%s],id=%d" % (instance.no, instance.id),
  491. validated_data
  492. )
  493. return instance
  494. def validSave(self):
  495. if self.is_valid():
  496. return self.save()
  497. else:
  498. raise CustomError(dump_serializer_errors(self))
  499. def update(self, instance, validated_data):
  500. instance = super(GodownEntryReturnSerializer, self).update(instance, validated_data)
  501. BizLog.objects.addnew(
  502. self.user,
  503. BizLog.UPDATE,
  504. u"修改退货单[%s],id=%d" % (instance.no, instance.id),
  505. validated_data
  506. )
  507. return instance
  508. class GodownEntryReturnDetailSerializer(serializers.ModelSerializer):
  509. main_no = serializers.CharField(source='main.no', read_only=True)
  510. main_supplier = serializers.CharField(source='main.supplier.name', read_only=True)
  511. godownentry_no = serializers.CharField(source='godownentry_detail.main.no', read_only=True)
  512. main_warehouse = serializers.CharField(source='main.warehouse.name', read_only=True)
  513. main_create_user = serializers.CharField(source='main.create_user.name', read_only=True)
  514. main_create_time = TimeCharField(source='main.create_time', read_only=True)
  515. main_check_user = serializers.CharField(source='main.create_user.name', read_only=True)
  516. main_check_time = TimeCharField(source='main.check_time.name', read_only=True)
  517. product_base_text = serializers.CharField(source='product_base.name', read_only=True)
  518. product_base_model = serializers.CharField(source='product_base.model', read_only=True)
  519. main_notes = serializers.CharField(source='main.notes', read_only=True)
  520. count = CountShowCharField()
  521. price = PriceShowCharField(read_only=True)
  522. amount = AmountShowCharField()
  523. class Meta:
  524. model = GodownEntryReturnDetail
  525. fields = '__all__'
  526. @staticmethod
  527. def factory(user, data):
  528. serializer = GodownEntryReturnDetailSerializer(None, data=data)
  529. serializer.user = user
  530. return serializer
  531. def create(self, validated_data):
  532. instance = GodownEntryReturnDetail.objects.create(**validated_data)
  533. BizLog.objects.addnew(
  534. self.user,
  535. BizLog.INSERT,
  536. u"添加退货明细[%s],id=%d" % (instance.product_base.name, instance.id),
  537. validated_data
  538. )
  539. return instance
  540. def validSave(self):
  541. if self.is_valid():
  542. return self.save()
  543. else:
  544. raise CustomError(dump_serializer_errors(self))
  545. def validate(self, data):
  546. data['count'] = Formater.formatCount(data['count'])
  547. data['amount'] = Formater.formatAmount(data['amount'])
  548. data['price'] = data['amount'] / data['count']
  549. warehouse_stock = WarehouseStock.getByWarehouseAndProduct(data['main'].warehouse, data['product_base'])
  550. data['warehouse_stock'] = warehouse_stock
  551. return data
  552. class PurchasePaymentSerializer(serializers.ModelSerializer):
  553. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  554. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  555. status_text = serializers.CharField(source='get_status_display', read_only=True)
  556. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  557. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  558. supplier_name = serializers.CharField(source='order.supplier.name', read_only=True)
  559. supplier_account = serializers.CharField(source='order.supplier.account', read_only=True)
  560. supplier_bank = serializers.CharField(source='order.supplier.opening_bank', read_only=True)
  561. order_no = serializers.CharField(source='order.no', read_only=True)
  562. payment = BooleanCharField(source='is_pay', read_only=True)
  563. is_clear_text = BooleanCharField(source='is_clear', read_only=True)
  564. amount = AmountShowCharFieldWithTwoDecimalPlaces()
  565. actual_amount = AmountShowCharFieldWithTwoDecimalPlaces()
  566. apply_amount = AmountShowCharFieldWithTwoDecimalPlaces()
  567. amount_CNY = serializers.SerializerMethodField()
  568. actual_amount_CNY = serializers.SerializerMethodField()
  569. apply_amount_CNY = serializers.SerializerMethodField()
  570. # review_user_text = serializers.CharField(source='review_user.name', read_only=True)
  571. # review_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  572. # ratify_user_text = serializers.CharField(source='ratify_user.name', read_only=True)
  573. # ratify_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  574. class Meta:
  575. model = PurchasePayment
  576. fields = '__all__'
  577. def get_amount_CNY(self, obj):
  578. retval = Formater.formatAmountShow(obj.amount)
  579. return utils.number2CNY(float(retval))
  580. def get_actual_amount_CNY(self, obj):
  581. retval = Formater.formatAmountShow(obj.actual_amount)
  582. return utils.number2CNY(float(retval))
  583. def get_apply_amount_CNY(self, obj):
  584. retval = Formater.formatAmountShow(obj.apply_amount)
  585. return utils.number2CNY(float(retval))
  586. @staticmethod
  587. def factory(user, data, id=None):
  588. if id:
  589. instance = PurchasePayment.getById(id)
  590. else:
  591. instance = None
  592. serializer = PurchasePaymentSerializer(instance, data=data, partial=True)
  593. serializer.user = user
  594. return serializer
  595. def create(self, validated_data):
  596. validated_data['create_user'] = self.user
  597. validated_data['department'] = self.user.department
  598. order = PurchasePayment.objects.create(**validated_data)
  599. BizLog.objects.addnew(
  600. self.user,
  601. BizLog.INSERT,
  602. u"添加采购付款单[%s],id=%d" % (order.no, order.id),
  603. validated_data
  604. )
  605. return order
  606. def validSave(self):
  607. if self.is_valid():
  608. return self.save()
  609. else:
  610. raise CustomError(dump_serializer_errors(self))
  611. def update(self, instance, validated_data):
  612. instance = super(PurchasePaymentSerializer, self).update(instance, validated_data)
  613. BizLog.objects.addnew(
  614. self.user,
  615. BizLog.UPDATE,
  616. u"修改采购付款单[%s],id=%d" % (instance.no, instance.id),
  617. validated_data
  618. )
  619. return instance
  620. class PurchasePaySerializer(serializers.ModelSerializer):
  621. payment_type_text = serializers.CharField(source='get_status_display', read_only=True)
  622. payment_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  623. payment_user_text = serializers.CharField(source='payment_user.name', read_only=True)
  624. class Meta:
  625. model = PurchasePay
  626. fields = '__all__'
  627. @staticmethod
  628. def factory(user, data, id=None):
  629. if id:
  630. instance = PurchasePay.getById(id)
  631. else:
  632. instance = None
  633. serializer = PurchasePaySerializer(instance, data=data)
  634. serializer.user = user
  635. return serializer
  636. def create(self, validated_data):
  637. validated_data['payment_user'] = self.user
  638. validated_data['payment_department'] = self.user.department
  639. order = PurchasePay.objects.create(**validated_data)
  640. BizLog.objects.addnew(
  641. self.user,
  642. BizLog.INSERT,
  643. u"添加采购付款单明细id=%d" % (order.id),
  644. validated_data
  645. )
  646. return order
  647. def validSave(self):
  648. if self.is_valid():
  649. return self.save()
  650. else:
  651. raise CustomError(dump_serializer_errors(self))