
This commit implements a comprehensive inventory management system for small businesses using FastAPI and SQLAlchemy. Features include: - Product and category management - Inventory tracking across multiple locations - Supplier management - Purchase management - Transaction tracking for inventory movements - Complete API documentation generated with BackendIM... (backend.im)
47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
from sqlalchemy import Column, String, Float, Integer, Text, Boolean, ForeignKey, DateTime
|
|
from sqlalchemy.orm import relationship
|
|
from app.models.base import BaseModel
|
|
|
|
class Supplier(BaseModel):
|
|
"""Supplier model"""
|
|
__tablename__ = "suppliers"
|
|
|
|
name = Column(String(255), nullable=False, index=True)
|
|
contact_name = Column(String(100), nullable=True)
|
|
email = Column(String(255), nullable=True)
|
|
phone = Column(String(20), nullable=True)
|
|
address = Column(Text, nullable=True)
|
|
notes = Column(Text, nullable=True)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
# Relationships
|
|
purchases = relationship("Purchase", back_populates="supplier")
|
|
|
|
class Purchase(BaseModel):
|
|
"""Purchase model for orders from suppliers"""
|
|
__tablename__ = "purchases"
|
|
|
|
supplier_id = Column(Integer, ForeignKey("suppliers.id"), nullable=False)
|
|
reference_number = Column(String(100), nullable=True, unique=True)
|
|
order_date = Column(DateTime, nullable=True)
|
|
delivery_date = Column(DateTime, nullable=True)
|
|
total_amount = Column(Float, nullable=False, default=0)
|
|
notes = Column(Text, nullable=True)
|
|
|
|
# Relationships
|
|
supplier = relationship("Supplier", back_populates="purchases")
|
|
purchase_items = relationship("PurchaseItem", back_populates="purchase")
|
|
|
|
class PurchaseItem(BaseModel):
|
|
"""Purchase item model for items in a purchase"""
|
|
__tablename__ = "purchase_items"
|
|
|
|
purchase_id = Column(Integer, ForeignKey("purchases.id"), nullable=False)
|
|
product_id = Column(Integer, ForeignKey("products.id"), nullable=False)
|
|
quantity = Column(Float, nullable=False)
|
|
unit_price = Column(Float, nullable=False)
|
|
total_price = Column(Float, nullable=False)
|
|
|
|
# Relationships
|
|
purchase = relationship("Purchase", back_populates="purchase_items")
|
|
product = relationship("Product", back_populates="purchase_items") |