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='类别', blank=True, null=True) specification = models.CharField(max_length=255, verbose_name='规格', blank=True, null=True) unit = models.CharField(max_length=255, verbose_name='单位', blank=True, null=True) quantity = models.IntegerField(verbose_name='数量') date = models.DateField(verbose_name='日期', blank=True, null=True) checker = models.CharField(max_length=255, verbose_name='核对人', blank=True, null=True) storage_location = models.CharField(max_length=255, verbose_name='库存地', blank=True, null=True) class Meta: verbose_name = '消耗品入库管理' verbose_name_plural = '消耗品入库管理' def __str__(self): return f"{self.category} - {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, null=True) unit = models.CharField(max_length=255, verbose_name='单位', blank=True, null=True) storage_location = models.CharField(max_length=255, verbose_name='库存地', blank=True, null=True) safety_stock = models.IntegerField(verbose_name='安全库存量', blank=True, null=True) current_inventory = models.IntegerField(verbose_name='当前库存量', blank=True, null=True, default=0) replenishment_alert = models.BooleanField(default=False, verbose_name='补货提醒', blank=True, null=True) 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='类别', blank=True, null=True) specification = models.CharField(max_length=255, verbose_name='规格', blank=True, null=True) unit = models.CharField(max_length=255, verbose_name='单位', blank=True, null=True) quantity_out = models.IntegerField(verbose_name='出库数量') outbound_date = models.DateField(verbose_name='出库日期', blank=True, null=True) recipient = models.CharField(max_length=255, verbose_name='领用人', blank=True, null=True) purpose = models.CharField(max_length=255, verbose_name='用途', blank=True, null=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): STATUS_CHOICES = [ ('正常使用', '正常使用'), ('注销', '注销'), ('过期', '过期') ] record_id = models.AutoField(primary_key=True, verbose_name='记录ID') mobile_number = models.CharField(max_length=20, unique=True, verbose_name='手机号') status = models.CharField(max_length=10, choices=STATUS_CHOICES, 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='车牌') borrower = models.CharField(max_length=255, verbose_name='借用人') checkout_time = models.DateTimeField(verbose_name='借出时间', null=True, blank=True) accompanying_personnel = models.CharField(max_length=255, verbose_name='同行人员', null=True, blank=True) reason = models.CharField(max_length=255, verbose_name='事由', null=True, blank=True) destination = models.CharField(max_length=255, verbose_name='目的地', null=True, blank=True) days_of_use = models.IntegerField(verbose_name='用车天数', null=True, blank=True) return_time = models.DateTimeField(verbose_name='还车时间', null=True, blank=True) 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='平台名称', null=True, blank=True) purpose = models.CharField(max_length=255, verbose_name='用途', null=True, blank=True) price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='价格(元)', null=True, blank=True) unit = models.CharField(max_length=255, verbose_name='计费周期', null=True, blank=True) manager = models.CharField(max_length=255, verbose_name='管理人', null=True, blank=True) account = models.CharField(max_length=255, verbose_name='账号', null=True, blank=True) email = models.EmailField(max_length=255, verbose_name='绑定邮箱', null=True, blank=True) phone_number = models.CharField(max_length=20, verbose_name='绑定手机', null=True, blank=True) effective_date = models.DateField(verbose_name='会员生效日', null=True, blank=True) expiration_date = models.DateField(verbose_name='会员到期日', null=True, blank=True) status = models.CharField(max_length=10, choices=STATUS_CHOICES, verbose_name='状态', null=True, blank=True) def save(self, *args, **kwargs): current_date = timezone.now().date() if self.effective_date and self.expiration_date: if self.effective_date <= current_date <= self.expiration_date: self.status = '正常' else: self.status = '过期' else: self.status = '过期' super().save(*args, **kwargs) @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='修改原因', null=True, blank=True) 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='余额(元)', default=0) usage_records = models.TextField(verbose_name='使用记录') class Meta: verbose_name = '储值卡登记表' verbose_name_plural = '储值卡登记表' constraints = [ models.UniqueConstraint(fields=['merchant_name', 'merchant_type'], name='unique_merchant_name_merchant_type') ] 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}"