Working on transmitting visits, intentions, requests
This commit is contained in:
parent
de5d4de763
commit
0e7a74a28b
BIN
doc/specification/dummies/map.png
Normal file
BIN
doc/specification/dummies/map.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 131 KiB |
BIN
doc/specification/dummies/map.xcf
Normal file
BIN
doc/specification/dummies/map.xcf
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@
|
|||
:description "Canvassing tool for referenda"
|
||||
:url "https://github.com/simon-brooke/youyesyet"
|
||||
|
||||
:dependencies [[adl-support "0.1.0-SNAPSHOT"]
|
||||
:dependencies [[adl-support "0.1.4-SNAPSHOT"]
|
||||
[bouncer "1.0.1"]
|
||||
[ch.qos.logback/logback-classic "1.2.2"]
|
||||
[clj-oauth "1.5.5"]
|
||||
|
|
|
@ -60,3 +60,10 @@ and request.issue_id = expertise.issue_id
|
|||
and expertise.canvasser_id = :expert
|
||||
ORDER BY visits.date desc
|
||||
|
||||
--:name get-last-visit-by-canvasser :? :1
|
||||
--:doc returns the most recent visit record of the canvasser with the specified `:id`
|
||||
SELECT * FROM visits
|
||||
WHERE canvasser_id = :id
|
||||
ORDER BY date desc
|
||||
LIMIT 1
|
||||
|
||||
|
|
|
@ -85,9 +85,62 @@
|
|||
(in-get-local-data here)))
|
||||
|
||||
|
||||
(defn last-visit-by-current-user
|
||||
"Return the most recent visit by the currently logged in user"
|
||||
[request]
|
||||
(db/get-last-visit-by-canvasser
|
||||
db/*db*
|
||||
(-> request :session :user)))
|
||||
|
||||
|
||||
(defn current-visit-id
|
||||
"Return the id of the current visit by the current user, creating it if necessary."
|
||||
[request]
|
||||
(let [last-visit (last-visit-by-current-user request)]
|
||||
(if
|
||||
(=
|
||||
(:address_id (massage-params request))
|
||||
(:address_id last-visit))
|
||||
(:id last-visit)
|
||||
(db/create-visit! db/*db* params))))
|
||||
|
||||
|
||||
(defn create-intention-and-visit!
|
||||
"Doing visit creation logic server side; request params are expected to
|
||||
include an `option`, an `elector_id` and an `address_id`, or an `option` and
|
||||
a `location`. If no `address_id` is provided, we simply create an
|
||||
`intention` record from the `option` and the `locality`; if a `address_id`
|
||||
is provided, we need to check whether the last `visit` by the current `user`
|
||||
was to the same address, if so use that as the `visit_id`, if not create
|
||||
a new `visit` record."
|
||||
[request]
|
||||
(let [params (massage-params request)]
|
||||
(if-let [address-id (-> params :address_id)]
|
||||
(db/create-intention!
|
||||
db/*db*
|
||||
(assoc
|
||||
params :visit_id (current-visit-id request))
|
||||
(db/create-intention! db/*db* params)))))
|
||||
|
||||
|
||||
(defn create-request-and-visit!
|
||||
"Doing visit creation logic server side; request params are expected to
|
||||
include an `issue`, an `elector_id` and an `address_id` (and also a
|
||||
`method_id` and `method_detail`). Ye cannae reasonably create a request
|
||||
without having recorded the visit, so let's not muck about."
|
||||
(let [params (massage-params request)]
|
||||
(db/create-followuprequest!
|
||||
db/*db*
|
||||
(assoc
|
||||
params
|
||||
:visit-id (current-visit-id request)))))
|
||||
|
||||
|
||||
(defroutes rest-routes
|
||||
(GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
|
||||
;; (GET "/rest/get-issues" request (route/restricted (get-issues request)))
|
||||
;; (GET "/rest/set-intention" request (route/restricted (set-intention request)))
|
||||
;; (GET "/rest/request-followup" request (route/restricted (request-followup request))))
|
||||
)
|
||||
(GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
|
||||
(GET "/rest/create-intention" request (route/restricted (create-intention-and-visit! request)))
|
||||
(GET "/rest/create-request" request (route/restricted (create-request-and-visit! request)))
|
||||
;; (GET "/rest/get-issues" request (route/restricted (get-issues request)))
|
||||
;; (GET "/rest/set-intention" request (route/restricted (set-intention request)))
|
||||
;; (GET "/rest/request-followup" request (route/restricted (request-followup request))))
|
||||
)
|
||||
|
|
|
@ -56,20 +56,33 @@
|
|||
})
|
||||
|
||||
|
||||
(defn add-to-key
|
||||
"Return a copy of db with `x` added to the front of the list of items held
|
||||
against the key `k`"
|
||||
[db k x]
|
||||
(assoc db k (cons x (db k))))
|
||||
|
||||
|
||||
(defn add-to-outqueue
|
||||
[db message]
|
||||
add-to-key db :outqueue message)
|
||||
|
||||
|
||||
(defn add-to-feedback
|
||||
"Add the value of `k` in `feedback-messages` to the feedback in this `db`."
|
||||
"Add `x` to the feedback in this `db`."
|
||||
[db k]
|
||||
(assoc db :feedback (cons k (:feedback db))))
|
||||
(add-to-key db :feedback x))
|
||||
|
||||
|
||||
(defn remove-from-key
|
||||
[db k x]
|
||||
(assoc db k (remove #(= x %) (db k))))
|
||||
|
||||
|
||||
(defn remove-from-feedback
|
||||
"Remove the value of `k` in `feedback-messages` to the feedback in this `db`."
|
||||
[db k]
|
||||
(assoc db
|
||||
:feedback
|
||||
(remove
|
||||
#(= % k)
|
||||
(:feedback db))))
|
||||
"Remove `x` from the feedback in this `db`."
|
||||
[db x]
|
||||
(remove-from-key db :feedback x))
|
||||
|
||||
|
||||
(defn coerce-to-number [v]
|
||||
|
@ -317,26 +330,26 @@
|
|||
(:outqueue db))}))))))
|
||||
|
||||
|
||||
(reg-event-db
|
||||
(reg-event-db
|
||||
:send-request
|
||||
(fn [db [_ _]]
|
||||
(if (and (:elector db) (:issue db) (:telephone db))
|
||||
(do
|
||||
(js/console.log "Sending request")
|
||||
(assoc (add-to-feedback db :send-request)
|
||||
:outqueue (cons
|
||||
{:elector-id (:id (:elector db))
|
||||
:issue (:issue db)
|
||||
:action :add-request} (:outqueue db))))
|
||||
(-> db
|
||||
#(add-to-outqueue % {:elector-id (:id (:elector db))
|
||||
:issue (:issue db)
|
||||
:action :add-request})
|
||||
#(add-to-feedback % :send-request)))
|
||||
(assoc db :error "Please supply a telephone number to call"))))
|
||||
|
||||
|
||||
(reg-event-db
|
||||
:set-active-page
|
||||
(fn [db [_ k]]
|
||||
(if k
|
||||
(assoc (clear-messages db) :page k)
|
||||
db)))
|
||||
:set-active-page
|
||||
(fn [db [_ k]]
|
||||
(if k
|
||||
(assoc (clear-messages db) :page k)
|
||||
db)))
|
||||
|
||||
|
||||
(reg-event-db
|
||||
|
|
|
@ -704,6 +704,11 @@ version="0.1.1">
|
|||
column="method_id" entity="followupmethods" farkey="id">
|
||||
<prompt prompt="method_id" locale="en_GB.UTF-8"/>
|
||||
</property>
|
||||
<property required="true" type="string" name="method-detail">
|
||||
<documentation>
|
||||
Phone number or email address for followup.
|
||||
</documentation>
|
||||
</property>
|
||||
<list properties="listed" name="Followuprequests">
|
||||
<field property="elector_id">
|
||||
<prompt prompt="elector" locale="en_GB.UTF-8"/>
|
||||
|
|
Loading…
Reference in a new issue