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")