ForgeFlow-ERP/backend/app/api/routes/planning.py
2026-06-12 16:00:56 +08:00

32 lines
1.3 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.schemas.database import MaterialDemandRead, MrpGenerationResult
from app.services.auth import require_authenticated_user
from app.services.sales_planning import generate_mrp_for_order, get_mrp_demands_query
router = APIRouter(dependencies=[Depends(require_authenticated_user)])
@router.get("/mrp-demands", response_model=list[MaterialDemandRead])
def list_mrp_demands(
sales_order_id: int | None = Query(default=None),
limit: int = Query(default=50, ge=1, le=200),
db: Session = Depends(get_db),
) -> list[MaterialDemandRead]:
stmt = get_mrp_demands_query(limit=limit, sales_order_id=sales_order_id)
rows = db.execute(stmt).mappings().all()
return [MaterialDemandRead.model_validate(dict(row)) for row in rows]
@router.post("/generate-mrp/{sales_order_id}", response_model=MrpGenerationResult)
def generate_mrp(sales_order_id: int, db: Session = Depends(get_db)) -> MrpGenerationResult:
sales_order, demand_rows = generate_mrp_for_order(db, sales_order_id)
return MrpGenerationResult(
sales_order_id=sales_order.id,
order_no=sales_order.order_no,
generated_count=len(demand_rows),
demand_rows=demand_rows,
)