ioe/inventory/models/common.py
2025-04-27 14:50:32 +08:00

66 lines
3.2 KiB
Python

from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
class OperationLog(models.Model):
"""
通用操作日志模型,记录系统中所有类型的操作,支持关联到不同的对象
"""
OPERATION_TYPES = [
('SALE', '销售'),
('INVENTORY', '库存调整'),
('MEMBER', '会员管理'),
('INVENTORY_CHECK', '库存盘点'),
('OTHER', '其他')
]
operator = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='操作员')
operation_type = models.CharField(max_length=20, choices=OPERATION_TYPES, verbose_name='操作类型')
details = models.TextField(verbose_name='操作详情')
timestamp = models.DateTimeField(auto_now_add=True, verbose_name='操作时间')
related_object_id = models.PositiveIntegerField(verbose_name='关联对象ID')
related_content_type = models.ForeignKey(ContentType, on_delete=models.PROTECT, verbose_name='关联类型')
class Meta:
verbose_name = '操作日志'
verbose_name_plural = '操作日志'
ordering = ['-timestamp']
def __str__(self):
return f'{self.operator.username} - {self.get_operation_type_display()} - {self.timestamp}'
class SystemConfig(models.Model):
"""系统配置模型"""
company_name = models.CharField(max_length=100, verbose_name="公司名称", default="我的商店")
company_address = models.TextField(verbose_name="公司地址", blank=True, null=True)
company_phone = models.CharField(max_length=20, verbose_name="联系电话", blank=True, null=True)
company_email = models.EmailField(verbose_name="电子邮箱", blank=True, null=True)
company_website = models.URLField(verbose_name="网站", blank=True, null=True)
company_logo = models.ImageField(upload_to='logos/', verbose_name="公司标志", blank=True, null=True)
# 条码设置
barcode_width = models.IntegerField(verbose_name="条码宽度", default=300)
barcode_height = models.IntegerField(verbose_name="条码高度", default=100)
barcode_font_size = models.IntegerField(verbose_name="条码字体大小", default=12)
barcode_show_price = models.BooleanField(verbose_name="显示价格", default=True)
barcode_show_name = models.BooleanField(verbose_name="显示商品名称", default=True)
barcode_show_company = models.BooleanField(verbose_name="显示公司名称", default=True)
# 打印设置
receipt_header = models.TextField(verbose_name="小票页眉", blank=True, null=True)
receipt_footer = models.TextField(verbose_name="小票页脚", blank=True, null=True)
# 系统设置
enable_low_stock_alert = models.BooleanField(verbose_name="启用低库存提醒", default=True)
default_tax_rate = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="默认税率", default=0)
currency_symbol = models.CharField(max_length=10, verbose_name="货币符号", default="¥")
timezone = models.CharField(max_length=50, verbose_name="时区", default="Asia/Shanghai")
class Meta:
verbose_name = '系统配置'
verbose_name_plural = '系统配置'
def __str__(self):
return self.company_name