2024-05-15 18:41:23 +08:00
|
|
|
from django.db import models
|
2024-06-07 03:47:15 +08:00
|
|
|
from django.utils import timezone
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 消耗品类别管理表
|
|
|
|
class ConsumableGoodsCategory(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
category_id = models.AutoField(primary_key=True, verbose_name='类别ID')
|
|
|
|
category_name = models.CharField(max_length=255, unique=True, verbose_name='类别名称')
|
2024-05-15 18:41:23 +08:00
|
|
|
description = models.TextField(blank=True, verbose_name='描述')
|
|
|
|
|
|
|
|
class Meta:
|
2024-06-16 20:08:28 +08:00
|
|
|
verbose_name = '消耗品类别管理'
|
|
|
|
verbose_name_plural = '消耗品类别管理'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.category_name
|
|
|
|
|
|
|
|
|
|
|
|
# 消耗品入库管理表
|
2024-05-27 23:39:32 +08:00
|
|
|
class ConsumableGoodsInboundManagement(models.Model):
|
|
|
|
inbound_id = models.AutoField(primary_key=True, verbose_name='入库记录ID')
|
2024-06-13 13:43:51 +08:00
|
|
|
inventory = models.ForeignKey('ConsumableGoodsInventory', on_delete=models.CASCADE, verbose_name='库存')
|
2024-05-15 18:41:23 +08:00
|
|
|
item_name = models.CharField(max_length=255, verbose_name='物品名称')
|
|
|
|
category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别')
|
2024-05-27 23:39:32 +08:00
|
|
|
specification = models.CharField(max_length=255, verbose_name='规格', blank=True)
|
2024-05-15 18:41:23 +08:00
|
|
|
unit = models.CharField(max_length=255, verbose_name='单位')
|
|
|
|
quantity = models.IntegerField(verbose_name='数量')
|
2024-05-27 23:39:32 +08:00
|
|
|
date = models.DateField(verbose_name='日期')
|
2024-06-16 20:08:28 +08:00
|
|
|
checker = models.CharField(max_length=255, verbose_name='核对人')
|
2024-05-15 18:41:23 +08:00
|
|
|
storage_location = models.CharField(max_length=255, verbose_name='库存地')
|
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '消耗品入库管理'
|
|
|
|
verbose_name_plural = '消耗品入库管理'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-22 22:42:19 +08:00
|
|
|
return f"{self.category} - {self.quantity} {self.unit} - {self.date}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
2024-06-14 16:47:43 +08:00
|
|
|
# 消耗品库存
|
2024-05-15 18:41:23 +08:00
|
|
|
class ConsumableGoodsInventory(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
inventory_id = models.AutoField(primary_key=True, verbose_name='库存ID')
|
2024-06-13 13:43:51 +08:00
|
|
|
item_name = models.CharField(max_length=255, verbose_name='物品名称')
|
2024-05-15 18:41:23 +08:00
|
|
|
category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别')
|
2024-05-27 23:39:32 +08:00
|
|
|
specification = models.CharField(max_length=255, verbose_name='规格', blank=True)
|
2024-05-15 18:41:23 +08:00
|
|
|
unit = models.CharField(max_length=255, verbose_name='单位')
|
|
|
|
current_inventory = models.IntegerField(verbose_name='当前库存量')
|
|
|
|
safety_stock = models.IntegerField(verbose_name='安全库存量')
|
2024-05-27 23:39:32 +08:00
|
|
|
replenishment_alert = models.BooleanField(default=False, verbose_name='补货提醒')
|
2024-05-15 18:41:23 +08:00
|
|
|
storage_location = models.CharField(max_length=255, verbose_name='库存地')
|
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '消耗品库存'
|
|
|
|
verbose_name_plural = '消耗品库存'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-13 13:43:51 +08:00
|
|
|
return f"{self.item_name} - {self.current_inventory} {self.unit} in {self.storage_location}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
2024-06-14 16:47:43 +08:00
|
|
|
# 消耗品出库记录
|
2024-05-27 23:39:32 +08:00
|
|
|
class ConsumableGoodsOutboundRecords(models.Model):
|
|
|
|
outbound_id = models.AutoField(primary_key=True, verbose_name='出库记录ID')
|
2024-06-13 13:43:51 +08:00
|
|
|
inventory = models.ForeignKey(ConsumableGoodsInventory, on_delete=models.CASCADE, verbose_name='库存')
|
|
|
|
item_name = models.CharField(max_length=255, verbose_name='物品名称')
|
2024-05-15 18:41:23 +08:00
|
|
|
category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别')
|
2024-05-27 23:39:32 +08:00
|
|
|
specification = models.CharField(max_length=255, verbose_name='规格', blank=True)
|
2024-05-15 18:41:23 +08:00
|
|
|
unit = models.CharField(max_length=255, verbose_name='单位')
|
|
|
|
quantity_out = models.IntegerField(verbose_name='出库数量')
|
|
|
|
outbound_date = models.DateField(verbose_name='出库日期')
|
|
|
|
recipient = models.CharField(max_length=255, verbose_name='领用人')
|
2024-05-27 23:39:32 +08:00
|
|
|
purpose = models.CharField(max_length=255, verbose_name='用途', blank=True)
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '消耗品出库记录'
|
|
|
|
verbose_name_plural = '消耗品出库记录'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-13 13:43:51 +08:00
|
|
|
return f"{self.item_name} - {self.quantity_out} {self.unit} - {self.outbound_date}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 公司手机号使用登记表
|
|
|
|
class CompanyMobilePhoneUsageRegistry(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
record_id = models.AutoField(primary_key=True, verbose_name='记录ID')
|
|
|
|
mobile_number = models.CharField(max_length=20, unique=True, verbose_name='手机号')
|
2024-06-16 20:08:28 +08:00
|
|
|
owner = models.CharField(max_length=255, verbose_name='机主')
|
|
|
|
current_user = models.CharField(max_length=255, verbose_name='现使用人')
|
2024-05-15 18:41:23 +08:00
|
|
|
purpose = models.CharField(max_length=255, verbose_name='用途')
|
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '公司手机号使用登记'
|
|
|
|
verbose_name_plural = '公司手机号使用登记'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-16 20:08:28 +08:00
|
|
|
return f"{self.mobile_number} - {self.current_user}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 商务车使用登记表
|
|
|
|
class BusinessVehicleUsageRegistry(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
record_id = models.AutoField(primary_key=True, verbose_name='记录ID')
|
2024-05-15 18:41:23 +08:00
|
|
|
license_plate = models.CharField(max_length=20, verbose_name='车牌')
|
|
|
|
checkout_time = models.DateTimeField(verbose_name='借出时间')
|
2024-06-16 20:08:28 +08:00
|
|
|
borrower = models.CharField(max_length=255, verbose_name='借用人')
|
2024-05-27 23:39:32 +08:00
|
|
|
accompanying_personnel = models.CharField(max_length=255, verbose_name='同行人员')
|
2024-05-15 18:41:23 +08:00
|
|
|
reason = models.CharField(max_length=255, verbose_name='事由')
|
|
|
|
destination = models.CharField(max_length=255, verbose_name='目的地')
|
|
|
|
days_of_use = models.IntegerField(verbose_name='用车天数')
|
|
|
|
return_time = models.DateTimeField(verbose_name='还车时间')
|
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '商务车使用登记'
|
|
|
|
verbose_name_plural = '商务车使用登记'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-16 20:08:28 +08:00
|
|
|
return f"{self.license_plate} - {self.borrower} - {self.checkout_time}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 会员账号登记表
|
2024-05-27 23:39:32 +08:00
|
|
|
class MembershipAccountsRegistry(models.Model):
|
|
|
|
STATUS_CHOICES = [
|
|
|
|
('正常', '正常'),
|
|
|
|
('过期', '过期')
|
|
|
|
]
|
|
|
|
|
|
|
|
record_id = models.AutoField(primary_key=True, verbose_name='记录ID')
|
2024-05-15 18:41:23 +08:00
|
|
|
platform_name = models.CharField(max_length=255, verbose_name='平台名称')
|
2024-05-27 23:39:32 +08:00
|
|
|
purpose = models.CharField(max_length=255, verbose_name='用途')
|
2024-06-16 14:07:40 +08:00
|
|
|
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格(元)')
|
2024-06-20 23:55:07 +08:00
|
|
|
unit = models.CharField(max_length=255, verbose_name='单位')
|
2024-06-16 20:08:28 +08:00
|
|
|
manager = models.CharField(max_length=255, verbose_name='管理人')
|
2024-05-15 18:41:23 +08:00
|
|
|
account = models.CharField(max_length=255, verbose_name='账号')
|
|
|
|
password = models.CharField(max_length=255, verbose_name='密码')
|
|
|
|
effective_date = models.DateField(verbose_name='会员生效日')
|
|
|
|
expiration_date = models.DateField(verbose_name='会员到期日')
|
2024-05-27 23:39:32 +08:00
|
|
|
status = models.CharField(max_length=10, choices=STATUS_CHOICES, verbose_name='状态')
|
|
|
|
|
|
|
|
@property
|
|
|
|
def current_status(self):
|
|
|
|
# 根据系统时间与会员到期日自动判断状态
|
|
|
|
if self.expiration_date < timezone.now().date():
|
|
|
|
return '过期'
|
|
|
|
return '正常'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '会员账号登记'
|
|
|
|
verbose_name_plural = '会员账号登记'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return f"{self.platform_name} - {self.account}"
|
|
|
|
|
|
|
|
|
|
|
|
# 会员账号变更记录表
|
|
|
|
class MembershipModificationRecord(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
change_record_id = models.AutoField(primary_key=True, verbose_name='变更记录ID')
|
2024-06-20 23:55:07 +08:00
|
|
|
account_record = models.ForeignKey('MembershipAccountsRegistry', on_delete=models.CASCADE, verbose_name='会员记录ID')
|
2024-05-15 18:41:23 +08:00
|
|
|
modification_date = models.DateField(verbose_name='修改日期')
|
|
|
|
modification_reason = models.TextField(verbose_name='修改原因')
|
|
|
|
previous_expiration_date = models.DateField(verbose_name='修改前到期日')
|
|
|
|
new_expiration_date = models.DateField(verbose_name='修改后到期日')
|
|
|
|
|
|
|
|
class Meta:
|
2024-05-27 23:39:32 +08:00
|
|
|
verbose_name = '会员账号变更记录'
|
|
|
|
verbose_name_plural = '会员账号变更记录'
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
def __str__(self):
|
2024-05-27 23:39:32 +08:00
|
|
|
return f"变更记录ID: {self.change_record_id} - 会员记录ID: {self.account_record_id}"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 储值卡登记表
|
|
|
|
class StoredValueCardRegistration(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
record_id = models.AutoField(primary_key=True, verbose_name='记录编号')
|
2024-05-15 18:41:23 +08:00
|
|
|
merchant_name = models.CharField(max_length=255, verbose_name='商家名称')
|
|
|
|
merchant_type = models.CharField(max_length=255, verbose_name='商家类型')
|
2024-06-16 14:07:40 +08:00
|
|
|
balance = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='余额(元)')
|
2024-05-27 23:39:32 +08:00
|
|
|
usage_records = models.TextField(verbose_name='使用记录')
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
verbose_name = '储值卡登记表'
|
|
|
|
verbose_name_plural = '储值卡登记表'
|
|
|
|
|
|
|
|
def __str__(self):
|
2024-05-27 23:39:32 +08:00
|
|
|
return f"{self.merchant_name} - 余额: {self.balance}元"
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 储值卡使用记录表
|
|
|
|
class StoredValueCardUseRecord(models.Model):
|
2024-05-27 23:39:32 +08:00
|
|
|
usage_record_id = models.AutoField(primary_key=True, verbose_name='使用记录ID')
|
2024-06-20 23:55:07 +08:00
|
|
|
stored_value_card = models.ForeignKey(StoredValueCardRegistration, on_delete=models.CASCADE, verbose_name='储值卡记录ID')
|
2024-05-15 18:41:23 +08:00
|
|
|
transaction_date = models.DateField(verbose_name='交易日期')
|
|
|
|
transaction_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='交易金额')
|
2024-06-20 23:55:07 +08:00
|
|
|
transaction_type = models.CharField(max_length=10, choices=[('充值', '充值'), ('消费', '消费')], verbose_name='交易类型')
|
2024-06-16 14:07:40 +08:00
|
|
|
current_balance = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='当前余额(元)')
|
2024-05-27 23:39:32 +08:00
|
|
|
consumer = models.CharField(max_length=255, blank=True, null=True, verbose_name='消费人')
|
|
|
|
primary_department = models.CharField(max_length=255, blank=True, null=True, verbose_name='一级部门')
|
|
|
|
purpose = models.CharField(max_length=255, blank=True, null=True, verbose_name='用途')
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='记录创建时间')
|
|
|
|
updated_at = models.DateTimeField(auto_now=True, verbose_name='记录更新时间')
|
2024-05-15 18:41:23 +08:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
verbose_name = '储值卡使用记录表'
|
|
|
|
verbose_name_plural = '储值卡使用记录表'
|
|
|
|
|
|
|
|
def __str__(self):
|
2024-06-16 20:08:28 +08:00
|
|
|
return f"记录ID: {self.usage_record_id}, 储值卡ID: {self.stored_value_card_id}, 交易类型: {self.transaction_type}"
|