File size: 1,380 Bytes
6153aab ea7352f 6153aab ea7352f b415e0c ea7352f a2c408a 6153aab 58f5546 6153aab b415e0c ea7352f 6153aab b415e0c 6153aab 9cdda17 6153aab 9cdda17 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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
@property
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")
|