Commit c06da04b8613bf389cad27e88fd072297b008c38
1 parent
d4093e9e
fix time output in timesheets from taskwarrior
Showing
3 changed files
with
54 additions
and
33 deletions
| 1 | #!/bin/zsh | 1 | #!/bin/zsh |
| 2 | 2 | ||
| 3 | -function tasktimes() { | 3 | +function duration() { |
| 4 | [[ $# -eq 0 ]] && return 1 | 4 | [[ $# -eq 0 ]] && return 1 |
| 5 | + task $1 info|\ | ||
| 6 | + sed 's/\([^ ]*\) \([^ ]*\).*duration: \(\([0-9]*\)d \)\?\([^)]*\).*/\1_\2|\4:\5/;te;d;:e' | ||
| 7 | +} | ||
| 5 | 8 | ||
| 6 | - local KEY=${2:-\\1} | ||
| 7 | - local T | ||
| 8 | - local D='([0-9]{4}-[0-9]{2}-[0-9]{2})' | ||
| 9 | - local N='([0-9]+)' | ||
| 10 | - local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e' | ||
| 11 | - | ||
| 12 | - task $1 info | sed -r ${EXPR} | awk -F: ' | ||
| 13 | - { | ||
| 14 | - s = (d[$1][2] + $4) % 60 | ||
| 15 | - _m = int((d[$1][2] + $4) / 60) | ||
| 16 | - m = (d[$1][1] + $3 + _m) % 60 | ||
| 17 | - _h = int((d[$1][1] + $3 + _m) / 60) | ||
| 18 | - d[$1][0] += $2 + _h | ||
| 19 | - d[$1][1] = m | ||
| 20 | - d[$1][2] = s | ||
| 21 | - } | ||
| 22 | - END { | ||
| 23 | - for(i in d) | ||
| 24 | - printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2]) | ||
| 25 | - }' | sort -t: -k1 | 9 | +function tasktimes() { |
| 10 | + [[ $# -eq 0 ]] && return 1 | ||
| 11 | + duration $1 | ||
| 26 | } | 12 | } |
| 27 | 13 | ||
| 28 | function tasktimestotal() { | 14 | function tasktimestotal() { |
| 29 | - tasktimes $1 TOTAL | 15 | + set -- $(duration $1) |
| 16 | + | ||
| 17 | + # == Total calculation == | ||
| 18 | + DAYS=0 | ||
| 19 | + TI=0 | ||
| 20 | + for dur; do | ||
| 21 | + # first skip key | ||
| 22 | + key=${dur%%|*} | ||
| 23 | + dur=${dur#*|} | ||
| 24 | + | ||
| 25 | + days=${dur%%:*} | ||
| 26 | + DAYS=$((DAYS+${days:-0})) | ||
| 27 | + | ||
| 28 | + ti=$(printf "1970-01-01 %s" ${dur#*:}|xargs -d '\n' date +%s -u -d) | ||
| 29 | + TI=$((TI+$ti)) | ||
| 30 | + | ||
| 31 | + if [[ $TI -ge 86400 ]]; then | ||
| 32 | + # bigger than a day? | ||
| 33 | + DAYS=$((DAYS+1)) | ||
| 34 | + TI=$((TI-86400)) | ||
| 35 | + fi | ||
| 36 | + done | ||
| 37 | + TI="$(date -u -d@${TI} +%X)" | ||
| 38 | + echo "${DAYS}:${TI}" | ||
| 39 | + # == End Total Calculation == | ||
| 30 | } | 40 | } |
| 31 | 41 | ||
| 32 | function taskdescription() { | 42 | function taskdescription() { |
| @@ -7,11 +7,14 @@ source $0:A:h/ttyhelper.sh | @@ -7,11 +7,14 @@ source $0:A:h/ttyhelper.sh | ||
| 7 | 7 | ||
| 8 | function printtimes() { | 8 | function printtimes() { |
| 9 | local T | 9 | local T |
| 10 | - for T in $@ | 10 | + for T |
| 11 | do | 11 | do |
| 12 | - extracttime $T | ||
| 13 | - printf "%37s%-4s%10s: %s\n" "spent - " "$(date -d "$TIMEKEY" +%a)" \ | ||
| 14 | - $TIMEKEY $TIME | 12 | + key=${T%%|*} |
| 13 | + dur=${T#*|} | ||
| 14 | + date="$(date -u -d "${key//_/ }" +%c)" | ||
| 15 | + ti=$(printf "1970-01-01 %s" ${dur#*:}|xargs -d '\n' date +%X -u -d) | ||
| 16 | + TIME="$(formattime ${dur})" | ||
| 17 | + printf "%50s: %14s\n" "${date}" $ti | ||
| 15 | done | 18 | done |
| 16 | } | 19 | } |
| 17 | 20 | ||
| @@ -23,14 +26,14 @@ function showall() { | @@ -23,14 +26,14 @@ function showall() { | ||
| 23 | printf "%s %s %s %s %s\n" \ | 26 | printf "%s %s %s %s %s\n" \ |
| 24 | "$(underline -16 project)" \ | 27 | "$(underline -16 project)" \ |
| 25 | "$(underline -35 description)" \ | 28 | "$(underline -35 description)" \ |
| 26 | - "$(underline -8 spent)" \ | 29 | + "$(underline -13 spent)" \ |
| 27 | "$(underline -10 completed)" \ | 30 | "$(underline -10 completed)" \ |
| 28 | "$(underline -10 entered)" | 31 | "$(underline -10 entered)" |
| 29 | 32 | ||
| 30 | for UUID in $@ | 33 | for UUID in $@ |
| 31 | do | 34 | do |
| 32 | - extracttime $(tasktimes $UUID TOTAL) | ||
| 33 | - printf "%-16s %-35s %-10s %-10s %-8s\n" \ | 35 | + TIME="$(formattime $(tasktimestotal $UUID))" |
| 36 | + printf "%-16s %-35s %13s %-10s %-10s\n" \ | ||
| 34 | "$(truncate "$(taskproject $UUID)" 16)" \ | 37 | "$(truncate "$(taskproject $UUID)" 16)" \ |
| 35 | "$(truncate "$(taskdescription $UUID)" 35)" \ | 38 | "$(truncate "$(taskdescription $UUID)" 35)" \ |
| 36 | "$(bold "" "$TIME")" \ | 39 | "$(bold "" "$TIME")" \ |
| @@ -66,14 +69,17 @@ function timesheet() { | @@ -66,14 +69,17 @@ function timesheet() { | ||
| 66 | "$(bold "" "Blocking tasks")" \ | 69 | "$(bold "" "Blocking tasks")" \ |
| 67 | "${BLOCKING}" | 70 | "${BLOCKING}" |
| 68 | 71 | ||
| 72 | + halfyear="entry.after:$(date -d '6 month ago' +%F)" | ||
| 73 | + twoyears="entry.after:$(date -d '2 years ago' +%F)" | ||
| 74 | + | ||
| 69 | printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \ | 75 | printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \ |
| 70 | "$(bold "" "Summary")" \ | 76 | "$(bold "" "Summary")" \ |
| 71 | "$(task rc._forcecolor=on $@ summary 2>/dev/null)" \ | 77 | "$(task rc._forcecolor=on $@ summary 2>/dev/null)" \ |
| 72 | "$(bold "" "History")" \ | 78 | "$(bold "" "History")" \ |
| 73 | - "$(task rc._forcecolor=on $@ history 2>/dev/null)" \ | ||
| 74 | - "$(task rc._forcecolor=on $@ ghistory 2>/dev/null)" \ | ||
| 75 | - "$(task rc._forcecolor=on $@ burndown.daily 2>/dev/null)" \ | ||
| 76 | - "$(task rc._forcecolor=on $@ burndown 2>/dev/null)" | 79 | + "$(task rc._forcecolor=on $@ ${halfyear} history 2>/dev/null)" \ |
| 80 | + "$(task rc._forcecolor=on $@ ${halfyear} ghistory 2>/dev/null)" \ | ||
| 81 | + "$(task rc._forcecolor=on $@ ${halfyear} burndown.daily 2>/dev/null)" \ | ||
| 82 | + "$(task rc._forcecolor=on $@ ${twoyears} burndown 2>/dev/null)" | ||
| 77 | } | 83 | } |
| 78 | 84 | ||
| 79 | function usage() { | 85 | function usage() { |
Please
register
or
login
to post a comment