@@ -4,6 +4,8 @@ require 'sinatra-helpers/haml/partials' | |||
require 'haml' | |||
require 'lib/models' | |||
SETTING = Setting.first # Could also do this with Sinatra filters before/do | |||
PAYMENTS_FILTER_MIN = 1000 | |||
helpers do | |||
@@ -157,6 +159,7 @@ get '/about' do | |||
end | |||
get '/scoreboard.csv' do | |||
halt 404 | |||
@councils = Council.all( :order => ['name'] ) | |||
labels = %w[ | |||
id | |||
@@ -181,6 +184,7 @@ get '/scoreboard.csv' do | |||
end | |||
get '/scoreboard' do | |||
halt 404 | |||
@councils = Council.all( :order => ['name'] ) | |||
haml :scoreboard | |||
end | |||
@@ -1,5 +1,5 @@ | |||
require 'lib/models' | |||
require 'csv' | |||
require 'fastercsv' | |||
# Before running this script with a CSV file, prepare it so: | |||
# - There is only a single line of column headings on the first line of the file | |||
@@ -44,7 +44,7 @@ if date_format != 'DMY' && date_format != 'MDY' | |||
exit | |||
end | |||
CSV::Reader.parse(File.open(ARGV[0], 'rb')) do |row| | |||
FasterCSV.foreach(ARGV[0]) do |row| | |||
count += 1 | |||
@@ -70,8 +70,11 @@ CSV::Reader.parse(File.open(ARGV[0], 'rb')) do |row| | |||
end | |||
directorate = Directorate.first_or_create(:name => directorate_name) | |||
directorate.save | |||
service = Service.first_or_create(:name => service_name, :directorate => directorate) | |||
service.save | |||
supplier = Supplier.first_or_create(:name => supplier_name) | |||
supplier.save | |||
dt = row[columns['Updated']].strip.split('/') | |||
@@ -6,8 +6,6 @@ require 'dm-aggregates' | |||
require 'dm-serializer' | |||
require 'dm-migrations' | |||
SITE_URL = 'http://armchairauditor.co.uk/' | |||
class Payment | |||
include DataMapper::Resource | |||
@@ -17,14 +15,14 @@ class Payment | |||
property :service_id, Integer, :required => true | |||
property :supplier_id, Integer, :required => true | |||
property :amount, BigDecimal, :precision => 10, :scale => 2, :required => true # ex VAT | |||
property :d, Date, :required => true # "Updated" in RBWM CSV files | |||
property :d, Date, :required => true # transaction date | |||
belongs_to :service | |||
belongs_to :supplier | |||
has 1, :directorate, { :through => :service } | |||
def url | |||
SITE_URL + "payments/" + @id.to_s | |||
SETTING.site_url + "payments/" + @id.to_s | |||
end | |||
end | |||
@@ -111,5 +109,20 @@ class Council | |||
end | |||
end | |||
# This is a singleton. We only use the first row in the settings table. | |||
class Setting | |||
include DataMapper::Resource | |||
property :id, Serial | |||
property :site_name, String, :length => 255, :required => true | |||
property :site_tagline, String, :length => 255 | |||
property :site_url, String, :length => 255 | |||
property :org_name, String, :length => 255 | |||
property :org_url, String, :length => 255 | |||
property :data_url, String, :length => 255 | |||
end | |||
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3") | |||
DataMapper.auto_upgrade! |
@@ -18,7 +18,20 @@ input | |||
background-color: #fff; | |||
} | |||
.tagline | |||
{ | |||
color: #777; | |||
font-size: 60%; | |||
padding-left: 20px; | |||
} | |||
.alpha | |||
{ | |||
font-size: 40%; | |||
text-transform: uppercase; | |||
vertical-align: top; | |||
line-height: 100%; | |||
} | |||
#main | |||
{ | |||
@@ -2,6 +2,6 @@ | |||
%h3 Comments | |||
%p.highlight | |||
This is an independent website. | |||
%a{ :href => "http://www.rbwm.gov.uk/" }< | |||
Windsor and Maidenhead Council | |||
%a{ :href => "#{SETTING.org_url}" }< | |||
= SETTING.org_name | |||
might not see your comments here or reply to them. |
@@ -6,11 +6,15 @@ | |||
%p.right — Eric Pickles, Communities & Local Government Secretary, 5 June 2010 | |||
<!-- http://news.bbc.co.uk/1/hi/politics/10241522.stm --> | |||
<!-- Source: http://news.bbc.co.uk/1/hi/politics/10241522.stm --> | |||
%p | |||
This site is made with | |||
%a{ :href => "#{SETTING.data_url}" }< | |||
spending data from the | |||
= SETTING.org_name | |||
and is entirely indepdendent of the council. The council did not commission or pay for this website. | |||
-# | |||
%img{ :src => "http://www.gravatar.com/avatar/4a92f0a6447839dc0a9a2b850fe9ed86?s=80&d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-80.png", :alt => "Adrian Short", :width => 80, :height => 80 } | |||
%p.vcard | |||
This website was designed and written by | |||
%a.fn.url{ :href => 'http://adrianshort.co.uk' }< | |||
@@ -21,14 +25,8 @@ | |||
and | |||
%a.url{ :href => "http://twitter.com/adrianshort" }< | |||
follow me on Twitter. | |||
%p.highlight | |||
This site is made with | |||
%a{ :href => 'http://www.rbwm.gov.uk/web/finance_payments_to_suppliers.htm' }< | |||
the Royal Borough of Windsor and Maidenhead's spending data | |||
and is entirely indepdendent of the council. The council did not commission or pay for this website. | |||
%p.highlight | |||
%p | |||
All the data here is open data. It's free for you to use and republish, including commercially, | |||
%a{ :href => "http://data.gov.uk/terms-and-conditions" } | |||
under the same terms as data.gov.uk. | |||
@@ -7,7 +7,7 @@ | |||
.clear | |||
.grid_6 | |||
%h2 Council Directorates | |||
%h2 Council Services | |||
- for directorate in @directorates | |||
%p | |||
@@ -20,7 +20,10 @@ | |||
Armchair Auditor lets you see how your council spends your money. | |||
%p | |||
For the Royal Borough of Windsor and Maidenhead we've got: | |||
For the | |||
%a{ :href => "#{SETTING.org_url}" }< | |||
= SETTING.org_name | |||
we've got: | |||
%ul | |||
%li | |||
%a{ :href => "/services" } | |||
@@ -2,42 +2,39 @@ | |||
!!! | |||
%html | |||
%head | |||
%title= @page_title ? @page_title + " - Armchair Auditor" : "Armchair Auditor" | |||
%title= @page_title ? @page_title + " - " + SETTING.site_name : SETTING.site_name | |||
%link{ :rel => 'stylesheet', :type => 'text/css', :href => '/style.css' } | |||
-# | |||
%link{ :rel => 'stylesheet', :type => 'text/css', :href => '/breadcrumb/breadcrumb.css' } | |||
%link{ :rel => 'stylesheet', :type => 'text/css', :href => '/print.css', :media => 'print' } | |||
%link{ :rel => 'stylesheet', :type => 'text/css', :href => '/grid.css' } | |||
%script{:type => 'text/javascript', :src => 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'} | |||
%script{:type => 'text/javascript', :src => 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'} | |||
%script{:type => 'text/javascript', :src => '/js/jquery.cookie.js'} | |||
<script type="text/javascript"> | |||
var _gaq = _gaq || []; | |||
_gaq.push(['_setAccount', 'UA-3042981-18']); | |||
_gaq.push(['_trackPageview']); | |||
(function() { | |||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |||
})(); | |||
</script> | |||
:javascript | |||
var _gaq = _gaq || []; | |||
_gaq.push(['_setAccount', 'UA-3042981-18']); | |||
_gaq.push(['_trackPageview']); | |||
(function() { | |||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |||
})(); | |||
%body | |||
.container_12 | |||
.grid_12 | |||
%p.highlight.hidden This is a demonstration website of "alpha" quality — don't rely on this data. | |||
%h1.logo | |||
Armchair Auditor | |||
%sup | |||
%span{ :style => "font-size: 40%; text-transform: uppercase; vertical-align: top; line-height: 100%;" } | |||
Alpha | |||
%span{ :style => "color: #777; font-size: 60%; padding-left: 20px;" } | |||
Royal Borough of Windsor & Maidenhead Spending | |||
= SETTING.site_name | |||
-# | |||
%span.tagline | |||
= SETTING.site_tagline | |||
#nav.noprint | |||
%a{ :href => '/' } Home | |||
%a{ :href => '/services' } Services | |||
%a{ :href => '/suppliers' } Suppliers | |||
%a{ :href => '/scoreboard' } Scoreboard | |||
-# | |||
%a{ :href => '/scoreboard' } Scoreboard | |||
%a{ :href => '/about' } About | |||
= yield | |||
.clear | |||
@@ -45,7 +42,7 @@ | |||
.grid_12.top_border | |||
%p | |||
An independent website | |||
%a{ :href => 'http://twitter.com/AdrianShort' }< | |||
%a{ :href => 'http://twitter.com/adrianshort' }< | |||
designed by Adrian Short | |||
| |||
%a{ :href => 'http://twitter.com/ArmchairAuditor' }< | |||