Merge branch 'feature/parent_selector' into dev
Build Docker Image / Docker-Build (push) Successful in 4m0s
Build Docker Image / Clean-Registry (push) Successful in 5s

This commit is contained in:
2026-07-01 09:17:49 +02:00
5 changed files with 26 additions and 3 deletions
@@ -26,6 +26,8 @@ import java.net.URI;
import java.net.URL; import java.net.URL;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@@ -186,4 +188,19 @@ jspreadsheet(document.getElementById('spreadsheet'), {
public static String dateTimeOf(long epochMilis){ public static String dateTimeOf(long epochMilis){
return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilis), ZoneId.systemDefault()).format(TIME_FORMATTER); return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilis), ZoneId.systemDefault()).format(TIME_FORMATTER);
} }
public static String toJson(ResultSet rs) {
try {
Map<String,Object> map = new HashMap<>();
var meta = rs.getMetaData();
for (int col = 1; col <= meta.getColumnCount(); col++) {
var key = meta.getColumnName(col);
var val = rs.getObject(col);
map.put(key, val);
}
return new JSONObject(map).toString();
} catch (SQLException e){
return e.getMessage();
}
}
} }
@@ -21,7 +21,10 @@
</script> </script>
<div class="overlay parent_selector"> <div class="overlay parent_selector">
<h2>{t('select a new parent for {entity}',{entity:task.name})}</h2> <h2>
{t('select a new parent for {entity}',{entity:task.name})}
<button onclick={ev => select(null)}>{t('abort')}</button>
</h2>
{t('project')}: {project.name} {t('project')}: {project.name}
<TaskTree {tree} {select} /> <TaskTree {tree} {select} />
</div> </div>
+1 -1
View File
@@ -193,7 +193,7 @@
function update_parent(newVal){ function update_parent(newVal){
select_parent = false; select_parent = false;
update({parent_task_id:newVal.id}); if (newVal) update({parent_task_id:newVal.id});
} }
function updatePermission(user_id,permission){ function updatePermission(user_id,permission){
@@ -18,10 +18,12 @@ import static de.srsoftware.umbrella.core.model.Status.*;
import static de.srsoftware.umbrella.core.model.Translatable.t; import static de.srsoftware.umbrella.core.model.Translatable.t;
import static de.srsoftware.umbrella.project.Constants.*; import static de.srsoftware.umbrella.project.Constants.*;
import static de.srsoftware.umbrella.task.Constants.*; import static de.srsoftware.umbrella.task.Constants.*;
import static java.lang.System.Logger.Level.TRACE;
import static java.text.MessageFormat.format; import static java.text.MessageFormat.format;
import de.srsoftware.tools.jdbc.Query; import de.srsoftware.tools.jdbc.Query;
import de.srsoftware.umbrella.core.BaseDb; import de.srsoftware.umbrella.core.BaseDb;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.constants.Text; import de.srsoftware.umbrella.core.constants.Text;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.*; import de.srsoftware.umbrella.core.model.*;
@@ -242,6 +244,7 @@ CREATE TABLE IF NOT EXISTS {0} (
var tasks = new HashMap<Long,Task>(); var tasks = new HashMap<Long,Task>();
var rs = query.exec(db); var rs = query.exec(db);
while (rs.next()){ while (rs.next()){
LOG.log(TRACE,() -> Util.toJson(rs));
var task = Task.of(rs); var task = Task.of(rs);
tasks.put(task.id(),task); tasks.put(task.id(),task);
} }
@@ -195,7 +195,7 @@ public class TaskModule extends BaseHandler implements TaskService {
private boolean getParentCandidates(HttpExchange ex, long taskId, UmbrellaUser user) throws IOException { private boolean getParentCandidates(HttpExchange ex, long taskId, UmbrellaUser user) throws IOException {
var task = taskDb.load(taskId); var task = taskDb.load(taskId);
var project = projectService().load(task.projectId()); var project = projectService().load(task.projectId());
var projectTasks = taskDb.listProjectTasks(project.id(),null, false); var projectTasks = taskDb.listProjectTasks(project.id(),null, true);
var mapped = projectTasks.values().stream().collect(Collectors.toMap(Task::id,Task::toMap)); var mapped = projectTasks.values().stream().collect(Collectors.toMap(Task::id,Task::toMap));
var roots = new HashMap<Long,Map<String,Object>>(); var roots = new HashMap<Long,Map<String,Object>>();
for (var map : mapped.values()){ for (var map : mapped.values()){