from django.db import models from django.utils.translation import gettext_lazy as _ from userprofile.models import Users class InvoiceHeader(models.Model): """单位抬头信息表""" name = models.CharField(max_length=100, verbose_name="单位名称") tax_id = models.BigIntegerField(unique=True, verbose_name="纳税人识别号") address = models.CharField(max_length=200,null=True, blank=True, verbose_name="地址") bank = models.CharField(max_length=100,null=True, blank=True, verbose_name="开户银行") account = models.CharField(max_length=50,null=True, blank=True, verbose_name="银行账号") create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间") is_delete = models.BooleanField(default=False, verbose_name="删除标记") class Meta: db_table = 'invoice_header' verbose_name = '发票抬头信息' verbose_name_plural = '发票抬头信息' ordering = ['name'] def __str__(self): return f"{self.name} ({self.tax_id})" class InvoiceRecord(models.Model): """发票申报记录表""" header = models.ForeignKey( InvoiceHeader, on_delete=models.CASCADE, related_name='invoices', verbose_name="单位抬头" ) amount = models.DecimalField(max_digits=12, decimal_places=2, verbose_name="金额") date = models.DateField(verbose_name="时间") purpose = models.CharField(max_length=100, verbose_name="用途") teacher = models.ForeignKey( Users, related_name='teacher_invoices', on_delete=models.SET_NULL, null=True, verbose_name="归属老师" ) project = models.CharField(max_length=100, verbose_name="归属项目") actual_paid = models.DecimalField(max_digits=12, decimal_places=2, verbose_name="实付金额") is_reported = models.BooleanField(default=False, verbose_name="是否申报") invoice_attachment = models.FileField( upload_to='invoices/', blank=True, null=True, verbose_name="发票附件" ) payment_attachment = models.FileField( upload_to='payments/', blank=True, null=True, verbose_name="支付附件" ) class ApprovalStatus(models.TextChoices): PENDING = 'P', _('待审批') APPROVED = 'A', _('已通过') REJECTED = 'R', _('已拒绝') status = models.CharField( max_length=1, choices=ApprovalStatus.choices, default=ApprovalStatus.PENDING, verbose_name="审批状态" ) create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: db_table = 'invoice_record' verbose_name = '发票记录' verbose_name_plural = '发票记录' ordering = ['-date'] def __str__(self): return f"Invoice #{self.id} - {self.header.name}"