implemented removal of required task

This commit is contained in:
2025-09-08 09:10:00 +02:00
parent cce488f615
commit 241129a369
3 changed files with 39 additions and 14 deletions

View File

@@ -164,7 +164,10 @@ public class Task implements Mappable {
case NAME: name = json.getString(key); break;
case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break;
case PARENT_TASK_ID: parentTaskId = json.getLong(PARENT_TASK_ID); break;
case REQUIRED_TASKS_IDS: requiredTasksIds.addAll(json.getJSONArray(REQUIRED_TASKS_IDS).toList().stream().map(entry -> Long.parseLong(entry.toString())).toList()); break;
case REQUIRED_TASKS_IDS:
requiredTasksIds.clear();
requiredTasksIds.addAll(json.getJSONArray(REQUIRED_TASKS_IDS).toList().stream().map(entry -> Long.parseLong(entry.toString())).toList());
break;
case SHOW_CLOSED: showClosed = json.getBoolean(SHOW_CLOSED); break;
case START_DATE: start = json.isNull(START_DATE) || json.getString(START_DATE).isBlank() ? null : LocalDate.parse(json.getString(START_DATE)); break;
case STATUS: status = json.getInt(key); break;

View File

@@ -22,20 +22,14 @@
error = null;
let newTask = await resp.json();
if (newTask.project_id != task.project_id){
alert('prject mismatch!');
alert('project mismatch!');
return;
}
task.required_tasks_ids.push(new_task_id);
requiredTasks[new_task_id] = newTask;
url = api(`task/${task.id}`);
resp = await fetch(url,{
credentials : 'include',
method : 'PATCH',
body : JSON.stringify({required_tasks_ids:task.required_tasks_ids})
});
await patch();
delete candidates[new_task_id];
}
if (!resp.ok) {
} else {
error = await resp.text();
}
}
@@ -90,6 +84,24 @@
return false;
}
async function patch(){
const url = api(`task/${task.id}`);
const resp = await fetch(url,{
credentials : 'include',
method : 'PATCH',
body : JSON.stringify({required_tasks_ids:task.required_tasks_ids})
});
if (!resp.ok){
error = await resp.text();
}
}
async function unlink(required_task){
task.required_tasks_ids = task.required_tasks_ids.filter(item => item != required_task.id);
patch();
delete requiredTasks[required_task.id];
}
onMount(loadTasks);
</script>
@@ -97,7 +109,7 @@
<ul class="required task list">
{#each Object.values(requiredTasks) as task}
<li class="task" >
<a href="/task/{task.id}/view" onclick={openTask} >{task.name}</a>
<a href="/task/{task.id}/view" onclick={openTask} >{task.name}</a>&nbsp;<button onclick={() => unlink(task)} class="symbol"></button>
</li>
{/each}
</ul>

View File

@@ -316,9 +316,19 @@ CREATE TABLE IF NOT EXISTS {0} (
task.clean(MEMBERS);
}
if (task.isDirty(REQUIRED_TASKS_IDS)) {
var query = replaceInto(TABLE_TASK_DEPENDENCIES,TASK_ID,REQUIRED_TASK_ID);
for (var reqId : task.requiredTasksIds()) query.values(task.id(),reqId);
query.execute(db).close();
var dropQuery = Query.delete().from(TABLE_TASK_DEPENDENCIES).where(TASK_ID,equal(task.id()));
if (!task.requiredTasksIds().isEmpty()){
dropQuery.where(REQUIRED_TASK_ID,notIn(task.requiredTasksIds().toArray()));
db.setAutoCommit(false);
}
dropQuery.execute(db);
if (!task.requiredTasksIds().isEmpty()) {
var addQuery = replaceInto(TABLE_TASK_DEPENDENCIES, TASK_ID, REQUIRED_TASK_ID);
for (var reqId : task.requiredTasksIds()) addQuery.values(task.id(), reqId);
addQuery.execute(db).close();
db.setAutoCommit(true);
}
task.clean(REQUIRED_TASKS_IDS);
}
if (task.isDirty()) {