Automated Action 54bf9880b9 Implement Small Business Inventory Management System
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)
2025-05-12 12:55:31 +00:00

69 lines
2.7 KiB
Python

from sqlalchemy import Column, String, Float, Integer, ForeignKey, Enum
from sqlalchemy.orm import relationship
import enum
from app.models.base import BaseModel
class LocationType(str, enum.Enum):
WAREHOUSE = "warehouse"
STORE = "store"
SUPPLIER = "supplier"
class Location(BaseModel):
"""Location model for inventory storage"""
__tablename__ = "locations"
name = Column(String(100), nullable=False)
type = Column(Enum(LocationType), nullable=False, default=LocationType.WAREHOUSE)
address = Column(String(255), nullable=True)
description = Column(String(255), nullable=True)
# Relationships
inventory_items = relationship("InventoryItem", back_populates="location")
class TransactionType(str, enum.Enum):
PURCHASE = "purchase"
SALE = "sale"
TRANSFER = "transfer"
ADJUSTMENT = "adjustment"
RETURN = "return"
class InventoryTransaction(BaseModel):
"""Inventory transaction model to track changes"""
__tablename__ = "inventory_transactions"
type = Column(Enum(TransactionType), nullable=False)
reference_id = Column(String(100), nullable=True)
notes = Column(String(255), nullable=True)
# Relationships
transaction_items = relationship("InventoryTransactionItem", back_populates="transaction")
class InventoryTransactionItem(BaseModel):
"""Inventory transaction item model"""
__tablename__ = "inventory_transaction_items"
transaction_id = Column(Integer, ForeignKey("inventory_transactions.id"), nullable=False)
product_id = Column(Integer, ForeignKey("products.id"), nullable=False)
quantity = Column(Float, nullable=False)
from_location_id = Column(Integer, ForeignKey("locations.id"), nullable=True)
to_location_id = Column(Integer, ForeignKey("locations.id"), nullable=True)
# Relationships
transaction = relationship("InventoryTransaction", back_populates="transaction_items")
product = relationship("Product")
from_location = relationship("Location", foreign_keys=[from_location_id])
to_location = relationship("Location", foreign_keys=[to_location_id])
class InventoryItem(BaseModel):
"""Inventory item model representing product stock at a location"""
__tablename__ = "inventory_items"
product_id = Column(Integer, ForeignKey("products.id"), nullable=False)
location_id = Column(Integer, ForeignKey("locations.id"), nullable=False)
quantity = Column(Float, nullable=False, default=0)
minimum_stock = Column(Float, nullable=False, default=0)
maximum_stock = Column(Float, nullable=True)
# Relationships
product = relationship("Product", back_populates="inventory_items")
location = relationship("Location", back_populates="inventory_items")