diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/vehicle_translations_controller.rb | 35 | ||||
| -rw-r--r-- | app/models/vehicle_translation.rb | 58 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/show.html.erb | 32 | ||||
| -rw-r--r-- | app/views/vehicle_translations/_translate_form.html.erb | 37 | ||||
| -rw-r--r-- | app/views/vehicle_translations/new.js.erb | 4 |
5 files changed, 126 insertions, 40 deletions
diff --git a/app/controllers/vehicle_translations_controller.rb b/app/controllers/vehicle_translations_controller.rb index af54001ae..65a0db7fe 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 @@ -8,17 +8,36 @@ 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, :count => 1, :duration => 1) + render :action => :new + end def create + @vehicle_translation = VehicleTranslation.new( params[:vehicle_translation].merge( :vehicle_journey_id => parent.id)) + begin - translation = VehicleTranslation.new( params[:vehicle_translation].merge( :vehicle_journey_id => parent.id)) - translation.translate - flash[:notice] = t('vehicle_translations.success', :count => 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 - redirect_to referential_line_route_vehicle_journeys_path(@referential, @line, @route) - + render :action => :new end - + end 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 92cce447d..4068757c9 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) %> +<div id="modal_translation" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button> + <h4 class="modal-title" id="myModalLabel"><%= t('.translation_form') %></h4> + <p id="translate_form"></p> + </div> + </div> + </div> +</div> + <div class="vehicle_journey"> <div class="summary"> <p> @@ -93,25 +105,13 @@ <%= paginated_content @vehicle_journey.time_tables, "time_table" %> </div> + <% content_for :sidebar do %> <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> - <% 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 new file mode 100644 index 000000000..ea7e15bf0 --- /dev/null +++ b/app/views/vehicle_translations/_translate_form.html.erb @@ -0,0 +1,37 @@ +<div id="translate_form"> + <%= render "shared/flash_messages" %> + <%= 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> 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); + + |
