More detail work. An awful lot is working now.

This commit is contained in:
Simon Brooke 2018-06-29 23:33:23 +01:00
parent 635d1830d3
commit 78365f8c8b
12 changed files with 178 additions and 144 deletions

View file

@ -1,7 +1,7 @@
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- File queries.sql -- File queries.sql
-- --
-- autogenerated by adl.to-hugsql-queries at 2018-06-29T16:36:18.648Z -- autogenerated by adl.to-hugsql-queries at 2018-06-29T22:21:53.869Z
-- --
-- See [Application Description -- See [Application Description
-- Language](https://github.com/simon-brooke/adl). -- Language](https://github.com/simon-brooke/adl).
@ -392,7 +392,7 @@ ORDER BY visits.address_id,
-- :name list-addresses :? :* -- :name list-addresses :? :*
-- :doc lists all existing address records -- :doc lists all existing address records
SELECT * FROM lv_addresses SELECT DISTINCT * FROM lv_addresses
ORDER BY lv_addresses.address, ORDER BY lv_addresses.address,
lv_addresses.postcode, lv_addresses.postcode,
lv_addresses.id lv_addresses.id
@ -411,13 +411,13 @@ ORDER BY lv_addresses.address,
-- :name list-authorities :? :* -- :name list-authorities :? :*
-- :doc lists all existing authority records -- :doc lists all existing authority records
SELECT * FROM lv_authorities SELECT DISTINCT * FROM lv_authorities
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
-- :name list-canvassers :? :* -- :name list-canvassers :? :*
-- :doc lists all existing canvasser records -- :doc lists all existing canvasser records
SELECT * FROM lv_canvassers SELECT DISTINCT * FROM lv_canvassers
ORDER BY lv_canvassers.username, ORDER BY lv_canvassers.username,
lv_canvassers.fullname, lv_canvassers.fullname,
lv_canvassers.email, lv_canvassers.email,
@ -471,7 +471,7 @@ ORDER BY canvassers.username,
-- :name list-districts :? :* -- :name list-districts :? :*
-- :doc lists all existing district records -- :doc lists all existing district records
SELECT * FROM lv_districts SELECT DISTINCT * FROM lv_districts
ORDER BY lv_districts.name, ORDER BY lv_districts.name,
lv_districts.id lv_districts.id
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -479,7 +479,7 @@ ORDER BY lv_districts.name,
-- :name list-dwellings :? :* -- :name list-dwellings :? :*
-- :doc lists all existing dwelling records -- :doc lists all existing dwelling records
SELECT * FROM lv_dwellings SELECT DISTINCT * FROM lv_dwellings
ORDER BY lv_dwellings.address_id, ORDER BY lv_dwellings.address_id,
lv_dwellings.sub_address, lv_dwellings.sub_address,
lv_dwellings.id lv_dwellings.id
@ -498,7 +498,7 @@ ORDER BY lv_dwellings.address_id,
-- :name list-electors :? :* -- :name list-electors :? :*
-- :doc lists all existing elector records -- :doc lists all existing elector records
SELECT * FROM lv_electors SELECT DISTINCT * FROM lv_electors
ORDER BY lv_electors.name, ORDER BY lv_electors.name,
lv_electors.phone, lv_electors.phone,
lv_electors.email, lv_electors.email,
@ -533,7 +533,7 @@ ORDER BY lv_electors.name,
-- :name list-followupactions :? :* -- :name list-followupactions :? :*
-- :doc lists all existing followupaction records -- :doc lists all existing followupaction records
SELECT * FROM lv_followupactions SELECT DISTINCT * FROM lv_followupactions
ORDER BY lv_followupactions.date, ORDER BY lv_followupactions.date,
lv_followupactions.notes, lv_followupactions.notes,
lv_followupactions.id lv_followupactions.id
@ -562,13 +562,13 @@ ORDER BY lv_followupactions.date,
-- :name list-followupmethods :? :* -- :name list-followupmethods :? :*
-- :doc lists all existing followupmethod records -- :doc lists all existing followupmethod records
SELECT * FROM lv_followupmethods SELECT DISTINCT * FROM lv_followupmethods
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
-- :name list-followuprequests :? :* -- :name list-followuprequests :? :*
-- :doc lists all existing followuprequest records -- :doc lists all existing followuprequest records
SELECT * FROM lv_followuprequests SELECT DISTINCT * FROM lv_followuprequests
ORDER BY lv_followuprequests.elector_id, ORDER BY lv_followuprequests.elector_id,
lv_followuprequests.visit_id, lv_followuprequests.visit_id,
lv_followuprequests.issue_id, lv_followuprequests.issue_id,
@ -622,13 +622,13 @@ ORDER BY lv_followuprequests.elector_id,
-- :name list-genders :? :* -- :name list-genders :? :*
-- :doc lists all existing gender records -- :doc lists all existing gender records
SELECT * FROM lv_genders SELECT DISTINCT * FROM lv_genders
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
-- :name list-intentions :? :* -- :name list-intentions :? :*
-- :doc lists all existing intention records -- :doc lists all existing intention records
SELECT * FROM lv_intentions SELECT DISTINCT * FROM lv_intentions
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
@ -655,19 +655,19 @@ WHERE lv_intentions.Id = intentions.Id
-- :name list-issues :? :* -- :name list-issues :? :*
-- :doc lists all existing issue records -- :doc lists all existing issue records
SELECT * FROM lv_issues SELECT DISTINCT * FROM lv_issues
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
-- :name list-options :? :* -- :name list-options :? :*
-- :doc lists all existing option records -- :doc lists all existing option records
SELECT * FROM lv_options SELECT DISTINCT * FROM lv_options
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
--~ (if (:limit params) "LIMIT :limit" "LIMIT 100") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100")
-- :name list-roles :? :* -- :name list-roles :? :*
-- :doc lists all existing role records -- :doc lists all existing role records
SELECT * FROM lv_roles SELECT DISTINCT * FROM lv_roles
ORDER BY lv_roles.name, ORDER BY lv_roles.name,
lv_roles.id lv_roles.id
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -684,7 +684,7 @@ ORDER BY roles.name,
-- :name list-teams :? :* -- :name list-teams :? :*
-- :doc lists all existing team records -- :doc lists all existing team records
SELECT * FROM lv_teams SELECT DISTINCT * FROM lv_teams
ORDER BY lv_teams.name, ORDER BY lv_teams.name,
lv_teams.id lv_teams.id
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -710,7 +710,7 @@ ORDER BY lv_teams.name,
-- :name list-visits :? :* -- :name list-visits :? :*
-- :doc lists all existing visit records -- :doc lists all existing visit records
SELECT * FROM lv_visits SELECT DISTINCT * FROM lv_visits
ORDER BY lv_visits.address_id, ORDER BY lv_visits.address_id,
lv_visits.date, lv_visits.date,
lv_visits.id lv_visits.id
@ -739,7 +739,7 @@ ORDER BY lv_visits.address_id,
-- :name search-strings-address :? :1 -- :name search-strings-address :? :1
-- :doc selects existing address records having any string field matching the parameter of the same name by substring match -- :doc selects existing address records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_addresses SELECT DISTINCT * FROM lv_addresses
WHERE false WHERE false
--~ (if (:address params) "OR address LIKE '%:address%'") --~ (if (:address params) "OR address LIKE '%:address%'")
--~ (if (:postcode params) "OR postcode LIKE '%:postcode%'") --~ (if (:postcode params) "OR postcode LIKE '%:postcode%'")
@ -757,7 +757,7 @@ ORDER BY lv_addresses.address,
-- :name search-strings-authority :? :1 -- :name search-strings-authority :? :1
-- :doc selects existing authority records having any string field matching the parameter of the same name by substring match -- :doc selects existing authority records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_authorities SELECT DISTINCT * FROM lv_authorities
WHERE false WHERE false
--~ (if (:request-token-uri params) "OR request_token_uri LIKE '%:request-token-uri%'") --~ (if (:request-token-uri params) "OR request_token_uri LIKE '%:request-token-uri%'")
--~ (if (:access-token-uri params) "OR access_token_uri LIKE '%:access-token-uri%'") --~ (if (:access-token-uri params) "OR access_token_uri LIKE '%:access-token-uri%'")
@ -770,7 +770,7 @@ WHERE false
-- :name search-strings-canvasser :? :1 -- :name search-strings-canvasser :? :1
-- :doc selects existing canvasser records having any string field matching the parameter of the same name by substring match -- :doc selects existing canvasser records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_canvassers SELECT DISTINCT * FROM lv_canvassers
WHERE false WHERE false
--~ (if (:username params) "OR username LIKE '%:username%'") --~ (if (:username params) "OR username LIKE '%:username%'")
--~ (if (:fullname params) "OR fullname LIKE '%:fullname%'") --~ (if (:fullname params) "OR fullname LIKE '%:fullname%'")
@ -778,7 +778,7 @@ WHERE false
--~ (if (:address_id params) "OR address_id = :address_id") --~ (if (:address_id params) "OR address_id = :address_id")
--~ (if (:phone params) "OR phone LIKE '%:phone%'") --~ (if (:phone params) "OR phone LIKE '%:phone%'")
--~ (if (:email params) "OR email LIKE '%:email%'") --~ (if (:email params) "OR email LIKE '%:email%'")
--~ (if (:authority_id params) "OR authority_id = :authority_id") --~ (if (:authority_id params) "OR authority_id LIKE '%:authority_id%'")
--~ (if (:authorised params) "OR authorised = :authorised") --~ (if (:authorised params) "OR authorised = :authorised")
--~ (if (:id params) "OR id = :id") --~ (if (:id params) "OR id = :id")
ORDER BY lv_canvassers.username, ORDER BY lv_canvassers.username,
@ -790,7 +790,7 @@ ORDER BY lv_canvassers.username,
-- :name search-strings-district :? :1 -- :name search-strings-district :? :1
-- :doc selects existing district records having any string field matching the parameter of the same name by substring match -- :doc selects existing district records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_districts SELECT DISTINCT * FROM lv_districts
WHERE false WHERE false
--~ (if (:name params) "OR name LIKE '%:name%'") --~ (if (:name params) "OR name LIKE '%:name%'")
--~ (if (:id params) "OR id = :id") --~ (if (:id params) "OR id = :id")
@ -801,7 +801,7 @@ ORDER BY lv_districts.name,
-- :name search-strings-dwelling :? :1 -- :name search-strings-dwelling :? :1
-- :doc selects existing dwelling records having any string field matching the parameter of the same name by substring match -- :doc selects existing dwelling records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_dwellings SELECT DISTINCT * FROM lv_dwellings
WHERE false WHERE false
--~ (if (:address_id params) "OR address_id = :address_id") --~ (if (:address_id params) "OR address_id = :address_id")
--~ (if (:sub-address params) "OR sub_address LIKE '%:sub-address%'") --~ (if (:sub-address params) "OR sub_address LIKE '%:sub-address%'")
@ -814,13 +814,13 @@ ORDER BY lv_dwellings.address_id,
-- :name search-strings-elector :? :1 -- :name search-strings-elector :? :1
-- :doc selects existing elector records having any string field matching the parameter of the same name by substring match -- :doc selects existing elector records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_electors SELECT DISTINCT * FROM lv_electors
WHERE false WHERE false
--~ (if (:name params) "OR name LIKE '%:name%'") --~ (if (:name params) "OR name LIKE '%:name%'")
--~ (if (:dwelling_id params) "OR dwelling_id = :dwelling_id") --~ (if (:dwelling_id params) "OR dwelling_id = :dwelling_id")
--~ (if (:phone params) "OR phone LIKE '%:phone%'") --~ (if (:phone params) "OR phone LIKE '%:phone%'")
--~ (if (:email params) "OR email LIKE '%:email%'") --~ (if (:email params) "OR email LIKE '%:email%'")
--~ (if (:gender params) "OR gender = :gender") --~ (if (:gender params) "OR gender LIKE '%:gender%'")
--~ (if (:id params) "OR id = :id") --~ (if (:id params) "OR id = :id")
ORDER BY lv_electors.name, ORDER BY lv_electors.name,
lv_electors.phone, lv_electors.phone,
@ -832,7 +832,7 @@ ORDER BY lv_electors.name,
-- :name search-strings-followupaction :? :1 -- :name search-strings-followupaction :? :1
-- :doc selects existing followupaction records having any string field matching the parameter of the same name by substring match -- :doc selects existing followupaction records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_followupactions SELECT DISTINCT * FROM lv_followupactions
WHERE false WHERE false
--~ (if (:request_id params) "OR request_id = :request_id") --~ (if (:request_id params) "OR request_id = :request_id")
--~ (if (:actor params) "OR actor = :actor") --~ (if (:actor params) "OR actor = :actor")
@ -848,7 +848,7 @@ ORDER BY lv_followupactions.date,
-- :name search-strings-followupmethod :? :1 -- :name search-strings-followupmethod :? :1
-- :doc selects existing followupmethod records having any string field matching the parameter of the same name by substring match -- :doc selects existing followupmethod records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_followupmethods SELECT DISTINCT * FROM lv_followupmethods
WHERE false WHERE false
--~ (if (:id params) "OR id LIKE '%:id%'") --~ (if (:id params) "OR id LIKE '%:id%'")
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -856,12 +856,12 @@ WHERE false
-- :name search-strings-followuprequest :? :1 -- :name search-strings-followuprequest :? :1
-- :doc selects existing followuprequest records having any string field matching the parameter of the same name by substring match -- :doc selects existing followuprequest records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_followuprequests SELECT DISTINCT * FROM lv_followuprequests
WHERE false WHERE false
--~ (if (:elector_id params) "OR elector_id = :elector_id") --~ (if (:elector_id params) "OR elector_id = :elector_id")
--~ (if (:visit_id params) "OR visit_id = :visit_id") --~ (if (:visit_id params) "OR visit_id = :visit_id")
--~ (if (:issue_id params) "OR issue_id = :issue_id") --~ (if (:issue_id params) "OR issue_id LIKE '%:issue_id%'")
--~ (if (:method_id params) "OR method_id = :method_id") --~ (if (:method_id params) "OR method_id LIKE '%:method_id%'")
--~ (if (:id params) "OR id = :id") --~ (if (:id params) "OR id = :id")
ORDER BY lv_followuprequests.elector_id, ORDER BY lv_followuprequests.elector_id,
lv_followuprequests.visit_id, lv_followuprequests.visit_id,
@ -872,7 +872,7 @@ ORDER BY lv_followuprequests.elector_id,
-- :name search-strings-gender :? :1 -- :name search-strings-gender :? :1
-- :doc selects existing gender records having any string field matching the parameter of the same name by substring match -- :doc selects existing gender records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_genders SELECT DISTINCT * FROM lv_genders
WHERE false WHERE false
--~ (if (:id params) "OR id LIKE '%:id%'") --~ (if (:id params) "OR id LIKE '%:id%'")
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -880,11 +880,11 @@ WHERE false
-- :name search-strings-intention :? :1 -- :name search-strings-intention :? :1
-- :doc selects existing intention records having any string field matching the parameter of the same name by substring match -- :doc selects existing intention records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_intentions SELECT DISTINCT * FROM lv_intentions
WHERE false WHERE false
--~ (if (:visit_id params) "OR visit_id = :visit_id") --~ (if (:visit_id params) "OR visit_id = :visit_id")
--~ (if (:elector_id params) "OR elector_id = :elector_id") --~ (if (:elector_id params) "OR elector_id = :elector_id")
--~ (if (:option_id params) "OR option_id = :option_id") --~ (if (:option_id params) "OR option_id LIKE '%:option_id%'")
--~ (if (:locality params) "OR locality = :locality") --~ (if (:locality params) "OR locality = :locality")
--~ (if (:Id params) "OR Id = :Id") --~ (if (:Id params) "OR Id = :Id")
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -892,7 +892,7 @@ WHERE false
-- :name search-strings-issue :? :1 -- :name search-strings-issue :? :1
-- :doc selects existing issue records having any string field matching the parameter of the same name by substring match -- :doc selects existing issue records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_issues SELECT DISTINCT * FROM lv_issues
WHERE false WHERE false
--~ (if (:url params) "OR url LIKE '%:url%'") --~ (if (:url params) "OR url LIKE '%:url%'")
--~ (if (:current params) "OR current = :current") --~ (if (:current params) "OR current = :current")
@ -902,7 +902,7 @@ WHERE false
-- :name search-strings-option :? :1 -- :name search-strings-option :? :1
-- :doc selects existing option records having any string field matching the parameter of the same name by substring match -- :doc selects existing option records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_options SELECT DISTINCT * FROM lv_options
WHERE false WHERE false
--~ (if (:id params) "OR id LIKE '%:id%'") --~ (if (:id params) "OR id LIKE '%:id%'")
--~ (if (:offset params) "OFFSET :offset ") --~ (if (:offset params) "OFFSET :offset ")
@ -910,7 +910,7 @@ WHERE false
-- :name search-strings-role :? :1 -- :name search-strings-role :? :1
-- :doc selects existing role records having any string field matching the parameter of the same name by substring match -- :doc selects existing role records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_roles SELECT DISTINCT * FROM lv_roles
WHERE false WHERE false
--~ (if (:name params) "OR name LIKE '%:name%'") --~ (if (:name params) "OR name LIKE '%:name%'")
--~ (if (:id params) "OR id = :id") --~ (if (:id params) "OR id = :id")
@ -921,7 +921,7 @@ ORDER BY lv_roles.name,
-- :name search-strings-team :? :1 -- :name search-strings-team :? :1
-- :doc selects existing team records having any string field matching the parameter of the same name by substring match -- :doc selects existing team records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_teams SELECT DISTINCT * FROM lv_teams
WHERE false WHERE false
--~ (if (:name params) "OR name LIKE '%:name%'") --~ (if (:name params) "OR name LIKE '%:name%'")
--~ (if (:district_id params) "OR district_id = :district_id") --~ (if (:district_id params) "OR district_id = :district_id")
@ -935,7 +935,7 @@ ORDER BY lv_teams.name,
-- :name search-strings-visit :? :1 -- :name search-strings-visit :? :1
-- :doc selects existing visit records having any string field matching the parameter of the same name by substring match -- :doc selects existing visit records having any string field matching the parameter of the same name by substring match
SELECT * FROM lv_visits SELECT DISTINCT * FROM lv_visits
WHERE false WHERE false
--~ (if (:address_id params) "OR address_id = :address_id") --~ (if (:address_id params) "OR address_id = :address_id")
--~ (if (:canvasser_id params) "OR canvasser_id = :canvasser_id") --~ (if (:canvasser_id params) "OR canvasser_id = :canvasser_id")

View file

@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
<!-- File application-index.html generated 2018-06-29T16:36:20.140Z by adl.to-selmer-templates. <!-- File application-index.html generated 2018-06-29T22:21:55.471Z by adl.to-selmer-templates.
See [Application Description Language](https://github.com/simon-brooke/adl).--> See [Application Description Language](https://github.com/simon-brooke/adl).-->
{% block head %} {% block head %}
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
@ -23,23 +23,43 @@ See [Application Description Language](https://github.com/simon-brooke/adl).-->
{% block content %} {% block content %}
<dl class='index'> <dl class='index'>
<dt> <dt>
<a href='list-electors-Electors'> <a href='list-addresses-Addresses'>
Elector Address
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
All electors known to the system; electors are people believed to be entitled to vote in the current campaign. Addresses of all buildings which contain dwellings.
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-genders-Genders'> <a href='list-authorities-Authorities'>
Gender Authority
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
All genders which may be assigned to electors. Authorities which may authenticate canvassers to the system.
</p>
</dd>
<dt>
<a href='list-canvassers-Canvassers'>
Canvasser
</a>
</dt>
<dd>
<p>
Primary users of the system: those actually interviewing electors.
</p>
</dd>
<dt>
<a href='list-districts-Districts'>
District
</a>
</dt>
<dd>
<p>
Electoral districts: TODO: Shape (polygon) information will need to be added, for use in maps.
</p> </p>
</dd> </dd>
<dt> <dt>
@ -58,43 +78,50 @@ All dwellings within addresses in the system; a dwelling is a
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-addresses-Addresses'> <a href='list-electors-Electors'>
Address Elector
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Addresses of all buildings which contain dwellings. All electors known to the system; electors are people believed to be entitled to vote in the current campaign.
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-visits-Visits'> <a href='list-followupactions-Followupactions'>
Visit Followupaction
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
All visits made by canvassers to dwellings in which opinions were recorded. Actions taken on followup requests.
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-authorities-Authorities'> <a href='list-followupmethods-Followupmethods'>
Authority Followupmethod
</a>
</dt>
<dd>
</dd>
<dt>
<a href='list-followuprequests-Followuprequests'>
Followuprequest
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Authorities which may authenticate canvassers to the system. Requests for a followup with an issue expert
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-issues-Issues'> <a href='list-genders-Genders'>
Issue Gender
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Issues believed to be of interest to electors, about which they may have questions. All genders which may be assigned to electors.
</p> </p>
</dd> </dd>
<dt> <dt>
@ -108,23 +135,23 @@ Intentions of electors to vote for options elicited in visits.
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-canvassers-Canvassers'> <a href='list-issues-Issues'>
Canvasser Issue
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Primary users of the system: those actually interviewing electors. Issues believed to be of interest to electors, about which they may have questions.
</p> </p>
</dd> </dd>
<dt> <dt>
<a href='list-followuprequests-Followuprequests'> <a href='list-options-Options'>
Followuprequest Option
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Requests for a followup with an issue expert Options in the election or referendum being canvassed on
</p> </p>
</dd> </dd>
<dt> <dt>
@ -145,42 +172,15 @@ Team
<dd> <dd>
</dd> </dd>
<dt> <dt>
<a href='list-districts-Districts'> <a href='list-visits-Visits'>
District Visit
</a> </a>
</dt> </dt>
<dd> <dd>
<p> <p>
Electoral districts: TODO: Shape (polygon) information will need to be added, for use in maps. All visits made by canvassers to dwellings in which opinions were recorded.
</p> </p>
</dd> </dd>
<dt>
<a href='list-followupactions-Followupactions'>
Followupaction
</a>
</dt>
<dd>
<p>
Actions taken on followup requests.
</p>
</dd>
<dt>
<a href='list-options-Options'>
Option
</a>
</dt>
<dd>
<p>
Options in the election or referendum being canvassed on
</p>
</dd>
<dt>
<a href='list-followupmethods-Followupmethods'>
Followupmethod
</a>
</dt>
<dd>
</dd>
</dl> </dl>
{% endblock %} {% endblock %}

View file

@ -34,6 +34,9 @@
</header> </header>
{% endblock %} {% endblock %}
<div id="main-container" class="container"> <div id="main-container" class="container">
<div id="back-link-container">
<a href="javascript:history.back()" id="back-link">Back</a>
</div>
<div id="big-links"> <div id="big-links">
{% block big-links %} {% block big-links %}
{% endblock %} {% endblock %}
@ -43,9 +46,6 @@
{% endblock %} {% endblock %}
</div> </div>
<br clear="both"/> <br clear="both"/>
<div id="back-link-container">
<a href="javascript:history.back()" id="back-link">Back</a>
</div>
</div> </div>
{% block foot %} {% block foot %}
<footer> <footer>

View file

@ -43,8 +43,6 @@
:start ((or (:init defaults) identity)) :start ((or (:init defaults) identity))
:stop ((or (:stop defaults) identity))) :stop ((or (:stop defaults) identity)))
;;(mount/start db/*db*)
(defn init (defn init
"init will be called once when "init will be called once when
app is deployed as a servlet on app is deployed as a servlet on

View file

@ -2,13 +2,15 @@
:author "Simon Brooke"} :author "Simon Brooke"}
youyesyet.layout youyesyet.layout
(:require [adl-support.tags :as tags] (:require [adl-support.tags :as tags]
[clojure.string :refer [lower-case]]
[clojure.tools.logging :as log]
[markdown.core :refer [md-to-html-string]] [markdown.core :refer [md-to-html-string]]
[noir.session :as session]
[ring.util.http-response :refer [content-type ok]] [ring.util.http-response :refer [content-type ok]]
[ring.util.anti-forgery :refer [anti-forgery-field]] [ring.util.anti-forgery :refer [anti-forgery-field]]
[ring.middleware.anti-forgery :refer [*anti-forgery-token*]] [ring.middleware.anti-forgery :refer [*anti-forgery-token*]]
[selmer.parser :as parser] [selmer.parser :as parser]
[selmer.filters :as filters] [selmer.filters :as filters]
[youyesyet.db.core :as db]
)) ))
@ -17,18 +19,25 @@
(parser/set-resource-path! (clojure.java.io/resource "templates")) (parser/set-resource-path! (clojure.java.io/resource "templates"))
(parser/add-tag! :csrf-field (fn [_ _] (anti-forgery-field))) (parser/add-tag! :csrf-field (fn [_ _] (anti-forgery-field)))
(filters/add-filter! :markdown (fn [content] [:safe (md-to-html-string content)])) (filters/add-filter! :markdown (fn [content] [:safe (md-to-html-string content)]))
(tags/add-tags)
(defn raw-get-user-roles [user]
"Return, as a set, the names of the roles of which this user is a member."
(if
user
(do
(log/debug (str "seeking roles for user " user))
(set (map #(lower-case (:name %)) (db/list-roles-by-canvasser db/*db* user))))))
(defn raw-get-user-roles [_] ;; role assignments change only rarely.
#{"admin" "canvassers"})
(def get-user-roles (memoize raw-get-user-roles)) (def get-user-roles (memoize raw-get-user-roles))
(defn render (defn render
"renders the HTML template located relative to resources/templates" "renders the HTML template located relative to resources/templates"
[template & [params]] [template session & [params]]
(let [user (try session/get :user)] (let [user (:user session)]
(content-type (content-type
(ok (ok
(parser/render-file (parser/render-file

View file

@ -1,5 +1,4 @@
(ns ^{:doc "Plumbing, mainly boilerplate from Luminus." (ns ^{:doc "Plumbing, mainly boilerplate from Luminus."}
:author "Simon Brooke"}
youyesyet.middleware youyesyet.middleware
(:require [youyesyet.env :refer [defaults]] (:require [youyesyet.env :refer [defaults]]
[clojure.tools.logging :as log] [clojure.tools.logging :as log]

View file

@ -1,11 +0,0 @@
(ns ^{:doc "Routes/pages available to administrators, only."
:author "Simon Brooke"}
youyesyet.routes.administrator
(:require [clojure.java.io :as io]
[clojure.walk :refer [keywordize-keys]]
[compojure.core :refer [defroutes GET POST]]
[noir.response :as nresponse]
[noir.util.route :as route]
[ring.util.http-response :as response]
[youyesyet.layout :as layout]
[youyesyet.db.core :as db]))

View file

@ -54,6 +54,7 @@
))] ))]
(layout/render (layout/render
"canvasser.html" "canvasser.html"
(:session request)
{:title (if canvasser {:title (if canvasser
(str (str
"Edit canvasser " "Edit canvasser "
@ -66,10 +67,10 @@
(defn routing-page (defn routing-page
"Render the routing page, which offers routes according to the user's roles" "Render the routing page, which offers routes according to the user's roles"
[] [request]
(layout/render "routing.html")) (layout/render "routing.html" (:session request)))
(defroutes authenticated-routes (defroutes authenticated-routes
(GET "/edit-canvasser" request (canvasser-page request)) (GET "/edit-canvasser" request (canvasser-page request))
(POST "/edit-canvasser" request (canvasser-page request)) (POST "/edit-canvasser" request (canvasser-page request))
(GET "/routing" [] (routing-page))) (GET "/routing" [request] (routing-page request)))

View file

@ -1,6 +1,6 @@
(ns (ns
youyesyet.routes.auto youyesyet.routes.auto
"User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180629T141538.443Z" "User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180629T222155.170Z"
(:require (:require
[adl-support.core :as support] [adl-support.core :as support]
[clojure.java.io :as io] [clojure.java.io :as io]
@ -27,6 +27,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-addresses-Addresses.html") (support/resolve-template "list-addresses-Addresses.html")
(:session r)
{:title "Addresses", {:title "Addresses",
:params p, :params p,
:records :records
@ -42,6 +43,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-addresses-Address.html") (support/resolve-template "form-addresses-Address.html")
(:session r)
{:title "Address", {:title "Address",
:params p, :params p,
:record :record
@ -55,6 +57,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-authorities-Authorities.html") (support/resolve-template "list-authorities-Authorities.html")
(:session r)
{:title "Authorities", {:title "Authorities",
:params p, :params p,
:records :records
@ -70,6 +73,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-authorities-Authority.html") (support/resolve-template "form-authorities-Authority.html")
(:session r)
{:title "Authority", {:title "Authority",
:params p, :params p,
:record :record
@ -85,6 +89,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-canvassers-Canvassers.html") (support/resolve-template "list-canvassers-Canvassers.html")
(:session r)
{:title "Canvassers", {:title "Canvassers",
:params p, :params p,
:records :records
@ -100,6 +105,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-canvassers-Canvasser.html") (support/resolve-template "form-canvassers-Canvasser.html")
(:session r)
{:title "Canvasser", {:title "Canvasser",
:params p, :params p,
:record :record
@ -109,7 +115,8 @@
(db/get-canvasser db/*db* p)), (db/get-canvasser db/*db* p)),
:electors (db/list-electors db/*db*), :electors (db/list-electors db/*db*),
:addresses (db/list-addresses db/*db*), :addresses (db/list-addresses db/*db*),
:authorities (db/list-authorities db/*db*)}))) :authorities (db/list-authorities db/*db*),
:roles (db/list-roles db/*db*)})))
(defn (defn
list-districts-Districts list-districts-Districts
@ -118,6 +125,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-districts-Districts.html") (support/resolve-template "list-districts-Districts.html")
(:session r)
{:title "Districts", {:title "Districts",
:params p, :params p,
:records :records
@ -133,6 +141,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-districts-District.html") (support/resolve-template "form-districts-District.html")
(:session r)
{:title "District", {:title "District",
:params p, :params p,
:record :record
@ -148,6 +157,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-dwellings-Dwellings.html") (support/resolve-template "list-dwellings-Dwellings.html")
(:session r)
{:title "Dwellings", {:title "Dwellings",
:params p, :params p,
:records :records
@ -163,6 +173,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-dwellings-Dwelling.html") (support/resolve-template "form-dwellings-Dwelling.html")
(:session r)
{:title "Dwelling", {:title "Dwelling",
:params p, :params p,
:record :record
@ -179,6 +190,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-electors-Electors.html") (support/resolve-template "list-electors-Electors.html")
(:session r)
{:title "Electors", {:title "Electors",
:params p, :params p,
:records :records
@ -194,6 +206,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-electors-Elector.html") (support/resolve-template "form-electors-Elector.html")
(:session r)
{:title "Elector", {:title "Elector",
:params p, :params p,
:record :record
@ -209,6 +222,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"list-followupactions-Followupactions.html") "list-followupactions-Followupactions.html")
(:session r)
{:title "Followupactions", {:title "Followupactions",
:params p, :params p,
:records :records
@ -225,6 +239,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"form-followupactions-Followupaction.html") "form-followupactions-Followupaction.html")
(:session r)
{:title "Followupaction", {:title "Followupaction",
:params p, :params p,
:record :record
@ -243,6 +258,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"list-followupmethods-Followupmethods.html") "list-followupmethods-Followupmethods.html")
(:session r)
{:title "Followupmethods", {:title "Followupmethods",
:params p, :params p,
:records :records
@ -259,6 +275,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"form-followupmethods-Followupmethod.html") "form-followupmethods-Followupmethod.html")
(:session r)
{:title "Followupmethod", {:title "Followupmethod",
:params p, :params p,
:record :record
@ -275,6 +292,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"list-followuprequests-Followuprequests.html") "list-followuprequests-Followuprequests.html")
(:session r)
{:title "Followuprequests", {:title "Followuprequests",
:params p, :params p,
:records :records
@ -291,6 +309,7 @@
(l/render (l/render
(support/resolve-template (support/resolve-template
"form-followuprequests-Followuprequest.html") "form-followuprequests-Followuprequest.html")
(:session r)
{:title "Followuprequest", {:title "Followuprequest",
:params p, :params p,
:record :record
@ -310,6 +329,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-genders-Genders.html") (support/resolve-template "list-genders-Genders.html")
(:session r)
{:title "Genders", {:title "Genders",
:params p, :params p,
:records :records
@ -325,6 +345,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-genders-Gender.html") (support/resolve-template "form-genders-Gender.html")
(:session r)
{:title "Gender", {:title "Gender",
:params p, :params p,
:record :record
@ -340,6 +361,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-intentions-Intentions.html") (support/resolve-template "list-intentions-Intentions.html")
(:session r)
{:title "Intentions", {:title "Intentions",
:params p, :params p,
:records :records
@ -355,6 +377,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-intentions-Intention.html") (support/resolve-template "form-intentions-Intention.html")
(:session r)
{:title "Intention", {:title "Intention",
:params p, :params p,
:record :record
@ -373,6 +396,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-issues-Issues.html") (support/resolve-template "list-issues-Issues.html")
(:session r)
{:title "Issues", {:title "Issues",
:params p, :params p,
:records :records
@ -388,6 +412,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-issues-Issue.html") (support/resolve-template "form-issues-Issue.html")
(:session r)
{:title "Issue", {:title "Issue",
:params p, :params p,
:record :record
@ -400,6 +425,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-options-Options.html") (support/resolve-template "list-options-Options.html")
(:session r)
{:title "Options", {:title "Options",
:params p, :params p,
:records :records
@ -415,6 +441,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-options-Option.html") (support/resolve-template "form-options-Option.html")
(:session r)
{:title "Option", {:title "Option",
:params p, :params p,
:record :record
@ -430,6 +457,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-roles-Roles.html") (support/resolve-template "list-roles-Roles.html")
(:session r)
{:title "Roles", {:title "Roles",
:params p, :params p,
:records :records
@ -445,10 +473,12 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-roles-Role.html") (support/resolve-template "form-roles-Role.html")
(:session r)
{:title "Role", {:title "Role",
:params p, :params p,
:record :record
(if (empty? (remove nil? (vals p))) [] (db/get-role db/*db* p))}))) (if (empty? (remove nil? (vals p))) [] (db/get-role db/*db* p)),
:canvassers (db/list-canvassers db/*db*)})))
(defn (defn
list-teams-Teams list-teams-Teams
@ -457,6 +487,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-teams-Teams.html") (support/resolve-template "list-teams-Teams.html")
(:session r)
{:title "Teams", {:title "Teams",
:params p, :params p,
:records :records
@ -472,11 +503,13 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-teams-Team.html") (support/resolve-template "form-teams-Team.html")
(:session r)
{:title "Team", {:title "Team",
:params p, :params p,
:record :record
(if (empty? (remove nil? (vals p))) [] (db/get-team db/*db* p)), (if (empty? (remove nil? (vals p))) [] (db/get-team db/*db* p)),
:districts (db/list-districts db/*db*)}))) :districts (db/list-districts db/*db*),
:canvassers (db/list-canvassers db/*db*)})))
(defn (defn
list-visits-Visits list-visits-Visits
@ -485,6 +518,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "list-visits-Visits.html") (support/resolve-template "list-visits-Visits.html")
(:session r)
{:title "Visits", {:title "Visits",
:params p, :params p,
:records :records
@ -500,6 +534,7 @@
[p (support/massage-params (:params r))] [p (support/massage-params (:params r))]
(l/render (l/render
(support/resolve-template "form-visits-Visit.html") (support/resolve-template "form-visits-Visit.html")
(:session r)
{:title "Visit", {:title "Visit",
:params p, :params p,
:record :record

View file

@ -37,11 +37,11 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn app-page [] (defn app-page []
(layout/render "app.html")) (layout/render "app.html" {}))
(defn about-page [] (defn about-page []
(layout/render "about.html")) (layout/render "about.html" {}))
(defn call-me-page [request] (defn call-me-page [request]
@ -49,8 +49,8 @@
request request
(do (do
;; do something to store it in the database ;; do something to store it in the database
(layout/render "call-me-accepted.html" (:params request))) (layout/render "call-me-accepted.html" (:session request) (:params request)))
(layout/render "call-me.html" (layout/render "call-me.html" (:session request)
{:title "Please call me!" {:title "Please call me!"
;; TODO: Issues need to be fetched from the database ;; TODO: Issues need to be fetched from the database
:concerns nil}))) :concerns nil})))
@ -59,21 +59,20 @@
(defn roles-page [request] (defn roles-page [request]
(let (let
[session (:session request) [session (:session request)
username (:user session) user (:user session)
user (if username (db-core/get-canvasser-by-username db-core/*db* {:username username}))
roles (if user (db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))] roles (if user (db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))]
(cond (cond
roles (layout/render "roles.html" roles (layout/render "roles.html"
(:session request)
{:title (str "Welcome " (:fullname user) ", what do you want to do?") {:title (str "Welcome " (:fullname user) ", what do you want to do?")
:user user :user user
:roles roles}) :roles roles})
(empty? roles)(response/found "/app") (empty? roles)(response/found "/app")
true (assoc (response/found "/login") :session (dissoc session :user)) true (assoc (response/found "/login") :session (dissoc session :user)))))
)))
(defn home-page [] (defn home-page []
(layout/render "home.html" {:title "You Yes Yet?"})) (layout/render "home.html" {} {:title "You Yes Yet?"}))
(defn login-page (defn login-page
@ -99,14 +98,18 @@
;; it-will-do-for-now security in place; instead, I want this to be test code only ;; it-will-do-for-now security in place; instead, I want this to be test code only
;; until we have o-auth properly working. ;; until we have o-auth properly working.
(and user (= username password)) (and user (= username password))
(assoc (response/found redirect-to) :session (assoc session :user username)) (assoc
user (response/found redirect-to)
:session (assoc session :user user :roles (layout/get-user-roles user)))
username
(layout/render (layout/render
"login.html" "login.html"
session
{:title (str "User " username " is unknown") :redirect-to redirect-to}) {:title (str "User " username " is unknown") :redirect-to redirect-to})
true true
(layout/render (layout/render
"login.html" "login.html"
session
{:title "Please log in" {:title "Please log in"
:redirect-to redirect-to :redirect-to redirect-to
:authorities (db-core/list-authorities db-core/*db*)})))) :authorities (db-core/list-authorities db-core/*db*)}))))
@ -127,7 +130,7 @@
(POST "/call-me" request (call-me-page request)) (POST "/call-me" request (call-me-page request))
(GET "/auth" request (login-page request)) (GET "/auth" request (login-page request))
(POST "/auth" request (login-page request)) (POST "/auth" request (login-page request))
(GET "/notyet" [] (layout/render "notyet.html" (GET "/notyet" [] (layout/render "notyet.html" {}
{:title "Can we persuade you?"})) {:title "Can we persuade you?"}))
(GET "/supporter" [] (layout/render "supporter.html" (GET "/supporter" [] (layout/render "supporter.html" {}
{:title "Have you signed up as a canvasser yet?"}))) {:title "Have you signed up as a canvasser yet?"})))

View file

@ -42,8 +42,8 @@
"Get current issues. No arguments expected." "Get current issues. No arguments expected."
[request]) [request])
(defroutes rest-routes ;; (defroutes rest-routes
(GET "/rest/get-local-data" request (route/restricted (get-local-data request))) ;; (GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
(GET "/rest/get-issues" request (route/restricted (get-issues request))) ;; (GET "/rest/get-issues" request (route/restricted (get-issues request)))
(GET "/rest/set-intention" request (route/restricted (set-intention request))) ;; (GET "/rest/set-intention" request (route/restricted (set-intention request)))
(GET "/rest/request-followup" request (route/restricted (request-followup request)))) ;; (GET "/rest/request-followup" request (route/restricted (request-followup request))))

View file

@ -361,10 +361,10 @@
<prompt prompt="elector_id" locale="en-GB"/> <prompt prompt="elector_id" locale="en-GB"/>
</property> </property>
<property required="true" type="entity" name="address_id" column="address_id" <property required="true" type="entity" name="address_id" column="address_id"
entity="addresses" farkey="id"> entity="addresses" farkey="id" distinct="user">
<prompt prompt="address_id" locale="en-GB"/> <prompt prompt="address_id" locale="en-GB"/>
</property> </property>
<property type="string" name="phone" column="phone" size="16"> <property type="string" name="phone" column="phone" size="16" distinct="user">
<prompt prompt="phone" locale="en-GB"/> <prompt prompt="phone" locale="en-GB"/>
</property> </property>
<property type="string" name="email" column="email" size="128" distinct="user"> <property type="string" name="email" column="email" size="128" distinct="user">