diff --git a/src/main/java/de/assecutor/votianlt/config/MongoConfig.java b/src/main/java/de/assecutor/votianlt/config/MongoConfig.java index 7baa4e0..90f0940 100644 --- a/src/main/java/de/assecutor/votianlt/config/MongoConfig.java +++ b/src/main/java/de/assecutor/votianlt/config/MongoConfig.java @@ -127,6 +127,9 @@ public class MongoConfig { if (source.containsKey("description")) { task.setDescription(source.getString("description")); } + if (source.containsKey("optional")) { + task.setOptional(source.getBoolean("optional", false)); + } if (source.containsKey("completed")) { task.setCompleted(source.getBoolean("completed", false)); } diff --git a/src/main/java/de/assecutor/votianlt/messaging/MessagingPublisher.java b/src/main/java/de/assecutor/votianlt/messaging/MessagingPublisher.java index 5b8cac3..111efe9 100644 --- a/src/main/java/de/assecutor/votianlt/messaging/MessagingPublisher.java +++ b/src/main/java/de/assecutor/votianlt/messaging/MessagingPublisher.java @@ -7,6 +7,7 @@ import de.assecutor.votianlt.dto.JobWithRelatedDataDTO; import de.assecutor.votianlt.model.CargoItem; import de.assecutor.votianlt.model.task.BaseTask; import de.assecutor.votianlt.model.task.ConfirmationTask; +import de.assecutor.votianlt.model.task.TodoListTask; import de.assecutor.votianlt.service.TranslationService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -127,6 +128,13 @@ class MessagingPublisherImpl implements MessagingPublisher { if (task instanceof ConfirmationTask ct && isNonBlank(ct.getButtonText())) { texts.add(ct.getButtonText()); } + if (task instanceof TodoListTask tlt && tlt.getTodoItems() != null) { + for (String item : tlt.getTodoItems()) { + if (isNonBlank(item)) { + texts.add(item); + } + } + } } } @@ -191,6 +199,22 @@ class MessagingPublisherImpl implements MessagingPublisher { } } } + + if (task instanceof TodoListTask tlt && tlt.getTodoItems() != null + && taskNode.has("taskSpecificData")) { + ObjectNode tsd = (ObjectNode) taskNode.get("taskSpecificData"); + if (tsd.has("todoItems")) { + ArrayNode translatedItems = objectMapper.createArrayNode(); + for (String item : tlt.getTodoItems()) { + if (isNonBlank(item)) { + List t = translations.get(item); + translatedItems.add(t != null ? createTranslationArray(t) + : objectMapper.createArrayNode().add(item)); + } + } + tsd.set("todoItems", translatedItems); + } + } } } diff --git a/src/main/java/de/assecutor/votianlt/model/task/BaseTask.java b/src/main/java/de/assecutor/votianlt/model/task/BaseTask.java index b2ea33a..eedc98a 100644 --- a/src/main/java/de/assecutor/votianlt/model/task/BaseTask.java +++ b/src/main/java/de/assecutor/votianlt/model/task/BaseTask.java @@ -38,6 +38,9 @@ public abstract class BaseTask { @Field("description") private String description; + @Field("optional") + private boolean optional = false; + @Field("completed") private boolean completed = false; diff --git a/src/main/java/de/assecutor/votianlt/pages/view/AddJobView.java b/src/main/java/de/assecutor/votianlt/pages/view/AddJobView.java index 6b95b1d..555d355 100644 --- a/src/main/java/de/assecutor/votianlt/pages/view/AddJobView.java +++ b/src/main/java/de/assecutor/votianlt/pages/view/AddJobView.java @@ -2156,6 +2156,7 @@ public class AddJobView extends Main implements HasDynamicTitle { BaseTask oldTask = currentTask[0]; newTask.setDescription(oldTask.getDescription()); + newTask.setOptional(oldTask.isOptional()); newTask.setCompleted(oldTask.isCompleted()); newTask.setCompletedAt(oldTask.getCompletedAt()); newTask.setCompletedBy(oldTask.getCompletedBy()); @@ -2489,6 +2490,13 @@ public class AddJobView extends Main implements HasDynamicTitle { default: throw new IllegalArgumentException("Unbekannter TaskType: " + taskType); } + + // Optional checkbox – applies to all task types + com.vaadin.flow.component.checkbox.Checkbox optionalCheckbox = new com.vaadin.flow.component.checkbox.Checkbox( + getTranslation("addjob.tasks.optional")); + optionalCheckbox.setValue(task.isOptional()); + optionalCheckbox.addValueChangeListener(ev -> task.setOptional(ev.getValue())); + configContainer.add(optionalCheckbox); } private void updateTodoItems(VerticalLayout todoList, BaseTask task) { @@ -2781,6 +2789,7 @@ public class AddJobView extends Main implements HasDynamicTitle { BaseTask oldTask = currentTask[0]; newTask.setDescription(oldTask.getDescription()); + newTask.setOptional(oldTask.isOptional()); newTask.setCompleted(oldTask.isCompleted()); newTask.setCompletedAt(oldTask.getCompletedAt()); newTask.setCompletedBy(oldTask.getCompletedBy()); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 309bff2..19b902f 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -509,6 +509,7 @@ addjob.tasks.todolist.add=To-Do hinzufügen addjob.tasks.comment.label=Kommentar addjob.tasks.comment.placeholder=Kommentar eingeben addjob.tasks.comment.required=Kommentar erforderlich +addjob.tasks.optional=Aufgabe ist optional addjob.services.title=Leistungen addjob.services.add=Leistung hinzufügen addjob.services.calculation=Berechnung diff --git a/src/main/resources/messages_ee.properties b/src/main/resources/messages_ee.properties index 7099ef1..179aa97 100644 --- a/src/main/resources/messages_ee.properties +++ b/src/main/resources/messages_ee.properties @@ -610,6 +610,7 @@ register.button.resend=Siųsti kodą dar kartą register.button.back=Grįžti į pradinį puslapį register.notification.success=Registracija sėkminga. Prašome prisijungti. register.notification.failed=Registracijos klaida: {0} +addjob.tasks.optional=Ülesanne on valikuline # CTA Button cta.freetest=Išbandykite nemokamai \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index 50e8c3f..2f7b1b2 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -509,6 +509,7 @@ addjob.tasks.todolist.add=Add To-Do addjob.tasks.comment.label=Comment addjob.tasks.comment.placeholder=Enter comment addjob.tasks.comment.required=Comment required +addjob.tasks.optional=Task is optional addjob.services.title=Services addjob.services.add=Add Service addjob.services.calculation=Calculation diff --git a/src/main/resources/messages_es.properties b/src/main/resources/messages_es.properties index bf8cafb..a33d253 100644 --- a/src/main/resources/messages_es.properties +++ b/src/main/resources/messages_es.properties @@ -509,6 +509,7 @@ addjob.tasks.todolist.add=Añadir Tarea addjob.tasks.comment.label=Comentario addjob.tasks.comment.placeholder=Ingresar comentario addjob.tasks.comment.required=Comentario obligatorio +addjob.tasks.optional=La tarea es opcional addjob.services.title=Servicios addjob.services.add=Añadir Servicio addjob.services.calculation=Cálculo diff --git a/src/main/resources/messages_fr.properties b/src/main/resources/messages_fr.properties index 4f2b037..379a053 100644 --- a/src/main/resources/messages_fr.properties +++ b/src/main/resources/messages_fr.properties @@ -509,6 +509,7 @@ addjob.tasks.todolist.add=Ajouter une Tâche addjob.tasks.comment.label=Commentaire addjob.tasks.comment.placeholder=Entrer le commentaire addjob.tasks.comment.required=Commentaire requis +addjob.tasks.optional=La tâche est optionnelle addjob.services.title=Services addjob.services.add=Ajouter un Service addjob.services.calculation=Calcul diff --git a/src/main/resources/messages_lt.properties b/src/main/resources/messages_lt.properties index a748e8e..0f96116 100644 --- a/src/main/resources/messages_lt.properties +++ b/src/main/resources/messages_lt.properties @@ -222,4 +222,5 @@ myinvoices.column.amount=Suma myinvoices.empty.title=Sąskaitų nėra myinvoices.empty.desc=Sąskaitų nerasta. myinvoices.button.prev=Ankstesnis +addjob.tasks.optional=Užduotis yra neprivaloma myinvoices.button.next=Kitas \ No newline at end of file diff --git a/src/main/resources/messages_lv.properties b/src/main/resources/messages_lv.properties index f043968..c8e57ca 100644 --- a/src/main/resources/messages_lv.properties +++ b/src/main/resources/messages_lv.properties @@ -222,4 +222,5 @@ myinvoices.column.amount=Summa myinvoices.empty.title=Nav rēķinu myinvoices.empty.desc=Rēķini nav atrasti. myinvoices.button.prev=Iepriekšējais +addjob.tasks.optional=Uzdevums ir neobligāts myinvoices.button.next=Nākamais \ No newline at end of file diff --git a/src/main/resources/messages_pl.properties b/src/main/resources/messages_pl.properties index 4fb8a7d..949ec29 100644 --- a/src/main/resources/messages_pl.properties +++ b/src/main/resources/messages_pl.properties @@ -225,4 +225,5 @@ myinvoices.column.amount=Kwota myinvoices.empty.title=Brak faktur myinvoices.empty.desc=Nie znaleziono faktur. myinvoices.button.prev=Poprzedni +addjob.tasks.optional=Zadanie jest opcjonalne myinvoices.button.next=Następny \ No newline at end of file diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties index d8ce5bb..2c07f26 100644 --- a/src/main/resources/messages_ru.properties +++ b/src/main/resources/messages_ru.properties @@ -245,4 +245,5 @@ myinvoices.column.amount=Сумма myinvoices.empty.title=Нет счетов myinvoices.empty.desc=Счета не найдены. myinvoices.button.prev=Назад +addjob.tasks.optional=Задача необязательна myinvoices.button.next=Далее \ No newline at end of file diff --git a/src/main/resources/messages_tr.properties b/src/main/resources/messages_tr.properties index 2aeb5bf..3e13d43 100644 --- a/src/main/resources/messages_tr.properties +++ b/src/main/resources/messages_tr.properties @@ -219,4 +219,5 @@ myinvoices.column.amount=Tutar myinvoices.empty.title=Fatura Yok myinvoices.empty.desc=Hiçbir fatura bulunamadı. myinvoices.button.prev=Önceki +addjob.tasks.optional=Görev isteğe bağlı myinvoices.button.next=Sonraki \ No newline at end of file