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.

models.rb 3.2 KiB

14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
14 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. require 'rubygems'
  2. require 'dm-core'
  3. require 'dm-validations'
  4. require 'dm-timestamps'
  5. require 'dm-aggregates'
  6. require 'dm-serializer'
  7. SITE_URL = 'http://armchairauditor.co.uk/'
  8. class Payment
  9. include DataMapper::Resource
  10. property :id, Serial
  11. property :created_at, DateTime
  12. property :updated_at, DateTime
  13. property :service_id, Integer, :required => true
  14. property :supplier_id, Integer, :required => true
  15. property :amount, BigDecimal, :precision => 10, :scale => 2, :required => true # ex VAT
  16. property :d, Date, :required => true # "Updated" in RBWM CSV files
  17. belongs_to :service
  18. belongs_to :supplier
  19. has 1, :directorate, { :through => :service }
  20. def url
  21. SITE_URL + "payments/" + @id.to_s
  22. end
  23. end
  24. class Directorate
  25. include DataMapper::Resource
  26. property :id, Serial
  27. property :created_at, DateTime
  28. property :updated_at, DateTime
  29. property :name, String, :length => 255, :required => true
  30. property :slug, String, :length => 255
  31. has n, :services, :order => ['name']
  32. has n, :suppliers, { :through => :services, :order => ['name'] }
  33. before :save, :slugify
  34. def slugify
  35. @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  36. end
  37. end
  38. class Service
  39. include DataMapper::Resource
  40. property :id, Serial
  41. property :created_at, DateTime
  42. property :updated_at, DateTime
  43. property :directorate_id, Integer, :required => true
  44. property :name, String, :length => 255, :required => true
  45. property :slug, String, :length => 255
  46. has n, :payments, :order => ['d']
  47. has n, :suppliers, { :through => :payments, :order => ['name'] }
  48. belongs_to :directorate
  49. before :save, :slugify
  50. def slugify
  51. @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  52. end
  53. end
  54. class Supplier
  55. include DataMapper::Resource
  56. property :id, Serial
  57. property :created_at, DateTime
  58. property :updated_at, DateTime
  59. property :name, String, :length => 255, :required => true
  60. property :slug, String, :length => 255
  61. has n, :payments, :order => ['d']
  62. has n, :services, { :through => :payments, :order => ['name'] }
  63. has n, :directorates, { :through => :payments }
  64. before :save, :slugify
  65. def slugify
  66. @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  67. end
  68. end
  69. class Council
  70. include DataMapper::Resource
  71. property :id, Serial
  72. property :created_at, DateTime
  73. property :updated_at, DateTime
  74. property :name, String, :length => 255, :required => true
  75. property :slug, String, :length => 255
  76. property :url, String, :length => 255
  77. property :data_url, String, :length => 512
  78. property :open_licence, Boolean, :default => false
  79. property :machine_readable, Boolean, :default => false
  80. property :start_d, Date
  81. property :end_d, Date
  82. before :save, :slugify
  83. def slugify
  84. @slug = @name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase
  85. end
  86. end
  87. DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3")
  88. DataMapper.auto_upgrade!