@@ -0,0 +1,40 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app import db
|
||||
from app.lab.db_guard import retry_locked
|
||||
from app.lab.loaders.execution_loader import load_execution
|
||||
from app.lab.models import LabRationLine, LabRecipeRation
|
||||
from app.models import Component
|
||||
from app.models.base import default_uuid
|
||||
|
||||
|
||||
@retry_locked
|
||||
def seed_from_execution(recipe_id: str, user_id: str = "system") -> dict:
|
||||
existing = LabRecipeRation.query.filter_by(recipe_id=recipe_id, is_deleted=False).first()
|
||||
if existing is not None:
|
||||
return {"recipeId": recipe_id, "seeded": False, "reason": "already_exists"}
|
||||
|
||||
execution = load_execution(recipe_id)
|
||||
header = LabRecipeRation(recipe_id=recipe_id, created_by=user_id, updated_by=user_id)
|
||||
db.session.add(header)
|
||||
|
||||
for idx, line in enumerate(execution.lines):
|
||||
comp = Component.query.get(line.component_id) if line.component_id else None
|
||||
daily_kg = line.daily_kg_total
|
||||
db.session.add(
|
||||
LabRationLine(
|
||||
id=default_uuid(),
|
||||
recipe_id=recipe_id,
|
||||
component_id=line.component_id,
|
||||
ingredient_name=line.name,
|
||||
row_index=idx,
|
||||
daily_kg=daily_kg,
|
||||
in_ration=True,
|
||||
in_compound=False,
|
||||
created_by=user_id,
|
||||
updated_by=user_id,
|
||||
)
|
||||
)
|
||||
header.seed_source = "execution"
|
||||
db.session.commit()
|
||||
return {"recipeId": recipe_id, "seeded": True, "lines": len(execution.lines)}
|
||||
Reference in New Issue
Block a user