diff options
| author | Michel Etienne | 2014-08-27 15:44:05 +0200 |
|---|---|---|
| committer | Michel Etienne | 2014-08-27 15:44:05 +0200 |
| commit | 4ff26e0096f122dc74b45b427137eb631da3fd06 (patch) | |
| tree | 8a9717bca9f5d05ff529462d6c8d7758e363eeb2 /app | |
| parent | 2a1b23c9bd1d4e2e97814ea9190892f2981b365d (diff) | |
| parent | 82cf451ad0faa76a26adc27528f4458596157802 (diff) | |
| download | chouette-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.js | 1 | ||||
| -rw-r--r-- | app/assets/javascripts/vehicle_journey.js.coffee | 2 | ||||
| -rw-r--r-- | app/assets/javascripts/vehicle_journeys/show.js.coffee | 8 | ||||
| -rw-r--r-- | app/models/vehicle_translation.rb | 69 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/_form.html.erb | 10 | ||||
| -rw-r--r-- | app/views/vehicle_translations/_translate_form.html.erb | 8 |
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"> |
