123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #coding=utf-8
- from django.db import models
- from django.utils import timezone
- from apps.exceptions import CustomError
- from apps.foundation.models import Option
- from apps.account.models import Department, User
- from django.conf import settings
- class FinanceCategory(models.Model):
- name = models.CharField(max_length=100, verbose_name=u"名称")
- enabled = models.BooleanField(verbose_name=u"在用", default=True)
- create_user = models.ForeignKey(User, related_name='finance_category_ref_create_user', verbose_name=u"创建人", editable=False ,on_delete=models.PROTECT)
- create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
- class Meta:
- db_table = "finance_category"
- ordering = ['-id']
- verbose_name = u"财务收支类别"
- default_permissions = ()
- permissions = (
- ("view_finance_category", u"查看"),
- ("add_finance_category", u"添加"),
- ("delete_finance_category", u"删除"),
- )
- @staticmethod
- def getById(id):
- try:
- id = int(id)
- except:
- raise CustomError(u'无效的财务收支类别ID')
- instance = FinanceCategory.objects.filter(pk=id).first()
- if not instance:
- raise CustomError(u'未找到相应的财务收支类别')
- return instance
- class FinancePurpose(models.Model):
- PAY = 1
- INCOME = 2
- TYPE_CHOICES = (
- (PAY, u'收入'),
- (INCOME, u'支出'),
- )
- name = models.CharField(max_length=100, verbose_name=u"名称")
- type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"收支类型")
- category = models.ForeignKey(FinanceCategory, verbose_name=u"类别", on_delete=models.PROTECT)
- enabled = models.BooleanField(verbose_name=u"在用", default=True)
- create_user = models.ForeignKey(User, related_name='finance_product_ref_create_user', verbose_name=u"创建人", editable=False, on_delete=models.PROTECT)
- create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
- class Meta:
- db_table = "finance_purpose"
- ordering = ['-id']
- verbose_name = u"财务收支用途"
- default_permissions = ()
- permissions = ()
- @staticmethod
- def getById(id):
- try:
- id = int(id)
- except:
- raise CustomError(u'无效的财务收支用途ID')
- instance = FinancePurpose.objects.filter(pk=id).first()
- if not instance:
- raise CustomError(u'未找到相应的财务收支用途')
- return instance
- class dbFinanceIncome(models.Model):
- USER_DEFINED = 1
- MATERIAL_ENTRY_PAY = 2
- MATERIAL_ENTRY_UNLOAD = 3
- MATERIAL_ENTRY_FARE = 4
- CONSUMABLE_ENTRY_PAY = 5
- CONSUMABLE_ENTRY_UNLOAD = 6
- CONSUMABLE_ENTRY_FARE = 7
- SALE_ENTRY_PAY = 8
- SALE_ENTRY_UNLOAD = 9
- SALE_ENTRY_FARE = 10
- TYPE_CHOICES = (
- (USER_DEFINED, u'自定义'),
- (MATERIAL_ENTRY_PAY, u'原料入库付款'),
- (MATERIAL_ENTRY_UNLOAD, u'原料入库卸车'),
- (MATERIAL_ENTRY_FARE, u'原料入库运费'),
- (CONSUMABLE_ENTRY_PAY, u'耗材入库付款'),
- (CONSUMABLE_ENTRY_UNLOAD, u'耗材入库卸车'),
- (CONSUMABLE_ENTRY_FARE, u'耗材入库运费'),
- (SALE_ENTRY_PAY, u'销售结算'),
- (SALE_ENTRY_UNLOAD, u'销售装车'),
- (SALE_ENTRY_FARE, u'销售运费'),
- )
- PREFIX_CHOICES = (
- (USER_DEFINED, 'UD'),
- (MATERIAL_ENTRY_PAY, 'MP'),
- (MATERIAL_ENTRY_UNLOAD, 'MU'),
- (MATERIAL_ENTRY_FARE, 'MF'),
- (CONSUMABLE_ENTRY_PAY, 'CP'),
- (CONSUMABLE_ENTRY_UNLOAD, 'CU'),
- (CONSUMABLE_ENTRY_FARE, 'CF'),
- (SALE_ENTRY_PAY, 'SP'),
- (SALE_ENTRY_UNLOAD, 'SU'),
- (SALE_ENTRY_FARE, 'SF'),
- )
- no = models.CharField(max_length=50, verbose_name=u"收银单号")
- referer_no = models.CharField(max_length=50, verbose_name=u"引用单据编号")
- department = models.ForeignKey(Department, related_name='finance_income_ref_department', verbose_name=u'部门',null=True,on_delete=models.PROTECT)
- create_user = models.ForeignKey(User, related_name='finance_income_ref_create_user', verbose_name=u"创建人", on_delete=models.PROTECT)
- create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
- type = models.IntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
- amount = models.BigIntegerField(verbose_name=u"金额")
- account = models.ForeignKey(Option, related_name='finance_income_ref_account',verbose_name=u"账户", on_delete=models.PROTECT)
- purpose = models.ForeignKey(FinancePurpose, verbose_name=u"用途", on_delete=models.PROTECT)
- check_user = models.ForeignKey(User, related_name='finance_income_ref_check_user', verbose_name=u"审核人",
- on_delete=models.PROTECT)
- check_time = models.DateTimeField(verbose_name=u"审核时间", null=True)
- check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核状态", default=settings.DEFAULT)
- def save(self, *args, **kwargs):
- if self.no == None or self.no == '':
- now = timezone.now()
- rows = dbFinanceIncome.objects.filter(create_time__gte=now.strftime('%Y-%m-%d'), type=self.type).order_by('-no')
- count = rows.count()
- prefix = dbFinanceIncome.PREFIX_CHOICES[self.type-1][1]
- if count == 0:
- self.no = '%s%s%04d' % (prefix, now.strftime('%Y%m%d'), count + 1)
- else:
- suffix = (rows[0].no.split('-'))[1]
- self.no = prefix+str(int(suffix) + 1)
- super(dbFinanceIncome, self).save(*args, **kwargs)
- class Meta:
- db_table = "finance_income"
- verbose_name = u"收支管理"
- ordering = ('-id',)
- unique_together = (
- 'no',
- )
- permissions = (
- ("add_finance_income", u"添加"),
- ("edit_finance_income", u"修改"),
- ("check_finance_income", u"审核"),
- )
|