diff options
| author | Teddy Wing | 2017-06-12 10:30:22 +0200 |
|---|---|---|
| committer | Teddy Wing | 2017-06-12 10:30:22 +0200 |
| commit | 6dfdb22139eda7561fa1ae5a9c54b9fdadbfa4b3 (patch) | |
| tree | 6f01fffa87db2c78d23beae2688c0499342e3dec /app | |
| parent | 0b9e41d57fdba19bf3d9a61029e2fd688fbf61f2 (diff) | |
| parent | 45af9cc3dab4040e5bdd3481ebff6c8b37556462 (diff) | |
| download | chouette-core-6dfdb22139eda7561fa1ae5a9c54b9fdadbfa4b3.tar.bz2 | |
Merge remote-tracking branch 'origin/master' into 3479-refactor-table_builder-helper
Diffstat (limited to 'app')
| -rw-r--r-- | app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js | 2 | ||||
| -rw-r--r-- | app/models/chouette/time_table.rb | 4 | ||||
| -rw-r--r-- | app/models/clean_up.rb | 39 | ||||
| -rw-r--r-- | app/models/referential.rb | 4 | ||||
| -rw-r--r-- | app/models/referential_cloning.rb | 3 | ||||
| -rw-r--r-- | app/workers/referential_cloning_worker.rb | 8 |
6 files changed, 52 insertions, 8 deletions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js index f5e01de7c..7f5f6bcbe 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js @@ -61,7 +61,7 @@ class DuplicateVehicleJourney extends Component { <form> <div className='modal-body'> <div className='row'> - <div className='col-lg-3 col-md-3 col-sm-3 col-xs-3'> + <div className={'col-lg-3 col-md-3 col-sm-3 col-xs-3 ' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'hidden' : '' )}> <div className='form-group'> <label className='control-label is-required'>Horaire de départ</label> <span className={'input-group time' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? ' disabled' : '')}> diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb index 2d329bcc6..151570f20 100644 --- a/app/models/chouette/time_table.rb +++ b/app/models/chouette/time_table.rb @@ -135,6 +135,10 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord [Chouette::TimeTable.maximum(:end_date)].compact.max end + def add_exclude_date(in_out, date) + self.dates.create!({in_out: in_out, date: date}) + end + def actualize self.dates.clear self.periods.clear diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index b14067b73..a2b150ecc 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -19,6 +19,9 @@ class CleanUp < ActiveRecord::Base result['time_table'] = send("destroy_time_tables_#{self.date_type}").try(:count) result['time_table_date'] = send("destroy_time_tables_dates_#{self.date_type}").try(:count) result['time_table_period'] = send("destroy_time_tables_periods_#{self.date_type}").try(:count) + self.overlapping_periods.each do |period| + exclude_dates_in_overlapping_period(period) + end end end @@ -61,6 +64,42 @@ class CleanUp < ActiveRecord::Base Chouette::TimeTablePeriod.where('period_start >= ? AND period_end <= ?', self.begin_date, self.end_date).destroy_all end + def overlapping_periods + self.end_date = self.begin_date if self.date_type != 'between' + Chouette::TimeTablePeriod.where('(period_start, period_end) OVERLAPS (?, ?)', self.begin_date, self.end_date) + end + + def exclude_dates_in_overlapping_period(period) + days_in_period = period.period_start..period.period_end + day_out = period.time_table.dates.where(in_out: false).map(&:date) + # check if day is greater or less then cleanup date + if date_type != 'between' + operator = date_type == 'after' ? '>' : '<' + to_exclude_days = days_in_period.map do |day| + day if day.public_send(operator, self.begin_date) + end + else + days_in_cleanup_periode = (self.begin_date..self.end_date) + to_exclude_days = days_in_period & days_in_cleanup_periode + end + + to_exclude_days.to_a.compact.each do |day| + # we ensure day is not already an exclude date + if !day_out.include?(day) + self.add_exclude_date(period.time_table, day) + end + end + end + + def add_exclude_date(time_table, day) + day_in = time_table.dates.where(in_out: true).map(&:date) + unless day_in.include?(day) + time_table.add_exclude_date(false, day) + else + time_table.dates.where(date: day).take.update_attribute(:in_out, false) + end + end + def destroy_time_tables(time_tables) time_tables.each do |time_table| time_table.vehicle_journeys.map(&:destroy) diff --git a/app/models/referential.rb b/app/models/referential.rb index 83d507320..824320c27 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -127,7 +127,7 @@ class Referential < ActiveRecord::Base end def self.new_from(from, organisation:) - Referential.new({ + Referential.new( name: I18n.t("activerecord.copy", :name => from.name), slug: "#{from.slug}_clone", prefix: from.prefix, @@ -139,7 +139,7 @@ class Referential < ActiveRecord::Base workbench: from.workbench, created_from: from, metadatas: from.metadatas.map { |m| ReferentialMetadata.new_from(m) } - }) + ) end def self.available_srids diff --git a/app/models/referential_cloning.rb b/app/models/referential_cloning.rb index 2f34093e2..5bf283814 100644 --- a/app/models/referential_cloning.rb +++ b/app/models/referential_cloning.rb @@ -6,7 +6,8 @@ class ReferentialCloning < ActiveRecord::Base private def perform_clone - ReferentialCloningWorker.perform_async(self.id) + ReferentialCloningWorker.perform_async(id) + # ReferentialCloningWorker.new.perform(id) end aasm column: :status do diff --git a/app/workers/referential_cloning_worker.rb b/app/workers/referential_cloning_worker.rb index 87725ce5a..6592160ec 100644 --- a/app/workers/referential_cloning_worker.rb +++ b/app/workers/referential_cloning_worker.rb @@ -6,7 +6,7 @@ class ReferentialCloningWorker ref_cloning = ReferentialCloning.find id source_schema = ref_cloning.source_referential.slug - target_schema = "#{source_schema}_tmp" + target_schema = ref_cloning.target_referential.slug clone_schema ref_cloning, source_schema, target_schema end @@ -16,9 +16,9 @@ class ReferentialCloningWorker def clone_schema ref_cloning, source_schema, target_schema ref_cloning.run! - StoredProcedures.invoke_stored_procedure(:clone_schema, source_schema, target_schema, true) - execute_sql "DROP SCHEMA #{source_schema} CASCADE;" - execute_sql "ALTER SCHEMA #{target_schema} RENAME TO #{source_schema};" + AF83::SchemaCloner + .new(source_schema, target_schema) + .clone_schema ref_cloning.successful! rescue Exception => e |
