diff --git a/client/templates/components/navbar.html b/client/templates/components/navbar.html
index 4e52d62..548b329 100644
--- a/client/templates/components/navbar.html
+++ b/client/templates/components/navbar.html
@@ -15,6 +15,9 @@
alt="TieMeasureFlow"
class="h-8 w-auto">
{% endif %}
+
+ TieMeasureFlow
+
@@ -35,7 +38,7 @@
- Misure
+ {{ _('Misure') }}
{% endif %}
@@ -52,7 +55,7 @@
- Ricette
+ {{ _('Ricette') }}
{% endif %}
@@ -69,7 +72,7 @@
- Statistiche
+ {{ _('Statistiche') }}
{% endif %}
@@ -86,7 +89,7 @@
- Admin
+ {{ _('Admin') }}
- Utenti
+ {{ _('Utenti') }}
- Impostazioni
+ {{ _('Impostazioni') }}
{% endif %}
diff --git a/client/templates/maker/recipe_editor.html b/client/templates/maker/recipe_editor.html
index e110302..0d30c8a 100644
--- a/client/templates/maker/recipe_editor.html
+++ b/client/templates/maker/recipe_editor.html
@@ -585,8 +585,8 @@
function recipeEditor() {
return {
// ---- Mode ----
- isNew: {{ 'true' if is_new else 'false' }},
- recipeId: {{ recipe_id|tojson if recipe_id else 'null' }},
+ isNew: {{ 'true' if recipe is none else 'false' }},
+ recipeId: {{ recipe.id|tojson if recipe else 'null' }},
// ---- Form data ----
code: {{ (recipe.code if recipe else '')|tojson }},
@@ -595,12 +595,12 @@ function recipeEditor() {
changeNotes: '',
// ---- File upload ----
- currentFilePath: {{ (current_version.tasks[0].file_path if current_version and current_version.tasks and current_version.tasks|length > 0 else None)|tojson }},
+ currentFilePath: {{ (recipe.current_version.tasks[0].file_path if recipe and recipe.current_version and recipe.current_version.tasks and recipe.current_version.tasks|length > 0 else None)|tojson }},
uploadingFile: false,
dragOver: false,
// ---- Annotation state (managed by annotation-editor.js) ----
- annotationsJson: {{ (current_version.tasks[0].annotations_json if current_version and current_version.tasks and current_version.tasks|length > 0 and current_version.tasks[0].annotations_json else None)|tojson }},
+ annotationsJson: {{ (recipe.current_version.tasks[0].annotations_json if recipe and recipe.current_version and recipe.current_version.tasks and recipe.current_version.tasks|length > 0 and recipe.current_version.tasks[0].annotations_json else None)|tojson }},
annoTool: 'select',
annoSelected: false,
@@ -610,8 +610,8 @@ function recipeEditor() {
errorMessage: '',
// ---- Versioning ----
- versions: {{ versions|tojson }},
- currentVersion: {{ (current_version.version_number if current_version else 0)|tojson }},
+ versions: {{ (recipe.versions if recipe and recipe.versions else [])|tojson }},
+ currentVersion: {{ (recipe.current_version.version_number if recipe and recipe.current_version else 0)|tojson }},
// ============================================================
// Init
diff --git a/client/templates/maker/task_editor.html b/client/templates/maker/task_editor.html
index dddd550..655eee9 100644
--- a/client/templates/maker/task_editor.html
+++ b/client/templates/maker/task_editor.html
@@ -1227,7 +1227,7 @@ function taskEditor() {
this.successMessage = '{{ _("Task eliminato") }}';
} else {
const data = await resp.json();
- this.errorMessage = data.detail || '{{ _("Errore nell\'eliminazione del task") }}';
+ this.errorMessage = data.detail || {{ _("Errore nell'eliminazione del task")|tojson }};
}
} catch (err) {
console.error('deleteTask error:', err);
@@ -1510,7 +1510,7 @@ function taskEditor() {
this.successMessage = '{{ _("Misurazione eliminata") }}';
} else {
const data = await resp.json();
- this.errorMessage = data.detail || '{{ _("Errore nell\'eliminazione della misurazione") }}';
+ this.errorMessage = data.detail || {{ _("Errore nell'eliminazione della misurazione")|tojson }};
}
} catch (err) {
console.error('deleteSubtask error:', err);
diff --git a/client/templates/measure/select_recipe.html b/client/templates/measure/select_recipe.html
index 476f2a1..2d3aaf0 100644
--- a/client/templates/measure/select_recipe.html
+++ b/client/templates/measure/select_recipe.html
@@ -150,7 +150,7 @@
+ x-text="'v' + (recipe.current_version ? recipe.current_version.version_number : (recipe.version || ''))">
diff --git a/client/templates/measure/task_complete.html b/client/templates/measure/task_complete.html
index 2b2ef9a..54464b2 100644
--- a/client/templates/measure/task_complete.html
+++ b/client/templates/measure/task_complete.html
@@ -55,7 +55,7 @@
{{ _('Versione') }}
-
{{ recipe.current_version or recipe.version }}
+
{{ recipe.current_version.version_number if recipe.current_version else recipe.version }}
{{ _('Lotto') }}
@@ -299,7 +299,7 @@ window.CSV_I18N = {
window.measurementData = {
recipeName: {{ recipe.name|tojson }},
recipeCode: {{ recipe.code|tojson }},
- version: {{ (recipe.current_version or recipe.version)|tojson }},
+ version: {{ (recipe.current_version.version_number if recipe.current_version else recipe.version)|tojson }},
lotNumber: {{ (lot_number or '')|tojson }},
serialNumber: {{ (serial_number or '')|tojson }},
measurements: {{ measurements|tojson }}
diff --git a/client/templates/measure/task_list.html b/client/templates/measure/task_list.html
index d230377..095a2ff 100644
--- a/client/templates/measure/task_list.html
+++ b/client/templates/measure/task_list.html
@@ -44,7 +44,7 @@
{% if recipe.current_version or recipe.version %}
- v{{ recipe.current_version or recipe.version }}
+ v{{ recipe.current_version.version_number if recipe.current_version else recipe.version }}
{% endif %}
diff --git a/server/routers/tasks.py b/server/routers/tasks.py
index 4ee0f2b..8204f29 100644
--- a/server/routers/tasks.py
+++ b/server/routers/tasks.py
@@ -112,6 +112,17 @@ async def list_tasks(
return [TaskResponse.model_validate(t) for t in tasks]
+@router.get("/api/tasks/{task_id}", response_model=TaskResponse)
+async def get_task(
+ task_id: int,
+ _user: User = Depends(get_current_user),
+ db: AsyncSession = Depends(get_db),
+):
+ """Get a single task with its subtasks. All authenticated users."""
+ task = await _get_task_or_404(db, task_id)
+ return TaskResponse.model_validate(task)
+
+
@router.post(
"/api/recipes/{recipe_id}/tasks",
response_model=TaskResponse,