models.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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.account.models import Department, User
  7. from django.conf import settings
  8. class FinanceCategory(models.Model):
  9. name = models.CharField(max_length=100, verbose_name=u"名称")
  10. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  11. create_user = models.ForeignKey(User, related_name='finance_category_ref_create_user', verbose_name=u"创建人", editable=False ,on_delete=models.PROTECT)
  12. create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
  13. class Meta:
  14. db_table = "finance_category"
  15. ordering = ['-id']
  16. verbose_name = u"财务收支类别"
  17. default_permissions = ()
  18. permissions = (
  19. ("view_finance_category", u"查看"),
  20. ("add_finance_category", u"添加"),
  21. ("delete_finance_category", u"删除"),
  22. )
  23. @staticmethod
  24. def getById(id):
  25. try:
  26. id = int(id)
  27. except:
  28. raise CustomError(u'无效的财务收支类别ID')
  29. instance = FinanceCategory.objects.filter(pk=id).first()
  30. if not instance:
  31. raise CustomError(u'未找到相应的财务收支类别')
  32. return instance
  33. class FinancePurpose(models.Model):
  34. PAY = 1
  35. INCOME = 2
  36. TYPE_CHOICES = (
  37. (PAY, u'收入'),
  38. (INCOME, u'支出'),
  39. )
  40. name = models.CharField(max_length=100, verbose_name=u"名称")
  41. type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"收支类型")
  42. category = models.ForeignKey(FinanceCategory, verbose_name=u"类别", on_delete=models.PROTECT)
  43. enabled = models.BooleanField(verbose_name=u"在用", default=True)
  44. create_user = models.ForeignKey(User, related_name='finance_product_ref_create_user', verbose_name=u"创建人", editable=False, on_delete=models.PROTECT)
  45. create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
  46. class Meta:
  47. db_table = "finance_purpose"
  48. ordering = ['-id']
  49. verbose_name = u"财务收支用途"
  50. default_permissions = ()
  51. permissions = ()
  52. @staticmethod
  53. def getById(id):
  54. try:
  55. id = int(id)
  56. except:
  57. raise CustomError(u'无效的财务收支用途ID')
  58. instance = FinancePurpose.objects.filter(pk=id).first()
  59. if not instance:
  60. raise CustomError(u'未找到相应的财务收支用途')
  61. return instance
  62. class dbFinanceIncome(models.Model):
  63. USER_DEFINED = 1
  64. MATERIAL_ENTRY_PAY = 2
  65. MATERIAL_ENTRY_UNLOAD = 3
  66. MATERIAL_ENTRY_FARE = 4
  67. CONSUMABLE_ENTRY_PAY = 5
  68. CONSUMABLE_ENTRY_UNLOAD = 6
  69. CONSUMABLE_ENTRY_FARE = 7
  70. SALE_ENTRY_PAY = 8
  71. SALE_ENTRY_UNLOAD = 9
  72. SALE_ENTRY_FARE = 10
  73. TYPE_CHOICES = (
  74. (USER_DEFINED, u'自定义'),
  75. (MATERIAL_ENTRY_PAY, u'原料入库付款'),
  76. (MATERIAL_ENTRY_UNLOAD, u'原料入库卸车'),
  77. (MATERIAL_ENTRY_FARE, u'原料入库运费'),
  78. (CONSUMABLE_ENTRY_PAY, u'耗材入库付款'),
  79. (CONSUMABLE_ENTRY_UNLOAD, u'耗材入库卸车'),
  80. (CONSUMABLE_ENTRY_FARE, u'耗材入库运费'),
  81. (SALE_ENTRY_PAY, u'销售结算'),
  82. (SALE_ENTRY_UNLOAD, u'销售装车'),
  83. (SALE_ENTRY_FARE, u'销售运费'),
  84. )
  85. PREFIX_CHOICES = (
  86. (USER_DEFINED, 'UD'),
  87. (MATERIAL_ENTRY_PAY, 'MP'),
  88. (MATERIAL_ENTRY_UNLOAD, 'MU'),
  89. (MATERIAL_ENTRY_FARE, 'MF'),
  90. (CONSUMABLE_ENTRY_PAY, 'CP'),
  91. (CONSUMABLE_ENTRY_UNLOAD, 'CU'),
  92. (CONSUMABLE_ENTRY_FARE, 'CF'),
  93. (SALE_ENTRY_PAY, 'SP'),
  94. (SALE_ENTRY_UNLOAD, 'SU'),
  95. (SALE_ENTRY_FARE, 'SF'),
  96. )
  97. no = models.CharField(max_length=50, verbose_name=u"收银单号")
  98. referer_no = models.CharField(max_length=50, verbose_name=u"引用单据编号")
  99. department = models.ForeignKey(Department, related_name='finance_income_ref_department', verbose_name=u'部门',null=True,on_delete=models.PROTECT)
  100. create_user = models.ForeignKey(User, related_name='finance_income_ref_create_user', verbose_name=u"创建人", on_delete=models.PROTECT)
  101. create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
  102. type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
  103. amount = models.BigIntegerField(verbose_name=u"金额")
  104. account = models.ForeignKey(Option, related_name='finance_income_ref_account',verbose_name=u"账户", on_delete=models.PROTECT)
  105. purpose = models.ForeignKey(FinancePurpose, verbose_name=u"用途", on_delete=models.PROTECT)
  106. check_user = models.ForeignKey(User, related_name='finance_income_ref_check_user', verbose_name=u"审核人",
  107. on_delete=models.PROTECT)
  108. check_time = models.DateTimeField(verbose_name=u"审核时间", null=True)
  109. check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核状态", default=settings.DEFAULT)
  110. def save(self, *args, **kwargs):
  111. if self.no == None or self.no == '':
  112. now = timezone.now()
  113. rows = dbFinanceIncome.objects.filter(create_time__gte=now.strftime('%Y-%m-%d'), type=self.type).order_by('-no')
  114. count = rows.count()
  115. prefix = dbFinanceIncome.PREFIX_CHOICES[self.type-1][1]
  116. if count == 0:
  117. self.no = '%s%s%04d' % (prefix, now.strftime('%Y%m%d'), count + 1)
  118. else:
  119. suffix = (rows[0].no.split('-'))[1]
  120. self.no = prefix+str(int(suffix) + 1)
  121. super(dbFinanceIncome, self).save(*args, **kwargs)
  122. class Meta:
  123. db_table = "finance_income"
  124. verbose_name = u"收支管理"
  125. ordering = ('-id',)
  126. unique_together = (
  127. 'no',
  128. )
  129. permissions = (
  130. ("add_finance_income", u"添加"),
  131. ("edit_finance_income", u"修改"),
  132. ("check_finance_income", u"审核"),
  133. )