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 [] [] 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 <] [] [] teichmann@5: defaults to current week ingo@32: defaults to current year teichmann@5: 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: '