Added basic end command.
2 Database lib for cronrec.
3 Author: Eugen Sawin (sawine@me73.com)
4 Dependencies: libsqlite3-dev
9 ACTIVITIES_TABLE = """activities(
13 COMPANIES_TABLE = """companies(
21 PROJECTS_TABLE = """projects(
25 constraint customer_fk foreign key(customer) references companies(rowid) on delete
28 RATES_TABLE = """rates(
33 constraint project_fk foreign key(project) references projects(rowid) on delete
35 constraint activity_fk foreign key(activity) references activities(rowid) on delete
38 TASKS_TABLE = """tasks(
44 constraint project_fk foreign key(project) references projects(rowid) on delete
46 constraint activity_fk foreign key(activity) references activities(rowid) on delete
49 TABLES = (ACTIVITIES_TABLE, COMPANIES_TABLE, PROJECTS_TABLE, RATES_TABLE,
52 DEF_PROJECT = "default"
53 DEF_ACTIVITY = "default"
56 con = sqlite3.connect(db_file)
57 return con, con.cursor()
59 def test_tables(db_file):
60 con, cur = session(db_file)
61 sql = "select * from sqlite_master where type='table'"
67 con, cur = session(db_file)
69 sql = "create table " + table
74 def find_last_project(db_file, time):
75 con, cur = session(db_file)
77 sql = "select project from tasks where begin < ? and end is null order by \
79 cur.execute(sql, values)
83 sql = "select name from projects where rowid=?"
84 cur.execute(sql, values)
85 project = cur.fetchone()[0]
92 def find_last_activity(db_file, time):
93 con, cur = session(db_file)
95 sql = "select activity from tasks where begin < ? and end is null order by \
97 cur.execute(sql, values)
101 sql = "select name from activities where rowid=?"
102 cur.execute(sql, values)
103 activity = cur.fetchone()[0]
105 activity = DEF_ACTIVITY
110 def row_id(db_file, table, name):
111 con, cur = session(db_file)
113 sql = "select rowid from %s where name=?" % table
114 cur.execute(sql, values)
117 sql = "insert into %s(name) values(?)" % table
118 cur.execute(sql, values)
121 return row_id(db_file, table, name)
126 def project_id(db_file, name):
127 return row_id(db_file, "projects", name)
129 def activity_id(db_file, name):
130 return row_id(db_file, "activities", name)
132 def end(db_file, project, activity, time):
134 activity = find_last_activity(db_file, time)
136 project = find_last_project(db_file, time)
137 con, cur = session(db_file)
138 values = (time, project_id(db_file, project), activity_id(db_file, activity))
139 sql = "update tasks set end=? where project=? and activity=?"
140 cur.execute(sql, values)
142 cur.execute("select * from tasks")
147 def begin(db_file, project, activity, time):
148 last_project = find_last_project(db_file, time)
149 last_activity = find_last_activity(db_file, time)
151 activity = DEF_ACTIVITY
153 project = last_project
154 if activity != last_activity or project != last_project:
155 end(db_file, project, last_activity, time)
156 con, cur = session(db_file)
157 values = (time, None, project_id(db_file, project),
158 activity_id(db_file, activity), None)
159 sql = "insert into tasks values(?, ?, ?, ?, ?)"
160 cur.execute(sql, values)
162 cur.execute("select * from tasks")