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 NAME: name = json.getString(key); break;
case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break; case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break;
case PARENT_TASK_ID: parentTaskId = json.getLong(PARENT_TASK_ID); 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 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 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; case STATUS: status = json.getInt(key); break;

View File

@@ -22,20 +22,14 @@
error = null; error = null;
let newTask = await resp.json(); let newTask = await resp.json();
if (newTask.project_id != task.project_id){ if (newTask.project_id != task.project_id){
alert('prject mismatch!'); alert('project mismatch!');
return; return;
} }
task.required_tasks_ids.push(new_task_id); task.required_tasks_ids.push(new_task_id);
requiredTasks[new_task_id] = newTask; requiredTasks[new_task_id] = newTask;
url = api(`task/${task.id}`); await patch();
resp = await fetch(url,{
credentials : 'include',
method : 'PATCH',
body : JSON.stringify({required_tasks_ids:task.required_tasks_ids})
});
delete candidates[new_task_id]; delete candidates[new_task_id];
} } else {
if (!resp.ok) {
error = await resp.text(); error = await resp.text();
} }
} }
@@ -90,6 +84,24 @@
return false; 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); onMount(loadTasks);
</script> </script>
@@ -97,7 +109,7 @@
<ul class="required task list"> <ul class="required task list">
{#each Object.values(requiredTasks) as task} {#each Object.values(requiredTasks) as task}
<li class="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> </li>
{/each} {/each}
</ul> </ul>

View File

@@ -316,9 +316,19 @@ CREATE TABLE IF NOT EXISTS {0} (
task.clean(MEMBERS); task.clean(MEMBERS);
} }
if (task.isDirty(REQUIRED_TASKS_IDS)) { if (task.isDirty(REQUIRED_TASKS_IDS)) {
var query = replaceInto(TABLE_TASK_DEPENDENCIES,TASK_ID,REQUIRED_TASK_ID); var dropQuery = Query.delete().from(TABLE_TASK_DEPENDENCIES).where(TASK_ID,equal(task.id()));
for (var reqId : task.requiredTasksIds()) query.values(task.id(),reqId); if (!task.requiredTasksIds().isEmpty()){
query.execute(db).close(); 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); task.clean(REQUIRED_TASKS_IDS);
} }
if (task.isDirty()) { if (task.isDirty()) {