30 lines
1022 B
Python
30 lines
1022 B
Python
from __future__ import annotations
|
|
|
|
from app.lab.dto.ration import ExecutionLineSnapshot, ExecutionSnapshot
|
|
from app.models import Ingredient, Recipe
|
|
|
|
|
|
def load_execution(recipe_id: str) -> ExecutionSnapshot:
|
|
recipe = Recipe.query.filter_by(id=recipe_id, is_deleted=False).first()
|
|
if recipe is None:
|
|
raise LookupError("Рецепт не найден")
|
|
heads = int(recipe.heads_per_trip or 1)
|
|
ingredients = (
|
|
Ingredient.query.filter_by(recipe_id=recipe_id, is_deleted=False)
|
|
.order_by(Ingredient.order)
|
|
.all()
|
|
)
|
|
lines = []
|
|
for ing in ingredients:
|
|
wph = float(ing.weight_per_head or 0)
|
|
lines.append(
|
|
ExecutionLineSnapshot(
|
|
ingredient_id=ing.id,
|
|
component_id=ing.component_id,
|
|
name=ing.name,
|
|
weight_per_head=wph,
|
|
daily_kg_total=wph * heads,
|
|
)
|
|
)
|
|
return ExecutionSnapshot(recipe_id=recipe_id, heads_per_trip=heads, lines=tuple(lines))
|