from django.db import models from django.utils import timezone # 消耗品类别管理表 class ConsumableGoodsCategory(models.Model): category_id = models.AutoField(primary_key=True, verbose_name='类别ID') category_name = models.CharField(max_length=255, unique=True, verbose_name='类别名称') description = models.TextField(blank=True, verbose_name='描述') class Meta: verbose_name = '消耗品类别管理' verbose_name_plural = '消耗品类别管理' def __str__(self): return self.category_name # 消耗品入库管理表 class ConsumableGoodsInboundManagement(models.Model): inbound_id = models.AutoField(primary_key=True, verbose_name='入库记录ID') inventory = models.ForeignKey('ConsumableGoodsInventory', on_delete=models.CASCADE, verbose_name='库存') item_name = models.CharField(max_length=255, verbose_name='物品名称') category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别') specification = models.CharField(max_length=255, verbose_name='规格', blank=True) unit = models.CharField(max_length=255, verbose_name='单位') quantity = models.IntegerField(verbose_name='数量') date = models.DateField(verbose_name='日期') checker = models.CharField(max_length=255, verbose_name='核对人') storage_location = models.CharField(max_length=255, verbose_name='库存地') class Meta: verbose_name = '消耗品入库管理' verbose_name_plural = '消耗品入库管理' def __str__(self): return f"{self.item_name} - {self.quantity} {self.unit} - {self.date}" # 消耗品库存 class ConsumableGoodsInventory(models.Model): inventory_id = models.AutoField(primary_key=True, verbose_name='库存ID') item_name = models.CharField(max_length=255, verbose_name='物品名称') category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别') specification = models.CharField(max_length=255, verbose_name='规格', blank=True) unit = models.CharField(max_length=255, verbose_name='单位') current_inventory = models.IntegerField(verbose_name='当前库存量') safety_stock = models.IntegerField(verbose_name='安全库存量') replenishment_alert = models.BooleanField(default=False, verbose_name='补货提醒') storage_location = models.CharField(max_length=255, verbose_name='库存地') class Meta: verbose_name = '消耗品库存' verbose_name_plural = '消耗品库存' def __str__(self): return f"{self.item_name} - {self.current_inventory} {self.unit} in {self.storage_location}" # 消耗品出库记录 class ConsumableGoodsOutboundRecords(models.Model): outbound_id = models.AutoField(primary_key=True, verbose_name='出库记录ID') inventory = models.ForeignKey(ConsumableGoodsInventory, on_delete=models.CASCADE, verbose_name='库存') item_name = models.CharField(max_length=255, verbose_name='物品名称') category = models.ForeignKey(ConsumableGoodsCategory, on_delete=models.CASCADE, verbose_name='类别') specification = models.CharField(max_length=255, verbose_name='规格', blank=True) 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='领用人') purpose = models.CharField(max_length=255, verbose_name='用途', blank=True) class Meta: verbose_name = '消耗品出库记录' verbose_name_plural = '消耗品出库记录' def __str__(self): return f"{self.item_name} - {self.quantity_out} {self.unit} - {self.outbound_date}" # 公司手机号使用登记表 class CompanyMobilePhoneUsageRegistry(models.Model): record_id = models.AutoField(primary_key=True, verbose_name='记录ID') mobile_number = models.CharField(max_length=20, unique=True, verbose_name='手机号') owner = models.CharField(max_length=255, verbose_name='机主') current_user = models.CharField(max_length=255, verbose_name='现使用人') purpose = models.CharField(max_length=255, verbose_name='用途') class Meta: verbose_name = '公司手机号使用登记' verbose_name_plural = '公司手机号使用登记' def __str__(self): return f"{self.mobile_number} - {self.current_user}" # 商务车使用登记表 class BusinessVehicleUsageRegistry(models.Model): record_id = models.AutoField(primary_key=True, verbose_name='记录ID') license_plate = models.CharField(max_length=20, verbose_name='车牌') checkout_time = models.DateTimeField(verbose_name='借出时间') borrower = models.CharField(max_length=255, verbose_name='借用人') accompanying_personnel = models.CharField(max_length=255, verbose_name='同行人员') 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: verbose_name = '商务车使用登记' verbose_name_plural = '商务车使用登记' def __str__(self): return f"{self.license_plate} - {self.borrower} - {self.checkout_time}" # 会员账号登记表 class MembershipAccountsRegistry(models.Model): STATUS_CHOICES = [ ('正常', '正常'), ('过期', '过期') ] record_id = models.AutoField(primary_key=True, verbose_name='记录ID') platform_name = models.CharField(max_length=255, verbose_name='平台名称') purpose = models.CharField(max_length=255, verbose_name='用途') price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格(元)') manager = models.CharField(max_length=255, verbose_name='管理人') 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='会员到期日') 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 '正常' class Meta: verbose_name = '会员账号登记' verbose_name_plural = '会员账号登记' def __str__(self): return f"{self.platform_name} - {self.account}" # 会员账号变更记录表 class MembershipModificationRecord(models.Model): change_record_id = models.AutoField(primary_key=True, verbose_name='变更记录ID') account_record = models.ForeignKey('MembershipAccountsRegistry', on_delete=models.CASCADE, verbose_name='会员记录ID') 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: verbose_name = '会员账号变更记录' verbose_name_plural = '会员账号变更记录' def __str__(self): return f"变更记录ID: {self.change_record_id} - 会员记录ID: {self.account_record_id}" # 储值卡登记表 class StoredValueCardRegistration(models.Model): record_id = models.AutoField(primary_key=True, verbose_name='记录编号') merchant_name = models.CharField(max_length=255, verbose_name='商家名称') merchant_type = models.CharField(max_length=255, verbose_name='商家类型') balance = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='余额(元)') usage_records = models.TextField(verbose_name='使用记录') class Meta: verbose_name = '储值卡登记表' verbose_name_plural = '储值卡登记表' def __str__(self): return f"{self.merchant_name} - 余额: {self.balance}元" # 储值卡使用记录表 class StoredValueCardUseRecord(models.Model): usage_record_id = models.AutoField(primary_key=True, verbose_name='使用记录ID') stored_value_card = models.ForeignKey(StoredValueCardRegistration, on_delete=models.CASCADE, verbose_name='储值卡记录ID') transaction_date = models.DateField(verbose_name='交易日期') transaction_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='交易金额') transaction_type = models.CharField(max_length=10, choices=[('充值', '充值'), ('消费', '消费')], verbose_name='交易类型') current_balance = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='当前余额(元)') 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='记录更新时间') class Meta: verbose_name = '储值卡使用记录表' verbose_name_plural = '储值卡使用记录表' def __str__(self): return f"记录ID: {self.usage_record_id}, 储值卡ID: {self.stored_value_card_id}, 交易类型: {self.transaction_type}"