Use a current table + trigger
This commit is contained in:
22
action.py
22
action.py
@@ -14,7 +14,6 @@ class TypeAction(Enum):
|
||||
UPDATE = 'updated'
|
||||
MOVE = 'moved'
|
||||
DELETE = 'deleted'
|
||||
ACTIVE = 'activated'
|
||||
|
||||
class Action:
|
||||
def __init__(self, row):
|
||||
@@ -42,8 +41,6 @@ def handle_action(args, last_action, conn):
|
||||
|
||||
if taction == 'init':
|
||||
print('{} ({}): {}'.format(formated_date, username, message))
|
||||
elif taction == TypeAction.ACTIVE.value:
|
||||
print('{} ({}): {}'.format(formated_date, username, message))
|
||||
else:
|
||||
object_type = ''
|
||||
id_object = ''
|
||||
@@ -76,11 +73,26 @@ def record_action(cursor, action_type, message, project_id = '', task_id = None,
|
||||
|
||||
logging.debug('created action')
|
||||
|
||||
def read_last_action(conn):
|
||||
def set_active(cursor, project_id = None, task_id = None, note_id = None):
|
||||
query = 'UPDATE current SET {} = ? WHERE id = 0'
|
||||
|
||||
if project_id:
|
||||
query = query.format('project_id')
|
||||
obj_id = project_id
|
||||
elif task_id:
|
||||
query = query.format('task_id')
|
||||
obj_id = task_id
|
||||
elif note_id:
|
||||
query = query.format('note_id')
|
||||
obj_id = note_id
|
||||
|
||||
cursor.execute(query, (obj_id,))
|
||||
|
||||
def read_current(conn):
|
||||
logging.info('> last_action')
|
||||
# query = 'SELECT * FROM action WHERE id = (SELECT MAX(id) FROM action'
|
||||
# query = 'SELECT project_id, task_id, note_id FROM action'
|
||||
query = 'SELECT project_id, task_id, note_id FROM action ORDER BY id DESC LIMIT 1;'
|
||||
query = 'SELECT project_id, task_id, note_id FROM current;'
|
||||
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(query)
|
||||
|
||||
@@ -61,4 +61,46 @@ CREATE TABLE action (
|
||||
CREATE TRIGGER action_insert_created_at AFTER INSERT ON action
|
||||
BEGIN
|
||||
UPDATE action SET created_at = strftime('%Y-%m-%d %H:%M:%S.%s', 'now', 'localtime') WHERE id = new.id;
|
||||
END
|
||||
END;
|
||||
|
||||
CREATE TABLE current (
|
||||
id integer,
|
||||
project_id integer,
|
||||
task_id integer,
|
||||
note_id integer
|
||||
);
|
||||
|
||||
INSERT INTO current VALUES (0,0,0,0);
|
||||
-- Trigger after insert for current values
|
||||
CREATE TRIGGER current_project AFTER INSERT ON project
|
||||
BEGIN
|
||||
UPDATE current SET project_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER current_task AFTER INSERT ON task
|
||||
BEGIN
|
||||
UPDATE current SET task_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER current_note AFTER INSERT ON note
|
||||
BEGIN
|
||||
UPDATE current SET note_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
-- Trigger after update for current values
|
||||
CREATE TRIGGER update_project AFTER UPDATE ON project
|
||||
BEGIN
|
||||
UPDATE current SET project_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER update_task AFTER UPDATE ON task
|
||||
BEGIN
|
||||
UPDATE current SET task_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
CREATE TRIGGER update_note AFTER UPDATE ON note
|
||||
BEGIN
|
||||
UPDATE current SET note_id = new.id WHERE id = 0;
|
||||
END;
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import logging
|
||||
import sys
|
||||
|
||||
from action import record_action
|
||||
from action import set_active
|
||||
from action import TypeAction
|
||||
|
||||
from args import get_string_arg
|
||||
@@ -195,7 +196,7 @@ def view_project_set_active(project_id, last_action, conn):
|
||||
message = date + time + name
|
||||
print(' {} {:d}: ({}) [{}] [{}] {} ({} tasks)'.format('*' if last_action.task_id == row[0] else ' ',
|
||||
task_id, username, status, priority, message, nb_note))
|
||||
record_action(cursor, TypeAction.ACTIVE, 'set active project ' + str(project_id),
|
||||
project_id, last_action.task_id, last_action.note_id)
|
||||
|
||||
set_active(cursor, project_id=project_id)
|
||||
|
||||
# TODO Add a -v option to see notes?
|
||||
4
task.py
4
task.py
@@ -9,6 +9,7 @@ import sys
|
||||
|
||||
from action import record_action
|
||||
from action import TypeAction
|
||||
from action import set_active
|
||||
from args import get_string_arg
|
||||
from args import arg_number
|
||||
|
||||
@@ -263,8 +264,7 @@ def view_task_set_active(task_id, last_action, conn):
|
||||
note_id, username, message = row
|
||||
print(' {} {:d}: ({}) {}'.format('*' if last_action.note_id == row[0] else ' ',
|
||||
note_id, username, message))
|
||||
record_action(cursor, TypeAction.ACTIVE, 'set active task ' + str(task_id),
|
||||
last_action.project_id, last_action.task_id, last_action.note_id)
|
||||
set_active(cursor, task_id=task_id)
|
||||
|
||||
# $ pit t 11
|
||||
# * 11: (budd) a task (project: 1, status: in progress, priority: high, date: Apr 26, 2018, time: 5:00, 2 notes)
|
||||
|
||||
Reference in New Issue
Block a user