db.py
changeset 8 42c4c96e3ecd
parent 7 878956edb936
child 9 fab8e1981155
     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 +