models.py 5.6 KB

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