Considerable progress on the issue experts workflow, not perfect yet.
This commit is contained in:
parent
3df314ecfc
commit
54ad57349c
4 changed files with 100 additions and 14 deletions
|
|
@ -6,6 +6,7 @@
|
|||
[clojure.string :as s]
|
||||
[clojure.tools.logging :as log]
|
||||
[clojure.walk :refer [keywordize-keys]]
|
||||
[java-time :as jt]
|
||||
[markdown.core :refer [md-to-html-string]]
|
||||
[noir.util.route :as route]
|
||||
[ring.util.http-response :as response]
|
||||
|
|
@ -39,6 +40,11 @@
|
|||
;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;; TODO: Must lock record to expert when taking it from the list, unlock after
|
||||
;;; thirty minutes or when the action is posted, whichever is sooner. If
|
||||
;;; an expert opens a locked record, it must show up as locked. Also, expert should
|
||||
;;; not be able to open a closed request.
|
||||
|
||||
(defn list-page [request]
|
||||
(layout/render
|
||||
"issue-expert/list.html"
|
||||
|
|
@ -48,10 +54,10 @@
|
|||
:records (db/list-open-requests db/*db* {:expert (:id user)})})))
|
||||
|
||||
|
||||
(defn followup-request-page [request]
|
||||
(defn get-followup-request-page [request]
|
||||
(let
|
||||
[params (support/massage-params request)
|
||||
id (:id (keywordize-keys params))
|
||||
id (:id params)
|
||||
record (db/get-followuprequest db/*db* {:id id})
|
||||
elector (if
|
||||
record
|
||||
|
|
@ -65,15 +71,11 @@
|
|||
db/*db* {:id (:visit_id record)})))]
|
||||
(layout/render
|
||||
"issue-expert/request.html"
|
||||
{:title (str "Request from " (:name elector) " at " (:date visit))
|
||||
:user (:user (:session request))
|
||||
:visit visit
|
||||
:actions (map
|
||||
{:actions (map
|
||||
;; HTML-ise the notes in each action record
|
||||
#(merge % {:notes (md-to-html-string (:notes %))})
|
||||
(db/list-followupactions-by-followuprequest
|
||||
db/*db* {:id id}))
|
||||
:record record
|
||||
:elector elector
|
||||
:issue (let
|
||||
[raw-issue (if
|
||||
|
|
@ -82,13 +84,48 @@
|
|||
(if raw-issue
|
||||
(merge
|
||||
raw-issue
|
||||
{:brief (md-to-html-string (:brief raw-issue))})))})))
|
||||
{:brief (md-to-html-string (:brief raw-issue))})))
|
||||
:options (db/list-options db/*db* params)
|
||||
:record record
|
||||
:title (str "Request from " (:name elector) " at " (:date visit))
|
||||
:user (:user (:session request))
|
||||
:visit visit})))
|
||||
|
||||
|
||||
(defn post-followup-action
|
||||
"From this `request`, create a `followupaction` record, and, if an
|
||||
`option_id` is present in the params, an `intention` record; show
|
||||
the request list on success, to the request form on failure."
|
||||
[request]
|
||||
(support/do-or-log-error
|
||||
(let
|
||||
[params (support/massage-params request)
|
||||
locality (:locality (db/get-locality-for-visit db/*db* {:id (:visit_id params)}))]
|
||||
(log/debug "post-followup-request-page with request " request)
|
||||
(db/create-followupaction!
|
||||
db/*db*
|
||||
(assoc
|
||||
params
|
||||
:actor (:id (:user (:session request)))
|
||||
:date (jt/to-sql-timestamp (jt/local-date-time))
|
||||
:closed (= (:closed params) "on")))
|
||||
(if-not
|
||||
(zero? (count (:option_id params)))
|
||||
(if
|
||||
(zero? (count (:signature (db/get-elector db/*db* {:id (:elector_id params)}))))
|
||||
;; the elector has NOT recorded GDPR consent: explicitly bind elector_id to nil
|
||||
(db/create-intention! db/*db* (assoc params :locality locality :elector_id nil))
|
||||
;; else the elector HAS recorded GDPR consent
|
||||
(db/create-intention! db/*db* (assoc params :locality locality))))
|
||||
(list-page request))
|
||||
:error-return
|
||||
(get-followup-request-page request)))
|
||||
|
||||
|
||||
(defroutes issue-expert-routes
|
||||
(GET "/issue-expert/list" request
|
||||
(route/restricted (list-page request)))
|
||||
(GET "/issue-expert/followup-request" request
|
||||
(route/restricted (followup-request-page request)))
|
||||
(POST "/issue-expert/followup-request" request
|
||||
(route/restricted (followup-request-page request))))
|
||||
(route/restricted (get-followup-request-page request)))
|
||||
(POST "/issue-expert/followup-action" request
|
||||
(route/restricted (post-followup-action request))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue