Working on transmitting visits, intentions, requests

This commit is contained in:
Simon Brooke 2018-07-24 17:52:23 +01:00
parent de5d4de763
commit 0e7a74a28b
7 changed files with 104 additions and 26 deletions

View file

@ -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))))
)

View file

@ -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