aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js2
-rw-r--r--app/models/chouette/time_table.rb4
-rw-r--r--app/models/clean_up.rb39
-rw-r--r--app/models/referential.rb4
-rw-r--r--app/models/referential_cloning.rb3
-rw-r--r--app/workers/referential_cloning_worker.rb8
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