Spaces:
Sleeping
Sleeping
| from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey | |
| from sqlalchemy.orm import relationship | |
| from datetime import datetime | |
| from core.database import Base | |
| class Invoice(Base): | |
| __tablename__ = "invoices" | |
| # Auto-incrementing ID | |
| id = Column(Integer, primary_key=True, index=True, autoincrement=True) | |
| # User selected date (defaults to now) | |
| date = Column(DateTime, default=datetime.utcnow) | |
| invoice_no = Column(String, nullable=True) | |
| doctor_name = Column(String) | |
| clinic_name = Column(String) | |
| total_amount = Column(Float) | |
| received_amount = Column(Float) | |
| remaining_balance = Column(Float) | |
| notes = Column(String, nullable=True) | |
| items = relationship("InvoiceItem", back_populates="invoice", cascade="all, delete-orphan") | |
| # This MUST be indented inside the class | |
| def invoice_number(self): | |
| return f"INV-{self.id:04d}" | |
| class InvoiceItem(Base): | |
| __tablename__ = "invoice_items" | |
| id = Column(Integer, primary_key=True, index=True, autoincrement=True) | |
| invoice_id = Column(Integer, ForeignKey("invoices.id")) | |
| patient_name = Column(String) | |
| shade = Column(String) | |
| description = Column(String) | |
| quantity = Column(Integer) | |
| price_per_unit = Column(Float) | |
| total_price = Column(Float) | |
| invoice = relationship("Invoice", back_populates="items") | |