guzhi/app/models/invoice.py
邹方成 df7ff7af23 refactor(valuation): 重构评估状态逻辑并添加创建时间筛选
统一评估状态为 pending/completed 并兼容旧状态
添加创建时间范围筛选条件
移除发票状态中的 rejected 选项
更新前端路由配置
2025-11-26 17:05:22 +08:00

67 lines
3.6 KiB
Python

from tortoise import fields
from .base import BaseModel, TimestampMixin
class InvoiceHeader(BaseModel, TimestampMixin):
app_user_id = fields.IntField(null=True, description="App用户ID", index=True)
company_name = fields.CharField(max_length=128, description="公司名称", index=True)
tax_number = fields.CharField(max_length=32, description="公司税号", index=True)
register_address = fields.CharField(max_length=256, description="注册地址")
register_phone = fields.CharField(max_length=32, description="注册电话")
bank_name = fields.CharField(max_length=128, description="开户银行")
bank_account = fields.CharField(max_length=64, description="银行账号")
email = fields.CharField(max_length=128, description="接收邮箱")
is_default = fields.BooleanField(default=False, description="是否默认抬头", index=True)
class Meta:
table = "invoice_header"
table_description = "发票抬头"
class Invoice(BaseModel, TimestampMixin):
ticket_type = fields.CharField(max_length=16, description="票据类型: electronic|paper", index=True)
invoice_type = fields.CharField(max_length=16, description="发票类型: special|normal", index=True)
phone = fields.CharField(max_length=20, description="手机号", index=True)
email = fields.CharField(max_length=128, description="接收邮箱")
company_name = fields.CharField(max_length=128, description="公司名称", index=True)
tax_number = fields.CharField(max_length=32, description="公司税号", index=True)
register_address = fields.CharField(max_length=256, description="注册地址")
register_phone = fields.CharField(max_length=32, description="注册电话")
bank_name = fields.CharField(max_length=128, description="开户银行")
bank_account = fields.CharField(max_length=64, description="银行账号")
status = fields.CharField(max_length=16, description="状态: pending|invoiced|refunded", index=True, default="pending")
app_user_id = fields.IntField(null=True, description="App用户ID", index=True)
header = fields.ForeignKeyField("models.InvoiceHeader", related_name="invoices", null=True, description="抬头关联")
wechat = fields.CharField(max_length=64, null=True, description="微信号", index=True)
class Meta:
table = "invoice"
table_description = "发票记录"
class PaymentReceipt(BaseModel, TimestampMixin):
invoice = fields.ForeignKeyField("models.Invoice", related_name="receipts", description="关联发票")
url = fields.CharField(max_length=512, description="付款凭证图片地址")
note = fields.CharField(max_length=256, null=True, description="备注")
verified = fields.BooleanField(default=False, description="是否已核验")
extra = fields.JSONField(null=True, description="额外信息:邮件发送相关")
class Meta:
table = "payment_receipt"
table_description = "对公转账付款凭证"
class EmailSendLog(BaseModel, TimestampMixin):
email = fields.CharField(max_length=255, description="目标邮箱", index=True)
subject = fields.CharField(max_length=255, null=True, description="主题")
body_summary = fields.CharField(max_length=512, null=True, description="正文摘要")
file_name = fields.CharField(max_length=255, null=True, description="附件文件名")
file_url = fields.CharField(max_length=512, null=True, description="附件URL")
status = fields.CharField(max_length=16, description="状态: OK|FAIL", index=True)
error = fields.TextField(null=True, description="错误信息")
class Meta:
table = "email_send_log"
table_description = "邮件发送日志"