2 changed files with 164 additions and 1 deletions
@ -0,0 +1,163 @@ |
|||
#!/bin/bash |
|||
# File : timesheet.sh |
|||
# |
|||
# This generates timesheet data for my fedora ${TASK}s only |
|||
#exec 2>/dev/null |
|||
|
|||
WHICH='/usr/bin/which' |
|||
DATE="$(${WHICH} date)" |
|||
PRINTF="$(${WHICH} printf)" |
|||
ECHO="$(${WHICH} echo)" |
|||
SED="$(${WHICH} sed)" |
|||
TASK="$(${WHICH} task)" |
|||
HEAD="$(${WHICH} head)" |
|||
ANSI2HTML="$(${WHICH} ansi2html)" |
|||
|
|||
phrase="1-weeks-ago" |
|||
fmt="%Y-%m-%d" |
|||
start=$(${DATE} +$fmt -d $phrase) |
|||
end=$(${DATE} +$fmt) |
|||
filter='' |
|||
|
|||
function usage() |
|||
{ |
|||
echo "${0} [OPTIONS] [PROJECT]" |
|||
echo |
|||
echo "Get a timesheet for the past last week." |
|||
echo "The \"spent\" time is the whole time spent with this task." |
|||
echo |
|||
echo "OPTIONS:" |
|||
printf " %10s : %s\n" '-?' 'Get this help message.' |
|||
printf " %10s : %s\n" '-h' 'Write HTML instead of ansi console text.' |
|||
printf " %10s : %s\n" '-o path' 'Save the date under a file defined by' |
|||
printf " %10s %s\n" '' '"path" preceeded by the current date and time' |
|||
printf " %10s %s\n" '' 'and an ".html" suffix.' |
|||
echo |
|||
echo "PROJECT:" |
|||
echo " The project to create the timesheet for." |
|||
} |
|||
|
|||
OUTFILE='' |
|||
TO_HTML=0 |
|||
|
|||
while getopts 'o:h?' opt |
|||
do |
|||
case $opt in |
|||
o) |
|||
OUTFILE="${OPTARG}";; |
|||
h) |
|||
TO_HTML=1;; |
|||
?) |
|||
usage |
|||
exit 0;; |
|||
*) |
|||
usage |
|||
exit 1;; |
|||
esac |
|||
done |
|||
|
|||
shift $((${OPTIND} - 1)) |
|||
|
|||
test ${1} && filter="project.is:${1}" |
|||
|
|||
function taskdata() |
|||
{ |
|||
echo "$(${TASK} $@ | ${SED} '1,3d' | ${HEAD} -n -2)" |
|||
} |
|||
|
|||
function display() |
|||
{ |
|||
${ECHO} |
|||
${ECHO} -en "\033[4mproject \033[24m " |
|||
${ECHO} -en "\033[4mdescription \033[24m " |
|||
${ECHO} -en "\033[4mcompleted \033[24m " |
|||
${ECHO} -en "\033[4mentered \033[24m " |
|||
${ECHO} -e "\033[4mspent \033[24m" |
|||
for i in $* |
|||
do |
|||
project="$(taskdata uuid:${i} project)" |
|||
local description="$(taskdata uuid:${i} description)" |
|||
local end="$(taskdata uuid:${i} end)" |
|||
local entry="$(taskdata uuid:${i} entry)" |
|||
local times="$(${TASK} uuid:${i} info | ${SED} '/duration/{;s/.*duration: PT\(\([0-9]\+\)H\)\?\(\([0-9]\+\)M\)\?\(\([0-9]\+\)S\)\?.*/\2:\4:\6/;s/^:/0:/;s/::/:0:/;s/:$/:0/;p;};d')" |
|||
|
|||
project="$(${PRINTF} "%.15s" "${project}")" |
|||
description="$(${PRINTF} "%.35s" "${description}")" |
|||
|
|||
local years=0 |
|||
local months=0 |
|||
local days=0 |
|||
local hours=0 |
|||
local minutes=0 |
|||
local seconds=0 |
|||
for t in ${times} |
|||
do |
|||
ta=(${t//:/ }) |
|||
hours=$((hours+$((10#${ta[0]})))) |
|||
minutes=$((minutes+$((10#${ta[1]})))) |
|||
seconds=$((seconds+$((10#${ta[2]})))) |
|||
done |
|||
minutes=$((minutes+$((seconds/60)))) |
|||
seconds=$((seconds%60)) |
|||
hours=$((hours+$((minutes/60)))) |
|||
minutes=$((minutes%60)) |
|||
|
|||
${PRINTF} "% -15s % -35s % -10s % -10s %02d:%02d:%02d\n" \ |
|||
"${project}" "${description}" "${end}" \ |
|||
"${entry}" "${hours}" "${minutes}" "${seconds}" |
|||
done |
|||
${ECHO} |
|||
} |
|||
|
|||
function timesheet() |
|||
{ |
|||
${ECHO} " (generated at $(date))" |
|||
${ECHO} |
|||
${ECHO} -e "\033[1mTasks completed from $start to $end (back $phrase)\033[22m" |
|||
display $(taskdata uuid ${filter} end.after:$start) |
|||
|
|||
${ECHO} |
|||
${ECHO} -e "\033[1mUpcoming tasks\033[22m" |
|||
display $(taskdata uuidnext ${filter}) |
|||
|
|||
${ECHO} |
|||
${ECHO} -e "\033[1mBlocked tasks\033[22m" |
|||
${TASK} blocked $filter rc._forcecolor=on |
|||
|
|||
${ECHO} |
|||
${ECHO} -e "\033[1mBlocking tasks\033[22m" |
|||
${TASK} blocking $filter rc._forcecolor=on |
|||
|
|||
${ECHO} |
|||
${ECHO} -e "\033[1mSummary\033[22m" |
|||
${TASK} summary $filter rc._forcecolor=on |
|||
|
|||
${ECHO} |
|||
${ECHO} -e "\033[1mHistory\033[22m" |
|||
${TASK} history $filter rc._forcecolor=on |
|||
${TASK} ghistory $filter rc._forcecolor=on |
|||
${ECHO} -e "\n" |
|||
${TASK} burndown.daily rc._forcecolor=on |
|||
${ECHO} -e "\n" |
|||
${TASK} burndown rc._forcecolor=on |
|||
} |
|||
|
|||
if [ ${OUTFILE} ] |
|||
then |
|||
OUTFILE="${OUTFILE}_$(${DATE} +"%Y-%m-%d_%H:%M:%S")" |
|||
if [ ${TO_HTML} -ne 0 ] |
|||
then |
|||
timesheet $@ | ${ANSI2HTML} >${OUTFILE}.html |
|||
else |
|||
timesheet $@ >${OUTFILE} |
|||
fi |
|||
else |
|||
if [ ${TO_HTML} -ne 0 ] |
|||
then |
|||
timesheet $@ | ${ANSI2HTML} |
|||
else |
|||
timesheet $@ |
|||
fi |
|||
fi |
|||
|
|||
# vim: set ft=sh ts=4 sw=4: |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue