From 008432840b80e4fa3a1bc4e0410d604e74d0e0e4 Mon Sep 17 00:00:00 2001 From: Marc Florisson Date: Wed, 20 Aug 2014 22:23:48 +0200 Subject: refactor vehicle translate with modal dialog. --- app/controllers/vehicle_translations_controller.rb | 19 ++++++++++++------- app/views/time_table_combinations/_combine.html.erb | 1 - app/views/vehicle_journeys/show.html.erb | 16 +++++++++++++++- .../vehicle_translations/_translate_form.html.erb | 15 +++++++++++++++ app/views/vehicle_translations/new.js.erb | 4 ++++ 5 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 app/views/vehicle_translations/_translate_form.html.erb create mode 100644 app/views/vehicle_translations/new.js.erb diff --git a/app/controllers/vehicle_translations_controller.rb b/app/controllers/vehicle_translations_controller.rb index af54001ae..0eeb450b8 100644 --- a/app/controllers/vehicle_translations_controller.rb +++ b/app/controllers/vehicle_translations_controller.rb @@ -1,5 +1,5 @@ class VehicleTranslationsController < ChouetteController - respond_to :html, :only => [:create] + respond_to :js, :only => [:new, :create] belongs_to :referential do belongs_to :line, :parent_class => Chouette::Line do @@ -9,16 +9,21 @@ class VehicleTranslationsController < ChouetteController end end + def new + @vehicle_translation = VehicleTranslation.new( :vehicle_journey_id => parent.id) + flash[:notice] = "mokmlklmk" + render :action => :new + end + def create begin - translation = VehicleTranslation.new( params[:vehicle_translation].merge( :vehicle_journey_id => parent.id)) - translation.translate - flash[:notice] = t('vehicle_translations.success', :count => translation.count) + @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 flash[:alert] = t('vehicle_translations.failure') end - redirect_to referential_line_route_vehicle_journeys_path(@referential, @line, @route) - + render :action => :new end - + end diff --git a/app/views/time_table_combinations/_combine.html.erb b/app/views/time_table_combinations/_combine.html.erb index 3257cf812..a83d109a1 100644 --- a/app/views/time_table_combinations/_combine.html.erb +++ b/app/views/time_table_combinations/_combine.html.erb @@ -5,7 +5,6 @@ - <% @time_table_combination.clean %> <%= render "time_table_combinations/combine_form" %> diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb index 01f44c7b0..f1438e72d 100644 --- a/app/views/vehicle_journeys/show.html.erb +++ b/app/views/vehicle_journeys/show.html.erb @@ -1,5 +1,17 @@ <%= title_tag vehicle_title(@vehicle_journey) %> + +

@@ -93,17 +105,19 @@ <%= paginated_content @vehicle_journey.time_tables, "time_table" %>

+ <% content_for :sidebar do %> +
  • <%= 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'} %>
  • <% unless @vehicle_journey.vehicle_journey_at_stops.empty? || @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %>

    <%= t('.translation_form') %>

    <%= semantic_form_for [@referential, @line, @route, @vehicle_journey, VehicleTranslation.new] do |form| %> - <%= form.inputs do %> + <%= form.inputs do %> <%= form.input :duration %> <%= form.input :count %> <% end %> diff --git a/app/views/vehicle_translations/_translate_form.html.erb b/app/views/vehicle_translations/_translate_form.html.erb new file mode 100644 index 000000000..479332606 --- /dev/null +++ b/app/views/vehicle_translations/_translate_form.html.erb @@ -0,0 +1,15 @@ +<%= semantic_form_for [@referential, @line, @route, @vehicle_journey, @vehicle_translation], :remote => true, :html => {:id => "translate_form"} do |form| %> + + + diff --git a/app/views/vehicle_translations/new.js.erb b/app/views/vehicle_translations/new.js.erb new file mode 100644 index 000000000..0c7869fb6 --- /dev/null +++ b/app/views/vehicle_translations/new.js.erb @@ -0,0 +1,4 @@ +var modal_translation_content = '<%= escape_javascript( render "vehicle_translations/translate_form") %> '; +$('#translate_form').html(modal_translation_content); + + -- cgit v1.2.3 From 0bc1d3150175f7db4942003af9a5ba641cce3ffd Mon Sep 17 00:00:00 2001 From: Marc Florisson Date: Thu, 21 Aug 2014 16:37:30 +0200 Subject: refactor and extends vehicle translation. Mantis 26839 --- app/controllers/vehicle_translations_controller.rb | 26 +++++++--- app/models/vehicle_translation.rb | 58 ++++++++++++++++------ app/views/vehicle_journeys/show.html.erb | 20 ++------ .../vehicle_translations/_translate_form.html.erb | 46 ++++++++++++----- config/locales/vehicle_translations.yml | 25 +++++++++- 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 @@ -
  • <%= 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'} %>
  • - <% unless @vehicle_journey.vehicle_journey_at_stops.empty? || - @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> -

    <%= t('.translation_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 %> -
    - <%= creation_tag(@vehicle_journey) %> + <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %> +
  • <%= 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'} %>
  • <% end %> + <% 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| %> -