from sqlalchemy.orm import Session from database import Product, Transaction import uuid from datetime import datetime def add_product(db: Session, name: str, current_stock: float, safety_stock: float, lead_time: float, monthly_demand: float, product_class: str): product = Product(name=name, current_stock=current_stock, safety_stock=safety_stock, lead_time=lead_time, monthly_demand=monthly_demand, product_class=product_class) # Create new product db.add(product) db.commit() db.refresh(product) return product def get_all_products(db: Session): return db.query(Product).all() # Fetch all products def get_product_by_id(db: Session, product_id: int): product = db.query(Product).filter(Product.id == product_id).first() if not product: raise ValueError("Product not found") return product # In-memory session-based functions def add_product_memory(session_products: list, name: str, current_stock: float, safety_stock: float, lead_time: float, monthly_demand: float, product_class: str): if any(p["name"].lower() == name.lower() for p in session_products): raise ValueError("Product name already exists in your session") product = {"id": str(uuid.uuid4()), "name": name, "current_stock": current_stock, "safety_stock": safety_stock, "lead_time": lead_time, "monthly_demand": monthly_demand, "product_class": product_class} # Create new in-memory product session_products.append(product) return product def update_product_memory(session_products: list, product_id: str, name: str, current_stock: float, safety_stock: float, lead_time: float, monthly_demand: float, product_class: str): if any(p["name"].lower() == name.lower() and p["id"] != product_id for p in session_products): raise ValueError("Product name already exists in your session") for product in session_products: if product["id"] == product_id: product.update({"name": name, "current_stock": current_stock, "safety_stock": safety_stock, "lead_time": lead_time, "monthly_demand": monthly_demand, "product_class": product_class}) return product raise ValueError("Product not found") def delete_product_memory(session_products: list, product_id: str): for i, product in enumerate(session_products): if product["id"] == product_id: session_products.pop(i) return raise ValueError("Product not found") def add_stock_memory(session_products: list, session_transactions: list, product_id: str, quantity: float): for product in session_products: if product["id"] == product_id: product["current_stock"] += quantity session_transactions.append({"id": str(uuid.uuid4()), "product_id": product_id, "quantity": quantity, "transaction_type": "ADD", "timestamp": datetime.now()}) # Record stock addition return raise ValueError("Product not found") def remove_stock_memory(session_products: list, session_transactions: list, product_id: str, quantity: float): for product in session_products: if product["id"] == product_id: if product["current_stock"] < quantity: raise ValueError("Insufficient stock") product["current_stock"] -= quantity session_transactions.append({"id": str(uuid.uuid4()), "product_id": product_id, "quantity": quantity, "transaction_type": "REMOVE", "timestamp": datetime.now()}) # Record stock removal return raise ValueError("Product not found") def get_transactions_memory(session_transactions: list): return session_transactions # Fetch all transactions