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