mirror of
https://github.com/himool/HimoolERP.git
synced 2024-11-15 11:58:42 +08:00
200 lines
7.9 KiB
Python
200 lines
7.9 KiB
Python
from extensions.common.base import *
|
|
from extensions.models import *
|
|
|
|
|
|
class Warehouse(Model):
|
|
"""仓库"""
|
|
|
|
number = CharField(max_length=32, verbose_name='编号')
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
manager = ForeignKey('system.User', on_delete=CASCADE, null=True,
|
|
related_name='warehouses', verbose_name='管理员')
|
|
phone = CharField(max_length=32, null=True, blank=True, verbose_name='电话')
|
|
address = CharField(max_length=256, null=True, blank=True, verbose_name='地址')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
order = IntegerField(default=100, verbose_name='排序')
|
|
is_active = BooleanField(default=True, verbose_name='激活状态')
|
|
is_locked = BooleanField(default=True, verbose_name='锁定状态')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='warehouses')
|
|
|
|
class Meta:
|
|
unique_together = [('number', 'team'), ('name', 'team')]
|
|
|
|
@classmethod
|
|
def get_number(cls, team):
|
|
instance = cls.objects.filter(team=team).last()
|
|
|
|
try:
|
|
result = re.match('^(.*?)([1-9]+)$', instance.number)
|
|
number = result.group(1) + str(int(result.group(2)) + 1)
|
|
except AttributeError:
|
|
number = 'W001'
|
|
|
|
return number
|
|
|
|
|
|
class ClientCategory(Model):
|
|
"""客户分类"""
|
|
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='client_categories')
|
|
|
|
class Meta:
|
|
unique_together = [('name', 'team')]
|
|
|
|
|
|
class Client(Model):
|
|
"""客户"""
|
|
|
|
class Level(TextChoices):
|
|
"""等级"""
|
|
|
|
LEVEL0 = ('0', '普通客户')
|
|
LEVEL1 = ('1', '一级客户')
|
|
LEVEL2 = ('2', '二级客户')
|
|
LEVEL3 = ('3', '三级客户')
|
|
|
|
number = CharField(max_length=32, verbose_name='编号')
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
level = CharField(max_length=32, choices=Level.choices, default=Level.LEVEL0, verbose_name='等级')
|
|
category = ForeignKey('data.ClientCategory', on_delete=SET_NULL, null=True,
|
|
related_name='clients', verbose_name='客户分类')
|
|
contact = CharField(max_length=64, null=True, blank=True, verbose_name='联系人')
|
|
phone = CharField(max_length=32, null=True, blank=True, verbose_name='手机号')
|
|
email = CharField(max_length=256, null=True, blank=True, verbose_name='邮箱')
|
|
address = CharField(max_length=256, null=True, blank=True, verbose_name='地址')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
order = IntegerField(default=100, verbose_name='排序')
|
|
is_active = BooleanField(default=True, verbose_name='激活状态')
|
|
initial_arrears_amount = AmountField(default=0, verbose_name='初期欠款金额')
|
|
arrears_amount = AmountField(default=0, verbose_name='欠款金额')
|
|
has_arrears = BooleanField(default=False, verbose_name='欠款状态')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='clients')
|
|
|
|
class Meta:
|
|
unique_together = [('number', 'team'), ('name', 'team')]
|
|
|
|
@classmethod
|
|
def get_number(cls, team):
|
|
instance = cls.objects.filter(team=team).last()
|
|
|
|
try:
|
|
result = re.match('^(.*?)([1-9]+)$', instance.number)
|
|
number = result.group(1) + str(int(result.group(2)) + 1)
|
|
except AttributeError:
|
|
number = 'C001'
|
|
|
|
return number
|
|
|
|
|
|
class SupplierCategory(Model):
|
|
"""供应商分类"""
|
|
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='supplier_categories')
|
|
|
|
class Meta:
|
|
unique_together = [('name', 'team')]
|
|
|
|
|
|
class Supplier(Model):
|
|
"""供应商"""
|
|
|
|
number = CharField(max_length=32, verbose_name='编号')
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
category = ForeignKey('data.SupplierCategory', on_delete=SET_NULL, null=True,
|
|
related_name='suppliers', verbose_name='供应商分类')
|
|
contact = CharField(max_length=64, null=True, blank=True, verbose_name='联系人')
|
|
phone = CharField(max_length=32, null=True, blank=True, verbose_name='手机号')
|
|
email = CharField(max_length=256, null=True, blank=True, verbose_name='邮箱')
|
|
address = CharField(max_length=256, null=True, blank=True, verbose_name='地址')
|
|
bank_account = CharField(max_length=64, null=True, blank=True, verbose_name='银行账户')
|
|
bank_name = CharField(max_length=64, null=True, blank=True, verbose_name='开户行')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
order = IntegerField(default=100, verbose_name='排序')
|
|
is_active = BooleanField(default=True, verbose_name='激活状态')
|
|
initial_arrears_amount = AmountField(default=0, verbose_name='初期欠款金额')
|
|
arrears_amount = AmountField(default=0, verbose_name='欠款金额')
|
|
has_arrears = BooleanField(default=False, verbose_name='欠款状态')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='suppliers')
|
|
|
|
class Meta:
|
|
unique_together = [('number', 'team'), ('name', 'team')]
|
|
|
|
@classmethod
|
|
def get_number(cls, team):
|
|
instance = cls.objects.filter(team=team).last()
|
|
|
|
try:
|
|
result = re.match('^(.*?)([1-9]+)$', instance.number)
|
|
number = result.group(1) + str(int(result.group(2)) + 1)
|
|
except AttributeError:
|
|
number = 'S001'
|
|
|
|
return number
|
|
|
|
|
|
class Account(Model):
|
|
"""结算账户"""
|
|
|
|
class Type(TextChoices):
|
|
"""账户类型"""
|
|
|
|
CASH = ('cash', '现金')
|
|
ALIPAY = ('alipay', '支付宝')
|
|
WECHAT = ('wechat', '微信')
|
|
BANK_ACCOUNT = ('bank_account', '银行账户')
|
|
OTHER = ('other', '其他')
|
|
|
|
number = CharField(max_length=32, verbose_name='编号')
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
type = CharField(max_length=32, choices=Type.choices, default=Type.CASH, verbose_name='账户类型')
|
|
holder = CharField(max_length=64, null=True, blank=True, verbose_name='开户人')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
order = IntegerField(default=100, verbose_name='排序')
|
|
is_active = BooleanField(default=True, verbose_name='激活状态')
|
|
initial_balance_amount = AmountField(default=0, verbose_name='初期余额')
|
|
balance_amount = AmountField(default=0, verbose_name='余额')
|
|
has_balance = BooleanField(default=False, verbose_name='余额状态')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='accounts')
|
|
|
|
class Meta:
|
|
unique_together = [('number', 'team'), ('name', 'team')]
|
|
|
|
@classmethod
|
|
def get_number(cls, team):
|
|
instance = cls.objects.filter(team=team).last()
|
|
|
|
try:
|
|
result = re.match('^(.*?)([1-9]+)$', instance.number)
|
|
number = result.group(1) + str(int(result.group(2)) + 1)
|
|
except AttributeError:
|
|
number = 'A001'
|
|
|
|
return number
|
|
|
|
|
|
class ChargeItem(Model):
|
|
"""收支项目"""
|
|
|
|
class Type(TextChoices):
|
|
"""收支类型"""
|
|
|
|
INCOME = ('income', '收入')
|
|
EXPENDITURE = ('expenditure', '支出')
|
|
|
|
name = CharField(max_length=64, verbose_name='名称')
|
|
type = CharField(max_length=32, choices=Type.choices, verbose_name='收支类型')
|
|
remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')
|
|
team = ForeignKey('system.Team', on_delete=CASCADE, related_name='charge_items')
|
|
|
|
class Meta:
|
|
unique_together = [('name', 'team')]
|
|
|
|
|
|
__all__ = [
|
|
'Warehouse', 'ClientCategory', 'Client', 'SupplierCategory', 'Supplier',
|
|
'Account', 'ChargeItem',
|
|
]
|