Files

44 lines
1.6 KiB
Python

"""报表中心模型:
- ReportDefinition 报表定义元数据(支持动态多维查询配置)
"""
from django.db import models
from apps.core.base_models import TenantScopedModel
class ReportDefinition(TenantScopedModel):
"""报表元数据定义(支持动态多维分析配置)。"""
CATEGORY_CHOICES = [
("sales", "销售分析"),
("inventory", "库存分析"),
("purchase", "采购分析"),
("finance", "财务往来"),
("comprehensive", "综合经营"),
]
code = models.CharField(max_length=64, help_text="报表唯一标识编码")
name = models.CharField(max_length=128, help_text="报表名称")
category = models.CharField(max_length=32, choices=CATEGORY_CHOICES, default="sales")
description = models.CharField(max_length=255, blank=True, default="")
is_system = models.BooleanField(default=False, help_text="系统内置预设报表")
is_active = models.BooleanField(default=True)
# 元数据查询配置:
# {
# "target_model": "sales.SalesBillLine",
# "dimensions": ["product__name", "bill__customer__name"],
# "metrics": ["sum_quantity", "sum_amount", "gross_profit"],
# "default_sort": "-sum_amount"
# }
query_config = models.JSONField(default=dict, blank=True, help_text="维度与指标元数据定义")
class Meta:
db_table = "report_definition"
unique_together = [("tenant", "code")]
verbose_name_plural = "报表定义"
ordering = ["category", "code"]
def __str__(self):
return f"[{self.get_category_display()}] {self.name} ({self.code})"