diff options
| author | Marc Florisson | 2014-08-21 16:38:25 +0200 | 
|---|---|---|
| committer | Marc Florisson | 2014-08-21 16:38:25 +0200 | 
| commit | 194bb28c4acbc144493c2096341d9126ffeaae35 (patch) | |
| tree | dd7cb0ad2632cf92f94c1e5f6f98a58c2b185ff6 /app | |
| parent | beed6b8df8d86c86b69fcca2b602bf40e36dcb75 (diff) | |
| parent | 0bc1d3150175f7db4942003af9a5ba641cce3ffd (diff) | |
| download | chouette-core-194bb28c4acbc144493c2096341d9126ffeaae35.tar.bz2 | |
Merge branch 'sismo_vj_translate' into sismo
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); + + | 
