from sqlalchemy import Column, String, Boolean, Integer, DateTime, Text, Float, ForeignKey, Enum as SAEnum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from datetime import datetime from app.database import Base import uuid import enum class InvoiceType(str, enum.Enum): individual = "individual" enterprise = "enterprise" class InvoiceStatus(str, enum.Enum): pending = "pending" issued = "issued" rejected = "rejected" class Invoice(Base): __tablename__ = "invoices" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False, index=True) certification_id = Column(UUID(as_uuid=True), ForeignKey("certifications.id"), nullable=True) invoice_type = Column(SAEnum(InvoiceType), nullable=False) title = Column(String(255), nullable=False) tax_id = Column(String(30)) amount = Column(Float, nullable=False) status = Column(SAEnum(InvoiceStatus), default=InvoiceStatus.pending) reject_reason = Column(Text) issued_at = Column(DateTime) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) user = relationship("User") certification = relationship("Certification")