Compare commits

..
Author SHA1 Message Date
StephanRichter b51fb2ed89 implemented patching of project tasks when new user is added to project
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-07-06 15:53:55 +02:00
8 changed files with 13 additions and 57 deletions
+4 -36
View File
@@ -4,47 +4,12 @@
import { api } from '../urls.svelte';
import { t } from '../translations.svelte';
import { error, yikes } from '../warn.svelte';
import { msToTime, now } from '../time.svelte';
import { timetrack } from '../user.svelte';
let interval = null;
const router = useTinyRouter();
async function addTime(task_id){
const url = api(`time/track_task/${task_id}`);
const resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : now()
}); // create new time or return time with assigned tasks
if (resp.ok) {
const track = await resp.json();
timetrack.running = track;
yikes();
} else {
error(resp);
}
}
function go(){
router.navigate('/time');
}
function ondragover(ev){
ev.preventDefault();
}
function ondragleave(ev){
ev.preventDefault();
}
function ondrop(ev){
let task_id = ev.dataTransfer.getData('task');
if (task_id) addTime(task_id);
}
async function stopTrack(){
if (timetrack.running.id){
const url = api(`time/${timetrack.running.id}/stop`);
@@ -63,6 +28,9 @@
}
}
function go(){
router.navigate('/time');
}
function updateElapsed(){
timetrack.elapsed = msToTime(Date.now() - timetrack.start);
@@ -86,7 +54,7 @@
{#if timetrack.running}
<span class="timetracking" {ondrop} {ondragover} {ondragleave} >
<span class="timetracking">
<span onclick={go} >{timetrack.running.subject} {#if timetrack.elapsed}({timetrack.elapsed}){/if}</span>
<button onclick={stopTrack} title={t('stop')} class="symbol"></button>
</span>
+1 -6
View File
@@ -207,11 +207,6 @@
return false;
}
function ondragstart(ev, task){
dragged = task;
ev.dataTransfer.setData("task",task.id);
}
function openTask(task_id){
window.open(`/task/${task_id}/view`, '_blank').focus();
}
@@ -311,7 +306,7 @@
<div class={['state_'+state, is_custom(state) ? '':'state_custom' ,highlight.user == u.id && highlight.state == state ? 'highlight':'']} ondragover={ev => hover(ev,u.id,state)} ondragleave={e => delete highlight.user} ondrop={ev => drop(u.id,state)} >
{#each Object.values(tasks[u.id][state]).sort(byName) as task}
{#if !filter || task.name.toLowerCase().includes(filter) || (task.tags && task.tags.filter(tag => tag.toLowerCase().includes(filter)).length)}
<Card onclick={e => openTask(task.id)} ondragstart={ev => ondragstart(ev,task)} {task} tag_colors={project.tag_colors} />
<Card onclick={e => openTask(task.id)} ondragstart={ev => dragged=task} {task} tag_colors={project.tag_colors} />
{/if}
{/each}
<div class="add_task" onclick={ev => show_task_form(project.id,u.id,+state)}>
+5
View File
@@ -249,6 +249,11 @@
<option value={member.user.id}>{member.user.name}</option>
{/each}
</select>
<pre>
<code>
{JSON.stringify(project.members,null,2)}
</code>
</pre>
</label>
</div>
{#if project.allowed_states}
+1 -1
View File
@@ -21,4 +21,4 @@ export function t(key,args = {}){
}
for (var key of Object.keys(args)) set = set.replace(`{${key}}`,args[key]);
return set;
}
}
+2 -2
View File
@@ -329,7 +329,7 @@
"saved": "saved",
"save_object": "save {object}",
"search": "search",
"searching…": "searching…",
"searching…": "searhcing…",
"select a new parent for {entity}": "select a new parent for '{entity}'",
"select_company" : "select on of you companies:",
"select_customer": "select customer",
@@ -380,7 +380,7 @@
"subtask": "subtask",
"subtasks": "subtasks",
"succeeding_document": "succeeding document",
"sum external":"sum of external positions",
"sum external";"sum of external positions",
"sum_of_records": "sum of records",
"sums": "sums",
@@ -356,10 +356,6 @@ span.timetracking {
grid-column-end: span 2;
}
.markdown svg{
display: block;
}
.editable:hover{
border: 1px dotted;
}
@@ -450,10 +450,6 @@ span.timetracking {
grid-column-end: span 2;
}
.markdown svg{
display: block;
}
.editable:hover{
border: 1px dotted;
}
@@ -449,10 +449,6 @@ span.timetracking {
grid-column-end: span 2;
}
.markdown svg{
display: block;
}
.editable:hover{
border: 1px dotted;
}