An open source, stand-alone, customisable public spending data web app.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

105 lignes
3.3 KiB

  1. class Payment
  2. include DataMapper::Resource
  3. property :id, Serial
  4. property :created_at, DateTime
  5. property :updated_at, DateTime
  6. property :service_id, Integer, :required => true
  7. property :supplier_id, Integer, :required => true
  8. property :amount, Decimal, :precision => 10, :scale => 2, :required => true # ex VAT
  9. property :d, Date, :required => true # transaction date
  10. property :transaction_id, Integer # May not be unique per payment as one transaction could have several payments
  11. belongs_to :service
  12. belongs_to :supplier
  13. has 1, :directorate, { :through => :service }
  14. def url
  15. SETTING.site_url + "payments/" + @id.to_s
  16. end
  17. end
  18. class Directorate
  19. include DataMapper::Resource
  20. property :id, Serial
  21. property :created_at, DateTime
  22. property :updated_at, DateTime
  23. property :name, String, :length => 255, :required => true
  24. property :slug, String, :length => 255, :required => true
  25. has n, :services, :order => ['name']
  26. has n, :suppliers, { :through => :services, :order => ['name'] }
  27. # before :save, :slugify
  28. #
  29. # def slugify
  30. # @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  31. # puts "I've just been slugified"
  32. # end
  33. end
  34. class Service
  35. include DataMapper::Resource
  36. property :id, Serial
  37. property :created_at, DateTime
  38. property :updated_at, DateTime
  39. property :directorate_id, Integer
  40. property :name, String, :length => 255, :required => true
  41. property :slug, String, :length => 255, :required => true
  42. has n, :payments, :order => ['d']
  43. has n, :suppliers, { :through => :payments, :order => ['name'] }
  44. belongs_to :directorate, :required => false
  45. # before :save, :slugify
  46. #
  47. # def slugify
  48. # @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  49. # puts "I've just been slugified"
  50. # end
  51. end
  52. class Supplier
  53. include DataMapper::Resource
  54. property :id, Serial
  55. property :created_at, DateTime
  56. property :updated_at, DateTime
  57. property :name, String, :length => 255, :required => true
  58. property :slug, String, :length => 255, :required => true
  59. has n, :payments, :order => ['d']
  60. has n, :services, { :through => :payments, :order => ['name'] }
  61. has n, :directorates, { :through => :payments }
  62. # before :save, :slugify
  63. #
  64. # def slugify
  65. # @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  66. # end
  67. end
  68. # This is a singleton. We only use the first row in the settings table.
  69. class Setting
  70. include DataMapper::Resource
  71. property :id, Serial
  72. property :site_name, String, :length => 255, :required => true
  73. property :site_tagline, String, :length => 255
  74. property :site_url, String, :length => 255
  75. property :org_name, String, :length => 255
  76. property :org_url, String, :length => 255
  77. property :data_url, String, :length => 255
  78. property :disqus_shortname, String, :length => 255
  79. property :google_analytics_id, String, :length => 255
  80. end
  81. # DataMapper.setup(:default, ENV['DATABASE_URL'] || "mysql://root@localhost/armchairauditor_sutton")
  82. DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3")
  83. DataMapper.auto_upgrade!