diff options
| author | Marc Florisson | 2014-08-21 16:37:30 +0200 |
|---|---|---|
| committer | Marc Florisson | 2014-08-21 16:37:30 +0200 |
| commit | 0bc1d3150175f7db4942003af9a5ba641cce3ffd (patch) | |
| tree | d247d90349a5782248e5f23e2152375e1b33dedd | |
| parent | 008432840b80e4fa3a1bc4e0410d604e74d0e0e4 (diff) | |
| download | chouette-core-0bc1d3150175f7db4942003af9a5ba641cce3ffd.tar.bz2 | |
refactor and extends vehicle translation. Mantis 26839
| -rw-r--r-- | app/controllers/vehicle_translations_controller.rb | 26 | ||||
| -rw-r--r-- | app/models/vehicle_translation.rb | 58 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/show.html.erb | 20 | ||||
| -rw-r--r-- | app/views/vehicle_translations/_translate_form.html.erb | 46 | ||||
| -rw-r--r-- | config/locales/vehicle_translations.yml | 25 | ||||
| -rw-r--r-- | spec/models/vehicle_translation_spec.rb | 16 |
6 files changed, 131 insertions, 60 deletions
diff --git a/app/controllers/vehicle_translations_controller.rb b/app/controllers/vehicle_translations_controller.rb index 0eeb450b8..65a0db7fe 100644 --- a/app/controllers/vehicle_translations_controller.rb +++ b/app/controllers/vehicle_translations_controller.rb @@ -8,19 +8,33 @@ class VehicleTranslationsController < ChouetteController end end end + after_filter :clean_flash + + def clean_flash + # only run this in case it's an Ajax request. + return unless request.xhr? + + flash.discard + end def new - @vehicle_translation = VehicleTranslation.new( :vehicle_journey_id => parent.id) - flash[:notice] = "mokmlklmk" + @vehicle_translation = VehicleTranslation.new( :vehicle_journey_id => parent.id, :count => 1, :duration => 1) render :action => :new end def create + @vehicle_translation = VehicleTranslation.new( params[:vehicle_translation].merge( :vehicle_journey_id => parent.id)) + begin - @vehicle_translation = VehicleTranslation.new( params[:vehicle_translation].merge( :vehicle_journey_id => parent.id)) - @vehicle_translation.translate - flash[:notice] = t('vehicle_translations.success', :count => @vehicle_translation.count) - rescue + if @vehicle_translation.valid? + @vehicle_translation.translate + flash[:notice] = t('vehicle_translations.success', :count => @vehicle_translation.count) + else + flash[:alert] = @vehicle_translation.errors[ :vehicle_journey_id] unless @vehicle_translation.errors[ :vehicle_journey_id].empty? + end + rescue => e + Rails.logger.error( "VehicleTranslation error, @vehicle_translation=#{@vehicle_translation.inspect}") + Rails.logger.error( e.inspect) flash[:alert] = t('vehicle_translations.failure') end render :action => :new diff --git a/app/models/vehicle_translation.rb b/app/models/vehicle_translation.rb index 5fc7117eb..0457da0fa 100644 --- a/app/models/vehicle_translation.rb +++ b/app/models/vehicle_translation.rb @@ -1,22 +1,44 @@ class VehicleTranslation - include ActiveModel::Validations - include ActiveModel::Conversion + include ActiveModel::Validations + include ActiveModel::Conversion extend ActiveModel::Naming - - + attr_accessor :vehicle_journey_id, :count, :duration - + attr_accessor :first_stop_arrival_time, :first_stop_departure_time + validates_presence_of :count, :duration + validates_numericality_of :count, greater_than: 0 + validates_numericality_of :duration, greater_than: 0 + validate :starting_time_provided + validate :vehicle_has_stop_times + + def initialize(attributes = {}) + attributes.each do |name, value| + send("#{name}=", value) + end + end - def initialize(attributes = {}) - attributes.each do |name, value| - send("#{name}=", value) - end - end - - def persisted? - false - 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 + end + end + + def vehicle_has_stop_times + if vehicle_journey.vehicle_journey_at_stops.empty? + errors.add :vehicle_journey_id, I18n.t('activemodel.errors.models.vehicle_translation.uncompiliant_vehicle') + end + end + + def persisted? + false + end def translate vehicle = vehicle_journey @@ -37,9 +59,13 @@ class VehicleTranslation end end - + + def first_stop_name + @first_stop_name ||= vehicle_journey.vehicle_journey_at_stops.first.stop_point.stop_area.name + end + def vehicle_journey - Chouette::VehicleJourney.find( vehicle_journey_id) + @vehicle_journey ||= Chouette::VehicleJourney.find( vehicle_journey_id) end def self.from_vehicle( vehicle) diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb index f1438e72d..b965169b0 100644 --- a/app/views/vehicle_journeys/show.html.erb +++ b/app/views/vehicle_journeys/show.html.erb @@ -110,22 +110,8 @@ <ul class="actions"> <li><%= link_to t('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li> <li><%= link_to t('vehicle_journeys.actions.destroy'), referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :method => :delete, :data => {:confirm => t('vehicle_journeys.actions.destroy_confirm')}, :class => "remove" %></li> - </ul> - <li><%= link_to t('.translation_form'), new_referential_line_route_vehicle_journey_vehicle_translation_path(@referential, @line, @route, @vehicle_journey), {:remote => true, 'data-toggle' => "modal", 'data-target' => '#modal_translation'} %></li> - <% unless @vehicle_journey.vehicle_journey_at_stops.empty? || - @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> - <h4><%= t('.translation_form') %></h4> - <div id="compact_form" > - <%= semantic_form_for [@referential, @line, @route, @vehicle_journey, VehicleTranslation.new] do |form| %> - <%= form.inputs do %> - <%= form.input :duration %> - <%= form.input :count %> - <% end %> - <%= form.actions do %> - <%= form.action :submit, :as => :button, :label => t('.validation') %> - <% end %> - <% end %> - </div> - <%= creation_tag(@vehicle_journey) %> + <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %> + <li><%= link_to t('.translation_form'), new_referential_line_route_vehicle_journey_vehicle_translation_path(@referential, @line, @route, @vehicle_journey), {:remote => true, 'data-toggle' => "modal", 'data-target' => '#modal_translation'} %></li> <% end %> + </ul> <% end %> diff --git a/app/views/vehicle_translations/_translate_form.html.erb b/app/views/vehicle_translations/_translate_form.html.erb index 479332606..ea7e15bf0 100644 --- a/app/views/vehicle_translations/_translate_form.html.erb +++ b/app/views/vehicle_translations/_translate_form.html.erb @@ -1,15 +1,37 @@ -<%= semantic_form_for [@referential, @line, @route, @vehicle_journey, @vehicle_translation], :remote => true, :html => {:id => "translate_form"} do |form| %> -<div class="modal-body"> +<div id="translate_form"> <%= render "shared/flash_messages" %> - <%= form.inputs do %> - <%= form.input :duration %> - <%= form.input :count %> + <%= 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), + 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"> + <div class="panel-heading"> + <h4 class="panel-title"> + <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne"> + <%= t('.multiple_cloning_form') %> + </a> + </h4> + </div> + <div id="collapseOne" class="panel-collapse collapse in"> + <div class="panel-body"> + <%= form.input :duration, as: :number %> + <%= form.input :count, as: :number %> + </div> + </div> + </div> + </div> + <% end %> + </div> + <div class="modal-footer"> + <%= form.actions do %> + <%= form.action :submit, as: :button, label: t('.validation') %> + <% end %> <% end %> + </div> </div> -<div class="modal-footer"> - <%= form.actions do %> - <%= form.action :submit, :as => :button, :label => t('.validation') %> - <% end %> -<% end %> -</div> - diff --git a/config/locales/vehicle_translations.yml b/config/locales/vehicle_translations.yml index 3d1e0b702..9c413f2b3 100644 --- a/config/locales/vehicle_translations.yml +++ b/config/locales/vehicle_translations.yml @@ -2,18 +2,39 @@ en: vehicle_translations: success: "%{count} vehicle journeys created by translation" failure: "Fail when creating vehicle journeys by translation" - activemodel: + first_stop_arrival_time: "Arrival time at first stop (%{stop_name})" + first_stop_departure_time: "Arrival time at first stop (%{stop_name})" + translate_form: + multiple_cloning_form: "Repeat cloning based on a time interval" + activemodel: attributes: vehicle_translation: duration: "Duration" count: "Count" + errors: + models: + vehicle_translation: + missing_start_time: "Departure time or arrival time is required." + uncompiliant_vehicle: "Vehicle creation by copy requires that the selected vehicle counts at leat a stop and has departure and arrival times at each stops" + unreadable_time: "Expected time format is hh:mm" fr: vehicle_translations: success: "%{count} course(s) crée(s) par translation" failure: "Echec de la création de courses par tanslation" - activemodel: + first_stop_arrival_time: "Horaire d'arrivée au premier arrêt (%{stop_name})" + first_stop_departure_time: "Horaire de départ au premier arrêt (%{stop_name})" + translate_form: + multiple_cloning_form: "Répéter le clonage à intervalle régulier" + + activemodel: attributes: vehicle_translation: duration: "Durée de l'intervalle (en minutes)" count: "Quantité de courses à ajouter" + errors: + models: + vehicle_translation: + missing_start_time: "L'horaire de départ ou celui d'arrivée est requis" + uncompiliant_vehicle: "Pour cloner une course, celle-ci doit compter au moins un arrêt et avoir des horaires départ arrivée sur tous ses arrêts" + unreadable_time: "Le format d'horaire attendu est hh:mm" diff --git a/spec/models/vehicle_translation_spec.rb b/spec/models/vehicle_translation_spec.rb index 2a9c53371..47be9ff3a 100644 --- a/spec/models/vehicle_translation_spec.rb +++ b/spec/models/vehicle_translation_spec.rb @@ -3,15 +3,17 @@ require 'spec_helper' describe VehicleTranslation do let!(:company){ Factory(:company )} let!(:journey_pattern){Factory(:journey_pattern)} - let!(:vehicle_journey){ Factory(:vehicle_journey, + let!(:vehicle_journey){ Factory(:vehicle_journey, :objectid => "dummy", :journey_pattern => journey_pattern, :route => journey_pattern.route, :company => company, - :transport_mode => Chouette::TransportMode.new("metro"), + :transport_mode => Chouette::TransportMode.new("metro"), :published_journey_name => "dummy" )} - subject {Factory.build(:vehicle_translation, :vehicle_journey_id => vehicle_journey.id)} + subject {Factory.build(:vehicle_translation, + :vehicle_journey_id => vehicle_journey.id, + :first_stop_departure_time => "12:00")} describe "#translate" do it "should add new vehicle" do @@ -29,19 +31,19 @@ describe VehicleTranslation do end it "should add vehicle having same transport_mode" do subject.translate - last_created_vehicle.transport_mode.should == vehicle_journey.transport_mode + last_created_vehicle.transport_mode.should == vehicle_journey.transport_mode end it "should add vehicle having same journey_pattern" do subject.translate - last_created_vehicle.journey_pattern.should == vehicle_journey.journey_pattern + last_created_vehicle.journey_pattern.should == vehicle_journey.journey_pattern end it "should add vehicle having same route" do subject.translate - last_created_vehicle.route.should == vehicle_journey.route + last_created_vehicle.route.should == vehicle_journey.route end it "should add vehicle having same company" do subject.translate - last_created_vehicle.company.should == vehicle_journey.company + last_created_vehicle.company.should == vehicle_journey.company end it "should add vehicle with as many vehicle_journey_at_stops as on basic vehicle" do subject.translate |
