44 lines
1.6 KiB
Python
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})"
|