32 lines
1.3 KiB
Python
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,
|
|
)
|