1.1 --- a/db.py Fri Oct 01 22:02:28 2010 +0200
1.2 +++ b/db.py Fri Oct 01 23:23:26 2010 +0200
1.3 @@ -46,8 +46,16 @@
1.4 constraint activity_fk foreign key(activity) references activities(rowid) on delete
1.5 cascade)"""
1.6
1.7 +BREAKS_TABLE = """breaks(
1.8 +begin datetime,
1.9 +end datetime,
1.10 +task int,
1.11 +log text,
1.12 +constraint task_fk foreign key(task) references tasks(rowid) on delete
1.13 +cascade)"""
1.14 +
1.15 TABLES = (ACTIVITIES_TABLE, COMPANIES_TABLE, PROJECTS_TABLE, RATES_TABLE,
1.16 -TASKS_TABLE)
1.17 +TASKS_TABLE, BREAKS_TABLE)
1.18
1.19 DEF_PROJECT = "default"
1.20 DEF_ACTIVITY = "default"
1.21 @@ -70,6 +78,10 @@
1.22 print "\ntasks"
1.23 for c in cur:
1.24 print c
1.25 + cur.execute("select * from breaks")
1.26 + print "\nbreaks"
1.27 + for c in cur:
1.28 + print c
1.29 con.commit()
1.30 cur.close()
1.31
1.32 @@ -117,17 +129,15 @@
1.33 cur.close()
1.34 return activity
1.35
1.36 -def find_active_tasks(db_file):
1.37 +def find_active_task(db_file):
1.38 con, cur = session(db_file)
1.39 sql = "select project, activity from tasks where end is null"
1.40 cur.execute(sql)
1.41 - results = []
1.42 - if cur:
1.43 - for id in cur:
1.44 - results.append((id_name(db_file, "projects", id[0]),
1.45 - id_name(db_file, "activities", id[1])))
1.46 + task = cur.fetchone()
1.47 + if task:
1.48 + task = task[0]
1.49 cur.close()
1.50 - return results
1.51 + return task
1.52
1.53 def id_name(db_file, table, id):
1.54 con, cur = session(db_file)
1.55 @@ -198,3 +208,54 @@
1.56 con.commit()
1.57 cur.close()
1.58 test(db_file)
1.59 +
1.60 +def is_paused(db_file, time):
1.61 + con, cur = session(db_file)
1.62 + sql = "select rowid from breaks where end is null"
1.63 + cur.execute(sql)
1.64 + paused = cur.fetchone()
1.65 + cur.close()
1.66 + return paused
1.67 +
1.68 +def pause(db_file, project, activity, time):
1.69 + print "pausing"
1.70 + if not is_paused(db_file, time):
1.71 + project = find_last_project(db_file, time)
1.72 + activity = find_last_activity(db_file, time)
1.73 + con, cur = session(db_file)
1.74 + values = (time, None, project_id(db_file, project),
1.75 + activity_id(db_file, activity), None)
1.76 + sql = "insert into breaks values(?, ?, ?, ?, ?)"
1.77 + cur.execute(sql, values)
1.78 + con.commit()
1.79 + cur.close()
1.80 + test(db_file)
1.81 +
1.82 +def resume(db_file, project, activity, time):
1.83 + print "resuming"
1.84 + if is_paused(db_file, time):
1.85 + task = find_active_task(db_file)
1.86 + activity = find_last_activity(db_file, time)
1.87 + project = find_last_project(db_file, time)
1.88 + con, cur = session(db_file)
1.89 + values = (time, project_id(db_file, project), activity_id(db_file, activity))
1.90 + sql = "update breaks set end=? where project=? and activity=?"
1.91 + cur.execute(sql, values)
1.92 + con.commit()
1.93 + cur.close()
1.94 + test(db_file)
1.95 +
1.96 +def status(db_file):
1.97 + task = find_active_task(db_file)
1.98 + con, cur = session(db_file)
1.99 + result = None
1.100 + if task:
1.101 + values = (task,)
1.102 + sql = "select project, activity from tasks where rowid=?"
1.103 + cur.execute(sql, values)
1.104 + result = cur.fetchone()
1.105 + if result:
1.106 + result = (id_name(db_file, "projects", result[0]),
1.107 + id_name(db_file, "activities", result[1]))
1.108 + return result
1.109 +