114 lines
5.1 KiB
Python
114 lines
5.1 KiB
Python
from django.db import models
|
|
from datetime import date
|
|
|
|
|
|
class Contact(models.Model):
|
|
name = models.CharField(max_length=100, verbose_name='姓名')
|
|
phone = models.CharField(max_length=20, verbose_name='联系电话')
|
|
email = models.EmailField(blank=True, null=True, verbose_name='邮箱')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
verbose_name = '联系人'
|
|
verbose_name_plural = '联系人'
|
|
|
|
|
|
class Supplier(models.Model):
|
|
company_name = models.CharField(max_length=200, verbose_name='公司名称')
|
|
contact_person = models.CharField(max_length=100, verbose_name='联系人')
|
|
phone = models.CharField(max_length=20, verbose_name='联系电话')
|
|
email = models.EmailField(blank=True, null=True, verbose_name='邮箱')
|
|
address = models.CharField(max_length=500, blank=True, null=True, verbose_name='地址')
|
|
remark = models.TextField(blank=True, null=True, verbose_name='备注')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
|
|
def __str__(self):
|
|
return self.company_name
|
|
|
|
class Meta:
|
|
verbose_name = '维保供应商'
|
|
verbose_name_plural = '维保供应商'
|
|
|
|
|
|
class UPSHost(models.Model):
|
|
brand = models.CharField(max_length=100, verbose_name='品牌')
|
|
model = models.CharField(max_length=100, verbose_name='型号')
|
|
serial_number = models.CharField(max_length=100, blank=True, null=True, verbose_name='序列号')
|
|
ip_address = models.CharField(max_length=50, blank=True, null=True, verbose_name='IP地址')
|
|
quantity = models.IntegerField(default=1, verbose_name='数量')
|
|
location = models.CharField(max_length=200, verbose_name='存放位置')
|
|
last_maintenance_date = models.DateField(blank=True, null=True, verbose_name='上次维保时间')
|
|
contact = models.ForeignKey(Contact, on_delete=models.SET_NULL, 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='更新时间')
|
|
|
|
@property
|
|
def total_battery_count(self):
|
|
return sum(battery.quantity for battery in self.battery_set.all())
|
|
|
|
def __str__(self):
|
|
parts = [f'{self.brand} {self.model}']
|
|
if self.location:
|
|
parts.append(f'[{self.location}]')
|
|
if self.ip_address and not self.ip_address.startswith('-'):
|
|
parts.append(f'({self.ip_address})')
|
|
return ' '.join(parts)
|
|
|
|
class Meta:
|
|
verbose_name = 'UPS主机'
|
|
verbose_name_plural = 'UPS主机'
|
|
|
|
|
|
class Battery(models.Model):
|
|
brand = models.CharField(max_length=100, verbose_name='品牌')
|
|
model = models.CharField(max_length=100, verbose_name='型号')
|
|
weight = models.FloatField(verbose_name='重量(kg)')
|
|
quantity = models.IntegerField(default=1, verbose_name='数量')
|
|
location = models.CharField(max_length=200, verbose_name='存放位置')
|
|
install_date = models.DateField(blank=True, null=True, verbose_name='安装日期')
|
|
last_maintenance_date = models.DateField(blank=True, null=True, verbose_name='上次维保时间')
|
|
ups_host = models.ForeignKey(UPSHost, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='关联UPS主机')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
|
|
|
@property
|
|
def used_years(self):
|
|
if not self.install_date:
|
|
return None
|
|
today = date.today()
|
|
delta = today - self.install_date
|
|
return round(delta.days / 365.25, 1)
|
|
|
|
def __str__(self):
|
|
return f'{self.brand} {self.model}'
|
|
|
|
class Meta:
|
|
verbose_name = '电池'
|
|
verbose_name_plural = '电池'
|
|
|
|
|
|
class MaintenanceRecord(models.Model):
|
|
MAINTENANCE_TYPE_CHOICES = [
|
|
('host', '主机维修'),
|
|
('battery', '电池维修'),
|
|
]
|
|
|
|
maintenance_type = models.CharField(max_length=20, choices=MAINTENANCE_TYPE_CHOICES, default='host', verbose_name='维修类型')
|
|
ups_host = models.ForeignKey(UPSHost, on_delete=models.CASCADE, verbose_name='UPS主机')
|
|
battery = models.ForeignKey(Battery, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='电池')
|
|
supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, blank=True, null=True, verbose_name='维保供应商')
|
|
maintenance_date = models.DateField(verbose_name='维修日期')
|
|
content = models.TextField(verbose_name='维修内容')
|
|
technician = models.CharField(max_length=100, verbose_name='维修人员')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
|
|
def __str__(self):
|
|
return f'{self.get_maintenance_type_display()} - {self.ups_host} - {self.maintenance_date}'
|
|
|
|
class Meta:
|
|
verbose_name = '维修记录'
|
|
verbose_name_plural = '维修记录'
|