An open source, stand-alone, customisable public spending data web app.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

104 line
2.8 KiB

  1. require 'rubygems'
  2. require 'sinatra'
  3. require 'sinatra-helpers/haml/partials'
  4. require 'haml'
  5. require 'lib/models'
  6. get '/' do
  7. @directorates = Directorate.all( :order => ['name'] )
  8. # @payments_count = Payment.all.size
  9. # @suppliers_count = Supplier.all.size
  10. @results = repository(:default).adapter.query("SELECT COUNT(*) FROM payments")
  11. @payments_count = @results[0]
  12. @results = repository(:default).adapter.query("SELECT COUNT(*) FROM suppliers")
  13. @suppliers_count = @results[0]
  14. @results = repository(:default).adapter.query("SELECT COUNT(*) FROM services")
  15. @services_count = @results[0]
  16. haml :home
  17. end
  18. get '/directorates/:slug' do
  19. @directorate = Directorate.first(:slug => params[:slug])
  20. # @total = @directorate.payments.sum(:amount)
  21. haml :directorate
  22. end
  23. get '/suppliers/:slug.csv' do
  24. @supplier = Supplier.first(:slug => params[:slug])
  25. headers "Content-Disposition" => "attachment;filename=supplier-#{@supplier.slug}.csv",
  26. "Content-Type" => "application/octet-stream"
  27. result = "Date,Ref.,URL,Trans No,Directorate,Service,Amount ex. VAT\n"
  28. for payment in @supplier.payments
  29. result += "#{payment.d.strftime("%d %b %Y")},#{payment.id},#{payment.url},#{payment.trans_no},\"#{payment.directorate.name}\",#{payment.service.name},#{sprintf("%0.2f", payment.amount)}\n"
  30. end
  31. result
  32. end
  33. get '/suppliers/:slug' do
  34. @supplier = Supplier.first(:slug => params[:slug])
  35. @total = @supplier.payments.sum(:amount)
  36. @count = @supplier.payments.size
  37. @avg = @supplier.payments.avg(:amount)
  38. @max = @supplier.payments.max(:amount)
  39. @min = @supplier.payments.min(:amount)
  40. haml :supplier
  41. end
  42. get '/suppliers/?' do
  43. @suppliers = Supplier.all( :order => ['name'] )
  44. haml :suppliers
  45. end
  46. get '/services/:slug.csv' do
  47. @service = Service.first(:slug => params[:slug])
  48. headers "Content-Disposition" => "attachment;filename=service-#{@service.slug}.csv",
  49. "Content-Type" => "application/octet-stream"
  50. result = "Date,Ref.,URL,Trans No,Directorate,Supplier,Amount ex. VAT\n"
  51. for payment in @service.payments
  52. result += "#{payment.d.strftime("%d %b %Y")},#{payment.id},#{payment.url},#{payment.trans_no},\"#{payment.directorate.name}\",#{payment.supplier.name},#{sprintf("%0.2f", payment.amount)}\n"
  53. end
  54. result
  55. end
  56. get '/services/:slug' do
  57. @service = Service.first(:slug => params[:slug])
  58. @total = @service.payments.sum(:amount)
  59. @count = @service.payments.size
  60. @avg = @service.payments.avg(:amount)
  61. @max = @service.payments.max(:amount)
  62. @min = @service.payments.min(:amount)
  63. haml :service
  64. end
  65. get '/services/?' do
  66. @services = Service.all( :order => ['name'] )
  67. haml :services
  68. end
  69. get '/payments/:id' do
  70. @payment = Payment.get(params[:id])
  71. haml :payment
  72. end
  73. get '/error' do
  74. haml :error
  75. end
  76. get '/about' do
  77. haml :about
  78. end
  79. not_found do
  80. haml :not_found
  81. end