teichmann@4: #!/bin/bash
teichmann@4: #
teichmann@4: # wochenbericht
teichmann@4: # -------------
teichmann@4: # (c) 2008 by Sascha L. Teichmann
teichmann@4: 
teichmann@4: # Little script to summarize times within a given week.
teichmann@4: # usage:
teichmann@4: # ./wochenbericht [<week of year>] [<getan database file>]
teichmann@4: # week defaults to current week, database to time.db
teichmann@4: #
teichmann@4: # This is Free Software in terms of GPLv3 or later. See
teichmann@4: # LICENSE coming with getan for details.
teichmann@4: #
teichmann@5: usage() {
teichmann@5:     cat <<EOF
ingo@32: usage: ./wochenbericht [<week of year>] [<year>] [<getan database file>] 
teichmann@5:     <week of year>        defaults to current week
ingo@32:     <year>                defaults to current year
teichmann@5:     <getan database file> defaults to time.db
teichmann@5: EOF
teichmann@5:     exit 1
teichmann@5: }
teichmann@5: 
teichmann@5: if [ "$1" ==  "--help" -o "$1" == "-h" ]; then
teichmann@5:     usage
teichmann@5: fi
teichmann@5: 
teichmann@5: 
teichmann@4: if [[ "$1" -eq "" ]]; then
teichmann@4:     WEEK=`date +'%W'`
teichmann@4:     # remove hash below if you want previous week
teichmann@4:     #WEEK=`expr ${WEEK} '-' 1 '|' 52`
teichmann@4: else
teichmann@4:     WEEK=$1
teichmann@4: fi
teichmann@4: 
ingo@32: if [[ "$2" -eq "" ]]; then
ingo@32:     YEAR=`date +'%Y'`
ingo@32: else
ingo@32:     YEAR=$2
ingo@32: fi
ingo@32: 
ingo@32: TIME_DB=${3:-time.db}
teichmann@4: 
teichmann@5: if [ ! -f ${TIME_DB} ]; then
teichmann@5:     echo "error: Database file ${TIME_DB} does not exist."
teichmann@5:     usage
teichmann@5: fi
teichmann@5: 
teichmann@4: sqlite3 ${TIME_DB} "
teichmann@4: SELECT coalesce(description, 'Verschiedenes'), total FROM projects 
teichmann@4: INNER JOIN (
teichmann@4:     SELECT 
teichmann@4:         project_id,
teichmann@4:         sum(strftime('%s', stop_time) - strftime('%s', start_time)) AS total
teichmann@4:     FROM entries
ingo@32:     WHERE (strftime('%W', start_time) = '${WEEK}' AND
ingo@32:         strftime('%Y', start_time) = '${YEAR}') OR 
ingo@32:         (strftime('%W', stop_time)  = '${WEEK}' AND
ingo@32:         strftime('%Y', stop_time) = '${YEAR}')
teichmann@4:     GROUP BY project_id
teichmann@4: ) ON id = project_id
teichmann@4: WHERE active;
teichmann@4: " | awk '
teichmann@4: function human_time(t) {
teichmann@4:     h = int(t / 3600)
teichmann@4:     m = int((t % 3600)/60.0 + 0.5)
teichmann@4:     while (m >= 60) { ++h; m -= 60 }
teichmann@4:     return sprintf("%2d:%02dh", h, m)
teichmann@4: }
teichmann@4: BEGIN { FS="|"; sum = 0 }
teichmann@4:       { sum += $2 
teichmann@4:         printf("%s: %s\n", human_time($2), $1) 
teichmann@4:       }
teichmann@4: END   { printf("%s: Gesamt\n", human_time(sum)) } 
teichmann@4: '