diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/chouette/stop_area.rb | 13 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 8 | ||||
| -rw-r--r-- | app/models/custom_field.rb | 7 | ||||
| -rw-r--r-- | app/models/merge.rb | 2 | ||||
| -rw-r--r-- | app/models/referential.rb | 21 | ||||
| -rw-r--r-- | app/models/referential_cloning.rb | 9 | ||||
| -rw-r--r-- | app/models/workbench.rb | 1 | ||||
| -rw-r--r-- | app/models/workgroup.rb | 14 |
8 files changed, 63 insertions, 12 deletions
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb index 4f1359ff8..52602be9f 100644 --- a/app/models/chouette/stop_area.rb +++ b/app/models/chouette/stop_area.rb @@ -49,8 +49,10 @@ module Chouette def parent_area_type_must_be_greater return unless self.parent - if Chouette::AreaType.find(self.area_type) >= Chouette::AreaType.find(self.parent.area_type) - errors.add(:parent_id, I18n.t('stop_areas.errors.parent_area_type', area_type: self.parent.area_type)) + + parent_area_type = Chouette::AreaType.find(self.parent.area_type) + if Chouette::AreaType.find(self.area_type) >= parent_area_type + errors.add(:parent_id, I18n.t('stop_areas.errors.parent_area_type', area_type: parent_area_type.label)) end end @@ -355,5 +357,12 @@ module Chouette def deactivate! update_attribute :deleted_at, Time.now end + + def country_name + return unless country_code + + country = ISO3166::Country[country_code] + country.translations[I18n.locale.to_s] || country.name + end end end diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index d4dc82a56..11da77948 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -243,6 +243,14 @@ module Chouette end end + def custom_fields + CustomField.where(resource_type: self.class.name.split("::").last) + end + + def custom_field_value key + (custom_field_values || {})[key.to_s] + end + def self.matrix(vehicle_journeys) Hash[*VehicleJourneyAtStop.where(vehicle_journey_id: vehicle_journeys.pluck(:id)).map do |vjas| [ "#{vjas.vehicle_journey_id}-#{vjas.stop_point_id}", vjas] diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb new file mode 100644 index 000000000..e8e76c6b5 --- /dev/null +++ b/app/models/custom_field.rb @@ -0,0 +1,7 @@ +class CustomField < ActiveRecord::Base + + extend Enumerize + enumerize :field_type, in: %i{list} + + validates :name, uniqueness: {scope: :resource_type} +end diff --git a/app/models/merge.rb b/app/models/merge.rb index 4cbbd18ab..8051eed4d 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -17,7 +17,7 @@ class Merge < ActiveRecord::Base end def name - "Dummy" # FIXME + referentials.first(3).map { |r| r.name.truncate(10) }.join(',') end attr_reader :new diff --git a/app/models/referential.rb b/app/models/referential.rb index 4cddd502e..3eb5d3283 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -252,6 +252,14 @@ class Referential < ActiveRecord::Base before_destroy :destroy_schema before_destroy :destroy_jobs + def referential_read_only? + in_referential_suite? || archived? + end + + def in_referential_suite? + referential_suite_id.present? + end + def in_workbench? workbench_id.present? end @@ -334,9 +342,6 @@ class Referential < ActiveRecord::Base end end - def in_referential_suite? - referential_suite_id.present? - end attr_accessor :inline_clone def clone_schema @@ -355,11 +360,15 @@ class Referential < ActiveRecord::Base Apartment::Tenant.create slug end - Rails.logger.info("Schema create benchmark: '#{slug}'\t#{report}") - Rails.logger.info("Schema migrations count for Referential #{slug}: #{migration_count || '-'}") + check_migration_count(report) end end + def check_migration_count(report) + Rails.logger.info("Schema create benchmark: '#{slug}'\t#{report}") + Rails.logger.info("Schema migrations count for Referential #{slug}: #{migration_count || '-'}") + end + def migration_count if self.class.connection.table_exists?("#{slug}.schema_migrations") self.class.connection.select_value("select count(*) from #{slug}.schema_migrations;") @@ -452,7 +461,7 @@ class Referential < ActiveRecord::Base # No explicit unlock is needed as it will be released at the end of the # transaction. ActiveRecord::Base.connection.execute( - 'LOCK referentials IN ACCESS EXCLUSIVE MODE' + 'LOCK public.referentials IN ACCESS EXCLUSIVE MODE' ) end end diff --git a/app/models/referential_cloning.rb b/app/models/referential_cloning.rb index a2b23e819..d4b74bd52 100644 --- a/app/models/referential_cloning.rb +++ b/app/models/referential_cloning.rb @@ -19,9 +19,12 @@ class ReferentialCloning < ActiveRecord::Base end def clone! - AF83::SchemaCloner - .new(source_referential.slug, target_referential.slug) - .clone_schema + report = Benchmark.measure do + AF83::SchemaCloner + .new(source_referential.slug, target_referential.slug) + .clone_schema + end + target_referential.check_migration_count(report) end private diff --git a/app/models/workbench.rb b/app/models/workbench.rb index 3190246ae..f49f4e7cf 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -4,6 +4,7 @@ class Workbench < ActiveRecord::Base belongs_to :line_referential belongs_to :stop_area_referential belongs_to :output, class_name: 'ReferentialSuite' + belongs_to :workgroup has_many :lines, -> (workbench) { Stif::MyWorkbenchScopes.new(workbench).line_scope(self) }, through: :line_referential has_many :networks, through: :line_referential diff --git a/app/models/workgroup.rb b/app/models/workgroup.rb new file mode 100644 index 000000000..995917fac --- /dev/null +++ b/app/models/workgroup.rb @@ -0,0 +1,14 @@ +class Workgroup < ActiveRecord::Base + belongs_to :line_referential + belongs_to :stop_area_referential + + has_many :workbenches + has_many :organisations, through: :workbenches + + validates_uniqueness_of :name + + validates_presence_of :line_referential_id + validates_presence_of :stop_area_referential_id + + has_many :custom_fields +end |
