aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorMichel Etienne2014-08-27 15:44:05 +0200
committerMichel Etienne2014-08-27 15:44:05 +0200
commit4ff26e0096f122dc74b45b427137eb631da3fd06 (patch)
tree8a9717bca9f5d05ff529462d6c8d7758e363eeb2 /app
parent2a1b23c9bd1d4e2e97814ea9190892f2981b365d (diff)
parent82cf451ad0faa76a26adc27528f4458596157802 (diff)
downloadchouette-core-4ff26e0096f122dc74b45b427137eb631da3fd06.tar.bz2
Merge branch 'sismo' of github.com:afimb/chouette2 into sismo
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/application.js1
-rw-r--r--app/assets/javascripts/vehicle_journey.js.coffee2
-rw-r--r--app/assets/javascripts/vehicle_journeys/show.js.coffee8
-rw-r--r--app/models/vehicle_translation.rb69
-rw-r--r--app/views/vehicle_journeys/_form.html.erb10
-rw-r--r--app/views/vehicle_translations/_translate_form.html.erb8
6 files changed, 65 insertions, 33 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index f8f6c6d1f..5b03dce78 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -18,3 +18,4 @@
//= require_directory ./plugins
//= require_directory .
//= require_directory ./stop_areas
+//= require_directory ./vehicle_journeys
diff --git a/app/assets/javascripts/vehicle_journey.js.coffee b/app/assets/javascripts/vehicle_journey.js.coffee
index 02c0c9f3b..39f511468 100644
--- a/app/assets/javascripts/vehicle_journey.js.coffee
+++ b/app/assets/javascripts/vehicle_journey.js.coffee
@@ -54,7 +54,7 @@ jQuery ->
event.preventDefault()
hour = parseInt( $(".vehicle_journey_at_stops select#date_hour").val())
minute = parseInt( $(".vehicle_journey_at_stops select#date_minute").val())
- departure_or_arrival = $(".departure_or_arrival").val()
+ departure_or_arrival = $(".departure_or_arrival option:selected").val()
selector_prefix = ".vehicle_journey_at_stops .journey_pattern_dependent_list"
if (departure_or_arrival == "departure")
diff --git a/app/assets/javascripts/vehicle_journeys/show.js.coffee b/app/assets/javascripts/vehicle_journeys/show.js.coffee
new file mode 100644
index 000000000..103937d7b
--- /dev/null
+++ b/app/assets/javascripts/vehicle_journeys/show.js.coffee
@@ -0,0 +1,8 @@
+$(".vehicle_journeys.show").ready ->
+ clean_content = (event) ->
+ $(event.target).find('#translate_form').contents().remove()
+
+ $('#modal_translation').on( 'hide.bs.modal', clean_content )
+
+
+
diff --git a/app/models/vehicle_translation.rb b/app/models/vehicle_translation.rb
index 0457da0fa..f89c127ab 100644
--- a/app/models/vehicle_translation.rb
+++ b/app/models/vehicle_translation.rb
@@ -4,12 +4,14 @@ class VehicleTranslation
extend ActiveModel::Naming
attr_accessor :vehicle_journey_id, :count, :duration
- attr_accessor :first_stop_arrival_time, :first_stop_departure_time
+ attr_accessor :first_stop_time, :departure_or_arrival
+ attr_accessor :delta
- validates_presence_of :count, :duration
+ validates_presence_of :count, :duration, :first_stop_time, :departure_or_arrival
+ validates_inclusion_of :departure_or_arrival, :in => %w( departure arrival)
validates_numericality_of :count, greater_than: 0
validates_numericality_of :duration, greater_than: 0
- validate :starting_time_provided
+ validate :firts_stop_time_format
validate :vehicle_has_stop_times
def initialize(attributes = {})
@@ -18,15 +20,17 @@ class VehicleTranslation
end
end
- def starting_time_provided
- if ( first_stop_arrival_time.blank? && first_stop_departure_time.blank?)
- errors.add :first_stop_arrival_time, I18n.t('activemodel.errors.models.vehicle_translation.missing_start_time')
- errors.add :first_stop_departure_time, I18n.t('activemodel.errors.models.vehicle_translation.missing_start_time')
- #errors.add( :first_stop_departure_time => "un horaire de départ ou d'arrivée au premier arrêt doit être renseigné")
- elsif first_stop_departure_time.blank?
- errors.add :first_stop_arrival_time, I18n.t('activemodel.errors.models.vehicle_translation.unreadable_time') unless Time.parse( self.first_stop_arrival_time) rescue false
- elsif first_stop_arrival_time.blank?
- errors.add :first_stop_departure_time, I18n.t('activemodel.errors.models.vehicle_translation.unreadable_time') unless Time.parse( self.first_stop_departure_time) rescue false
+ def firts_stop_time_format
+ if first_stop_time.blank?
+ errors.add :first_stop_time, I18n.t('activemodel.errors.models.vehicle_translation.unreadable_time') unless self.class.time_format_text?( self.first_stop_time)
+ end
+ end
+
+ def self.time_format_text?( text)
+ begin
+ Time.parse text
+ rescue
+ false
end
end
@@ -40,23 +44,44 @@ class VehicleTranslation
false
end
+ def move_time_in_current_time_zone( time )
+ Time.parse( "#{time.hour}:#{time.min}")
+ end
+ def evaluate_delta( actual_time)
+ Time.parse( first_stop_time) - move_time_in_current_time_zone( actual_time)
+ end
+ def vjas_time_attribute
+ "#{departure_or_arrival}_time"
+ end
+ def first_vjas_time
+ vehicle_journey.vehicle_journey_at_stops.first.send( vjas_time_attribute)
+ end
+ def first_delta
+ evaluate_delta( first_vjas_time)
+ end
+
def translate
- vehicle = vehicle_journey
copied_attributes = vehicle_journey.attributes
copied_attributes.delete( "id")
copied_attributes.delete( "objectid")
- 1.upto( count.to_i) do |index|
- translated = Chouette::VehicleJourney.create( copied_attributes)
- translated.time_tables = vehicle.time_tables
- vehicle.vehicle_journey_at_stops.each do |vjas|
- vjas_attributes = vjas.attributes.merge( "vehicle_journey_id" => translated.id)
- vjas_attributes.merge! "departure_time" => ( vjas_attributes[ "departure_time"] + (index * duration.to_i.minutes) ),
- "arrival_time" => ( vjas_attributes[ "arrival_time"] + (index * duration.to_i.minutes) )
+ # time shift for current duplicated vehicle
+ delta = first_delta
- Chouette::VehicleJourneyAtStop.create( vjas_attributes)
- end
+ vehicle_journey.transaction do
+ 1.upto( count.to_i) do |index|
+ translated = Chouette::VehicleJourney.create( copied_attributes)
+ translated.time_tables = vehicle_journey.time_tables
+
+ vehicle_journey.vehicle_journey_at_stops.each do |vjas|
+ vjas_attributes = vjas.attributes.merge( "vehicle_journey_id" => translated.id)
+ vjas_attributes.merge! "departure_time" => ( vjas_attributes[ "departure_time"] + delta),
+ "arrival_time" => ( vjas_attributes[ "arrival_time"] + delta)
+ Chouette::VehicleJourneyAtStop.create( vjas_attributes)
+ end
+ delta += duration.to_i.minutes
+ end
end
end
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index 5713a61df..d5d4cffdd 100644
--- a/app/views/vehicle_journeys/_form.html.erb
+++ b/app/views/vehicle_journeys/_form.html.erb
@@ -17,19 +17,19 @@
<%= form.label @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), :class => "label" %>
</li>
<% unless @vehicle_journey.vehicle_journey_at_stops.empty? ||
- @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> <div class="vehicle_journey_at_stops">
+ @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> <div class="vehicle_journey_at_stops">
<div class="well">
- <span class="title">Décaler tous les horaires de la course en fonction de ceux existants</span>
+ <span class="title"><%= t(".slide_title") %></span>
<div>
<span><%= t(".set") %></span> <%= select_tag "", options_for_select( [ [t('.slide_departure'), "departure"], [t('.slide_arrival'), "arrival"] ] ), :class => "departure_or_arrival" %> <span><%= t(".to") %></span>
<%= select_hour(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.hour) %>
<%= select_minute(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.min) %>
- <a class="slide btn btn-default"><%= t("formtastic.slide") %></a>
+ <a class="slide btn btn-default"><%= t(".slide") %></a>
</div>
</div>
-
+
<% end %>
-
+
<table class="table table-hover table-striped">
<thead>
<tr>
diff --git a/app/views/vehicle_translations/_translate_form.html.erb b/app/views/vehicle_translations/_translate_form.html.erb
index ea7e15bf0..8759d89f9 100644
--- a/app/views/vehicle_translations/_translate_form.html.erb
+++ b/app/views/vehicle_translations/_translate_form.html.erb
@@ -3,11 +3,9 @@
<%= semantic_form_for [@referential, @line, @route, @vehicle_journey, @vehicle_translation], remote: true do |form| %>
<div class="modal-body">
<%= form.inputs do %>
- <%= form.input :first_stop_arrival_time,
- as: :time_picker, label: t( ".first_stop_arrival_time", stop_name: @vehicle_translation.first_stop_name),
- input_html: { class: "form-control input-sm timepicker_basic"}, wrapper_html: { class: "input-append bootstrap-timepicker" } %>
- <%= form.input :first_stop_departure_time,
- as: :time_picker, label: t( ".first_stop_departure_time", stop_name: @vehicle_translation.first_stop_name),
+ <%= form.input :departure_or_arrival, as: :select, label: t('.set'), collection: [ [ t('.first_stop_departure_time', stop_name: @vehicle_translation.first_stop_name), "departure"], [t('.first_stop_arrival_time', stop_name: @vehicle_translation.first_stop_name), "arrival"] ], include_blank: false, required: true %>
+ <%= form.input :first_stop_time,
+ as: :time_picker, label: t( ".to"),
input_html: { class: "form-control input-sm timepicker_basic"}, wrapper_html: { class: "input-append bootstrap-timepicker" } %>
<div class="panel-group" id="accordion">
<div class="panel panel-default">