|
|
|
@ -1,9 +1,11 @@ |
|
|
|
<script> |
|
|
|
<script> |
|
|
|
import { onMount } from 'svelte'; |
|
|
|
import { onMount } from 'svelte'; |
|
|
|
import { useTinyRouter } from 'svelte-tiny-router'; |
|
|
|
import { useTinyRouter } from 'svelte-tiny-router'; |
|
|
|
import { api } from '../../urls.svelte.js'; |
|
|
|
import { api } from '../../urls.svelte.js'; |
|
|
|
import { t } from '../../translations.svelte.js'; |
|
|
|
import { t } from '../../translations.svelte.js'; |
|
|
|
import { display } from '../../time.svelte.js'; |
|
|
|
import { timetrack } from '../../user.svelte.js'; |
|
|
|
|
|
|
|
import { display } from '../../time.svelte.js'; |
|
|
|
|
|
|
|
import { now } from '../../time.svelte'; |
|
|
|
|
|
|
|
|
|
|
|
import TimeEditor from '../../Components/TimeRecordEditor.svelte'; |
|
|
|
import TimeEditor from '../../Components/TimeRecordEditor.svelte'; |
|
|
|
|
|
|
|
|
|
|
|
@ -25,6 +27,21 @@ |
|
|
|
let timeMap = $derived.by(calcYearMap); |
|
|
|
let timeMap = $derived.by(calcYearMap); |
|
|
|
let selectionSum = $derived(sortedTimes.filter(time => selected[time.id]).map(time => time.duration).reduce((acc, a) => acc + a, 0)); |
|
|
|
let selectionSum = $derived(sortedTimes.filter(time => selected[time.id]).map(time => time.duration).reduce((acc, a) => acc + a, 0)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
error = await resp.text(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function calcYearMap(){ |
|
|
|
function calcYearMap(){ |
|
|
|
let result = { |
|
|
|
let result = { |
|
|
|
months : {}, |
|
|
|
months : {}, |
|
|
|
@ -230,7 +247,7 @@ |
|
|
|
<td class="subject" onclick={e => {detail = time.id}}> |
|
|
|
<td class="subject" onclick={e => {detail = time.id}}> |
|
|
|
{time.subject} |
|
|
|
{time.subject} |
|
|
|
</td> |
|
|
|
</td> |
|
|
|
<td class="tasks" onclick={e => {detail = time.id}}> |
|
|
|
<td class="tasks"> |
|
|
|
<ul> |
|
|
|
<ul> |
|
|
|
{#each time.task_ids as tid} |
|
|
|
{#each time.task_ids as tid} |
|
|
|
{#if tasks[tid]} |
|
|
|
{#if tasks[tid]} |
|
|
|
@ -239,6 +256,7 @@ |
|
|
|
<a href="/project/{tasks[tid].project_id}/view" {onclick}>{projects[tasks[tid].project_id].name}</a> / |
|
|
|
<a href="/project/{tasks[tid].project_id}/view" {onclick}>{projects[tasks[tid].project_id].name}</a> / |
|
|
|
{/if} |
|
|
|
{/if} |
|
|
|
<a href="/task/{tid}/view" {onclick}>{tasks[tid].name}</a> |
|
|
|
<a href="/task/{tid}/view" {onclick}>{tasks[tid].name}</a> |
|
|
|
|
|
|
|
<button class="symbol" title={t('timetracking')} onclick={e => addTime(tid)}></button> |
|
|
|
</li> |
|
|
|
</li> |
|
|
|
{/if} |
|
|
|
{/if} |
|
|
|
{/each} |
|
|
|
{/each} |
|
|
|
|