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.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -186,4 +188,19 @@ jspreadsheet(document.getElementById('spreadsheet'), {
public static String dateTimeOf(long epochMilis){
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>
<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}
<TaskTree {tree} {select} />
</div>
+1 -1
View File
@@ -193,7 +193,7 @@
function update_parent(newVal){
select_parent = false;
update({parent_task_id:newVal.id});
if (newVal) update({parent_task_id:newVal.id});
}
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.project.Constants.*;
import static de.srsoftware.umbrella.task.Constants.*;
import static java.lang.System.Logger.Level.TRACE;
import static java.text.MessageFormat.format;
import de.srsoftware.tools.jdbc.Query;
import de.srsoftware.umbrella.core.BaseDb;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.constants.Text;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.*;
@@ -242,6 +244,7 @@ CREATE TABLE IF NOT EXISTS {0} (
var tasks = new HashMap<Long,Task>();
var rs = query.exec(db);
while (rs.next()){
LOG.log(TRACE,() -> Util.toJson(rs));
var task = Task.of(rs);
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 {
var task = taskDb.load(taskId);
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 roots = new HashMap<Long,Map<String,Object>>();
for (var map : mapped.values()){