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