aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-08-18 23:19:25 +0200
committerGravatar Tom Willemse2013-08-18 23:19:25 +0200
commitbb2f75ec1ccb662e1a71a8e4f23fe3dcfbf8bafe (patch)
treea6682d8490044d6f9d2db1c613654e2ccdc693bc
parent321d6b199fffd863517731cf27b4f11e0d6bcb9b (diff)
downloadscrumli-master.tar.gz
scrumli-master.zip
Really fix setting priority for tasksHEADmaster
When selecting the task to replace the task with based on priority, be sure to limit the options to tasks with the same story id.
-rw-r--r--data.lisp37
-rw-r--r--scrumli.lisp9
2 files changed, 26 insertions, 20 deletions
diff --git a/data.lisp b/data.lisp
index 03b9dcb..7d7b3a2 100644
--- a/data.lisp
+++ b/data.lisp
@@ -98,30 +98,37 @@
(defun story-set-state (type id state)
(execute (:update type :set 'state state :where (:= 'id id))))
-(defun story-change-priority (type id dir)
- (let* ((current-priority (query (:select 'priority :from type
+(defun story-change-priority (id dir)
+ (let* ((current-priority (query (:select 'priority :from 'story
:where (:= 'id id))
:single))
(next-priority (funcall (ecase dir (:up #'-) (:down #'+))
current-priority 1))
(max-priority
- (case type
- ('story (query (:select (:max 'priority) :from type)
- :single))
- ('task
- (query (:select
- (:max 'priority) :from type
- :where (:= 'story-id
- (:select 'story-id
- :from 'task
- :where (:= 'id id))))
- :single)))))
- (execute (:update type :set 'priority current-priority
+ (query (:select (:max 'priority) :from 'story)
+ :single)))
+ (execute (:update 'story :set 'priority current-priority
:where (:= 'priority next-priority)))
- (execute (:update type :set
+ (execute (:update 'story :set
'priority (max 1 (min next-priority max-priority))
:where (:= 'id id)))))
+(defun task-change-priority (id dir)
+ (destructuring-bind (priority story-id)
+ (query (:select 'priority 'story-id :from 'task
+ :where (:= 'id id)) :list)
+ (let* ((next-priority
+ (funcall (ecase dir (:up #'-) (:down #'+)) priority 1))
+ (max-priority
+ (query (:select (:max 'priority) :from 'task
+ :where (:= 'story-id story-id)) :single)))
+ (execute (:update 'task :set 'priority priority
+ :where (:and (:= 'priority next-priority)
+ (:= 'story-id story-id))))
+ (execute (:update 'task :set
+ 'priority (max 1 (min next-priority max-priority))
+ :where (:= 'id id))))))
+
(defun set-assignee (type id assignee)
(execute (:update type :set 'assignee assignee
:where (:= 'id id))))
diff --git a/scrumli.lisp b/scrumli.lisp
index 18fce1e..a3c5871 100644
--- a/scrumli.lisp
+++ b/scrumli.lisp
@@ -208,17 +208,16 @@
(if (logged-in-p)
(let ((id (getf params :|id|))
(dir (getf params :dir)))
- (story-change-priority
- 'story id (intern (string-upcase dir) :keyword))
+ (story-change-priority id (intern (string-upcase dir) :keyword))
(list 200 '(:content-type "text/json")
(encode-json-to-string '((status . "ok")))))
'(403)))
(defun task-move-json/post (params)
(if (logged-in-p)
- (let ((id (getf params :|id|)))
- (story-change-priority
- 'task id (intern (string-upcase (getf params :dir)) :keyword))
+ (let ((id (getf params :|id|))
+ (dir (getf params :dir)))
+ (task-change-priority id (intern (string-upcase dir) :keyword))
(list 200 '(:content-type "text/json")
(encode-json-to-string '((status . "ok")))))
'(403)))