diff --git a/timesheet/report.sh b/timesheet/report.sh index aa6136f..2dc8381 100755 --- a/timesheet/report.sh +++ b/timesheet/report.sh @@ -6,35 +6,44 @@ source $0:A:h/ttyhelper.sh function tasksallsince() { [[ $# -lt 1 ]] && return 1 - local DATE=$1 - shift - taskuuids \( \( \( +COMPLETED or +DELETED \) end.after:$DATE \) or \ - +PENDING \) $@ + taskuuids \(\(\( +COMPLETED or +DELETED \) end.after:${1} \) \ + or +PENDING \) $@ } function datetimedescription() { - for UUID in $(tasksallsince 2018-03-31) + [[ $# -lt 1 ]] && return 1 + for UUID in $(tasksallsince $@) do DESCRIPTION="$(taskdescription $UUID)" PROJECT="$(taskproject $UUID)" + COMPLETED="$(taskuuids $UUID \( +COMPLETED or +DELETED \))" for T in $(tasktimes $UUID) do extracttime $T - printf "%s;%s;%s;%s\n" $TIMEKEY $TIME $PROJECT $DESCRIPTION + printf "%s;%s;%s;%s;%s\n" \ + $TIMEKEY $TIME $PROJECT $DESCRIPTION $COMPLETED done done } function report() { - for LINE in "${(f)$(datetimedescription|sort -t\; -k1)}" + [[ $# -lt 1 ]] && return 1 + local D DATE T + DATE=$1 + for LINE in "${(f)$(datetimedescription $@|sort -t\; -f -k1,1 -k3,3)}" do set -- ${(s(;))LINE} - if [[ $DATE != $1 ]] - then - DATE=$1 - printf "%s\n" $(underline "" $DATE) - fi - printf "%s [%s] - %s\n" $(bold "" $2) $3 $4 + if [[ -n $1 && $(date -d $1 +%s) -ge $(date -d $DATE +%s) ]] + then + if [[ $D != $1 ]] + then + D=$1 + printf "%s\n" $(underline "" $D) + fi + T=$2 + if [[ -n $5 ]] && T=$(bold "" $T) + if [[ -n $D ]] && printf "%s [%s] - %s\n" $T $3 $4 + fi done } @@ -43,16 +52,58 @@ function usage() { Usage: %s [-?] [DATETIME] [FILTER] OPTIONS: - -?, --help Show this help - + -?, --help Show this help + -d, --date DATETIME is a date and time identifier as accepted by the + date command. It specifies how long back done tasks + should be considered. + FILTER can be additional taskwarriors filters to limit the result any further. - DATETIME is a date and time identifier as accepted by the date command. - It specifies how long back done tasks should be considered. USAGE ) /usr/bin/printf "${USAGE}\n" $0 } +# +# parse command line arguments +# +SHORTOPTS=?d: +LONGOPTS=help,date +ARGS=$(getopt -o ${SHORTOPTS} --long ${LONGOPTS} -n report -- $@) +if [ $? -ne 0 ] +then + usage $0 + exit 1 +fi +eval set -- ${=ARGS} +unset ARGS + +while true +do + case $1 in + '-?'|'--help') + shift + usage $0 + exit 0 + ;; + '-d'|'--date') + DATEFROM=$(date -d ${2} +%Y-%m-%d) + shift 2 + continue + ;; + '--') + shift + break + ;; + *) + echo 'Internal error!' >&2 + exit 1 + ;; + esac +done + +DATEFROM=${DATEFROM:-$(date +%Y-%m-01)} +report $DATEFROM $@ +#datetimedescription $DATEFROM $@|sort -t\; -f -k1,1 -k3,3 # vim: set et ts=4 sw=4: