aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorXinhui2017-05-18 15:25:17 +0200
committerXinhui2017-05-18 15:27:04 +0200
commit8ef916234f4968b542da50ba5b4d1304dacf92e9 (patch)
treea061e1f18cdbaa137dad8dee689f99034028e4d4 /app
parent7210f067b298d816dfc891d87c4407a291c1a706 (diff)
downloadchouette-core-8ef916234f4968b542da50ba5b4d1304dacf92e9.tar.bz2
Wip TimeTableCombinations#new form & refactoring
Refs #3406
Diffstat (limited to 'app')
-rw-r--r--app/controllers/time_table_combinations_controller.rb26
-rw-r--r--app/models/chouette/time_table.rb1
-rw-r--r--app/models/time_table_combination.rb33
-rw-r--r--app/views/time_table_combinations/_form.html.slim16
4 files changed, 49 insertions, 27 deletions
diff --git a/app/controllers/time_table_combinations_controller.rb b/app/controllers/time_table_combinations_controller.rb
index db3025921..bbb262247 100644
--- a/app/controllers/time_table_combinations_controller.rb
+++ b/app/controllers/time_table_combinations_controller.rb
@@ -1,25 +1,25 @@
class TimeTableCombinationsController < ChouetteController
- respond_to :js, :only => [:new,:create]
-
belongs_to :referential do
belongs_to :time_table, :parent_class => Chouette::TimeTable
end
def new
- @time_table_combination = TimeTableCombination.new(:source_id => parent.id)
+ @combination = TimeTableCombination.new(source_id: parent.id)
end
def create
- @time_table_combination = TimeTableCombination.new( params[:time_table_combination].merge( :source_id => parent.id))
- if @time_table_combination.valid?
- begin
- @time_table = @time_table_combination.combine
- flash[:notice] = t('time_table_combinations.success')
- rescue => e
- flash[:error] = t('time_table_combinations.failure')
- render :new
- end
- else
+ @combination = TimeTableCombination.new(params[:time_table_combination].merge(source_id: parent.id))
+ @combination.valid? ? perform_combination : render(:new)
+ end
+
+ def perform_combination
+ begin
+ @time_table = @combination.combine
+ flash[:notice] = t('time_table_combinations.success')
+ redirect_to referential_time_table_path(referential, @time_table)
+ rescue => e
+ flash[:notice] = e.message
+ flash[:error] = t('time_table_combinations.failure')
render :new
end
end
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb
index 10d7039a0..0ddfa14bf 100644
--- a/app/models/chouette/time_table.rb
+++ b/app/models/chouette/time_table.rb
@@ -518,6 +518,7 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
self.dates.to_a.sort! { |a,b| a.date <=> b.date}
self.save!
end
+ self.convert_continuous_dates_to_periods
end
# remove dates form tt which aren't in another_tt
diff --git a/app/models/time_table_combination.rb b/app/models/time_table_combination.rb
index 519c02f2b..6cbdf942f 100644
--- a/app/models/time_table_combination.rb
+++ b/app/models/time_table_combination.rb
@@ -3,15 +3,17 @@ class TimeTableCombination
include ActiveModel::Conversion
extend ActiveModel::Naming
- attr_accessor :source_id, :combined_id, :operation
+ attr_accessor :source_id, :combined_type, :target_id, :operation
- validates_presence_of :source_id, :combined_id, :operation
- validates_inclusion_of :operation, :in => %w( union intersection disjunction), :allow_nil => true
+ validates_presence_of :source_id, :combined_type, :operation, :target_id
+ validates_inclusion_of :operation, :in => %w(union intersection disjunction), :allow_nil => true
+ validates_inclusion_of :combined_type, :in => %w(time_table calendar)
def clean
- self.source_id = nil
- self.combined_id = nil
- self.operation = nil
+ self.source_id = nil
+ self.target_id = nil
+ self.time_table_id = nil
+ self.operation = nil
self.errors.clear
end
@@ -29,14 +31,23 @@ class TimeTableCombination
false
end
+ def target
+ klass = combined_type == 'calendar' ? Calendar : Chouette::TimeTable
+ target = klass.find target_id
+ target = target.convert_to_time_table unless target.is_a? Chouette::TimeTable
+ target
+ end
+
def combine
- source = Chouette::TimeTable.find( source_id)
- combined = Chouette::TimeTable.find( combined_id)
- if operation == "union"
+ source = Chouette::TimeTable.find source_id
+ combined = self.target
+
+ case operation
+ when 'union'
source.merge! combined
- elsif operation == "intersection"
+ when 'intersection'
source.intersect! combined
- elsif operation == "disjunction"
+ when 'disjunction'
source.disjoin! combined
else
raise "unknown operation"
diff --git a/app/views/time_table_combinations/_form.html.slim b/app/views/time_table_combinations/_form.html.slim
index e61ceee44..47a5cee73 100644
--- a/app/views/time_table_combinations/_form.html.slim
+++ b/app/views/time_table_combinations/_form.html.slim
@@ -1,8 +1,18 @@
-= simple_form_for [@referential, @time_table, @time_table_combination], html: {class: 'form-horizontal'}, wrapper: :horizontal_form do |form|
+
+h1 = @time_table.comment
+
+= simple_form_for [@referential, @time_table, @combination], html: {class: 'form-horizontal'}, wrapper: :horizontal_form do |form|
.row
.col-lg-12
- = form.input :operation, as: :select, :collection => Hash[TimeTableCombination.operations.map {|b| [t( b, :scope => "time_table_combinations.operations"),b]}]
+ = form.input :combined_type, as: :select, collection: ['time_table', 'calendar']
+
+ = form.input :operation, as: :select, collection: TimeTableCombination.operations
+ = form.input :target_id, as: :select, 'data-select2ed': 'true', collection: Chouette::TimeTable.all.map{|t| [t.comment, t.id]}
+
+ = form.input :target_id, as: :select, 'data-select2ed': 'true', collection: Calendar.all.map{|t| [t.name, t.id]}, disabled: true
+
+ = form.button :submit, t('actions.submit')
/ = form.input :combined_id, :label => t('.time_tables'), as: :search_time_table, :json => referential_autocomplete_time_tables_path(@referential, :format => :json), hint_text: t('search_hint'), no_result_text: t('no_result_text'), :searching_text => t('searching_term'), :tokenLimit => 1
- = form.button :submit, t('actions.submit'), class: 'btn btn-default formSubmitr'
+