working on user-defined project states and task states

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2025-08-01 08:49:05 +02:00
parent c57da0a891
commit 2813fed670
5 changed files with 24 additions and 13 deletions

View File

@@ -6,7 +6,6 @@
import CompanySelector from '../../Components/CompanySelector.svelte'; import CompanySelector from '../../Components/CompanySelector.svelte';
import MarkdownEditor from '../../Components/MarkdownEditor.svelte'; import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
import Settings from './Settings.svelte';
import Tags from '../tags/TagList.svelte'; import Tags from '../tags/TagList.svelte';
let error = $state(null); let error = $state(null);

View File

@@ -56,11 +56,12 @@
let task = dragged; let task = dragged;
dragged = null; dragged = null;
highlight = {}; highlight = {};
console.log(state); //console.log(`dropped ${task.name} (of ${task.assignee} /state: ${task.status}) → (uid: ${user_id}/state: ${state})`);
if (task.assignee == user_id && task.status == state) return; // no change if (task.assignee == user_id && task.status == state) return; // no change
let patch = {members:{},status:+state} let patch = {members:{},status:+state}
patch.members[user_id] = 'ASSIGNEE'; patch.members[user_id] = 'ASSIGNEE';
//console.log('sending patch:',patch)
const url = api(`task/${task.id}`); const url = api(`task/${task.id}`);
const resp = await fetch(url,{ const resp = await fetch(url,{
credentials : 'include', credentials : 'include',
@@ -68,12 +69,14 @@
body : JSON.stringify(patch) body : JSON.stringify(patch)
}); });
if (resp.ok){ if (resp.ok){
//console.log('task tree before update:',tasks);
delete tasks[task.assignee][task.status][task.id] delete tasks[task.assignee][task.status][task.id]
if (!tasks[user_id]) tasks[user_id] = {} if (!tasks[user_id]) tasks[user_id] = {}
if (!tasks[user_id][state]) tasks[user_id][state] = {} if (!tasks[user_id][state]) tasks[user_id][state] = {}
tasks[user_id][state][task.id] = task; tasks[user_id][state][task.id] = task;
task.assignee = user_id; task.assignee = user_id;
task.status = {code:state,name:states[state]}; task.status = state;
//console.log('task tree after update:',tasks);
error = null; error = null;
} else { } else {
error = await resp.text(); error = await resp.text();

View File

@@ -1,9 +0,0 @@
<script>
import {t} from '../../translations.svelte.js';
let { settings = $bindable() } = $props();
</script>
<fieldset>
<legend>{t('settings')}</legend>
</fieldset>

View File

@@ -63,6 +63,7 @@
const resp = await fetch(url,{credentials:'include'}); const resp = await fetch(url,{credentials:'include'});
if (resp.ok){ if (resp.ok){
project = await resp.json(); project = await resp.json();
console.log(project);
error = null; error = null;
loadTasks(); loadTasks();
} else { } else {
@@ -185,6 +186,21 @@
<MemberEditor members={project.members} {updatePermission} {addMember} {dropMember} {getCandidates} /> <MemberEditor members={project.members} {updatePermission} {addMember} {dropMember} {getCandidates} />
</td> </td>
</tr> </tr>
{#if project.allowed_states}
{#each Object.keys(project.allowed_states) as key,idx}
<tr>
<th>
{#if !idx}
{t('allowed_states')}:
{/if}
{key}
</th>
<td>
{project.allowed_states[key]}
</td>
</tr>
{/each}
{/if}
{/if} {/if}
{#if estimated_time.sum} {#if estimated_time.sum}
<tr> <tr>

View File

@@ -7,6 +7,7 @@
"add_subtask": "Unteraufgabe hinzufügen", "add_subtask": "Unteraufgabe hinzufügen",
"add_task": "Aufgabe hinzufügen", "add_task": "Aufgabe hinzufügen",
"advertisement" : "Umbrella ist ein Produkt von {producer}.", "advertisement" : "Umbrella ist ein Produkt von {producer}.",
"allowed_states": "zulässige Status",
"amount": "Menge", "amount": "Menge",
"bank_account": "Bankverbindung", "bank_account": "Bankverbindung",
@@ -161,6 +162,7 @@
"pos": "Pos", "pos": "Pos",
"position": "Position", "position": "Position",
"positions": "Positionen", "positions": "Positionen",
"postpone": "autschieben",
"price": "Preis", "price": "Preis",
"processing_code": "Code wird verarbeitet…", "processing_code": "Code wird verarbeitet…",
"project": "Projekt", "project": "Projekt",