models.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #coding=utf-8
  2. from django.db import models
  3. from django.utils import timezone
  4. from apps.exceptions import CustomError
  5. from apps.foundation.models import Option
  6. from apps.product.manager import ProductBaseManager
  7. class ProductBase(models.Model):
  8. MATERIAL = 0
  9. CONSUMABLE = 1
  10. GOODS = 2
  11. TYPE_CHOICES = (
  12. (MATERIAL,u'原料'),
  13. (CONSUMABLE,u'耗材'),
  14. (GOODS, u'成品'),
  15. )
  16. TYPE_CHOICES_DICT = [{'id':x, 'value':y} for x, y in TYPE_CHOICES]
  17. type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
  18. option_type = models.ForeignKey(Option, verbose_name=u"类别", null=True, blank=True, on_delete=models.PROTECT)
  19. name = models.CharField(max_length=100, verbose_name=u"名称")
  20. model = models.CharField(max_length=100, verbose_name=u"代码")
  21. barcode = models.CharField(max_length=100, verbose_name=u"条码", null=True, blank=True)
  22. unit = models.CharField(max_length=10, verbose_name=u"单位", null=True, blank=True)
  23. code = models.CharField(max_length=100, verbose_name=u"助记码", null=True, blank=True)
  24. standard = models.CharField(max_length=100, verbose_name=u"规格", null=True, blank=True)
  25. warehouse_place = models.CharField(max_length=100, verbose_name=u"存放库位", null=True, blank=True)
  26. notes = models.CharField(max_length=500, verbose_name=u"备注", null=True, blank=True)
  27. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  28. create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
  29. stock_count = models.BigIntegerField(verbose_name=u"库存数量", default=0)
  30. stock_amount = models.BigIntegerField(verbose_name=u"库存金额", default=0)
  31. stock_amount2 = models.BigIntegerField(verbose_name=u"库存金额2", default=0)
  32. avg_cost_price = models.BigIntegerField(verbose_name=u"平均成本价", default=0)
  33. avg_cost_price2 = models.BigIntegerField(verbose_name=u"平均成本价2", default=0)
  34. max_price = models.BigIntegerField(verbose_name=u'最高入库价', default=0)
  35. min_price = models.BigIntegerField(verbose_name=u'最低入库价', default=0)
  36. last_entry_price = models.BigIntegerField(verbose_name=u"最新入库价", default=0)
  37. last_entry_time = models.DateTimeField(verbose_name=u"最后入库时间", null=True, blank=True)
  38. last_deliverd_time = models.DateTimeField(verbose_name=u"最后出库时间", null=True, blank=True)
  39. objects = ProductBaseManager()
  40. class Meta:
  41. db_table = "product_base"
  42. verbose_name = u"其他"
  43. ordering = ('-id',)
  44. index_together = (
  45. 'name',
  46. 'model',
  47. )
  48. default_permissions = ()
  49. permissions = (# 产品
  50. ("view_material_stock_ledger", u"原料总账查看"),
  51. ("export_material_stock_ledger", u"原料总账导出"),
  52. ("view_consumable_stock_ledger", u"耗材总账查看"),
  53. ("export_consumable_stock_ledger", u"耗材总账导出"),
  54. ("view_goods_stock_ledger", u"成品总账查看"),
  55. ("export_goods_stock_ledger", u"成品总账导出"),
  56. ("view_department_ledger", u"部门总账查看"),
  57. ("export_department_ledger", u"部门总账导出"),
  58. ("view_goods_product", u"库存查询"),
  59. )
  60. @staticmethod
  61. def getTypeText(type):
  62. return ProductBase.TYPE_CHOICES[type][1]
  63. @staticmethod
  64. def getById(id):
  65. instance = ProductBase.objects.filter(pk=id).first()
  66. if not instance:
  67. raise CustomError(u'未找到相应的产品')
  68. return instance